总结
我们讨论了实现CPU虚拟化的部分底层机制,及我们统称为直接执行(direct execution)的一组技术。基本的思想十分简单明了:直接在CPU上运行你想运行的代码,但是你先得确保将硬件设置好以便在没有操作系统的协助下去限制进程能做的事。
这些通用的方法也在真实生活中被运用。比如:你们中的有孩子的部分人,或者,总该听说过儿童吧,也许对婴儿防护室:一间将危险物品锁在柜中,插座被掩盖住的房间。在这样准备的房间中,你可以让你的孩子*的玩耍,因为你明白房间中绝多数的潜在危险都被限制了。
以类似的方式,操作系统通过在启动阶段设置trap处理函数和启动计时器中断将CPU打造成一间“婴儿防护房”,然后让程序运行在这个限制的模式下。由此,操作系统可以确保进程的高效运行,且只有在特权指令或进程占用CPU过久而需要进行进程切换时才需要操作系统干预。
因此我们有了合适的对CPU进行虚拟化的基本机制。但是,还有一个主要的问题没有解决:在一个给定的时间段里,哪一个进程应该被运行?下一章我们学习的专题:调度器,会回答这个问题。
TIPS:有用的重启
在前一部分,我们注意到在协作系统下陷入死循环或者其他类似的情况时唯一的方法就是重启机器。然而你也许会嘲笑这种做法,,但调调查表明重启(或者更通用地,重启部分软件)在构建一个健将的操作系统是是一个非常有用的工具。
特别是,因为能让软件回到已知或被测试过的状态,故重启时十分有用的。重启也会回收超时或溢出的资源(如内存),然而其他方法也许很难做到。最后,重启十分简单。由于这些原因,在大型集群网络服务中,系统管理软件周期性的重启部分机器以重置他们,以便利用上述的优点。
那么,下一次你重启的时候,不在再认为时装模做样了,相反,你正是再用一种经过时间检验的方法去提升计算机系统的性能!