三状态进程模型

很容易想到,一个进程可以处于两种状态:运行态和非运行态。在非运行态中,有的进程在等待某些事件完成(如:I/O设备)后才能执行,称为阻塞或等待态,有的进程运行条件都已经满足,只差 CPU 资源就可以运行,称为就绪态。因此我们引入三状态进程模型。

三状态进程模型

              图1:三状态模型

  • 运行态:进程正在运行。
  • 非运行态:a. 就绪态:进程获得了除处理器以外所有运行所需的资源,得到处理器资源即可运行。
               b. 阻塞态:进程由于等待某一事件的出现而暂停。
  • 新建态:进程正在被创建,内存控制块还没有加入到就绪队列之前的状态。
  • 退出态:进程正在结束,系统在回收资源。

从进程运行的周期来看,核心的状态是 运行,就绪,阻塞。另外还加入了新建和退出态。

三种状态之间的转换

  • 新建态  →  就绪态:进程被创建后,放在就绪队列里。
  • 分派(就绪态 → 运行态):OS从就绪队列中选择一个进程运行(调度算法),又被称为调度。
  • 超时(运行态 → 就绪态):为了防止进程独占CPU,OS规定当程序运行时间达到规定最大值(时间片)时,响应中断将其放置到就绪队列中。
  • 等待事件(运行态 → 阻塞态):由于进程请求某种事件(如:I/O设备)而进入阻塞状态。
  • 事件发生(阻塞态 → 就绪态):当某种事件发生时,处于阻塞队列中等待这个事件的所有进程被转换到就绪队列中。
  • 运行态  →  退出态:程序退出。

注:抢占(运行态 → 就绪态):如果操作系统给某个进程赋予不同的优先级,假设A , B 两个进程,A优先级大于B,且B处于阻塞状态,当进程A运行时,B等待的事件发生了,则将B转为就绪态。由于B优先级大于A, OS将CPU资源分派给进程B,进程A变成就绪态,我们说进程B抢占了进程A。

模型怎样工作

  • 进程创建后被加入到就绪态。
  • CPU每次从就绪态选择一个优先级最高的进程执行。
  • 当一个正在运行的进程发生以下情况时,被给予不同的处理。
    • 终      止  →   转到退出态
    • 等待事件  →   转到阻塞态
    • 超     时   →   转到就绪态
  • 当某个事件发生时,产生中断,OS将所有处于等待这个事件的进程转换为就绪态。

可以观察到,操作系统从就绪态选择某个进程执行,再将其放入到阻塞态或就绪态(图2左),如此循环。只有当某个事件发生时,才将事件所对应的阻塞进程转换为就绪态,借接着又去执行循环(图2右)。

            图2:模型工作框图

通过一个例子来理解:假设有进程A, 在程序运行时有I/O设备访问,访问完成后程序退出。注:调度时OS根据优先级选择进程执行,不是进程A刚从阻塞队列放置到就绪队列,就去执行它,中间有可能执行了很多其他进程。

                      图:进程A执行过程

三状态进程队列模型

我们可以用队列实现:由三状态进程模型,可以将就绪态和阻塞态用两个队列实现。如:图 a)单一的阻塞队列。

多队列的优势:当进程较多时,OS会频繁的遍历队列,例如当某个事件发生时,需要遍历阻塞队列所有的进程,将请求该事件的进程置为就绪态;当调度时,也需要遍历队列选择优先级最高的。因此可以使用多队列,提高运行速度。

  • 一个事件对应一个队列,当事件发生时,直接将该事件队列所有进程放到就绪队列里。
  • 一个优先级对应一个队列,调度时,先执行优先级最高队列里的进程,队列为空时,执行优先级低的。

        图3:多阻塞队列,就绪队列也可以使用多队列。

声明:以上内容整理自 《操作系统精髓与设计原理(原书第6版)》 参考 学堂在线 操作系统(清华大学)

本文为作者原创,转载请注明出处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值