06: 受限直接执行

direct execution

content

本章主要介绍了进程如何在cpu上执行,并如何解决进程执行的性能、安全性、进程的切换问题。

direct execution

首先解决进程运行在cpu上,即cpu记录下进程信息,为进程开辟内存空间,再运行进程。进程结束后回收内存空间和进程的相关信息。此时进程的执行可以称为“直接执行”。
image

limit direct execution

但是这种执行方式,进程的自由度太高了,可以自由使用硬件资源,并且一直掌握cpu的控制权,我们希望限制进程的权限,这种就叫做“受限直接执行”。

计算机的内存分为内核区和用户区,进程在被创建时,这两个区域内各自开辟一份内存,用于存放进程相关内容,这便是进程的用户栈和内核栈。

大部分情况下,进程都运行在用户空间,进程的相关信息存于进程的用户栈。当进程发起“系统调用”,被调用的系统函数将执行trap指令,trap指令触发硬件中断,保存寄存器数据到进程的内核栈,然后从trap表找到trap指令对应的trap函数,交由操作系统执行trap函数。(trap表是在计算器启动时,操作系统在内核空间注册好的。)

os在内核空间执行完syscall,执行return-from-trap,再次触发硬件中断,从内核栈恢复寄存器数据,继续执行进程在用户空间要执行的指令。
image

switch between process

当计算机存在多个进程,他们之间的切换也需要通过操作系统控制。简单的算法是,为每个进程分配固定的时间片,当进程A执行够一定时间,就通过硬件中断将cpu的控制权交给操作系统。

trap前将进程A寄存器push到内核栈,trap后操作系统call Switch()决定要切换成进程B,先要保存A的寄存器数据到PCB,然后从PCB找到B进程保存的寄存器数据并恢复,然后切换到B的内核栈。return-from-trap后,硬件傻乎乎的恢复当前内核栈B的寄存器数据,返回用户态后执行的就是B进程了。

我的理解是,这个过程中有两次寄存器保存,一次是保存到内核栈,一次是保存到PCB中。内核栈数据给硬件恢复现场用,PCB数据给操作系统切换内核栈用。
image

参考:
https://hjk.life/posts/operating-systems-4/
https://imageslr.com/2020/07/09/trap-interrupt-exception.html
https://www.cnblogs.com/wsg1100/p/14290340.html

homework

posted @ 2023-03-27 00:34  moon_orange  阅读(47)  评论(0编辑  收藏  举报