这里的受限的意思是进程的某些行为,这里的直接执行就是直接执行的意思。
这个题目可以翻译成,对于进程想要做一些对系统可能存在威胁的操作的时候,操作系统应该怎么去限制它的行为,保证它不把系统或者机器搞坏。
为什么我们需要机制,也就是受限直接执行
- 操作系统通过时分共享(time sharing)CPU,来实现虚拟化
- 实现中会遇到一些问题
- 性能问题,如何在不增加系统开销的情况下实现虚拟化
- 控制权:在保证进程运行的同时保持对系统的控制
也就是说,如何高效可控的实现CPU的虚拟化是机制,也就是受限的直接执行想要解决的问题。
首先是无限制的直接执行
- 在进程列表中为要执行的进程创建一个进程条目,为其分配一些内存,并将程序代码加载到内存中,找到程序入口并开始执行,在执行的过程中,操作系统对运行的程序没有任何的限制。
- 会产生的问题
- 如何”监督“这个程序,保证他不做我们不希望他做的事情
- 如何让这个程序停下来并切换到另一个程序。
利用用户模式和核心模式来解决我们所面临的问题
- 在用户模式下,所有运行的代码都会受限制,这些代码无法直接使用系统的核心功能,如I/0请求。如果它这样做了,系统就有可能终止这个进程。在用户模式下只能执行非特权的操作,而不能执行特权操作
- 在内核模式下,代码可以执行任何操作指令,操作系统就是以内核模式进行的。在核心模式下可以执行特权操作。
- 为了方便用户执行某些不会危及系统特权操作(比如磁盘读取),操作系统提供了系统调用,允许这些操作。
- 那么系统调用是如何被执行的呢?
- 要想执行系统调用,程序必须执行特殊的陷阱指令。从用户模式转换为核心模式,开始执行
- 执行完成之后,操作系统调用一个特殊的从陷阱返回的指令,回到用户模式
- 注意在执行陷阱指时,要确保所有寄存器的内容被保存起来。
- 陷阱如何知道在OS内运行那些代码?
- 内核通过在启动时设置陷阱表来实现。这也是一个特权指令。