CPU特权级
为了防止内核被用户进程随意访问,CPU通过特权级实现访问控制,当前特权级决定了哪些CPU指令可以被执行。
linux CPU特权级分2层: Ring 0和Ring 3,内核运行在最高特权级Ring 0,用户进程运行在最低特权级Ring 3。
用户进程要执行特权操作,需要从Ring 3转变到Ring 0。
系统调用
系统调用是操作系统为了统一管理硬件资源,并为上层应用程序提供良好的环境,使应用程序具有更好的兼容性,在内核代码中封装的接口,比如常见的fork、read、write等。
系统调用的步骤
CPU执行用户程序时,处于用户空间,执行内核程序时,处于内核空间。
image.png
每次发起系统调用,就会产生用户空间与内核空间的切换,具体步骤如下
- 用户进程把系统调用号,存入寄存器
- 用户进程把系统调用相关入参存入寄存器
- 用户进程执行80中断
- CPU接收到中断信息,执行中断处理程序(在这一步骤切换到内核态)
- 运行内核程序
- 内核程序把返回值存入寄存器
- 内核程序恢复用户进程的上下文,用户进程继续执行
网友评论