现代操作系统学习笔记-调度

0.调度算法的目标

所有系统
  • 公平-给每个进程公平的CPU份额
  • 策略强制执行-看到所宣布的策略执行
  • 平衡-保持系统的所有部分都忙碌
批处理系统
  • 吞吐量-每小时最大作业数
  • 周转时间-从提交到终止间的最小时间
  • CPU利用率-保持CPU始终忙碌
交互式系统
  • 响应时间-快速响应请求
  • 均衡性-满足用户的期望
实时系统
  • 满足截止时间-避免丢失数据
  • 可预测性-在多媒体系统中避免品质降低

一.批处理系统中的调度

1.先来先服务

先到来的服务,系统先对其进行服务 FIFO

2.短作业优先

评估当前作业中,运行时间最短的作业优先服务

  • 能够提前掌握作业的运行时间
  • 只有所有作业是同时运行时调度才是最优的
3.最短剩余时间优先

当一个作业到达时,评估当前系统中作业的剩余时间和该作业所需时间,选择剩余时间最小的进行调度

  • 能够提前掌握作业的运行时间

二.交互式系统中的调度

1.轮转调度

每个进程被分配一个时间片,如果时间片内没做完则强制切换,提前做完提前切换

  • 进程切换(上下文切换)需要cpu时间
  • 时间片太短,频繁切换影响效率;时间片太长,可能使短交互请求响应时间变长
  • 时间片长度相同

2.优先级调度

每个进程拥有不同的优先级,优先调度优先级高的进程,同优先级的进程采用轮转调度。

  • 时间片长度相同

3.多级队列

调度系统拥有不同优先级的队列,每个队列的时间片长度不同,进程依情况加入不同的队列中,调度中的进程可能由于时间片用完导致转移到较低级别队列

  • 目的是最大可能的减少切换,同时又不影响高优先级的响应时间

注:伯克利XDS940分4个优先级 中断、I/O,短时间片,长时间片

4.最短进程优先

从当前可用进程中找出最短的一个进程进行调度
评估算法为 T0=aT0+(1a)T1
a :权值
T0:当前估计时间
T1 :测量其下一次运行时间

  • 这种通过当前测量值和先前估计值进行加权平均而得到下一次估计值的技术称作老化
  • 权值( a )越高老化的越慢,反之越快

5.保证调度

保证n个进程/用户获得CPU处理能力的1n,选择 k 最低的进程进行调度,直到其值小于最近接该进程的竞争者
比率计算 k=T0T1
T0 :实际获得时间,进程自创建以来该进程实际获得时间
T1 :应得时间,进程自创建以来过去的时间除以n

  • 在运行中动态的保证

6.彩票调度

每个进程拥有f份彩票,所有进程总彩票为m,则每个进程的被调度几率为 fm

  • 在一些其他方法不易解决的问题中,此方法有易理解的优势
  • 例如:视频服务器的若干进程为客户提供服务,每个进程的帧数率为10、20、25帧,则给每个进程10 20 25份彩票,最终CPU划分将以10:20:25进行划分

7.公平分享调度

在进程调度前先判断进程的所有者是谁,以保证用户之间的调度公平

三.实时系统中的调度

可调度:满足 mi=1CiPi1
miPiCi

  • 硬实时:必须满足绝对截止时间
  • 软实时:偶尔可以容忍
  • 根据事件是否以规则时间间隔发生,将事件分为周期性和非周期性

四.策略与机制

为了使用户进程参与有关调度决策,可以将调度机制与调度策略分离,也就是将调度算法以某种形式参数化,而参数可以由用户进程填写

五.线程调度

线程调度的分类:分为用户级线程内核级线程

1.用户级线程

  • 调度系统(内核)决定哪个进程获得时间片
  • 进程中的线程调度程序决定具体线程运行
  • 同一时间片只会有该进程的线程运行
  • 不必修改内存映像,不清除高速缓存内容
  • 可使用自定制的线程调度
  • 某线程的I/O阻塞时,整个进程可能被挂起
  • 缺乏一个时钟对线程中断(例如某个线程相对运行过长)

2.内核级线程

  • 内核直接选择一个线程运行
  • 切换不同的线程时,需要完整的上下文切换
  • 线程阻塞在I/O上不需要挂起整个进程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 在linux下编写一个应用程序,命名为an_ch2_1b。这个程序不断地输出如下行:Those output come from child,[系统时间] 另外写一个应用程序,命名为an_ch2_1a。这个程序创建一个子进程,执行an_ch2_1b。这个程序不断地输出如下行: Those output come from child,[系统时间] 观察程序运行的结果,并对你看到的现象进行解释。 2. 在linux环境下编写一个控制台应用程序,程序中有一个共享的整型变量shared_var,初始值为0;创建一个线程并使其立即与主线程并发执行。新创建的线程与主线程 均不断地循环,并输出shared_var 的值。主线程在循环中不断地对shared_var 进行加1操作,即每次循环shared_var 被加1;而新创建的线程则不断地对shared_var 进行减1 操作,即每次循环shared_var 被减1。观察程序运行的结果,并对你看到的现象进行解释。 理发师问题的描述:一个理发店接待室有n张椅子,工作室有1张椅子;没有顾客时,理发师睡觉;第一个顾客来到时,必须将理发师唤醒;顾客来时如果还有空座的话,他就坐在一个座位上等待;如果顾客来时没有空座位了,他就离开,不理发了;当理发师处理完所有顾客,而又没有新顾客来时,他又开始睡觉。 1. 实现一个“difftree”命令,其功能是比较两个目录下的文件结构和文件信息。当在命令行方式下执行“difftree ”命令时,能够比较目录dir1和 目录dir2是否具有相同的结构,对相同的部分,进一步比较相同文件名的文件内容。列出比较的文件系统结构图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值