linux系统中的进程调度

本文介绍了Linux系统中的进程调度机制,包括实时进程与非实时进程的不同调度策略。非实时进程采用SCHED_OTHER策略,按比例共享CPU时间;实时进程则依据SCHED_FIFO或SCHED_RR策略进行调度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux系统中的进程调度:

linux系统支持实时和非实时两种进程,

实时进程采用SCHED_FIFO或者SCHE_RR调度策略,普通进程采用SCHE_OTHER调度策略。在调度算法的实现上,linux内核中每个任务都用task_struct结构体来表示,在该结构中有四个与调度相关的策划那个晕,是rt_proiritypolicyproority(nice)counter。内核调度程序根据这四个成员进行调度。

SVHED_OTHER调度策略中调度器总是选择哪个priority+counter值最大的进程来调度执行。从逻辑上分析,SCHED_OTHER调度策略存在着调度周期(epoch),每一个调度周期中,一个进程的prioritycounter值的大小影响而来当前时刻应该调度哪一个进程来执行,其中priority是一个固定不变的值,在进程创建时就已经确定,它代表了该进程的优先级,也代表着该进程在每个调度周期中能够得到的时间片的多少;counter是一个动态变化的值,它反映了一个进程在当前的调度周期中还剩下的时间片,不再与本调度周期的进程调度。当所有的时间片都用完时,一个调度周期结束,周而复始。在2.4内核版本以上的内核中,prioritynice取代,但二者类似。

所以SCHRD_OTHER调度策略本质上是一种比例共享的调度策略,它的这种设计方法能够保证进程调度的公平性——一个低级优先级的进程在每个epoch中欧冠也会得到自己应得的CPU时间,也提供了不同优先级别的区分,具有较高的priority值的进程能够获得更多的饿CPU时间片

实时进程使用的是基于实时优先级rt_priority的优先级调度策略,但根据不用的调度策略,同一实时优先级的进程之间的调度方法有所不同:

(1) ECHED_FIFO:不同的进程根据静态优先级进行排队,然后再同一个优先级的队列中,谁先准备好运行就点调度谁,并且正在运行的进程不会被终止直到以下情况发生;

a.被拥有更高优先级的进程所抢占CPU

b.自己因为资源请求而阻塞

c.自己主动放弃CPU(调用sched_yield

(2) SCHED_RR:这种调度策略跟上面的一样,除了给每个进程分配一个时间片。时间片到了正在执行的进程就放弃执行;时间片的程度可以通过sched_rr_get_intrval.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值