【问题标题】:OS: does the process scheduler runs in separate process操作系统:进程调度程序是否在单独的进程中运行
【发布时间】:2012-08-02 01:17:55
【问题描述】:

我对操作系统的工作原理毫无疑问。

调度程序:调度程序是否在单独的进程中运行(与任何其他进程一样)。交换新进程时到底发生了什么(我知道处理器寄存器和内存表已更新,我的问题是它们是如何更新的。我们可以编写一个程序来更新寄存器(sc,pc)以指向不同的过程)。

【问题讨论】:

  • 这取决于操作系统架构。一个定制的操作系统甚至可以为每个 CPU 内核只有一个进程。对于大多数成熟的操作系统,系统进程处理硬件中断触发的调度。
  • @Jay 我认为,进程调度程序独立于任何系统进程运行,它是由硬件中断触发的。对吗?

标签: operating-system scheduler


【解决方案1】:

进程调度可以在一个单独的进程中运行,但是这样的设计效率很低,因为你必须从一个进程切换到调度进程(然后必须对内核进行多次系统调用)并且然后回到新进程,而不是将调度程序放在不需要系统调用也不需要多次交换上下文的内核中。因此,调度器一般处于内核的独占领域。

以下是发生的步骤:

  1. 调度程序确定哪个进程将在下一个时隙中运行(通过各种不同的算法)。

  2. 调度程序告诉内存管理单元 (MMU) 使用页表来运行下一个进程(这是通过设置寄存器指向该表来完成的)。

  3. 调度程序对可编程中断定时器 (PIT) 进行编程,使其在 N 个时钟周期后产生中断。

  4. 调度程序从进程上次运行时恢复寄存器的状态(或将它们设置为新进程的默认值)

  5. 调度器跳转到进程中最后一条没有执行的指令的地址。

  6. N 个时钟周期后,发生中断,操作系统将其识别为由 PIT 引起,并注册为由调度程序处理。

  7. 调度程序保存寄存器的状态(包括堆栈指针等)并获取中断发生位置的程序计数器(并将其保存为下次跳转的地址),然后返回第 1 步。

这只是如何完成的一个示例,许多低级细节都是特定于架构的。基本上所有寄存器(程序状态)都可以保存到 RAM 中的任何位置(例如,表示进程的结构的链表,每个进程都有寄存器空间等),并且虚拟地址空间(由页表定义)可以任意换掉了。

所以本质上是你的问题:

“我们可以编写一个程序来更新寄存器以指向不同的进程吗?”

简单地说,但答案是正确的。我们当然可以。

【讨论】:

  • 您能指出一些有用的资源吗?谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-02-18
  • 2012-06-09
  • 2014-04-16
  • 2022-01-24
  • 2011-08-15
  • 2016-10-31
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多