操作系统导论 | 第 6 章笔记

163 阅读3分钟

第6章 机制:受限直接执行 (LDE)

为了虚拟化CPU,操作系统需要以某种方式让许多任务共享物理CPU,让它们看起来像是同时运行。基本思想很简单:运行一个进程一段时间,然后运行另一个进程,如此轮换。通过以这种方式时分共享 (time sharing) CPU,就实现了虚拟化。

然而,在构建这样的虚拟化机制时存在一些挑战。第一个是性能;第二个是控制权(尤为重要)。

6.1 基本技巧:受限直接执行

为了使程序尽可能快地运行,操作系统开发人员想出了一种技术——受限的直接执行(limited direct execution)

6.2 问题1:受限制的操作

直接执行的明显优势是快速。

问题:如果进程希望执行某种受限操作该怎么办?

提示:采用受保护的控制权转移

解决:用户模式 / 内核模式

用户模式:在用户模式下,进程不能发出I/O请求

内核模式:运行的代码可以做它喜欢的事,包括特权操作,如发出I/O请求和执行所有类型的受限指令。

新问题:如果用户希望执行某种特权操作(如从磁盘读取),应该怎么做?

解决:几乎所有的现代硬件都提供了用户程序执行系统调用的能力。要执行系统调用,程序必须执行特殊的陷阱指令。该指令同时跳入内核并将特权级别提升到内核模式。

新新问题:陷阱如何知道在OS内运行哪些代码?

解决:内核通过在启动时设置陷阱表来实现。

6.3 问题2:在进程之间切换

直接执行的下一个问题是进程之间的切换。

关键问题:操作系统如何重新获得CPU的控制权,以便它可以在进程之间切换?

过去某些系统采用的一种方式称为协作方式,在这种风格下,操作系统相信系统的进程会合理运行。运行时间过长的进程被假定会定期放弃CPU,以便操作系统可以决定运行其他任务。

然而事实证明,没有硬件的额外帮助,如果进程拒绝进行系统调用,因此不将控制权交还给操作系统,那么操作系统无法做任何事情。

解决:利用时钟中断重新获得控制权。

操作系统重获控制权后,必须决定,是继续运行当前进程还是切换到另一个进程,而这由操作系统的一部分——调度程序做出的。

若决定切换,OS就会执行一些底层代码,即所谓的上下文切换 (context switch) 。

上下文切换:操作系统为当前正在执行的进程保存一些寄存器的值(如到它的内核栈),并为即将执行的进程恢复一些寄存器的值(从它的内核栈)。

6.4 担心并发吗

现代操作系统上下文切换只需亚微秒级时间。

操作系统可能简单决定在中断处理期间禁止中断。

操作系统还开发了许多复杂的加锁方案,以保护对内部数据结构的并发访问。

6.5 小结

实现CPU虚拟化的关键底层机制,并将其统称为受限直接执行

其基本思路:就让你想运行的程序在CPU上运行,但首先确保设置好硬件,以便在没有操作系统帮助的情况下限制进程可以执行的操作。

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情