调度程序:从就绪进程中选择下一个需要运行的进程的程序。
- 调度程序在web服务器中十分重要
名词解释:
- 吞吐量:系统每小时完成的作业数量
- 周转时间:从一个批处理作业提交时刻开始到完成为止的平均时间。
- CPU利用率:度量批处理系统,单不具有参考价值。
- 最小响应时间:从发出命令到得到相应之间的时间。
进程的分类
- CPU密集型
- I/O密集型:需要运行更多的此类进程保持CPU充分利用
进程调度发生的时间
- 创建新的进程后
- 进程退出过后
- 进程阻塞的时候
- I/O中断发生的时候
时钟中断:硬件的周期性中断
可以在每个时钟中断或者每k个时钟终端的时候,进行调度。根据如何处理时钟中断,分为两大类
- 抢占式调度算法(必须要有可用的时钟)
- 定义:设置一个最大允许时间,当时间到了,进行时钟中断,然后挂起当前进程,调度其他进程运行。
- 非抢占式调度算法
- 定义:选择一个进程,运行至被阻塞或者自动释放CPU
调度算法分类
批处理调度
应用场景:账目处理、薪水处理等周期性的作业,通常都采用非抢占式的算法。
- 非抢占式的先来先服务FCFS:进程按照请求CPU的顺序使用CPU。缺点是CPU和I/O利用很低。
- 非抢占式的最短作业优先调度:当运行时间可以预知的算法。
- 抢占式的最短剩余时间优先:选择剩余运行时间最短的进程运行。
证明:假设有四个作业,运行时间分别为a、b、c、d。第一个作业在时间a结束,第二个作业在a+b结束,第三个作业在a+b+c结束,第四个在a+b+c+d结束。平均周转时间是(4a+3b+2c+d)/4,则可知a对平均值影响最大,故a应该是最短作业。
交互式调度
应用场景:服务器、个人计算机,通常采用抢占式调度算法。
- 抢占式的轮转调度:使用时间片,允许进程在时间片内运行。
时间片设置太短会导致过多的进程切换,降低CPU效率,太长会引起对短的交互请求响应时间变长,一般为20~50ms。
- 优先级调度:每个进程被赋予一个优先级,允许优先级最高的可运行进程先运行。
- 调度程序在每个时钟中断降低当前进程的优先级,防止无休止的运行。
- 多级队列。设置较长的时间片,为最高优先级设置1个时间片,下一级2个,再下一个4个以此类推
- 最短进程优先:让最短的作业先运行。
- 保证调度:向用户做出明确的性能保证。
- **调度:为进程提供各种资源的**,进程的得到的**越多,更可能被调度。
-
公平分享调度:无论一个用户有多少进程存在,每个用户都会得到应有的CPU份额。
使得I/I密集型进程获得较好服务的算法:优先级设置为1/f,f
实时调度
实时系统通常分为软实时和硬实时。硬实时:必须满足绝对的截止时间,软实时:可以容忍偶尔错失截止时间。
- 实时系统的事件分为周期性(规则的时间间隔发生)和非周期性(发生时间不可预知)。
如何判断实时系统是否能被调度? - 假设m个周期时间,事件i以周期 P i P_i Pi发生,并需要 C i C_i Ci秒CPU时间处理一个事件,那么当满足 ∑ i = 0 m C i P i \sum_{i=0}^m\frac{Ci}{Pi} ∑i=0mPiCi ≤ \leq ≤ 1的时候,是可调度的,能被实现。
题外话:线程调度
- 用户级线程
- 在进程A运行时,线程调度程序决定哪个线程运行
- 内核级线程
- 内核选择一个特定的线程,不需要考虑属于哪一个进程。