进程调度/内存页面置换

1.当进程从运行状态转到等待状态;

2.当进程从运行状态转到就绪状态;

3.当进程从等待状态转到就绪状态;

4.当进程从运行状态转到终止状态;

1、4为非抢占式调度,2、3为抢占式调度

非抢占式:当进程正在运行时,不会让出CPU使用权,直到该进程完成或发生某个时间而被阻塞

抢占式:当进程正在运行时,会被迫出让CPU使用权,时间片原则、优先权原则、短作业优先原则三种

调度算法影响等待时间(进程在就绪队列中等待调度的时间总和),不能影响进程使用CPU的时间和IO的时间

先来先服务调度算法(FCFS)

先来后到,知道进程完成或被阻塞,才会继续从就绪队列中选择一个进程接着运行

对短作业不利,对长作业有利,使用于CPU繁忙型作业的系统,不适用于IO繁忙型作业的系统

最短作业优先调度算法(SJF)

优先选择运行时间最短的进程来运行,有利于提高系统的吞吐量

如果持续有短作业进入就绪队列,长作业则会饥饿甚至饿死

对长作业不利,对短作业有利

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

每次进行进程调度时,先计算响应比优先级,然后运行响应比优先级最高的进程投入运行

优先权=(等待时间+要求服务时间)/要求服务时间

可兼顾长作业和短作业

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

最古老、简单、公平、使用最广

每个进程被分配一个时间段,成为时间片,允许该进程在该时间段中运行

时间片到和进程结束和阻塞,CPU使用权都会切换

时间片太短会导致过多的进程切换,降低CPU效率

时间片太长会引起短作业进程的响应时间变长

所以通常设时间片为20~50ms

最高优先级调度算法(HPF)

从就绪队列中选出优先级最高的进程运行

  • 静态优先级:创建优先级时已经确定了优先级,在接下来的整个运行时间优先级都不会发生变化

  • 动态优先级:根据进程的动态变化调整优先级,如果进程的运行时间增加,则降低其优先级,如果进程等待时间(就绪队列的等待时间)增加,则提高其优先级,即随着时间的推移增加等待进程的优先级

  • 可分为非抢占式和抢占式

可能导致低优先级的进程饥饿

多级反馈队列调度算法(MFQ)

是时间片轮转和最高优先级的综合发展

  • 设置多个队列,赋予不同优先级,每个队列优先级从高到低,同时优先级越高时间片越短

  • 新的进程会被放入第一级队列二末尾,按先来先服务的原则排队等待被调度,如果在第一梯队规定的时间片没运行完成,则将其转入第二级队列的末尾,以此类推

  • 当较高优先级的队列为空,才调度优先级较低的队列中的进程运行。如果进程运行时,有新进程进入较高优先级的队列,则停止当前运行的进程并将其移入到原队列末尾,接着让较高优先级的进程运行

对于短作业,可以很快在高优先级队列处理

对于长作业,移入低级队列等待下次执行,虽然等待时间变长了,但是运行时间变得更长了

内存页面置换算法

缺页异常(中断)

当CPU访问的页面不在物理内存时,会产生一个缺页中断,请求操作系统将所缺页调入到物理内存。那它与一般中断的主要区别在于:

  • 缺页中断在指令执行期间产生和处理中断信号,一般中断在指令执行完成后检查和处理中断信号

  • 缺页中断返回到该指令的开始重新执行该指令,一般中断返回回到该指令的下一个指令执行

缺页中断流程:

1.CPU寻找指令对应页表项

2.如果页表项的状态位是无效的,则CPU发送缺页中断请求

3.操作系统收到缺页中断请求,执行缺页中断处理函数,先查找该页面在磁盘中的页面的位置

4.找到磁盘中对应的页面后,在物理内存中找到空闲页,再把页面换入到物理内存中

5.换入完成后,修改页表项中的状态位修改为有效

6.CPU重新执行导致缺页异常的指令

对于第4步,如果再物理内存中找不到空闲页,说明内存已满,需要页面置换算法选择一个物理页,如果该物理页为脏页(被修改过),则把它换出到磁盘,然后把该被置换出去的页表项的状态位改为无效,最后把正在访问的页面装入到这个物理页中

