处理机调度与锁死

经过之前的了解,我们现在已经知道进程是个什么东西了,好吧,如果你觉得我这话有吹牛逼的嫌疑,那就加个初步吧,我们已经初步知道了进程是个什么东西了,那么,现在我有一个问题:是谁在执行进程?答:处理机。没错就是处理机,你可能会问处理机是什么玩意,额,那我只能说我们现在是在学习操作系统,你只要知道处理机是负责执行进程的就好了,它可能是打印机,也可能是其他等等,就像你问我什么是水果?我总不能把世界上所有水果都列举出来,然后一个一个慢慢解释吧。好了,不扯远了,现在我有第二个问题:系统中处理机多还是进程多。答:你是傻逼吗?当然进程多了。额,当然了,你说你用个电脑,酷狗在这边播着歌,那边天猫在显示双十一的优惠,那边还在下载你明天要看的电视剧,你说电脑这进程能不多吗?!那么我又有第三个问题了:竟然进程多于处理机,那你让处理机先执行谁,才能保证你又听歌又网购又下剧呢?答:······。好吧,我知道你不是答不出来,只是这问题不是一时半会能说清楚,别急,这一章,我们慢慢来解答这个问题。

一、处理机调度的层次

之前,我们一直在聊进程,现在我要介绍进程的一个朋友给你认识,它的名字叫做作业,

谁是作业?要介绍他干嘛?首先,他可不是老师每天布置给你的让人讨厌的那个作业,其次,别急,我们会慢慢认识他,现在,我先说说作业的一些基本资料吧,作业就是一个任务,就好像你要在word打字并在屏幕显示出来一样,这就是一个任务,一个作业,注意哦,作业是有程序有数据的,但他不仅仅有程序有数据,它还应配有一份作业说明书,就好像你会根据说明书来操作你的洗衣机一样,处理机会根据作业说明书来对程序的运行进行控制,另外你要知道一点,在批处理系统中,作业是外存调入内存的基本单位,而且他是高于进程的,也就是说你可能调度完作业后,还要调度进程才是算是真正意义上的完成了一个作业的调度。

好了,你大概认识作业了,我们后面还会遇到他的,到时那你可以慢慢去了解他,回到我们这一小节的题目——处理机调度的层次,层次,无非就高级、中级、低级嘛,没错,就是这么简单,我们的处理机调度层次就是分高级、中级、初级,那么就不说废话了,我们马上来认识这三个层次的调度吧。

高级调度。简而言之,就是作业调度,主要功能就是根据作业控制块(即JCB,是不是很熟悉,没错之前我们聊过一个叫PCB的东西,两者很相似,所以我在这里不多讲了)中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为他们创建进程、分配必要的资源,然后再将新创建的进程插入就绪队列准备执行。是不是被一大堆术语搞得有点晕了,如果你是初接触计算机较深层的东西的话,是有点难理解,那你就记住两点就好,作业调度就是:1、作业在外存排队等着进内存,这支队伍就叫后备队列,作业调度首先就是要把作业从后备队列中调入内存,2、好了作业经过漫长的排队,进入内存了,你可能会说:作业调度完成了,不容易啊。别急,这只是完成了作业调度的一半,作业进入内存后,我们会为其创建进程,并将这些进程插入就绪队列中,这时候你就可以休息一下去喝杯茶了,因为我们作业调度这才算真正完成了。对与这个你有问题吗?如果没有,那我可有两个问题(我问题是有点多哈),

1、每次执行作业调度时,应该接纳多少作业呢?我们知道内存空间是有限的,如果接纳的作业多了那可能会造成周转时间太长,就好像你同时想听歌、网购、下载东西等等,并把这些东西一股脑调度进内存,这时你发现,你忽然又想上扣扣了,但没办法,前面还有那么多作业没完成,上扣扣的事就只能等了,你很不高兴,于是想:如果我每次只让一个作业进入内存,这个作业完成后再让下一个进去,那我不就很快能上扣扣了么?是的,没错,可是这样做,你高兴了,计算机可就不开心了,它想:我内存那么多,你就让一个作业进来,其他的内存就这么浪费了吗?额,那怎么办,没办法,双方各退一步,我们只能根据系统的规模和运行速度,做适当的折中了。

2、决定接受多个作业我们解决了,但有那么多作业排队等着进内存呢,我们又应该让他们谁先进来呢?这就涉及到调度算法了,后面我们会详细讲的,这里你只要记住这个问题,记住有一个叫调度算法的东西就好了。

