系统调用

2023-04-01  本文已影响0人  修行者12138

CPU特权级

为了防止内核被用户进程随意访问,CPU通过特权级实现访问控制,当前特权级决定了哪些CPU指令可以被执行。
linux CPU特权级分2层: Ring 0和Ring 3,内核运行在最高特权级Ring 0,用户进程运行在最低特权级Ring 3。
用户进程要执行特权操作,需要从Ring 3转变到Ring 0。

系统调用

系统调用是操作系统为了统一管理硬件资源,并为上层应用程序提供良好的环境,使应用程序具有更好的兼容性,在内核代码中封装的接口,比如常见的fork、read、write等。

系统调用的步骤

CPU执行用户程序时,处于用户空间,执行内核程序时,处于内核空间。


image.png

每次发起系统调用,就会产生用户空间与内核空间的切换,具体步骤如下

  1. 用户进程把系统调用号,存入寄存器
  2. 用户进程把系统调用相关入参存入寄存器
  3. 用户进程执行80中断
  4. CPU接收到中断信息,执行中断处理程序(在这一步骤切换到内核态)
  5. 运行内核程序
  6. 内核程序把返回值存入寄存器
  7. 内核程序恢复用户进程的上下文,用户进程继续执行
上一篇下一篇

猜你喜欢

热点阅读