机制:受限直接执行

机制:受限直接执行


操作系统必须以高性能的方式虚拟化CPU,同时保持对系统的控制。

1. 基本技巧:受限直接执行

limited direct execution
只需直接在CPU上运行程序即可。
直接运行协议(无限制)
两个问题:

  1. 如果我们只运行一个程序,操作系统怎么能确保程序不做任何我们不希
    望它做的事,同时仍然高效地运行它?
  2. 当我们运行一个进程时,操作系统如何让它停下来并切换到另一个进程,从而实现虚拟化 CPU 所需的时分共享?

2. 问题1:受限制的操作

一个进程必须能够执行 I/O 和其他一些受限制的操作,但又不能让进程完全控制系统。

受保护的控制权转移:
硬件通过提供不同的执行模式来协助操作系统。在用户模式(user mode) 下,应用程序不能完全访问硬件资源。在内核模式(kernel mode) 下,操作系统可以访问机器的全部资源。还提供了陷入(trap) 内核和从陷阱返回(return-from-trap) 到用户模式程序的特别说明,以及一些指令,让操作系统告诉硬件陷阱表(trap table) 在内存中的位置。

受限直接运行协议

3. 问题2:在进程之间切换

操作系统如何重新获得 CPU 的控制权(regain control),以便它可以在进程之间切换?

协作方式:等待系统调用
在协作调度系统中,OS 通过等待系统调用,或某种非法操作发生,从而重新获得 CPU 的控制权。

非协作方式:操作系统进行控制

利用时钟中断重新获得控制权
即使进程以非协作的方式运行,添加时钟中断(timer interrupt)也让操作系统能够在 CPU 上重新运行。
操作系统必须通知硬件哪些代码在发生时钟中断时运行,在启动中,操作系统也必须启动时钟。在中断发生时,要为正在运行的程序保存足够的状态,以便随后从陷阱返回指令能够正确恢复正在运行的程序。

保存和恢复上下文
上下文切换(context switch)
操作系统要做的就是为当前正在执行的进程保存一些寄存器的值(例如,到它的内核栈),并为即将执行的进程恢复一些寄存器的值(从它的内核栈)。
受限直接执行协议(时钟中断)

猜你喜欢

转载自blog.csdn.net/qq_39389123/article/details/112910967