Linux内核使用哪些调度算法?

20

Linux内核使用哪些调度算法?

我该在哪里获取有关Linux内核的更多信息?(操作系统初学者水平)


1
你是指 Linux 内核使用的“调度算法”吗? - Austin Salonen
也许我的英语不太好。我的意思是,FCFS、轮转或者其他使用Linux内核来处理进程的调度算法。 - Nick
这个页面有点老了,但是可以尝试阅读一下(http://web.archive.org/web/20141016155917/http://oreilly.com/catalog/linuxkernel/chapter/ch10.html)。 (此前已经发布过一个单独的答案,获得了4个赞。不幸的是,这个网站对于这样有用的答案的政策,即使是那些帮助人们7年的答案,也应该被删除...) - user200783
8个回答

7

注意: 此回答是关于IO队列调度器的,而不是进程。

如果您只想检查您的Linux系统正在使用哪个调度程序以及可用的调度程序,您可以运行以下命令:

cat /sys/block/sda/queue/scheduler

方括号中的是当前使用的语言,其他语言也可用。 要更改语言:

sudo bash -c 'echo deadline > /sys/block/sda/queue/scheduler'

请注意将其设置回默认值,除非您知道自己在做什么并且想要这样做。
默认值(至少在新版Ubuntu发行版中)是CFQ(完全公平调度):
http://en.wikipedia.org/wiki/CFQ
创作者Jens Axboe的采访:
http://kerneltrap.org/node/7637

1
记录一下,这个回答完全是误导性的,应该在回答中包含这是一个io排队调度程序,而不是针对进程的,在使用SSD的系统中根本不会启用它,并且在指定的文件中将显示[none]。 - Abdullah Shahin

7

Linux内核有多种不同的可用调度算法,既用于进程调度,也用于I/O调度。从www.kernel.org下载并调用它。

make menuconfig

你将获得一个内置帮助的所有可用选项的完整列表。 曾经提出过他的O(1)调度程序的人是Con Kolivas。一定要看看他做了什么。这曾经是一个巨大的突破。

3
请在menuconfig中提及调度程序所在的类别。 - recluze

2

正如其他人已经提到的,根据预期用途,有几种可用的调度算法。

如果您想了解Linux中的调度,请查看此文章


1

1

0

现代GNU/Linux发行版使用CFS(完全公平调度器)。您可以在本书的第4章中了解更多信息: Robert Love的Linux内核开发第3版

您将在那里找到许多有趣且易于理解的解释。我很喜欢。


0

我认为Linux内核实际上有几个不同的调度器可以在编译时选择。要了解更多关于Linux内核的信息,您可以下载内核源代码(或在线浏览),并查看Documentation目录。例如,scheduler子目录可能会有所帮助。当然,您也可以直接查看代码本身。


IO调度器有不同的算法。而进程调度器则没有。 - Kristof Provost

-1

Linux内核主要允许三种不同的调度算法:

  1. 最短作业优先
  2. 轮转调度
  3. 基于优先级的抢占式调度算法。

第三种调度方法与较低版本的Linux版本(如2.4)有所不同。


2
它如何在不事先知道作业持续时间的情况下执行SJF? - pinkpanther
它观察他们过去的行为,并相应地将它们在优先级队列中向上或向下移动。 - Maria
答案非常基础。您需要更仔细地查看和详细研究最新的内核版本。 - Vinod Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接