从三个方面来谈一谈linux下面的进程调度:
一/进程调度的策略
所谓调度策略是指决定在什么时候以什么方式运行一个新进程,linux下主要基于分时技术(time sharing)和
优先级进行进程调度。
二/调度的算法
1.调度的类型:SCHED_FIFO(先进先出的实时进程) SCHED_RR(时间片轮转的实时进程) SCHED_NORMAL
(普通的分时进程)
2.调度的数据结构: 数据结构runqueue,进程描述符
3.调度程序所用的函数:
scheduler_tich()维持当前最新的time_slice计数器
try_to_wake_up()唤醒睡眠进程
recalc_task_prio()更新进程的动态优先级
schedule()选择要新进程执行
load_balance()维持多处理器系统中运行队列的平衡
三/与调度相关的系统调用
nice()系统调用:允许进程改变它们的基本优先级
getpriority()和setpriority()系统调用:作用于给定组中所有进程的基本优先级
sched_getaffinity和sched_setaffinity系统调用:分别返回和设置CPU进程亲和力掩码,也就是允许执行进程
的CPU的位掩码。改掩码存放在进程描述符的cpus_allowed字段中
与实时进程相关的系统调用
sched_getscheduler()和sched_setscheduler()系统调用:前者查询所表示的进程当前所用的调度策略。后者
既设置调度策略,也设置由参数pid所表示进程的相关参数。
sched_getparam()和sched_setparam()系统调用:前者为pid所表示的进程检索调度参数。后者类似于sched_
setscheduler(),但它不设置policy字段的值。
sched_yield():容许进程在不被挂起的情况下自愿放弃CPU,进程仍然处于TASK_RUNNING状态,若是普通
进程放到过期进程末尾,若是实时进程放在运行队列的末尾。(该调用主要由SCHED_FIFO调用)
sched_get_priority_min()和sched_get_priority_max()系统调用:分别返回最小和最大实时静态优先级的值
,这个值由policy参数所标识的调度策略来使用。
sched_rr_get_interval()系统调用:把参数pid表示的实时进程的轮转时间片写入用户态地址空间的一个结构中
阅读(2031) | 评论(0) | 转发(0) |