进程与线程:01 CPU管理的直观想法
多进程图像与操作系统核心
好从今天开始,我们就要开始学习操作系统,最核心的图像是多进程图像。前面我们讲过,多进程图像对操作系统来说非常重要,它是操作系统的核心图像。明白了它以后,对于理解操作系统的一大部分内容乃至编写操作系统都大有益处。
操作系统的核心功能是管理计算机硬件,而CPU是计算机中最核心的硬件,所以操作系统首先要管理CPU 。正是在管理CPU的过程中,引出了多进程图像。
管理CPU:从使用到问题提出
-
使用:要管理CPU,需先学会使用CPU 。就像管理屋子要让屋子被使用一样,使用CPU就是让它高效地工作。而要使用CPU,得先明白其工作原理。
-
工作原理:根据冯诺伊曼体系,将程序存放到内存里,设置PC(程序计数器)地址,如PC = 50 。CPU会根据这个地址从内存中取指令,例如取出
mov ax, [100]
这条指令,然后将内存地址为100处的内容取出来赋给ax寄存器,ax的值就变为0 。CPU自动进行取指 - 执行的操作,不断重复这个过程,每次取指后PC自动累加,从而依次执行后续指令。 -
直观方法:管理CPU最直观的方法就是设好PC初值,将PC的初值设置为一段程序的开始地址,CPU就会自动取指执行,开始工作。
-
-
问题提出:然而,这种方法存在问题。通过一个程序实验发现,I/O指令(如
fprintf
)和计算指令执行时间差异巨大,I/O指令执行非常慢。当程序中存在I/O指令时,CPU在执行到I/O指令时,由于后续指令可能依赖I/O结果,CPU只能等待,导致CPU利用率低。例如一个程序前面有大量计算指令(如十的六次方条),仅有一条I/O指令,按照直观方法执行,CPU会在遇到I/O指令时等待,工作时间和等待时间几乎相等,利用率只有50% ,在实际情况中CPU利用率可能更低。
解决思路:多道程序交替执行
为解决CPU利用率低的问题,人们借鉴生活中等待事件时同时做其他事的思路,提出多道程序交替执行的方法。当一个程序执行到无法继续(如遇到I/O操作)时,CPU切换到另一个程序执行,多个程序在内存中交替执行,这样CPU就能充分忙碌起来,提高利用率。
-
对比示例:通过单道程序和多道程序执行的示例对比,单道程序中程序A执行完后程序B才能执行,CPU利用率为50% ;而多道程序交替执行时,CPU和设备可以并行工作,任务执行时间缩短,CPU利用率提高到89% ,设备利用率也相应提高。
-
实现关键:一个CPU要交替执行多个程序,关键在于PC的切换。当需要切换到另一个程序时,操作系统修改PC的值,如从程序1的地址切换到程序2的地址。但仅仅修改PC寄存器是不够的,还需要记录返回地址、寄存器(如ax、bx )等信息,以便切回原程序时能继续正确执行。
引入“进程”概念
运行的程序和静态程序不一样,运行中的程序需要记录执行时的各种信息,如当前执行位置、寄存器状态等,这些不一样的地方构成了进程概念的外延。为了描述这种差异,引入了“进程”概念。进程是进行(执行)中的程序,与静态程序相比,进程有开始、结束,会走走停停,需要记录寄存器等信息,而这些信息都存放在PCB(进程控制块)中 。
总结:多进程图像与CPU管理
将前面的内容贯穿起来,操作系统管理CPU,首先是使用CPU ,给一段程序让CPU执行,CPU就能工作。但只执行一个程序CPU利用率低,所以需要让CPU交替执行多个程序,即并发执行。而实现并发就需要记录程序执行状态,这就引出了进程概念。
CPU管理就是启动一个进程让CPU执行,更好地管理CPU则是启动多个进程让CPU交替跑这些进程。多个进程向前跑的样子,就是管理CPU的核心样子,也就是多进程图像。