首先搞清楚两个概念:作业(用户提交的任务)和进程(作业在处理过程中分成的活动单位)。作业调度是指选择哪一个作业分配资源建立作业对应的进程。
进程调度则确定进程何时取得处理机。
1.作业调度
1.1 作业状态
提交,后备,执行和完成状态。
1.2 作业调度功能
确定数据结构(分配JCB作业控制块)、确定调度算法(由作业调度程序完成)、分配资源(由进程调度程序完成)、善后处理
注:作业调度程序只保证被选中的作业具有使用处理机的资格,而具体的分配由进程调度程序完成
1.3 调度性能的衡量
平均周转时间:周转时间的平均值
平均带权周转时间:带权周转时间的平均值。周转时间和实际执行时间的平均值
1.4 作业调度算法
1) 先来先调度
2)短作业优先调度
3)响应比高者优先 (响应比=1+作业等待时间/执行时间)
4)优先调度算法 按照优先数
2.进程调度
进程调度可细分为调度和分派两个功能,调度负责将进程插入现有队列并且按一定原则保持队列结构。分派程序是将进程从就绪队列中移除并且
建立他的执行的机器状态。
2.1 进程调度的功能
1)记录和保持系统中所有进程的有关情况和状态特征(通过登记PCB控制块的信息)
进程进入就绪队列的排序原则体现了调度算法
2)决定分配策略
由队列排序原则体现
3)实施处理机的分配和回收
2.2 调度方式
抢占式和非剥夺
2.3 CPU受限制的进程和I/O受限制的进程
CPU受限制的进程多为计算量较大的进程,I/O消耗性的进程则为和用户互交性比较高的进程
2.4 进程优先数调度算法
Linux实现了基于动态优先级的方法,一开始,每个进程被设置默认的优先级(Nice值)。如果运行过程中在I/O等待上花费的时间多,说明是
I/O消耗型的进程,则优先级会被动态提高。
时间片是一个轮转调度中一个进程所获得的占用处理机 的时间片段,在一个进程的 时间片变为0时,其处理机的占用权会被抢占。
※下面简单介绍下Linux中优先数和时间片的计算:
调度程序中最基本的数据结构是运行队列。可执行队列是给定处理器上的可执行进程的链表,每个处理器一个。每个运行队列有两个优先级数
组。
一个过期的一个活跃的,在活跃的优先级数组中的进程的时间片全部用尽之后,就被接入过期的优先级数组中,当活跃的优先级数组中已经为空
的时候,就直接把活跃的优先级数组和过期的优先级数组交换。这样Linux的调度核心就是O(1)级的
在动态计算进程的 优先级的时候,Linux通过一个关于静态优先级和进程交互性的函数关系计算而来。交互性强的 程序会获得较多的优先级
奖励,而交互性弱的程序优先级则会比初始优先级低。
在Linux中,通过sleep_avg来记录进程的休眠和执行的时间,如果一个进程休眠时间长,sleep_avg↑,执行则↓。所以如果一个进程占用处
理 器时间大幅上升,则sleep_avg的值下降,要获得更大的优先级。
2.5 循环轮转调度