【问题标题】:Which data structure is used for ready queue in operating system?操作系统中的就绪队列使用哪种数据结构?
【发布时间】:2017-09-20 08:03:31
【问题描述】:

为了实现循环算法,“循环队列”被认为是最好的数据结构。

【问题讨论】:

  • "为了实现循环算法,“循环队列”被认为是最好的数据结构。"你这是什么意思?和你的问题有什么关系?
  • 哪个操作系统?
  • 对于 Linux,请参阅 stackoverflow.com/a/38510965/2626313
  • @xmojmr 窗口
  • @HansPetterTaugbølKragset 我的教授告诉我具有某种优先级的双向链表用于就绪队列。但在 galvin 书中给出了这样的声明。

标签: operating-system


【解决方案1】:

Windows 操作系统中的就绪队列使用哪种数据结构?

我不知道,但我找到了一些可能包含答案的文章:

  1. Processes, Threads, and Jobs in the Windows Operating System by Mark E. Russinovich and David A. Solomon - 搜索“就绪队列”

  2. Internals of Windows Thread by Mahesh Bailwal - 搜索“就绪队列”

  3. Google query: site:reactos.org "ready queue"

根据文章 #1,处理器区域控制块内核对象 (PRCB) 中有字段称为 ReadySummary(位掩码 32 位)、DeferredReadyListHead(单链表)、DispatcherReadyListHead(32 个列表条目的数组) ) 实现就绪队列。

您可以使用ReactOS 操作系统的源代码(文章#3)来了解有关 Windows 行为的更多信息。

【讨论】:

【解决方案2】:

操作系统中的就绪队列使用哪种数据结构?

这取决于操作系统。对于大多数现代操作系统来说,这是一种尽可能公平的算法。这可以是循环、先进先出、CFS(红黑树)或其他一些算法。就绪队列可以分为优先级。

当一个进程被创建或解除阻塞时,它可以被附加到列表/队列的后面。只要它被阻止,它也可以留在原地并跳过。

使用什么还取决于天气抢占是否正在使用,这是在通用操作系统(Linux/Windows/MacOS)中默认使用的。

【讨论】:

  • 你能为“对于大多数现代人来说它是一个先进先出队列”提供某种证明(维基百科文章或类似的东西)吗?
  • 感谢您让我调查此事,我可能有点太快了。将编辑我的答案。
  • 感谢@HansPetterTaugbølKragset
【解决方案3】:

循环调度程序按照先到先得的原则选择进程。第一个到达是第一个被执行的。每个进程都执行很短的时间,称为时间片。当时间片到期时,会发生定时器中断。然后选择队列中的第一个被执行,并将被中断的进程放在队列的末尾。此 FIFO 特性有利于将就绪队列实现为 FIFO 队列结构。

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多