程序描述和控制 --作業系統精髓與設計
阿新 • • 發佈:2019-01-27
作業系統設計必須滿足某些一般性的需求,大多數需求都涉及程序:
- 作業系統必許交替執行多個程序,在合理的相應時間範圍內使處理器的使用率最大。
- 作業系統必須按照特定的策略(例如某些函式或應用城居具有較高的優先順序)給程序分配資源,同時避免死鎖。
- 作業系統可以支援程序間的通訊和使用者建立程序,它們對構造應用程式很有幫助。
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操作完成。
- 新建態:剛剛建立的程序,作業系統還沒有把它加入到可執行程序組中。通常是程序控制塊已經建立但還沒有載入到記憶體中的新程序
- 退出態:作業系統從可執行的程序組中釋放出的程序,或者是因為它自身停止了,或者是因為某種原因被取消
- 執行->就緒
- 不存在:阻塞->執行。阻塞態不能直接到執行態。當鎖等待的時間發生時,處於阻塞態的程序只能轉換到就緒態,然後轉換到執行態。