《操作系统导论》笔记(一)CPU的虚拟化
1、什么叫CPU的虚拟化
假设机器只有一个CPU,但是却可以“同时”运行多个程序,比如同时听歌和打游戏。具体来说,在操作系统和硬件的协同下,将单个CPU(或其中一小部分)转换为看似无线数量的CPU,从而让许多程序看似同时运行,这就是所谓的虚拟化CPU。
2、CPU虚拟化的原理
如果只有一个CPU的话,要想“同时”运行两个程序A和B。主要原理是分时复用,CPU在每个时刻中只能运行一个程序,要达到同时运行A和B的效果,原理类似于数码管的动态显示。一个时刻内CPU运行程序A,然后下一个时刻运行程序B,一直这样不停切换,由于CPU的运行速度相对于人来说非常快,就达到了看似同时运行程序的效果。
3、CPU虚拟化的设计目标:性能与控制权
性能是指,在分时复用的同时,程序(进程)的运行足够高效,实现方法为程序的受限制的直接执行以及进程调度策略;控制权是指在某个程序(进程)运行过程中以及两个进程切换的过程中,也就是CPU的整个运行过程中,OS保留对CPU的控制权,以避免进程执行一些非法操作,实现方法为时钟中断。
3.1 单个进程的执行:受限制的直接执行
为了使得程序尽可能快的运行,OS开发人员想出了一种名为“受限制的直接执行的技术”。所谓“直接执行”,就是程序直接在CPU中运行。当OS希望运行一个程序时,它会在进程列表中为其创建一个进程条目,为其分配一些内存,将程序代码从磁盘加载到内存,找到程序入口点(main函数或者其他),跳转到入口并开始执行。表1展示了这种基本的直接执行协议(没有任何限制)。
操作系统 | 程序 |
---|---|
在进程列表中创建条目 | |
为程序分配内存 | |
将程序加载到内存 | |
根据 argc/argv 设置程序栈 | |
清除寄存器,执行call main()方法 | |
无 | 执行main(),从main中执行return |
释放进程的内存,并将进程从进程列表中清除 | |
问题:当运行中的程序试图做非法操作(比如访问不该访问的内存区域)时,上面不受限制的直接执行不能够有效的阻止非法操作。比如,不能让程序无限制的执行IO或者内存读写之类的操作。 | |
解决: 硬件通过提供不同的执行模式来协助操作系统。比如ARM处理器的7种运行模式:用户模式、系统模式等。一般我们所编写的程序运行在用户模式,在用户模式下想执行一些特权指令的话需要向OS发出申请(系统调用)。而OS或者OS内核就运行在系统模式下,可以执行所有类型的指令。 |
3.2 多个进程的执行:进程间的切换
问题 :如果一个进程正在CPU上运行,这就意味着OS没有运行,如果OS没有运行,它也就不能进行进程切换(停止当前进程,开始下一个进程)。
解决:硬件定时产生时钟中断,转入预先写好的中断处理程序,在中断处理程序中将运行权还给OS。
具体进行进程切换时,就是先保护原来进程,然后跳转新的进行执行,不用多说。
3.3 多个进程的执行:进程间的调度
待写