1. 程式人生 > >第二章 程序的描述與

第二章 程序的描述與

程序與PCB要點
1.分析程式執行順序、以及併發的特徵
2.程序的概念、特徵與狀態
3.程序控制塊及其組織
程式執行順序
(1)引入前驅圖
(2)程式順序執行時的特徵
順序性、封閉性、可再現性
併發程式執行時的特徵
(1)間斷性
多道 -> 程式併發執行-> 要共享系統的資源 -> 形成相互制約的關係(交替執行)
(2)失去封閉性
共享資源->環境受影響。程式執行受其他程式的影響。
(3)結果不可再現性
得到的結果不相同
!間斷性>失去封閉性>不可再現性
!多道程式在間斷性執行中的“相互影響”造成了失去封閉性。解決這裡的矛盾,就要合理調控“相互影響”
程序的概念、特徵與狀態


(1)程序的概念
程式:程式段 + 資料段(按事先設計的功能和效能要求執行的指令序列。 )
程序實體:程式段 + 資料段 + 控制塊PCB(併發時用於程式控制和資源管理的各種資訊)
程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。
(2)程序的特徵
1.結構性特徵,程序的根本——PCB
2.動態性
程序實質上是程序實體的一次有生命期的執行過程。程式只是靜態的一組有序指令,程序最基本特徵。
3.併發性
多個程序實體同存於記憶體中,在一段時間內同時執行。有PCB的程式才能併發。
4.獨立性
5.非同步性
區別程序與程式
動與靜
永久與暫時
結構
程序與程式的對應關係
可否併發
程序的狀態轉化

(1)與程序執行相關的各種共享資源有:CPU、儲存器、I/O裝置、時間片
(2)程序的三種基本狀態:就緒狀態(Ready)執行狀態(Running) 阻塞狀態(Blocked)
(3)轉換圖
在這裡插入圖片描述
掛起狀態
在這裡插入圖片描述
建立狀態、終止狀態
各種狀態下的程序佇列
(1)單處理機系統,執行態的程序只有一個;
(2)就緒態、阻塞態的程序可有多個。一般講它們分別排稱一個佇列,稱就緒佇列、阻塞佇列。
(3)阻塞佇列有的會根據不同原因再排成多個佇列。
程序控制塊是程序存在的唯一標誌:
程序建立時,PCB建立並伴隨程序執行的全過程,直到程序撤消而撤消。
程序控制資訊
1.程式和資料的地址(單個程序)資料所在的內外存地址
2.程序同步和通訊機制(多程序間)同步和通訊機制的訊號量、訊息佇列指標等
3.資源清單
4.連結指標(PCB的組織)本PCB所在佇列的下一個程序PCB首地址。
PCB資訊的存放

系統執行中有若干個程式的PCB,它們常駐記憶體的PCB區。
採用的資料結構:PCB結構體,PCB連結串列或佇列
PCB的組織方式
連結方式
同一狀態的PCB,依靠連結指標連結成佇列。就緒佇列;若干個阻塞佇列;空白佇列(PCB區的空PCB塊)
索引方式
同狀態的PCB同樣集中記錄,但以索引表的方式記錄PCB的地址。用專門的單元記錄各索引表的首地址
組織方式必須的指標
1.執行指標2.空閒指標3.阻塞指標4.就緒指標

