cpu虚拟化的类型及代表(操作系统如何实现)

假设一个计算机只有一个 CPU(现代计算机有更多),但是同时有多个进程,虚拟化要做的就是将这个 CPU 虚拟成多个 CPU 并分给每一个进程使用,这样在每一个进程看来,他们都是在独自占用 CPU,事实上只有一个 CPU。

首先我们说一下时分共享(time sharing)CPU 技术,通过允许资源由一个实体使用一小段时间,然后由另一个实体使用一小段时间,如此下去。在这里,资源可以是 CPU,网络链接等。有时间当然就有空间,所以也就有空分共享,相信大家这时也可以理解这个概念了,例如磁盘,一旦将块分配给文件,在文件删除之前,不可能将它再分配给别人。

对于实现时分共享有很多的挑战,第一个就是性能(性能这个问题在任何时候都是非常重要的):如何在不增加系统开销的情况下实现虚拟化。另外一个问题就是控制权:在运行程序时,要保留对 CUP 的使用权。操作系统需要掌控对 CPU 的控制,及时在运行程序时,不能让程序肆无忌惮的使用 CPU,或者随意的访问没有权限的文件。综上两点,在保持控制权的同时获得高性能,这是最大的挑战。

接下来我们主要说一下“受限直接执行”这个机制。说白了,就是虽然程序直接运行在 CPU 上,但是是受限制的。这里我们不得不提一种处理器模式:“用户模式”与“内核模式”,在用户模式下运行的代码会受到限制,例如不能在用户模式下发出 I/O 请求。内核模式相当于非常大的权限,运行的代码可以做他想做的任何事,操作系统(或内核)就是在次模式下运行。所以我们的程序都是在用户模式下运行,当程序有 I/O 请求时,是如何解决的呢?

参考书籍:操作系统导论

这个图说的是操作系统启动时,操作系统与硬件是如何处理中断时钟的。下面我们看一个进程切换的图:

cpu虚拟化的类型及代表(操作系统如何实现)(1)

正如图那样,在两个进程间的切换就是如此简单:进程 A 正在运行,然后被中断时钟打断。硬件保存寄存器并进入内核。在时钟中断处理程序中,操作系统决定从在运行的 A 进程切换到 B 进程。同时恢复寄存器进程 B,​然后切换上下文。具体来说就是通过改变栈指针来使用 B 的内核栈​。最后操作系统从陷阱返回,恢复 B 的寄存器并​运行。

是的,在两个进程间就是这样切换的,如果我们的操作系统最多只支持同时运行两个进程,那么这个问题就不是问题了,但实际上,同时要运行的进程绝对不止两个。所以,最主要的问题出现了,如何​调度这么多的进程呢?也就是说,我们需要一个算法,这个算法在操作系统中,可以高效并稳定而且安全更加公平的调度进程​,从而达到对用户而言,多个进程在同时进行。著名的算法有几个,下一篇文章我们继续聊​。​(码字不易,感谢阅读)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页