linux进程调度方法
2010-06-21 21:50
204 查看
linux
内核的三种调度方法:
1
,
SCHED_OTHER
分时调度策略,
2
,
SCHED_FIFO
实时调度策略,先到先服务
3
,
SCHED_RR
实时调度策略,时间片轮转
http://www.myfaq.com.cn/2005September/2005-09-13/199638.html
linux
内核的三种调度方法:
1
,
SCHED_OTHER
分时调度策略,
2
,
SCHED_FIFO
实时调度策略,先到先服务
3
,
SCHED_RR
实时调度策略,时间片轮转
实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过
nice
和
counter
值决定权值,
nice
越小,
counter
越大,被调度的概率越大,也就是曾经使用了
cpu
最少的进程将会得到优先调度。
SHCED_RR
和
SCHED_FIFO
的不同:
当采用
SHCED_RR
策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列 尾。放在队列尾保证了所有具有相同优先级的
RR
任务 的调度公平。
SCHED_FIFO
一 旦占用
cpu
则一直运行。一直运行直到有更高优先级任务到达或自己放弃。
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样
的)已经准备好,
FIFO
时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。 而
RR
可以让每个任务都执行一段时间。
相同点:
RR
和
FIFO
都只用于实时任务。
创建时优先级大于
0(1-99)
。
按照可抢占优先级调度算法进行。
就绪态的实时任务立即抢占非实时任务。
所有任务都采用
linux
分 时调度策略时。
1
,创建任务指定采用分时调度策略,并指定优先级
nice
值
(-20~19)
。
2
,将根据每个任务的
nice
值 确定在
cpu
上的执行时间
(counter)
。
3
,如果没有等待资源,则将该任务加入到就绪队列中。
4
,调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的 计算
(counter+20-nice)
结果,选择计算结果最大的一个去运行,当这个时间片用完后
(counter
减至
0)
或者主动放弃
cpu
时,该任务将被放在就绪队列末尾
(
时间片用完
)
或等待队列
(
因等待资源而放弃
cpu)
中。
5
,此时调度程序重复上面计算过程,转到第
4
步。
6
,当调度程序发现所有就绪任务计算所得的权值都为不大于
0
时,重复第
2
步。
所有任务都采用
FIFO
时,
1
,创建进程时指定采用
FIFO
, 并设置实时优先级
rt_priority(1-99)
。
2,
如果没有等待资源,则将该任务加入到就绪队列中。
3
,调度程序遍历就绪队列,根据实时优先级计算调度权值
(1000+rt_priority),
选择权值最高的任务使用
cpu
,该
FIFO
任务将一直占有
cpu
直到有优先级更高的任务就绪
(
即使优先级相同也不行
)
或者主动放弃
(
等待资源
)
。
4
,调度程序发现有优先级更高的任务到达
(
高优先级任务可能被中断或定时器任务唤醒,再或被当前运行的任务唤醒,等等
)
,则调度程序立即在当前任务堆栈中保存当前
cpu
寄存器的所有数据,重新从高优先级任务的堆栈中加载寄存器数据到
cpu
,此时高优先级的任务开始运行。重复第
3
步。
5
,如果当前任务因等待资源而主动放弃
cpu
使 用权,则该任务将从就绪队列中删除,加入等待队列,此时重复第
3
步。
所有任务都采用
RR
调度 策略时
1
,创建任务时指定调度参数为
RR
,并设置任务的实时优先级和
nice
值
(nice
值将会转换为该任务的时间片的长度
)
。
2
,如果没有等待资源,则将该任务加入到就绪队列中。
3
,调度程序遍历就绪队列,根据实时优先级计算调度权值
(1000+rt_priority),
选择权值最高的任务使用
cpu
。
4
,如果就绪队列中的
RR
任务 时间片为
0
,则会根据
nice
值设置该任务的时间片,同时将该任务放入就绪队列的末尾。重复步 骤
3
。
5
,当前任务由于等待资源而主动退出
cpu
, 则其加入等待队列中。重复步骤
3
。
系统中既有分时调度,又有时 间片轮转调度和先进先出调度
1
,
RR
调度和
FIFO
调度的进程属于实时进程,以分时调度的进程是非实时进程。
2
,当实时进程准备就绪后,如果当前
cpu
正 在运行非实时进程,则实时进程立即抢占非实时进程。
3
,
RR
进程和
FIFO
进程都采用实时优先级做为调度的权值标准,
RR
是
FIFO
的一个延伸。
FIFO
时,如果两个进程的优先级一样,则这两个优先级一样的进程具体执 行哪一个是由其在队列中的未知决定的,这样导致一些不公正性
(
优先级 是一样的,为什么要让你一直运行
?),
如果将两个优先级一样的任务的调度策略都设为
RR,
则保证了这两个任务可以循环执行,保证了公平。
内核的三种调度方法:
1
,
SCHED_OTHER
分时调度策略,
2
,
SCHED_FIFO
实时调度策略,先到先服务
3
,
SCHED_RR
实时调度策略,时间片轮转
http://www.myfaq.com.cn/2005September/2005-09-13/199638.html
linux
内核的三种调度方法:
1
,
SCHED_OTHER
分时调度策略,
2
,
SCHED_FIFO
实时调度策略,先到先服务
3
,
SCHED_RR
实时调度策略,时间片轮转
实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过
nice
和
counter
值决定权值,
nice
越小,
counter
越大,被调度的概率越大,也就是曾经使用了
cpu
最少的进程将会得到优先调度。
SHCED_RR
和
SCHED_FIFO
的不同:
当采用
SHCED_RR
策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列 尾。放在队列尾保证了所有具有相同优先级的
RR
任务 的调度公平。
SCHED_FIFO
一 旦占用
cpu
则一直运行。一直运行直到有更高优先级任务到达或自己放弃。
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样
的)已经准备好,
FIFO
时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。 而
RR
可以让每个任务都执行一段时间。
相同点:
RR
和
FIFO
都只用于实时任务。
创建时优先级大于
0(1-99)
。
按照可抢占优先级调度算法进行。
就绪态的实时任务立即抢占非实时任务。
所有任务都采用
linux
分 时调度策略时。
1
,创建任务指定采用分时调度策略,并指定优先级
nice
值
(-20~19)
。
2
,将根据每个任务的
nice
值 确定在
cpu
上的执行时间
(counter)
。
3
,如果没有等待资源,则将该任务加入到就绪队列中。
4
,调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的 计算
(counter+20-nice)
结果,选择计算结果最大的一个去运行,当这个时间片用完后
(counter
减至
0)
或者主动放弃
cpu
时,该任务将被放在就绪队列末尾
(
时间片用完
)
或等待队列
(
因等待资源而放弃
cpu)
中。
5
,此时调度程序重复上面计算过程,转到第
4
步。
6
,当调度程序发现所有就绪任务计算所得的权值都为不大于
0
时,重复第
2
步。
所有任务都采用
FIFO
时,
1
,创建进程时指定采用
FIFO
, 并设置实时优先级
rt_priority(1-99)
。
2,
如果没有等待资源,则将该任务加入到就绪队列中。
3
,调度程序遍历就绪队列,根据实时优先级计算调度权值
(1000+rt_priority),
选择权值最高的任务使用
cpu
,该
FIFO
任务将一直占有
cpu
直到有优先级更高的任务就绪
(
即使优先级相同也不行
)
或者主动放弃
(
等待资源
)
。
4
,调度程序发现有优先级更高的任务到达
(
高优先级任务可能被中断或定时器任务唤醒,再或被当前运行的任务唤醒,等等
)
,则调度程序立即在当前任务堆栈中保存当前
cpu
寄存器的所有数据,重新从高优先级任务的堆栈中加载寄存器数据到
cpu
,此时高优先级的任务开始运行。重复第
3
步。
5
,如果当前任务因等待资源而主动放弃
cpu
使 用权,则该任务将从就绪队列中删除,加入等待队列,此时重复第
3
步。
所有任务都采用
RR
调度 策略时
1
,创建任务时指定调度参数为
RR
,并设置任务的实时优先级和
nice
值
(nice
值将会转换为该任务的时间片的长度
)
。
2
,如果没有等待资源,则将该任务加入到就绪队列中。
3
,调度程序遍历就绪队列,根据实时优先级计算调度权值
(1000+rt_priority),
选择权值最高的任务使用
cpu
。
4
,如果就绪队列中的
RR
任务 时间片为
0
,则会根据
nice
值设置该任务的时间片,同时将该任务放入就绪队列的末尾。重复步 骤
3
。
5
,当前任务由于等待资源而主动退出
cpu
, 则其加入等待队列中。重复步骤
3
。
系统中既有分时调度,又有时 间片轮转调度和先进先出调度
1
,
RR
调度和
FIFO
调度的进程属于实时进程,以分时调度的进程是非实时进程。
2
,当实时进程准备就绪后,如果当前
cpu
正 在运行非实时进程,则实时进程立即抢占非实时进程。
3
,
RR
进程和
FIFO
进程都采用实时优先级做为调度的权值标准,
RR
是
FIFO
的一个延伸。
FIFO
时,如果两个进程的优先级一样,则这两个优先级一样的进程具体执 行哪一个是由其在队列中的未知决定的,这样导致一些不公正性
(
优先级 是一样的,为什么要让你一直运行
?),
如果将两个优先级一样的任务的调度策略都设为
RR,
则保证了这两个任务可以循环执行,保证了公平。
相关文章推荐
- linux进程调度方法SCHED_OTHER,SCHED_FIFO,SCHED_RR
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- Linux任务调度进程crontab的使用方法和注意事项
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- linux进程调度方法SCHED_OTHER,SCH…
- Linux 技巧:让进程在后台可靠运行的几种方法 用 cron 和 at 调度作业 使用 screen 管理你的远程会话
- Linux任务调度进程crond命令的使用方法和注意事项
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- linux进程调度方法
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- 操作系统 linux 内核的三种进程调度方法
- linux进程调度方法简述
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- linux进程调度方法简述
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR) .
- linux进程调度方法(SCHED_OTHER,SCHED_FIFO,SCHED_RR)
- Linux中的进程调度方法简介