页表项包含页号,物理页号,状态位,访问字段,修改位,硬盘地址

访问字段勇于记录该页再一段时间内被访问的次数,供页面置换算法选择出页面时参考

修改位表示再调入内存后是否有被修改过,即是否为脏页,如果不是脏页,在置换该页时就不需要将该页写回到磁盘上,以减少系统的开销

硬盘地址用于指出该页在硬盘上的地址,通常是物理块号,供调入该页时使用

页面置换算法的功能是,当出现缺页异常,需要调入新页面而内存已满时,选择被置换的物理页面

最佳页面置换算法(OPT)

先进先出置换算法(FIFO)

最近最久未使用的置换算法(LRU)

时钟页面置换算法(Lock)

最不经常置换算法(LFU)

最佳页面置换算法

置换在未来的最长时间不访问的页面

无法预测每个页面在下一次访问前的等待时间,所以该算法用来衡量其他置换算法的效率

先进先出置换算法

选择在内存中驻留时间很长的页面进行置换

性能较差

最近最久未使用置换算法

选择最长时间没有被访问的页面进行置换,即假设很久没有使用的页面很有可能在未来很长一段时间也不会被使用

若要实现则代价很高,因为要在内存中维护一个所有页面的链表,最近最多使用的页面在表头,每次访问内存都要更新整个链表,找到对应链表并删除,再把它移动到表头是代价非常大的,十分费时,所以实际应用中较少使用

时钟页面置换算法

把所有页面都保存在一个环形链表中,一个表针指向最老的页面,发生缺页中断时,检查表针指向的页面

  • 如果它的访问位是0就淘汰该页面,并把新的页面插入到这个位置,然后把指针前移一个位置

  • 如果访问位是1就清除访问位并把表针前移一个位置,重复直到找到一个访问位为0的页面为止

最不常使用算法

发生缺页中断时,选择访问次数最少的那个页面,并将其淘汰

对每一个页面设置一个访问计数器,每当一个页面被访问时,其访问计数器加1,在发生缺页中断时,淘汰计数器值最小的那个页面

要增加一个计数器,硬件成本高。如果链表长度很大,查询最小的过程十分耗时,效率不高

假如一些页面再过去一段时间访问频率很高,导致计数器值很大,但是现在已经没有访问了,在发生缺页中断时可能会淘汰当前开始频繁访问,但访问次数还不高的页面

解决办法:定期减少访问的次数,比如发生时间中断时,把过去时间访问的页面的访问次数除以2,即随着时间的流逝,以前高访问次数的页面会慢慢减少,增大被置换的概率

磁盘调度算法

为了提高磁盘的访问性能,一般是优化磁盘的访问请求顺序

磁盘访问最耗时的是寻道,如果优化的当,可以节约不必要的寻道时间,从而提高磁盘的访问性能

先来先服务算法

最短寻道时间优先算法

扫描算法

循环扫描算法

LOOK 与 C-LOOK 算法

先来先服务(FCFS)

最简单粗暴的方式,如果大量进程竞争使用磁盘,请求访问的磁道可能会很分散,该算法性能就会很差,因为寻道时间过长

最短寻道时间优先(SSF)

优先选择从当前磁头位置所寻道时间最短的请求

如果请求都集中在某一区域,可能会导致另一区域的请求发生饥饿

产生饥饿的原因是磁头在一小块区域来回移动

扫描算法(Scan)

磁头在一个方向上移动,访问所有未完成的请求,知道磁头到达该方向上的最后的磁道,才调换方向,也叫做电梯算法

性能较好,不会产生饥饿,但中间部分的磁道的响应频率较高,每个磁道的响应频率存在差异

循环扫描算法(CSCAN)

只有磁头朝某个特定方向移动时,才处理磁道访问请求,而返回时直接快速移动至最靠边缘的磁道,也就是复位磁头,这个过程是很快的,返回过程中不处理任何请求,该算法的特点,就是磁道只响应一个方向上的请求

循环扫描算法相比于扫描算法,对于各个位置磁道响应频率相对比较平均

LOOK与C-LOOK算法

优化扫描算法和循环扫描算法

这两算法都是磁头移动到磁盘最始端或最末端才开始调换方向

优化为 磁头移动到最远的请求位置,然后立即反向移动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值