1. 程式人生 > >程序描述和控制 --作業系統精髓與設計

程序描述和控制 --作業系統精髓與設計

作業系統設計必須滿足某些一般性的需求,大多數需求都涉及程序:

  • 作業系統必許交替執行多個程序,在合理的相應時間範圍內使處理器的使用率最大。
  • 作業系統必須按照特定的策略(例如某些函式或應用城居具有較高的優先順序)給程序分配資源,同時避免死鎖。
  • 作業系統可以支援程序間的通訊和使用者建立程序,它們對構造應用程式很有幫助。

3.1:程序和程序控制塊

程序的定義:
  • 一個正在執行中的程式
  • 一個正在計算機上執行的程式例項
  • 能分配給處理器並由處理器執行的實體
  • 一個具有以下特徵大的活動單元:一組指令序列的執行、一個對當前狀態和相關的系統資源的集合
也可以把程序當作一組元素的實體,程序的兩個基本元素是程式程式碼(可能被執行相同程式的其他程序共享)和與程式碼相關聯的資料集。假設處理器開始執行該程式程式碼,且我們把這個執行實體成為程序。在程序執行時,任意給定一個時間,程序都可以唯一的被表徵為以下元素:
  • 識別符號
    :跟這個程序相關的唯一識別符號,用來區別其他程序
  • 狀態:如果程序正在執行,那麼程序處於執行態
  • 優先順序:相對於其他程序的優先順序
  • 程式計數器:程式中即將被執行的下一條指令的地址
  • 記憶體指標:包括程式程式碼和程序相關資料的指標,還有和其他程序共享記憶體塊的指標
  • 上下文資料:程序執行時處理器的暫存器中的資料
  • I/O狀態資訊:包括顯示的I/O請求、分配給程序的I/O裝置和被程序使用的檔案列表等
  • 審計資訊:可包括處理器時間綜合、使用的時鐘數綜合、事件限制、審計號等
前面的列表資訊被存在在一個程序控制塊的資料結構中。該控制塊有作業系統建立和管理。如圖:
程序控制塊是作業系統能夠支援多程序提供多重處理技術的關鍵工具。當程序被中斷時,作業系統會把程式計數器和處理器暫存器(上下文資料)儲存到程序控制快中相應位置,程序狀態也改變為其他值,例如阻塞態或就緒態。現在作業系統可以自由地把其他程序置為執行態,把其他程序的程式計數器和程序上下文資料載入到處理器暫存器中,這樣其他程序就可以開始執行。 每個程序都有程序控制塊PCB,都存放在記憶體中。但是我們要儘量少的把東西放到PCB裡面去。 通俗來說,程序需包含三方面內容:1. 程序在執行什麼程式    2. 執行的程式在處理什麼資料   3. 程序處於什麼狀態 對於PCB我的理解:在引進了多工作業系統後,作業系統需要在程序切換的時候,需要把當前暫存器中的值寫入當前程序PCB的registers中,儲存起來。再把新程序的PCB的registers中的值裝載入CPU,這樣才完成了程序的切換。這些開銷是額外的開銷,在單機環境裡面是不應該有這些開銷的,程序上下文切換這種額外開銷要越少越好。

3.2.程序狀態

1.程序終止原因如圖:
2.程序的五狀態模型 如圖:
  • 執行態:該程序正在執行。如果只有一個處理器,一次最多隻有一個程序處於改狀態。
  • 就緒態:程序做好了準備,只要有機會該開始執行。(注意:比如一個裝置在等待I/O裝置輸入,這是阻塞態不是就緒態,就緒態是一切資源都準備好了)。
  • 阻塞/等待態:程序在某些事件發生前不能執行,如I/O操作完成。
  • 新建態:剛剛建立的程序,作業系統還沒有把它加入到可執行程序組中。通常是程序控制塊已經建立但還沒有載入到記憶體中的新程序
  • 退出態:作業系統從可執行的程序組中釋放出的程序,或者是因為它自身停止了,或者是因為某種原因被取消
分析: 新建態舉例:一個新使用者登入到分時系統中,首先,作業系統執行一些必須的輔助工作,將識別符號關聯到程序,分配和建立管理程序所需要的所有表。此時,程序處於新建態,意味著作業系統已經執行了建立程序的必須動作,但還沒有執行程序。例如,作業系統可能基於效能或記憶體侷限性的原因,限制系統中的程序數量。當程序處於新建態時,作業系統所需要的關於該程序的資訊儲存在記憶體的程序表中,但程序自身還未進入記憶體,就是即將執行的程式程式碼不再記憶體中,也沒有為這個程式相關的資料分配空間。當程序處於新建態時,程式保留在外村中,通常是磁碟中。 狀態中轉換有兩種需要注意:
  • 執行->就緒
    :這類轉換最常見原因是,正在執行的程序達到了“允許不中斷執行”的最大時間段。實際上所有多道程式作業系統都實行了這類時間限定。這類轉換還有很多其他原因,例如作業系統給不同的程序分配不同的優先順序,但這不是在所有作業系統中都實現了得。假設程序A給一個給定的優先順序執行,且具有更高優先順序的程序B正處於阻塞套。如果作業系統知道B等待事件發生,則將B轉化為就緒態。然後因為優先順序的原因中斷A的執行,將處理器分派給程序B,我們說作業系統搶佔(preempted)了程序A。最後一種情況是,程序資源自願釋放對處理器的控制,例如一個週期性地進行記賬和維護的後臺程序。
  • 不存在阻塞->執行。阻塞態不能直接到執行態。當鎖等待的時間發生時,處於阻塞態的程序只能轉換到就緒態,然後轉換到執行態。