第二章 2.2 程序的控制
阿新 • • 發佈:2018-12-09
程序控制的基本過程:1)程序的建立 2)程序的終止 3)程序的阻塞與喚醒 4)程序的掛起與啟用
系統中執行的程序並不都是孤立的,有的程序執行後,會呼叫其他程序來執行,這樣就組成了程序間的父子關係
- 可用 “程序圖”描述一個程序的家族關係,該圖實際就是一種有向樹
- 程序間的父子關係關係著資源的繼承。建立和撤銷程序時,其父、子程序要相應的被影響
程序的建立過程:( 過程不能被打斷 )
- 申請空白PCB
- 為新程序分配資源
- 主要是記憶體資源的處理 - 初始化程序控制塊
- 識別符號(包括父程序的)、程式計數器指向程式入口地址,就緒態、優先順序等資訊的填寫。 - 將新程序插入就緒佇列
原語是由若干指令構成的原子操作過程,作為整體實現功能,不可被打斷
- OS通過呼叫程序建立原語Creat()建立新程序
- 其他各控制工作也都是由OS核心以“原語”的方式實現,以保證不被打斷
程序的終止:
- 引起終止的事件
- 正常結束
- 異常結束
- 記憶體越界錯誤
- 保護錯(許可權錯,如修改只讀檔案等)
- 非法指令(不存在的指令,程式異常轉向而把資料當指令)
- 特權指令錯(使用者態程式試圖執行只有OS可執行的指令)
- 執行超時、運算錯、i/o故障等 - 外界干預
- 操作員或作業系統干預(死鎖時,可人為結束)
- 父程序請求終止子程序
- 父程序終止,子孫程序也跟著終止
- 終止過程:(對上述事件,OS呼叫核心終止原語,執行下列過程)
- 根據程序標示符,檢索出該程序PCB,讀其狀態
- 歸還全部資源至其父程序或系統
- 將該程序PCB從所在佇列或連結串列中移出
程序的阻塞與喚醒:( 引起程序阻塞和喚醒的事件 )
- 請求系統服務的滿足情況
- 啟動某種需等待(I/O)操作
- 合作需要的新資料尚未到達
- 執行某功能的程序暫時無新工作可做(如傳送資料程序)
阻塞與喚醒的過程:
- 由程序呼叫阻塞原語阻塞自己,是主動行為
- 將PCB中的狀態改為阻塞
- 該PCB加入到阻塞佇列中
- 轉程序排程,將處理機分配給另一程序
- 進行程序切換,即根據兩切換程序的PCB,保護與重新設定處理機狀態 - 阻塞與喚醒原語作用相反,成對使用(阻塞程序等待的事件發生時,有關程序(如放棄該資源的程序)呼叫喚醒原語把等待該事件的程序喚醒)
- 把阻塞程序從等待該事件的阻塞佇列中移出
- 將其PCB中的現行狀態改為就緒
- 將PCB插入到就緒佇列中
程序的掛起與啟用:( 掛起原語將指定程序或阻塞程序掛起 )
- 檢查被掛起程序的狀態,活動就緒則改為靜止就緒,活動阻塞則改為靜止阻塞
- 將該PCB複製到記憶體(方便檢查)/外存(對換)指定區域
- 若掛起的程序是執行態,則需重新進行程序排程
- 注意:程序只能掛起自己或其子孫程序
啟用原語的執行過程:
- 若掛起程序在外存上,將其調入記憶體
- 檢查程序狀態,若處於靜止就緒,則改為活動就緒,若處於靜止阻塞,則改為活動阻塞
2.3 程序同步:
程序同步的主要任務:使併發執行的諸程序之間能有效地 共享資源 和 相互合作 ,從而使程式的執行具有 可再現性
臨界資源:一次僅允許一個程序使用的資源
互斥:在作業系統中,當一個程序進入臨界區使用臨界資源時,另一個程序必須等待,直到佔用臨界資源的程序退出臨界區,我們稱程序之間的這種相互制約關係為“互斥”
同步:多個相互合作的程序,在一些關鍵點上可能需要互相等待或互相交換資訊,這種相互制約關係稱為程序同步關係。可理解為“有序”
臨界區:每個程序中訪問臨界資源的 那段程式碼 叫臨界區
同步機制遵循的規則:
- 空閒讓進:資源使用最基本原則
- 忙則等待:保證互斥
- 有限等待:合適時被喚醒防止死等
- 讓權等待:能主動釋放CPU防止忙等
同步控制的關鍵:不應被打斷(原語,OS核心態執行),不被打斷的進行標誌值的判斷和修改
硬體同步機制:( 進入臨界區往往跟其標誌有關,可將標誌看做一個鎖,“鎖開”進入並關鎖,“鎖關”必須等待,初始時鎖是開啟的 )
- 關中斷:( 進入鎖測試前關閉中斷,直到完成鎖測試並上鎖後才能開啟中斷。程序在臨界區執行期間,系統不響應中斷,從而不引發排程 )
- 濫用風險
- 關中斷時間過長會影響效率,限制CPU交叉執行能力
- 不適用於多CPU系統 - Test-and-Set 指令
- Swap 指令