操做系统----第二章:多进程图像之CPU管理
这里写目录标题
- CPU管理的直观想法
- CPU的朴素工作原理
- 提出问题
- 解决问题
- CPU交替执行(并发)
- 二级目录
- 一级目录
- 二级目录
- 二级目录
- 二级目录
- 一级目录
- 二级目录
- 二级目录
- 二级目录
- 一级目录
- 二级目录
- 二级目录
- 二级目录
- 一级目录
- 二级目录
- 二级目录
- 二级目录
CPU管理的直观想法
CPU的朴素工作原理
在计组中已经学过:
CPU包括控制器和运算器,他与主存之间会有地址总线、数据总线、控制总线,用于与主存的指令、数据进行数据交互
CPU的朴素工作原理就是:
1、我们先初始化PC指针,之后,CPU将PC指针指向的主存的存储单元的内容,通过数据总线送到CPU
2、CPU发现是一条指令,便会执行该指令,执行过程中可能还会去主存中对应地址取数据(会用到MAR、MDR,实际上上面的PC会经过MAR去取数据,给到MDR,只不过大部分是直接使用MAR、MDR),执行完当前指令之后,PC自动加一
从而继续自动执行1、2,完成自动地取指执行
所以,CPU就这样顺序执行下去了
提出问题
我们来看这样一段程序,
1、这行代码属于:IO操作
2、当把这行IO操作代码用一条计算指令代替时,可以看到执行10^7次循环,耗时0.015s-------平均一次循环步耗时0.015/10的7次方
(计算指令相当于CPU在执行,而IO时CPU不执行)
3、而当带着这条IO代码时,执行1000次循环,耗时0.859s-------平均一个循环步耗时0.859/10^3
4、二者作比:可以看到,大致为10^6:1,也就是CPU执行一条IO操作代码的时间,大致是执行一条计算指令代码的10的6次方倍,所以,执行IO的速度相比CPU执行的速度来讲,十分十分的慢
所以,如果一段程序中,有10^6条非IO指令,之后来一条IO指令,二者耗费的时间是一样的,但前者是CPU一直在运行,而IO时,CPU会停下等待,处于闲置状态
所以,这样一段10^6:1程序,CPU的利用率只有百分之五十
而实际代码中,可能我们每隔30行非IO代码,就会有一条IO代码,这样看来,整个程序CPU的利用率近乎接近于1%,99%的时间都用在了等待IO
解决问题
直观想法:当CPU等待IO时,我们使用一些手段,让其去执行其他任务,当IO结束后,再通过某种手段通知CPU回来继续执行下面的代码,这样CPU的利用率就会被超大幅度提升
所以,采用多道程序交替交给CPU执行的方法(注意,交替执行只是针对CPU而言,在CPU切换后,没有CPU的程序并没有停下,而是在执行IO,所以,两个程序是一值在并行执行)
1、单道程序执行A、B,时间是80
2、而采用多道程序执行A、B之后,时间缩短到45
3、简要看一下多道程序执行的过程:首先从B开始,遇到B要IO(DEV代表IO),则让B执行IO,同时CPU切换到A执行,之后,A要进行IO,则让A继续IO,CPU切换到B执行,而这里,CPU执行B时,A的IO结束了,但是B的CPU还能继续执行,那么A只好等待,等B什么时候遇到IO释放了CPU,A再继续使用CPU
CPU交替执行(并发)
多道程序交替交给CPU执行(注意,交替执行只是针对CPU而言,在CPU切换后,没有CPU的程序并没有停下,而是在执行IO,所以,两个程序是一值在并行执行)
当当前程序遇到IO后,修改PC的值,让其切换到另一个程序执行,而不是让CPU干等着,此时程序A和程序B在并行执行,称之为**“并发”**
但是单纯修改PC的值就行了吗,修改PC的值,虽然是跳到程序B执行了,但是程序A会停止,显然不符合并行执行
1、当,从程序A切换到程序B执行之后,PC被修改回去,继续执行程序A时,发现ax、bx都被程序B修改了,所以程序A就错误了,不是PC切换之前的ax、bx了
2、所以,每个运行的程序,会有一个结构,专门用于存放PC切走之前的信息,如上图,包含了ax、bx的值,以及PC的切换位置,方便PC切回来,这个结构就是PCB进程控制块
1、所以,运行中的程序,需要记录一些信息,而静态的程序代码不需要,
即,运行的程序=静态程序代码+需要额外记录一些信息(记录在PCB中)
而,这样的一个运行的程序,我们称之为“进程”
可以将静态程序视为剧本,而进程就是一场戏