Linux系统进程调度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统进程调度相关的知识,希望对你有一定的参考价值。

参考技术A

主要参考 :Linux manual page - sched

自从linux内核2.6.23以来,默认的进程调度器就被设置为完全公平调度器(CFS,complete fair scheduler),取代了之前的O(1)调度器。

每个线程都有一个静态调度优先级,即 sched_priority 字段。

一个线程的调度策略决定了线程会被插入到同级静态优先级的线程队列的位置,以及它在队列中会怎样移动。

所有的调度都是可插入的,如果一个更高静态优先级的线程准备好了,现在运行中的线程就会被插入。而调度策略则仅仅影响了同样静态优先级的线程。

进程(线程)可以通过系统调用设置自身或者其他进程(线程)的调度策略。

其中 pid 为0时,设置自身的调度策略和参数。结构体 sched_attr 包含以下字段: size 、 sched_policy (即调度策略,具体会在下一节介绍)、 sched_flags 、 sched_nice 、 sched_runtime 、 sched_deadline 、 sched_period (最后三个为 SCHED_DEADLINE 相关的参数)。当设置成功,系统调用返回0;否则返回-1,并会设置 errno 。

普通进程: SCHED_OTHER / SCHED_BATCH / SCHED_IDLE
实时进程: SCHED_FIFO / SCHED_RR
特殊实时进程: SCHED_DEADLINE
静态优先级:Static_priority:对于普通进程,静态优先级为0;对于实时进程,静态优先级为1-99,99为最高优先级。
动态优先级:Dynamic_priority:仅对普通进程有用,取决于nice和一个动态调整的量(比如进程ready却没被调度,则增加)。

Linux 操作系统原理 — 进程管理 — 进程调度

目录

文章目录

进程调度

进程调度,即 Linux Kernel Scheduler 如何将多个 User Process 调度给 CPU 执行,从而实现 Multi-Processes 的公平竞争和合理分配 CPU 资源。

单核调度场景

在单核环境中,Linux Scheduler 的主要目的是通过合理地分配 CPU 时间片来实现进程的公平竞争和合理利用 CPU 资源。

所以,在单核环境中,Linux Scheduler 通常采用:

  • 时间片轮转算法:指将 CPU 时间划分为若干个时间片,每个进程获得一个时间片的 CPU 时间,当时间片用完后,进程被放

以上是关于Linux系统进程调度的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统编程——进程调度浅析

Linux系统编程Linux进程调度

Linux 操作系统原理 — 进程管理 — 进程调度

Linux 内核Linux 内核体系架构 ( 进程调度 | 内存管理 | 中断管理 | 设备管理 | 文件系统 )

Linux学习笔记:Linux系统的进程调度(任务调度)

第4章 进程调度