《作業系統--精髓與設計原理》第三章複習題
第三章 程序描述與控制
一、什麼是指令跟蹤
程序執行的指令序列,可描述單個程序的行為。
二、哪些常見事件會觸發程序的建立
新的批處理作業:磁帶或磁碟中的批處理作業控制流通常會提供給作業系統。當作業系統準備接收新工作時,將讀取下一個作業控制命令。
互動登入:終端使用者登入到系統
為提供服務而由作業系統建立:作業系統可以建立一個程序,代表使用者程式執行一個功能,使使用者無需等待(如控制列印的程序)
由現有程序派生:基於模組化的考慮開發並行性,使用者程式可以指示建立多個程序
三、簡單定義五狀態程序模型中的每種狀態
執行態:程序正在執行。
就緒態:程序做好了準備,只要有機會就開始執行。
阻塞/等待態:程序在某些事件發生前不能執行,如I/O操作完成。
新建態:剛剛建立的程序,作業系統還未把它加入可執行程序組,它通常是程序控制塊已經建立但還未載入到記憶體中的新程序。
退出態:作業系統從可執行程序組中釋放出的程序,要麼它自身已停止,要麼因某種原因被取消。
四、搶佔一個程序是什麼意思
處理器為了執行另外的程序而終止當前正在執行的程序
五、什麼是交換,其目的是什麼
交換是指把主存中某個程序的部分或者全部內容轉移到磁碟。當主存中沒有處於就緒態的程序時,作業系統就把一個阻塞的程序換出到磁碟中的掛起佇列,從而使另一個程序可以進入主存執行。
六、阻塞態和阻塞/掛起態概念上有什麼不同
程序是否在等待一個事件(阻塞與否)以及程序是否已經被換出主存(掛起與否)
七、列出掛起態程序的4個特點
- 程序不能立即執行
- 程序可能是或不是正在等待一個事件。如果是,阻塞條件不依賴於掛起條件,阻塞事件的發生不會使程序立即被執行。
- 為了阻止程序執行,可以通過代理把這個程序置於掛起態,代理可以是程序自己,也可以是父程序或作業系統
- 除非代理顯式地命令系統進行狀態轉換,否則程序無法從這個狀態中轉移
八、作業系統會為哪類實體維護資訊表
記憶體、I/O、檔案和程序
九、列出程序控制塊的三類資訊
程序識別符號(process identification): 每個程序都分配了一個唯一的數字識別符號。程序識別符號可以簡單地表示為主程序表中的一個索引;否則,就必須有一個對映,以便作業系統可以根據程序識別符號定位相應的表。該識別符號可用在很多地方,且作業系統控制的其他許多表可以使用程序識別符號來交叉引用程序表。例如,記憶體表可以組織起來提供一個記憶體對映,以說明每個區域分配給了哪個程序。I/O表和檔案表中也存在類似的引用。程序相互之間進行通訊時,程序識別符號可用於通知作業系統某一特定通訊的目標;允許程序建立其他程序時,識別符號可用於指明每個程序的父程序和後代程序。
處理器狀態資訊(processor state information): 由處理器暫存器的內容組成。執行一個程序時,程序的資訊一定會出現在暫存器中。中斷程序時,必須儲存該暫存器的所有資訊,以便程序恢復執行時可以恢復所有這些資訊。所涉暫存器的性質和數量取決於處理器的設計。典型情況下,暫存器組包括使用者可見暫存器、控制和狀態暫存器(程式計數器、條件碼、狀態資訊)及棧指標。
程序控制資訊(process control information): 作業系統控制和協調各種活動程序所需的額外資訊。包括排程和狀態資訊(典型的資訊項包括程序狀態、優先順序、排程相關資訊、事件)、資料結構、程序間通訊、程序特權、儲存管理、資源所有權和使用情況。
十、為什麼需要兩種模式(使用者模式和核心模式)?
使用兩種模式的原因是保護作業系統和重要的作業系統表(如程序控制塊)不受使用者程式的干擾。在核心模式下,軟體會完全控制處理器及其所有指令、暫存器和記憶體。為安全起見,這種級別的控制對使用者程式而言沒有必要。
十一、作業系統建立一個新程序的步驟是什麼?
作業系統基於某種原因決定建立一個新程序時,會按如下步驟操作:
- 為新程序分配一個唯一的程序識別符號。
- 為程序分配空間。
- 初始化程序控制塊。
- 設定正確的連結。例如,若作業系統將每個排程佇列都維護為一個連結串列,則新程序必須放在就緒或就緒/掛起連結串列中。
- 建立或擴充其他資料結構。例如,作業系統可因編制賬單和/或評估效能,為每個程序維護一個記賬檔案。
十二、中斷和陷阱有何區別?
中斷與當前正在執行的程序無關的某種外部事件相關,如完成一次I/O操作;陷阱與當前正執行程序產生的錯誤或異常條件相關,如非法的檔案訪問。
對於普通中斷(interrupt),控制權首先轉給中斷處理器,中斷處理器完成一些基本的輔助工作後,再將控制權轉給與已發生的特定中斷相關的作業系統例程。
對於陷阱(trap),作業系統則確定錯誤或異常條件是否致命。致命時,當前正執行程序置為退出態,並切換程序;不致命時,作業系統的動作將取決於錯誤的性質和作業系統的設計,作業系統可能會嘗試恢復程式,或簡單地通知使用者。作業系統可能會切換程序,或者繼續當前執行的程序。
十三、舉出中斷的三個例子
時鐘中斷:作業系統確定當前正執行程序的執行時間是否已超過最大允許時間段【時間片(time slice),即程序中斷前可以執行的最大時間段】。若超過,程序就切換到就緒態,調入另一個程序。
I/O中斷:作業系統確定是否已經發生I/O活動。若I/O活動是一個或多個程序正在等待的事件,則作業系統就把所有處於阻塞態的程序轉換為就緒態(阻塞/掛起態程序轉換為就緒/掛起態)。作業系統必須決定是繼續執行當前處於執行態的程序,還是讓具有高優先順序的就緒態程序搶佔這個程序。
記憶體失效:處理器遇到一個引用不在記憶體中的字的虛擬地址時,作業系統就必須從外存中把包含這一引用的記憶體塊(頁或段)調入記憶體。發出調入記憶體塊的I/O請求後,記憶體失效程序將進入阻塞態;作業系統然後切換程序,恢復另一個程序的執行。期望執的塊調入記憶體後,該程序置為就緒態。
十四、模式切換和程序切換有何區別?
模式切換可在不改變執行態程序的狀態的情況下出現。此時儲存上下文並在以後恢復上下文僅需很少的開銷。但是,若當前正執行程序將轉換為另一狀態(就緒、阻塞等),則作業系統必須使環境產生實質性的變化。
涉及狀態變化的程序切換與模式切換相比,要做的工作更多。