您的位置:首页 > 运维架构 > Linux

linux进程调度

2011-07-22 17:28 260 查看
调度---从就绪的进程选出最适合的一个来执行。
知识点-----
1---调度策略
2---调度时机
3---调度步骤

调度策略--------
SCHED_NORMAL(SCHED_OTHER):普通的分时进程
SCHED_FIFO---先入先出的实时进程
SCHED_RR---时间片轮转的实时进程
SCHED_BATCH----批处理进程
SCHED_IDLE----只有在系统空闲时才能够被调度执行的进程。

一个进程会选择以上的一种来调度,而不是说整个系统都是采用的某种调度。

调度类------它的引入增强了内核调度程序的可扩展性,这些类(调度程序模块)封装了调度策略,并将调度策略模块化。
CFS调度类---在kernel/sched_fair.c中实现用于以下调度策略---
SCHED_NORMAL  SCHED_BATCH  SCHED_IDLE

实时调度类---在kernel/sched_rt.c中实现用于SCHED_RR  SCHED_FIFO策略。

调度类
struct sched_class
{
...........................
struct task_struct *(*pick_next_task) (struct rq *rq)

...............................

}
pick_next_task------选择下一个要运行的进程。

调度时机----调度什么时候发生?即schedule()函数什么时候被调用。
调度发生的方式----
1--主动式
在内核中直接调用schedule()。当进程需要等待资源而暂时停止运行时,会把状态置于挂起(睡眠),并主动请求调度,让出cpu。
主动放弃cpu例子:
1---current->state=TASK_INTERRUPTIBLE
2---schedule()

2被动式(抢占)
用户抢占----2.4----2.6
内核抢占---2.6

用户抢占发生在-------
从系统调用返回用户空间。
从中断处理程序返回用户空间。

内核即将返回用户空间的时候,如果need_resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux struct class 扩展