假设一个计算机只有一个CPU,他们都在独自占用CPU

假设一台计算机只有一个CPU(现代计算机更多),但是同时有多个进程,虚拟化需要做的就是把这个CPU虚拟成多个CPU,分配给每个进程,这样在眼里每一个进程,都是独占CPU,实际上只有一个CPU。

首先让我们谈谈分时 CPU 技术,允许资源在短时间内由一个实体使用,然后由另一个实体在短时间内使用,依此类推。这里的资源可以是CPU、网络链接等,有时间当然有空间,所以也有空间共享。相信这个时候大家都能理解这个概念了。比如磁盘,一旦一个块被分配给一个文件,在文件被删除之前是不可能分配给其他人的。

实现分时有很多挑战,首先是性能(这在任何时候都非常重要):如何在不增加系统开销的情况下实现虚拟化。另一个问题是控制:在运行程序时,您保留对 CUP 的访问权限。操作系统需要掌握CPU的控制权cpu虚拟化技术名词解释,在运行程序时,不能让程序乱用CPU,也不能随意访问未经许可的文件。总而言之,在保持控制的同时获得高性能是最大的挑战。

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

为了实现这一点,现代硬件为用户程序提供了执行系统调用的能力。允许内核小心地将某些关键功能暴露给用户程序,例如访问文件、创建进程等。在执行系统调用时,程序必须执行特殊的陷阱指令。在进入内核模式时执行该指令,然后执行特权操作。完成后,操作系统调用一个特殊的从陷阱返回指令并返回到用户模式。

接下来我们来看另一个问题,操作系统是如何进行进程切换的。这个问题看起来很简单cpu虚拟化技术名词解释,就是操作系统直接在不同进程之间切换,其实很棘手。最重要的是进程的调度算法。本文不谈进程调度算法。我们将在下一篇文章中主要讨论它。

图片[1]-假设一个计算机只有一个CPU,他们都在独自占用CPU-老王博客

这里我们先看几张图来简要说明进程调度是如何进行的:

参考书:操作系统简介

此图显示了操作系统和硬件在操作系统启动时如何处理中断时钟。我们来看一个进程切换图:

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

是的,这就是在两个进程之间进行切换的方式。如果我们的操作系统只支持最多同时运行两个进程,那么这个问题不是问题,但实际上肯定有两个以上的进程同时运行。那么,主要问题出现了,如何调度这么多进程?也就是说,我们需要一种能够在操作系统中高效、稳定、安全、公平地调度进程的算法,使得对于用户来说,多个进程同时运行。有几种比较有名的算法,我们下一篇继续讲。(暗语不易,感谢阅读)

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论