2.5 操作系统 进程调度

一、进程调度算法

先来先服务——短作业优先——最短剩余时间优先——优先级调度——时间片轮转——多级反馈队列调度(每个队列的时间片长度不一样)

二、进程调度器

确保CPU时间片能在各个进程间合理分配,最大化系统资源利用率,同时考虑进程的响应时间。一个进程只属于一个调度器。

调度器是 CPU 中央处理器的管理员,主要负责做两件事情:

一、选择某些就绪进程执行。

二、是打断某些执行的进程让它们变为就绪状态。

调度器分配CPU时间的基本依据:进程的优先级。

上下文切换(context switch ):负责存储和切换被切换掉之前的CPU 状态。

三、调度策略

#define SCHED_NORMAL        0
#define SCHED_FIFO        1
#define SCHED_RR        2
#define SCHED_BATCH        3
#define SCHED_IDLE        5
#define SCHED_DEADLINE        6

CHED_NORMAL:定义了普通进程调度策略,即非实时调度策略。在Linux内核中,使用完全公平调度器来实现,它旨在为所有进程提供公平的CPU时间分配,依据进程的nice值(优先级)和虚拟运行时间来平衡各进程的执行机会。

SCHED_FIFO:代表先进先出(First In, First Out)的实时调度策略。在该策略下,实时进程按到达就绪队列的顺序执行,具有该调度策略的进程一旦获得CPU就不会被更低优先级的进程抢占,除非自身主动释放CPU,或者有更高优先级的SCHED_FIFO或SCHED_RR实时进程变得可运行。

SCHED_RR:轮转(Round Robin)实时调度策略,类似于SCHED_FIFO,但是实时进程在一个时间片(quantum)结束之后会被放置到同优先级实时进程队列的末尾,等待再次轮到自己执行,这样保证同一优先级的实时进程可以轮流获得执行机会。

SCHED_BATCH:批处理调度策略,适用于CPU密集型且对响应时间要求不高的批处理作业。使用此策略的进程会尽量减少上下文切换,从而提高CPU缓存的局部性并减少开销,有利于提高整体系统吞吐量。 SCHED_IDLE:空闲调度策略,应用于低优先级后台任务。这类任务只有在系统完全空闲时才会得到执行,不会影响其他任何进程的调度。

SCHED_DEADLINE:截止期限(Deadline)调度策略,专为那些有严格截止时间约束的进程设计。此类进程需要在预设的截止时间内完成计算任务,调度器会确保进程在规定时间内获得足够的CPU资源来满足其执行需求。

四、任务优先级

task_struct结构体中采用三个成员表示进程的优先级: prio 和 normal_prio 表示动态优先级,static_prio 表示进程的静态优先级。权重越大的进程获得的虚拟运行时间越小,那么它将被调度器所调度的机会就越大

内核将任务优先级划分,范围是0 到 MAX_RT_PRIO-1 (即 99 ),而范围是从 MAX_RT_PRIO 到 MAX_

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++/嵌入式开发 秋招面经 文章被收录于专栏

一名985硕,在25年秋招中斩获多个C++/嵌入式开发Offer。本专栏将分享我的面经,涵盖C/C++、操作系统、计算机网络、ARM体系与架构、Linux应用/驱动开发、Qt、通信协议及开发工具链等核心内容。

全部评论
进程调度总结的真好
点赞 回复 分享
发布于 04-03 00:22 河北
红黑树实现细节
点赞 回复 分享
发布于 04-03 00:13 河北
欢迎订阅专栏《C++/嵌入式开发 秋招面经》 :https://www.nowcoder.com/creation/manager/columnDetail/MKaoll
点赞 回复 分享
发布于 03-30 17:09 河北

相关推荐

评论
5
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务