文献参考——《程序员的自我修养》《现代操作系统》
在计算机早期,CPU执行完一个进程后的时候,需要等待程序员手动加入下一个进程,才可以继续运行。这里大大浪费了cpu的效率,要知道cpu是十分昂贵的,不应该让它偷懒。
单道程序系统
在计算机的早期,连续处理程序,需要先把一批程序以脱机方式输入到磁带上,在系统中配上监督,在它的控制下,使这批程序能一个接一个地连续处理。其处理过程是:首先由监督程序将磁带上的第一个程序装入内存,并把运行控制权交给该程序;当该程序处理完成时,又把控制权交还给监督程序,再由监督程序把磁带上的第二个作业调入内存。计算机系统就这样自动地一个程序紧接一个程序地进行处理,直至磁带上的所有程序全部完成。
如用户急需执行某程序,必须等i3 运行到暂不需或结束才可能分配cpu资源倒i4 同样的等i4结束或暂不需,才分配道i5....最后才能让急需程序运行。(不能插队哦)。
但是这种方式在进程调度上有着重大的漏洞,当人机交互时,用户现在就需要执行一个进程,但是将想要执行该进程,就要等待前面所有进程执行完毕后才会运行急需执行的进程(不可插队),等到用户急需进程开始运行时,可能都过去10多分钟了都还没执行想执行的进程(
![](https://i-blog.csdnimg.cn/blog_migrate/e8cb1e1c54cd11742ae9e8f816afe1a1.png)
比如:打开个扫雷游戏等1个小时才能打开游戏,电脑都给砸了。
多道程序系统
在这样的背景情况下,一个调度系统横空出世了“多道程序”:相比于以前只能一个一个进程运行的单道程序系统,在多道程序系统下,运行的进程在暂时不需要cpu资源时,系统就会调度一个正在等待cpu资源的程序分配资源。早期cpu就是类似这样的运行程序的方式,我们成为这种方式在现在看似原始,但是在当时确实大大的提升了cpu的效率。
有一个弊端:如果有一个进程没有出现无需cpu资源的情况,那就要等待该进程执行完毕后(比如:死循环),那么其他进程就会永远等待该进程执行完毕或暂停,这是我们不愿意看见的。
多道程序+分时系统
在这多道程序的基础上,我们将cpu执行单个程序从头到尾一次性执行完毕,改为了计算当前程序部分时间后,让出cpu给其他程序进行计算其他程序,以此类推,每个程序都有机会运行一段时间,这个时候这样的系统叫做分时系统,这样的监控程序比多道程序高级也复杂,当用户调用几个系统调用(Yield、GetMessage等)时,监控系统会查看cpu是否在执行其他文件,如果有,发出请求,cpu可能暂停当前执行程序,让cpu先执行其他程序。
但是这里有个弊端,这里的分时系统,系统也只是和进程协商,如果I3正在执行有个十分耗时间的计算,或者陷入死循环,他就会霸占cpu,使计算死机,无法执行其他程序,整个系统都停止了,一直执行该计算,这是我们不希望看见的,区区一个死循环,导致一台计算机死机,现在来看十分的荒唐,比如在你的IDE上执行while(1); 死机只能重新启动,这样的电脑谁敢买
![](https://i-blog.csdnimg.cn/blog_migrate/805c690012a48b8735a846aeee6f7e2f.png)
#include<stdio.h>
//在分时系统下
int main()
{
while(1);//cpu疯狂计算该条程序,电脑只能重启。
return 0;
}
多任务系统
分时系统也仅能满足当时的交互,当今计算机发展越来越快,绝不能因为一个死循环死机,这个时候,高端领域的佬们研究发明了多任务(Multi-tasking)系统,它完全接管了硬件资源,不再是协商,这是直接命令,所有的程序都以进程(Process)的方式在比操作系统权限更低级的级别,每个进程都有自己的独立空间,使得进程之间有独立的地址空间(大通铺,变成小单间),使得不同的进程相互隔离,而且不同的进程有不同的优先级别(出现高低贵贱,三六九等)。这时操作系统全权接管CPU资源,这时操作系统会根据进程的优先级高低进行先后分配cpu资源,当前面的进程运行一段时间都,直接暂停当前进程,运行下一优先级进程,每个进程都执行一小段时间,这样所有的进程都会使用到cpu资源,出现死循环,进程也霸占不了cpu资源,因为该系统下,操作需要全权控制cpu资源分配,这样的这方式我们称之为:抢占式(Preemptive) ,操作系统可以强制剥夺cpu资源(哪怕正在执行其他进程,甚至进程在死循环),并且分配给它认为目前最急需的进程。
![](https://i-blog.csdnimg.cn/blog_migrate/12425ea15e227c2314b2ec5205784966.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1bf5ff77bc8ed7120fe7edd184cecbb9.png)
并且如果分配给每个进程的时间都很短的话,出现多个进程之间快速的切换,产生多个进程同时执行的假象。当下许多的操作系统都是采用这样的方式如:Linux、windows NT、UNIX、以及苹果的Mac OS X的流行的操作系统。