2012-08-02 78 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中的任何地方(比如表示每個寄存器都有空間的進程的結構的鏈表),而虛擬地址空間(由頁表定義)可以是任意的換出。

所以基本上你的問題:

「?我們可以寫一個程序來更新寄存器指向一個不同的過程」

只是陳述,但答案是正確的。我們當然可以。

相關問題