不让CPU偷懒

文献参考——《程序员的自我修养》《现代操作系统》

        在计算机早期,CPU执行完一个进程后的时候,需要等待程序员手动加入下一个进程,才可以继续运行。这里大大浪费了cpu的效率,要知道cpu是十分昂贵的,不应该让它偷懒。

单道程序系统

        在计算机的早期,连续处理程序,需要先把一批程序以脱机方式输入到磁带上,在系统中配上监督,在它的控制下,使这批程序能一个接一个地连续处理。其处理过程是:首先由监督程序将磁带上的第一个程序装入内存,并把运行控制权交给该程序;当该程序处理完成时,又把控制权交还给监督程序,再由监督程序把磁带上的第二个作业调入内存。计算机系统就这样自动地一个程序紧接一个程序地进行处理,直至磁带上的所有程序全部完成。

   如用户急需执行某程序,必须等i3 运行到暂不需或结束才可能分配cpu资源倒i4 同样的等i4结束或暂不需,才分配道i5....最后才能让急需程序运行。(不能插队哦)。

        但是这种方式在进程调度上有着重大的漏洞,当人机交互时,用户现在就需要执行一个进程,但是将想要执行该进程,就要等待前面所有进程执行完毕后才会运行急需执行的进程(不可插队),等到用户急需进程开始运行时,可能都过去10多分钟了都还没执行想执行的进程(

在系统下,用户急需进程必须等待前面N+1个进程全部执行完毕才可以运行

比如:打开个扫雷游戏等1个小时才能打开游戏,电脑都给砸了。

多道程序系统

        在这样的背景情况下,一个调度系统横空出世了“多道程序”:相比于以前只能一个一个进程运行的单道程序系统,在多道程序系统下,运行的进程在暂时不需要cpu资源时,系统就会调度一个正在等待cpu资源的程序分配资源。早期cpu就是类似这样的运行程序的方式,我们成为这种方式在现在看似原始,但是在当时确实大大的提升了cpu的效率。

        有一个弊端:如果有一个进程没有出现无需cpu资源的情况,那就要等待该进程执行完毕后(比如:死循环),那么其他进程就会永远等待该进程执行完毕或暂停,这是我们不愿意看见的。

多道程序+分时系统

      在这多道程序的基础上,我们将cpu执行单个程序从头到尾一次性执行完毕,改为了计算当前程序部分时间后,让出cpu给其他程序进行计算其他程序,以此类推,每个程序都有机会运行一段时间,这个时候这样的系统叫做分时系统,这样的监控程序比多道程序高级也复杂,当用户调用几个系统调用(Yield、GetMessage等)时,监控系统会查看cpu是否在执行其他文件,如果有,发出请求,cpu可能暂停当前执行程序,让cpu先执行其他程序。

         但是这里有个弊端,这里的分时系统,系统也只是和进程协商,如果I3正在执行有个十分耗时间的计算,或者陷入死循环,他就会霸占cpu,使计算死机,无法执行其他程序,整个系统都停止了,一直执行该计算,这是我们不希望看见的,区区一个死循环,导致一台计算机死机,现在来看十分的荒唐,比如在你的IDE上执行while(1); 死机只能重新启动,这样的电脑谁敢买

霸占cpu资源
#include<stdio.h>
//在分时系统下
int main()
{
    while(1);//cpu疯狂计算该条程序,电脑只能重启。
    return 0;
}

多任务系统

        分时系统也仅能满足当时的交互,当今计算机发展越来越快,绝不能因为一个死循环死机,这个时候,高端领域的佬们研究发明了多任务(Multi-tasking)系统,它完全接管了硬件资源,不再是协商,这是直接命令,所有的程序都以进程(Process)的方式在比操作系统权限更低级的级别,每个进程都有自己的独立空间,使得进程之间有独立的地址空间(大通铺,变成小单间),使得不同的进程相互隔离,而且不同的进程有不同的优先级别(出现高低贵贱,三六九等)。这时操作系统全权接管CPU资源,这时操作系统会根据进程的优先级高低进行先后分配cpu资源,当前面的进程运行一段时间都,直接暂停当前进程,运行下一优先级进程,每个进程都执行一小段时间,这样所有的进程都会使用到cpu资源,出现死循环,进程也霸占不了cpu资源,因为该系统下,操作需要全权控制cpu资源分配,这样的这方式我们称之为:抢占式(Preemptive) ,操作系统可以强制剥夺cpu资源(哪怕正在执行其他进程,甚至进程在死循环),并且分配给它认为目前最急需的进程。

剥夺当前使用cpu资源的进程
将cpu资源给急需cpu资源的进程

       并且如果分配给每个进程的时间都很短的话,出现多个进程之间快速的切换,产生多个进程同时执行的假象。当下许多的操作系统都是采用这样的方式如:Linux、windows NT、UNIX、以及苹果的Mac OS X的流行的操作系统。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云的小站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值