2012-08-02 55 views
5

我对操作系统的工作原理没有太多怀疑。操作系统:进程调度程序是否在单独的进程中运行

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

+0

这取决于操作系统体系结构。对于每个CPU内核,定制操作系统甚至只能有一个进程。对于大多数成熟的操作系统,系统进程处理由硬件中断触发的调度。 – Jay 2012-08-02 01:55:55

回答

5

进程计划可以在一个单独的进程中可行地运行,但是这样的设计效率非常低,因为您必须从一个进程切换到调度进程(然后必须对内核进行几次系统调用)然后返回到新进程,而不是将调度程序放在内核中,不需要系统调用,也不需要多次交换上下文。因此,调度程序通常处于内核的专属领域。

下面是发生以下步骤:

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

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

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

  4. 调度恢复寄存器的从当处理最后运行状态(或将它们设置为默认值的新进程值)

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

  6. 经过N个时钟周期后,发生中断,操作系统将其识别为由调度器处理的PIT引起的。

  7. 调度程序保存寄存器的状态(包括堆栈指针等),并抓住中断发生的地方的程序计数器(并将其保存为跳转到下一次的地址),然后返回步骤1.

这只是它如何完成的一个例子,许多低级细节都是特定于体系结构的。基本上所有的寄存器(程序状态)都可以保存到RAM中的任何地方(比如表示每个寄存器都有空间的进程的结构的链表),而虚拟地址空间(由页表定义)可以是任意的换出。

所以基本上你的问题:

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

只是陈述,但答案是正确的。我们当然可以。

相关问题