好了,高级调度说的差不多了,中级调度我简单的说一下,它的任务就是把不能运行的进程调到外存去,直到其能运行了再调回内存,它涉及存储器管理的知识,我们后面会详细讲的,这里就不多说了,我们来认识一下低级调度吧。低级调度其实就是进程调度,就是为就绪队列中的进程分配处理机的过程,其功能主要有三点:1、保存处理机的现场信息,就是把上一个执行完的进程的各个数据保存好,2、按某种算法选取进程,这里的某种算法就是指某种调度算法,3、把处理机分配给进程,这个不用解释了吧。为了实现以上三个功能,我们需要三个基本机制:1、排队器,就是把进程排好队,2、分派器,选中某个进程之后,分派器就负责把它取出来,3、上下文切换机制,记住一个进程调度有两个上下文切换,第一个,是保存之前运行进程的上下文,装入分派器程序的上下文,是的,进程它是不会自己跑到处理机里的,它需要分派器来帮助它,而分派器本身也是个程序,所以要先装入分派器程序的上下文,第二个上下文切换就容易理解了,分配程序完成任务后,就把它的上下文移除,装入新进程的上下文。那么进程调度的方式有哪些呢?记住,有两种方式,1、非抢占方式,大家都是文明人,一个进程在处理机运行,其他进程就乖乖等咯,除非进程完成自己放弃处理机,或者他阻塞了,不然其他进程这辈子就没有机会进入处理机了,也就是说,在这种方式下,能引起进程调度的只有以下三个因素:1)进程执行完毕,或因发生某事件而不能再继续执行,2)执行中的进程发出I/O请求而暂停执行,3)遇到某种原语,例如waitblockwakeup等。2、抢占方式,有非抢占方式,自然就有抢占方式咯,就好像你在公司的某台电脑上着网,这时你上司来了,说他要用这台电脑,除非你早就不想在这家公司干了,不然你只能乖乖让出电脑了,对于进程来说,就是不管处理机里的进程在干嘛,新进程来了一定要抢占处理机,原进程只能乖乖让出处理机了,那么什么样的新进程有权利抢占别人的处理机呢?这就是抢占调度方式基于的三条原则了:1、优先权原则,比如你会给紧急的作业更高的优先级,这样它就能抢占那些不太紧急的作业的处理机,并优先运行了,2、短作业(进程)优先原则,顾名思义,谁短谁先执行,3、时间片原则,我们给每个进程划分时间片,处理机每次执行完一个时间片后,进程的时间片会进行更新,然后再根基更新完的时间片对进程进行调度(下节我们会细讲)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
处理机调度是指操作系统对CPU的分配和调度,以便高效地完成各种任务。在多道程序环境下,由于有多个进程需要占用CPU,因此需要进行处理机调度,以便各个进程都能够得到合理的CPU时间片,并且能够尽早地完成任务。 处理机调度算法主要有以下几种: 1. 先来先服务 (FCFS):按照进程到达的先后顺序进行处理机分配,即谁先到谁先得到CPU的使用权。 2. 短作业优先 (SJF):按照进程的执行时间进行处理机分配,即先处理执行时间最短的进程。 3. 优先级调度 (Priority Scheduling):按照进程的优先级进行处理机分配,即优先级高的进程先执行。 4. 时间片轮转 (Round Robin):将CPU时间片分成多个时间段,每个进程在一个时间段内执行一定时间,然后切换到下一个进程,直到所有进程都执行完毕。 死锁是指在多进程环境下,由于资源竞争而导致的一种进程无限等待的现象。死锁的发生通常由于以下四个条件的同时满足: 1. 互斥条件:一个资源同时只能被一个进程使用。 2. 不可抢占条件:进程在使用一个资源时,不能被其他进程抢占。 3. 占有和等待条件:一个进程在持有一个资源的同时,可以等待其他资源。 4. 循环等待条件:多个进程之间形成一种循环等待资源的关系。 避免死锁的方法主要有以下几种: 1. 破坏互斥条件:允许多个进程同时访问一个资源。 2. 破坏不可抢占条件:允许进程在使用一个资源时被抢占。 3. 破坏占有和等待条件:一个进程在申请资源时,必须释放已经占有的资源。 4. 破坏循环等待条件:对所有资源进行编号,每个进程按照编号顺序申请资源,释放资源时按照相反的顺序释放。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值