目錄
2.1.3 程序控制
2.1.3.1 基本概念
2.1.3.2 程序建立原語
2.1.3.3 程序終止原語
2.1.3.4 程序的阻塞與喚醒
2.1.3.5 程序的切換
2.1.3.6 小結
在書中,程序控制的定義是這樣的:程序控制是程序管理中最基本的功能。它用於建立乙個新程序,終止乙個已完成的程序,或終止乙個因出現某事件而使其無法執行下去的程序,還可負責程序執行中的狀態轉換。其實簡單來說,程序控制就是為了實現程序狀態之間的轉換。
那麼程序控制是怎麼實現的呢?程序控制一般來說是通過os核心中的原語來實現的。原語
(primitive)是由若干條指令組成的,用於完成一定功能的乙個過程,它是乙個不可分割的基本單位,因此,在執行過程中不允許被中斷。原子操作在管態下執行,常駐記憶體。
為什麼要使用原子操作(一氣呵成)呢?
如果系統對程序的控制如不使用原語,就會造成其狀態的不確定性,從而達不到程序控制的目的。比如說將執行態變為阻塞態需要兩步,首先將state的值改變之後再將此pcb放在阻塞佇列,如果非原子操作,在改變state值之後發生中斷,那麼在執行佇列就出現了阻塞態的pcb,這是不正確的。
如何保證操作的原子性呢?這裡我們需要引出兩個特權指令:開中斷指令和關中斷指令。顧名思義,開中斷就是將中斷開啟,關中斷就是將中斷關閉。我們將要執行的操作放在開中斷與關中斷指令的中間,cpu執行了關中斷指令之後,就不再例行檢查中斷訊號,直到執行開中斷指令之後才會恢復檢查。這樣,關中斷、開中斷 之間的這些指令序列就是不可被中斷的,這就實現了「原子性」。
引起程序建立的事件:(1)使用者登入。在分時系統中,使用者在終端鍵入登入命令後,如果是合法使用者,系統將為該終端建立乙個程序,並把它插入就緒佇列中。(2)作業排程。在批處理系統中,當作業排程程式按一定的演算法排程到某作業時,便將該作業裝入記憶體,為它分配必要的資源,並立即為它建立程序,再插入就緒佇列中。(3)提供服務。當執行中的使用者程式提出某種請求後,系統將專門建立乙個程序來提供使用者所需要的服務。(4)應用請求。在上述三種情況下,都是由系統核心為它建立乙個新程序;而第 4 類事件則是基於應用程序的需求,由它自己建立乙個新程序,以便使新程序以併發執行方式完成特定任務。
程序建立原語create( )所執行的步驟:申請空白 pcb-->為新程序分配資源-->初始化程序控制塊-->將新程序插入就緒佇列(
建立態轉變為就緒態
)引起程序終止的事件:1) 正常結束
2) 異常結束
3) 外界干預
程序終止原語所執行的步驟:(1) 根據被終止程序的識別符號,從
pcb
集合中檢索出該程序的
pcb,從中讀出該程序的狀態。(2) 若被終止程序正處於執行狀態,應立即終止該程序的執行,並置排程標誌為真,用於指示該程序被終止後應重新進行排程。(3) 若該程序還有子孫程序,還應將其所有子孫程序予以終止,以防它們成為不可控的程序。
(4) 將被終止程序所擁有的全部資源,或者歸還給其父程序,或者歸還給系統。(5) 將被終止程序(pcb)從所在佇列
(或鍊錶
)中移出,等待其他程式來蒐集資訊。(
這樣就由其他狀態轉為終止態
)引起程序阻塞(block)的事件:需要等待系統分配資源、需要等待相互合作的程序完成工作
程序阻塞原語所執行的步驟:找到相應的pcb-->保護現場並將pcb設定為阻塞態,暫停程序的執行-->將pcb插入到相應的佇列中(執行態變為阻塞態)
引起程序喚醒(wakeup)的事件:引起阻塞的事件已經解決(
何事引起的阻塞就要由何事進行喚醒,所以阻塞原語與喚醒原語往往是成對出現的)。
程序喚醒原語所執行的步驟:把被阻塞的程序從等待該事件的阻塞佇列中移出-->將其pcb 中的現行狀態由阻塞改為就緒-->然後再將該 pcb 插入到就緒佇列中。(阻塞態變為就緒態)
程序的切換我們可以理解為程序的執行態與就緒態之間的相互轉換,或者說不同程序之間的切換。
引起切換的事件:當前程序時間片到、有更高優先順序的程序到達、當前程序主動阻塞、當前程序終止。
切換原語執行的步驟:將執行環境儲存到pcb-->將pcb更換儲存佇列選擇其他pcb執行並更新其狀態-->根據pcb儲存的執行環境恢復其執行環境。
本節各個狀態之間的轉換是比較多的,程序控制會導致程序狀態的轉換。無論哪個程序控制原語,要做的無非三類事情:
1. 更新pcb中的資訊(a. 所有的程序控制原語一定都會修改程序狀態標誌 b. 剝奪當前執行程序的cpu使用權必然需要儲存其執行環境 c.某程序開始執行前必然要恢復期執行環境)
2. 將pcb插入合適的佇列
3. 分配/**資源
如下圖:
作業系統 程序控制
附錄 1.程序的建立 include includemain 2.程序的互斥 1 同步 include includemain else else 2 互斥 include includemain else else 3.程序的軟中斷通訊 include include includevoid wa...
作業系統 程序控制
知識總結 目錄 程序控制 1.程序建立 使用者登入,作業排程,列印等會導致新程序的建立 原語 原語 作業系統或 計算機網路用語範疇。是由若干條指令組成的,用於完成一定功能的乙個過程。是由若干個 機器指令 構成的完成某種特定功能的一段程式,具有不可分割性 即原語的執行必須是連續的,在執行過程中不允許被...
作業系統 程序控制
程序控制的主要功能是對系統中的所有程序實施有效的管理,它具有建立新程序 撤銷已有程序 實現程序狀態轉換等功能。簡化理解 程序控制就是要實現程序狀態的轉換。用原語實現程序控制。原語的特點是執行期間不允許中斷,只能一氣呵成。這種不可中斷的操作即原子操作。原語採用 關中斷 指令和 開中斷指令 實現。關中斷...