01:操作系统如何实现CPU和内存的多路复用?

  在学习操作系统前,我们先了解程序在计算机中的执行流程。根据冯诺依曼计算模型:

   1. 首先程序需要通过输入设备加载到计算机的内存中    

   2. CPU从内存中取出程序中的指令并对其解码,然后执行  

   3. CPU和内存反复交互,直到程序所有指令执行完成 

    4. 最后把程序计算结果通过输出设备输出外界

 

                                                                                 

 

  看似简单流程的背后却隐藏着一个重要问题:程序是如何与计算机中的物理资源进行交互?

一:批处理系统

  现如今冯诺依曼建立的计算模型成为了主流的计算机体系结构。与计算机紧密相关的半导体行业也伴随着摩尔定律飞速发展。但对于操作系统的设计来说并没有发生耳目一新的变化。

  早期的计算机是为了帮助科学家进行数值计算,但随着晶体管的发明和摩尔定律的推动,让计算机的价格更加实惠,计算机的性能也水涨船高。计算任务也逐渐从计算密集型数据过渡到数据密集型处理。由于计算任务越来越多,工程师需要考虑如何让计算机处理更多的程序。

  在20世纪50年代工程师通过将一组程序写在纸带上,随后穿孔成卡片输入到计算机中,当程序执行完成后将计算结果从打印机上输出。 

                                                                                  

             (经过穿孔后卡片上一条指令的二进制形式,每列代表一位二进制数)

 

  当时的计算机每次运行只能执行一个计算任务,如果还有其他计算任务需要执行,需要等待当前任务完成。在此期间如果因为某些行为导致计算中断,那么必需重新启动任务。

  为了减少执行多个任务期间产生的人工操作,从而减少CPU的等待时间,工程师希望寻求方法解决计算机同时执行多个计算任务,由此发明了批处理系统。 

  批处理系统尽管每次运行可以执行多个计算任务,但是要注意,批处理系统只能串行处理而非并行处理,也就是说它并不能在同一时间处理多个计算任务。

二:现代操作系统

  为了解决这个问题,工程师意识到操作系统运行的代码是特殊的,它控制了机器。而如何更好的管理机器中的物理资源可能是问题的突破口。

  现代操作系统做的第一件事:屏蔽计算机中的物理资源。通过将物理资源转换为虚拟形式,并对外提供接口使工程师进行系统调用。操作系统通过对物理资源的抽象,简化了程序与物理资源的交互,降低了程序设计的复杂度。

  现代操作系统做的第二件事:管理计算机中的物理资源。为了对外提供更方便的服务,操作系统必须协调物理资源,并需要考虑出现问题时,如何进行异常处理。

  总结来说,操作系统的任务就是创建好的抽象并实现和管理它的抽象。好的抽象可以把一个几乎不可能管理的任务划分为两个可管理的部分。第一部分是有关抽象的定义和实现,第二部分是随时用这些抽象解决问题。

  我们知道一个程序的运行需要CPU执行指令,现在让我们把之前的问题换一种方式提问:CPU如何解决同一时间运行多个程序?

  为了解决这个问题,现代操作系统将CPU虚拟化为多个CPU,从而让许多程序执行期间看似是在同时运行。而这背后的原理是通过将CPU的运行时间分解成很短的时间片,按时间片轮流处理计算任务,即每个任务只执行一段时间片。因为CPU的运算频率很快,对于墙上的挂钟来说,秒针转动一次,CPU已经运行几万次了。由于这层假象,现代操作系统让工程师误以为计算机真的存在多个CPU

                                                                                     

  程序运行不仅需要CPU执行指令,还需要将程序输入计算机的内存中。在批处理系统上,内存只能存储一个程序,只有当前程序执行完成,才能将下一个程序输入到内存中。

  现代操作系统为了解决这个问题从而更好的实现多道程序同时运行,通过虚拟化内存实现对多道程序同时运行的管控。并且隔离每个程序的内存空间,从而让所有程序共享同一个内存。

  由于CPU和内存的虚拟化,操作系统不再是一次只能运行一项计算任务,而是将大量任务加载到内存中,并在它们之间快速切换。由于I/O设备的传输较慢,在处理I/O时,程序占用CPU而不做任何事情会浪费CPU时间,所以程序之间的快速切换可以提高CPU的利用率。

三:总结

  现代操作系统通过虚拟化技术实现了对CPU和内存的多路复用,共享资源,从而提高了计算效率。

 

posted @ 2020-08-21 15:22  我的偶像是木子  阅读(1021)  评论(0)    收藏  举报