CPU三级调度、引发挂起的原因、进程七态模型

三级调度

   当有多个任务需要处理时,可能由于资源有限无法同时对所有任务进行处理。这时确认某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。

​   如果按级别给处理机调度划分层次的话,可分为高级调度、中级调度、低级调度

在这里插入图片描述

调度频率:高级调度 < 中级调度 < 低级调度


高级调度

  高级调度也称为作业调度,就是按照一定的算法从后备队列中挑选一个或多个作业,给它们创建相应的进程(也即建立进程控制块 PCB)、分配内存等必要资源,然后将它们放入 就绪队列(内存) 中,以等待进程调度。作业调度主要任务就是接纳多少个作业,接纳哪些作业。接纳多少作业取决于内存中允许多少个作业同时运行。而接纳哪些作业就涉及到调度的算法了。

 常用的作业调度算法有:

  • 先来先服务(FCFS)

  • 短作业优先(SJF)

  • 优先级调度算法(PSA)

  • 高响应比调度优先调度算法(HRRN)

注意:

​   作业调度主要用于多道批处理系统,在分时和实时系统中不设置作业调度。因为分时系统为了做到及时响应,用户通过键盘输入的命令或数据等会被直接送入内存,因而无需配置作业调度机制,但是它也需要设置某种接纳控制措施来限制进入系统的用户数目。类似地,实时系统中也不需要作业调度,但是必须要有接纳控制措施。


中级调度

​   中级调度也称为内存调度,它的主要目的是提高内存的利用率和系统吞吐量,把那些暂时不能运行的进程调至外存进程处于挂起状态,当它们具备运行条件并且内存又有空闲的时候,再由中级调度调回就绪队列。

​   首先在这里我们需要注意进程的两种状态——挂起和阻塞:

​   两种状态都是暂时不能获得 CPU 的执行权,但是挂起状态是将进程实体调到外存去,而阻塞状态下进程实体还在内存中。这里需要说明的一点是,挂起状态的进程虽然被调至了外存,但是进程的 PCB 没有被调到外存,进程的 PCB 是存储在系统内核空间里的,并且 PCB 中会记录进程数据在外存中的位置以及状态等信息,操作系统就是通过内存的 PCB 来保持对各进程的监控、管理。

进程实体:程序段、数据段、PCB

​   在操作系统中,进程阻塞(block)与唤醒(wakeup)、挂起(suspend)与激活(active)都是用原语操作的(要么全部执行、要么全不执行),而且要成对出现,即如果阻塞了进程,则必须要在某处执行唤醒操作,不然此进程会一直处于阻塞状态而得不到执行。挂起和激活也是如此。

​   在上图中我们可以看到,就绪队列中的进程可以被直接调入就绪挂起队列,或者处于阻塞队列的进程能被调入阻塞挂起队列

​   进程一旦进入挂起状态(就绪挂起或阻塞挂起),就需要经过中级调度才能重新进入就绪队列,而且从图中我们也可很容易的看到,中级调度参与的双方是就绪挂起队列就绪队列,那么如果一个进程从阻塞队列进入了阻塞挂起队列,它就必须等到相应事件出现并调入就绪挂起队列后,才能在下次事件出现时被调入就绪队列。(多看图就自然理解了)

​   当然还有这样一种情况:在阻塞队列中的进程被 suspend 原语放入了阻塞挂起队列,如果在某时刻对此进程执行了 active 激活,那么它就会重新回到阻塞状态,然后等待事件出现重新进入就绪队列

低级调度

​   低级调度也称为进程调度,操作的对象是进程,它主要的功能是根据调度算法,决定就绪队列中的哪个进程应获得处理机,然后由分派程序将处理机分配给被选中的进程,因而它是最基本的一种调度,在多道批处理系统、分时、实时系统中都必须配置。

 常用的进程调度算法有:

  • 先来先服务(FCFS)

  • 短进程优先(SPF)

  • 优先级调度算法(PSA)

  • 高响应比优先(HRRN)

  • 时间片轮转调度算法(RR)

  • 多级反馈队列(MFQ)


引发进程挂起的原因

(1)终端用户的请求: 当终端用户在自己的程序运行期间发现有可疑问题时,希望暂停使自己的程序静止下来,并暂时不接受调度。以便用户研究其执行情况或对程序进行修改。我们把这种静止状态称为“挂起状态”

(2)父进程的请求: 有时父进程希望挂起自己的某个子进程,以便考察和修改子进程,或者协调各子进程间的活动

(3)负荷调节: 当系统资源不足已经影响正常运行时,系统会将一些不重要的进程挂起,以保证正常运行

(4)操作系统的需要: 操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账

七态模型

  引入了挂起与激活之后,进程的状态就会变得更复杂,下面是一张进程的状态转化图,希望对大家的理解有帮助。
在这里插入图片描述

1 : 创建进程后,还没来得及放入就绪队列中,就发现内存不够,此时进程只缺CPU,故直接就绪挂起。

2、4 : 进程存在于自己对应状态的队列中,此时新加入一个高优先级的进程,并且剩余内存无法满足新进程的内存需求,系统就会挂起阻塞和就绪队列中的一些进程并扔到对应的挂起队列中,从而释放更多的内存资源去供应高优先级的进程。

3 : 在2、4情况的基础上并且进程调度方式为抢占式,此时不仅会抢内存,还会抢CPU,故当前运行态的进程,直接被剥夺CPU使用权并扔到就绪挂起队列中 。

5、6 : 当内存有空闲的时候,将可将挂起的进程,从外存调回(激活)内存中,也就是加入对应的非阻塞队列中

7 : 阻塞挂起的进程,等到了事件的发生,可以从阻塞挂起变为就绪挂起,但还是不具备争夺CPU的权限,因为它依旧在外存中

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值