进程调度代码分析
——关于LINUX源代码中进程调度部分的读书报告
在多进程的操作系统中,进程调度是一个全局性、关键性的问题,它对系统的总体设计、系统的的实现、功能设置以及各个方面的性能都有着决定性的影响。根据调度的结果所作的进程切换的速度,也是衡量一个操作系统性能的重要指标。进程调度机制的设计,还对系统的复杂性有着极大的影响,常常会由于实现的复杂程度而在功能与性能方面作出必要的权衡和让步。
一.进程调度的基本原理
一个好的系统的进程调度机制,应当考虑以下几个问题:
(1)公平:保证每个进程得到合理的CPU 时间。
(2)高效:使CPU 保持忙碌状态,即总是有进程在CPU 上运行。
(3)响应时间:使交互用户的响应时间尽可能短。
(4)周转时间:使批处理用户等待输出的时间尽可能短。
(5)吞吐量:使单位时间内处理的进程数量尽可能多。
显然,要同时满足这几个方面是不可能的,所以,形成一个操作系统就必须在这几个方面中做出权衡和必要的取舍,从而确定自己的调度算法。例如:UNIX采用动态优先数调度,5.3BSD采用舵机反馈队列调度,windows采用抢先多任务调度。
为了满足以上五个方面,设计一个进程调度机制时要考虑以下问题:
(1)调度的时机:在什么情况什么时候进行调度;
(2)调度的“政策”(policy):根据什么准则挑选下一个进入运行的进程;
(3)调度的方式:是抢占的,还是非抢占的。
对于一个进程,其状态转换关系图具体如下所示: