1.什么是系统调用

操作系统是用户和计算机硬件之间的接口需要向上层提供一些简单易用的服务。主要包括命令接口程序接口。其中,程序接口由一组==系统调用==组成。

用户接口:

  1. 命令接口(允许用户直接使用)

    • 联机命令接口:用户说一句,系统做一句
    • 脱机命令接口:用户说一堆,系统做一堆。
    1. 程序接口(允许用户通过程序间接使用):由一组系统调用组成。

    系统调用就是操作系统提供给程序使用的接口,可以理解为一种可供应用程序调用的函数,应用程序可以发出系统调用请求来获得操作系统的服务。

2.系统调用的作用:

应用程序通过系统调用请求操作系统的服务。系统中的各种共享资源由操作系统统一管理,因此在用户程序中,凡事与资源有关的操作(如存储分配,I/O 操作,文件管理等),都必须通过系统调用的方式像操作系统提出服务请求,由操作系统代为完成,这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

系统调用(按功能分类):

  • 设备管理:完成设备的请求、释放、启动等工作
  • 文件管理:完成文件的读写、创建、删除等功能
  • 进程控制:完成进程的创建。撤销、阻塞、唤醒等功能
  • 进程通信:完成进程之间的消息传递、信号传递等功能
  • 内存管理:完成内存的分配、回收等功能

系统调用相关处理涉及到对系统资源的管理,对进程的控制,这些功能需要执行一些特权指令才能完成,因此系统调用的相关处理需要在核心态下完成。

3.系统调用与库函数的区别

区别

4.系统调用背后的过程

首先需要做的是把传入系统调用的参数用相应的指令放入相应的通用寄存器中并执行相应的陷入指令(interrupt 的缩写,此汇编指令的作用是引发一次系统中断),指令运行在用户态。当指令被执行时系统会执行相应的系统调用服务程序,这时候系统中断开始并运行在核心态,待系统调用完成后会把执行结果返回给用户程序,重新回到用户态,继续执行后续操作。如下图所示:

过程

有些书上陷入指令被叫做访管指令。概念是:因操作系统不允许用户态运行某些“危险性”高的指令,于是用户态运行这些指令的结果会转化成操作系统的核心态(管态)去运行。

上图注意 3 补充:核心态只能执行系统调用,不能请求系统调用;用户态不能执行系统调用,只能请求系统调用

**系统调用发生在用户态,执行在核心态。**比如说你去仓库提货,仓库有专门的管理员而且你并不能进入仓库。管理员在门口待命。你过去跟他说你要什么什么,仓库管理员就进仓库提你想要的货物,提完货物后会回到仓库门口把货物交给你。在这个过程中,门外就相当于用户态,仓库内就相当于核心态。你跟管理员要货就相当于请求一次系统调用,管理员进仓库给你拿货就相当于执行了一次系统调用,并在拿完货后出门给我你货物,这个过程就相当于返回系统调用的结果。很简单的道理。

吧啦吧啦:有的弹幕说中断就是切换任务的,我我个人觉得说的好像也蛮准确的

5.知识回顾

回顾