0%

系统调用

系统调用

用户态和内核态

用户态内核态是操作系统的两种运行状态,操作系统主要是为了对访问能力进行限制,用户态的权限较低,而内核态的权限较高

  • 用户态:用户态运行的程序只能受限地访问内存,只能直接读取用户程序的数据,并且不允许访问外围设备,用户态下的 CPU 不允许独占,也就是说 CPU 能够被其他程序获取。
  • 内核态:内核态运行的程序可以访问计算机的任何数据和资源,不受限制,包括外围设备,比如网卡、硬盘等。处于内核态的 CPU 可以从一个程序切换到另外一个程序,并且占用 CPU 不会发生抢占情况。

系统调用流程

当应用程序调用系统服务时、如读取文件内容,会发生如下调用过程

  • 调用程序首先把参数压入堆栈
  • read代码通过汇编插入到寄存器,然后将操作系统控制由用户空间切换到内核空间
  • 分派正确的系统调用处理器,之后执行read系统调用,执行完成后将操作系统控制转交给用户空间
  • 切换到用户空间,记录栈帧,最后应用程序清楚堆栈信息

img.png

步骤3中,系统调用可能会阻塞调用者,比如试图读取键盘输入信息,如果没有键入,就会发生阻塞,稍后、当需要的键入输入时,操作系统会通知进程,之后会继续执行后面的流程

参考文献:现代操作系统