程序控制與同步要點
作業系統通過PCB進行程序建立、終止、阻塞的過程如何;
如何理解程序同步的含義;
控制同步的關鍵在哪裡。
程序控制的基本過程:
程序的建立
程序的終止
程序的阻塞與喚醒
程序的掛起和啟用
程序的建立
(1) 申請空白PCB
(2) 為新程序分配資源 主要是記憶體資源的處理
(3) 初始化程序控制塊,識別符號(包括父程序的)、程式計數器指向程式入口地址,就緒態、優先順序等資訊的填寫。
(4) 將新程序插入就緒佇列
程序的終止
正常結束 異常結束 外界干預
(1) 根據程序標示符,檢索出該程序PCB,讀其狀態。
*IF 執行態,立即終止該程序,置排程標誌為真,指示重新進行排程。
*IF 有子孫程序,亦應予以終止,以防成為不可控程序。
(2) 歸還全部資源至其父程序或系統。
(3) 將該程序PCB從所在佇列或連結串列中移出。
程序的阻塞與喚醒
1)引起程序阻塞和喚醒的事件
請求系統服務的滿足情況
啟動某種需等待(I/O)操作
合作需要的新資料尚未到達
執行某功能的程序暫時無新工作可做(如傳送資料程序)
2)阻塞和喚醒過程
(1)將PCB中的狀態改為阻塞
(2)該PCB加入到阻塞佇列中
(3)轉程序排程,將處理機分配給另一程序
(4)進行程序切換,即根據兩切換程序的PCB,保護與重新設定處理機狀態。
阻塞與喚醒原語作用相反,成對使用
程序的掛起與啟用
掛起原語將指定程序或阻塞程序掛起。
(1)檢查被掛起程序的狀態,活動就緒則改為靜止就緒,活動阻塞則改為靜止阻塞
(2)將該PCB複製到記憶體(方便檢查)/外存(對換)指定區域
(3)*若掛起的程序是執行態,則需重新進行程序排程。
啟用原語的執行過程
若掛起程序在外存上,將其調入記憶體
檢查程序狀態,若處於靜止就緒,則改為活動就緒,若處於靜止阻塞,則改為活動阻塞
排程
程序控制中,狀態轉換和排程密切相關。
執行態程序的改變必然產生排程行為
只要產生新就緒態程序,就需考慮排程策略
只要是採用搶佔式排程,要檢查新就緒程序是否可搶佔CPU,引起新的排程。
控制併發
基本控制
程序、PCB、狀態、基本控制過程
合理控制

  • 控制程序的相互影響,得到可再現的正確結果 *
    程序同步
    1)程序同步的主要任務:
    使併發執行的諸程序之間能有效地共享資源和相互合作,從而使程式的執行具有可再現性。
    兩種制約關係:間接相互制約關係(互斥)、直接相互制約關係(有序)
    2)臨界資源
    一次僅允許一個程序使用的資源
    3)臨界區
    進入區:對欲訪問的臨界資源進行檢。若此刻未被訪問,設正在訪問的標誌
    臨界區:訪問臨界資源的程式碼。
    退出區:將正在訪問的標誌恢復為未被訪問的標誌
    剩餘區:其餘部分
    4)同步機制應遵循的規則
    空閒讓進:資源使用最基本原則
    忙則等待:保證互斥
    有限等待:合適時被喚醒防止死等
    讓權等待:能主動釋放CPU防止忙等
    同步控制的關鍵
    主要涉及”判斷”和”修改標誌”操作
    不應被打斷(原語,OS核心態執行)
    硬體同步機制
    1.關中斷
    進入鎖測試前關閉中斷,直到完成鎖測試並上鎖後才能開啟中斷。程序在臨界區執行期間,系統不響應中斷,從而不引發排程。
    2.Test-and-Set指令
    3.利用Swap指令實現程序互斥

訊號量機制
在這裡插入圖片描述

互斥訊號量注意點
互斥訊號量mutex初值為1;
每個程序中將臨界區程式碼置於P(mutex)和V(mutex)原語之間
必須成對使用P和V原語(在同一程序中),不能次序錯誤、重複或遺漏:
遺漏P原語則不能保證互斥訪問
遺漏V原語則不能在使用臨界資源之後將其釋放(給其他等待的程序);
控制同步順序的注意點
訊號量值為0的點是限制的關鍵所在;
成對使用P和V原語(在有先後關係的兩個程序中),不能次序錯誤、重複或遺漏,否則同步順序出錯。