程序控制與程序同步(筆記)

2021-09-02 20:36:31 字數 3248 閱讀 4844

程序控制

1.程序的建立

1)乙個程序建立另一程序的事件(原因)

使用者登入:分時情況下使用者的請求

作業排程:批處理中

提供服務:執行中的使用者程式提出功能請求,要建立服務程序(如列印服務)

應用請求:應用程式自己建立程序,完成特定功能的新程序。(木馬程式)

2)建立過程

(1) 申請空白pcb

(2) 為新程序分配資源

主要是記憶體資源的處理

(3) 初始化程序控制塊

識別符號(包括父程序的)、程式計數器指向程式入口位址,就緒態、優先順序等資訊的填寫。

(4) 將新程序插入就緒佇列

原語是由若干指令構成的原子操作過程,作為整體實現功能,不可被打斷。

os通過呼叫程序建立原語creat()建立新程序。

其他各控制工作也都是由os核心以「原語」的方式實現,以保證不被打斷

2.程序的終止

1)引起程序終止的事件

正常結束

異常結束

記憶體越界錯誤

保護錯(許可權錯,如修改唯讀檔案等)

非法指令(不存在的指令,程式異常轉向而把資料當指令)

特權指令錯(使用者態程式試圖執行只有os可執行的指令)

執行超時、運算錯、i/o故障等

外界干預

操作員或作業系統干預(死鎖時,可人為結束)

父程序請求終止子程序

父程序終止,子孫程序也跟著終止

2)終止過程

對上述事件,os呼叫核心終止原語,執行下列過程:

(1) 根據程序標示符,檢索出該程序pcb,讀其狀態。

*if 執行態,立即終止該程序,置排程標誌為真,指示重新進行排程。

*if 有子孫程序,亦應予以終止,以防成為不可控程序。

(2) 歸還全部資源至其父程序或系統。

(3) 將該程序pcb從所在佇列或鍊錶中移出。

3.程序的阻塞與喚醒

1)引起程序阻塞和喚醒的事件

請求系統服務的滿足情況

啟動某種需等待(i/o)操作

合作需要的新資料尚未到達

執行某功能的程序暫時無新工作可做(如傳送資料程序)

2)阻塞和喚醒過程

由程序呼叫阻塞原語阻塞自己,是主動行為:

(1)將pcb中的狀態改為阻塞

(2)該pcb加入到阻塞佇列中

(3)轉程序排程,將處理機分配給另一程序

(4)進行程序切換,即根據兩切換程序的pcb,保護與重新設定處理機狀態。

阻塞程序等待的事件發生時,有關程序(如放棄該資源的程序)呼叫喚醒原語把等待該事件的程序喚醒。

(1)把阻塞程序從等待該事件的阻塞佇列中移出

(2)將其pcb中的現行狀態改為就緒

(3)將pcb插入到就緒佇列中。

4.程序的掛起與啟用

掛起原語將指定程序或阻塞程序掛起。

(1)檢查被掛起程序的狀態,活動就緒則改為靜止就緒,活動阻塞則改為靜止阻塞

(2)將該pcb複製到記憶體(方便檢查)/外存(對換)指定區域

(3)*若掛起的程序是執行態,則需重新進行程序排程。

啟用原語的執行過程

若掛起程序在外存上,將其調入記憶體

檢查程序狀態,若處於靜止就緒,則改為活動就緒,若處於靜止阻塞,則改為活動阻塞

程序同步

程序間的兩種制約關係:

1、間接相互制約關係:主要源於資源共享,表現為

程序a—印表機資源—程序b(互斥)

2、直接相互制約關係:主要源於程序合作,表現為

程序a寫緩衝—程序b讀緩衝(有序)

1.程序同步的基本概念

1)程序同步的主要任務:

使併發執行的諸程序之間能有效地共享資源和相互合作,從而使程式的執行具有可再現性。

2)臨界資源

一次僅允許乙個程序使用的資源。

3)臨界區

每個程序中訪問臨界資源的那段**叫臨界區。

為了正確同步,對臨界區的**要增加控制。

進入區:對欲訪問的臨界資源進行檢。若此刻未被訪問,設正在訪問的標誌

臨界區:訪問臨界資源的**。

退出區:將正在訪問的標誌恢復為未被訪問的標誌

剩餘區:其餘部分

4)同步機制應遵循的規則

實現互斥的方法應符合如下每條原則

空閒讓進:資源使用最基本原則

忙則等待:保證互斥

有限等待:合適時被喚醒防止死等

讓權等待:能主動釋放cpu防止忙等

同步控制的關鍵

主要涉及」判斷」和」修改標誌」操作

不應被打斷(原語,os核心態執行)

硬體同步機制

許多計算機提供一些特殊的硬體指令,允許對乙個字中的內容進行檢測和修正,或對兩個字的內容進行交換。利用這些特殊指令解決臨界區問題。

進入臨界區往往跟其標誌有關,可將標誌看做乙個鎖,「鎖開」進入並關鎖,「鎖關」必須等待,初始時鎖是開啟的。

①關中斷

進入鎖測試前關閉中斷,直到完成鎖測試並上鎖後才能開啟中斷。程序在臨界區執行期間,系統不響應中斷,從而不引發排程。

缺點:濫用風險

關中斷時間過長會影響效率,限制cpu交叉執行能力

不適用於多cpu系統

②test-and-set指令

boolean ts(boolean *lock)

*乙個不可分割的原語

為乙個臨界資源設定一布林變數lock,初值為false

dowhile(true);

③利用swap指令實現程序互斥

對換指令(intel 80x86中稱xchg指令),用於交換兩個位元組的內容

void swap(boolean *a, boolean *b)

為臨界資源設定乙個全域性布林變數lock=false。每個程序乙個區域性布林變數key。

dowhile(key!=false);

臨界區操作;

lock=false;

剩餘區;

}while(true);

2.訊號量機制

1) 整型訊號量

最初的訊號量機制,兩個原子操作對乙個共享整型量進行操作。

訊號量定義為乙個整型量;

根據初始情況賦相應的值;

僅能通過兩個原子操作來訪問。

程序同步控制

生產者 消費者問題描述的是 有一群生產者程序在生產產品,並將這些產品提供給消費者程序去消費。為使生產者程序與消費者程序能夠併發執行,在兩者之間設定了乙個具有n個緩衝區的緩衝池,生產者程序將它所生產的產品放入乙個緩衝區中 消費者程序可以從乙個緩衝區中取走產品去消費。儘管所有的生產者和消費者程序都是以非...

程序通訊與程序同步

多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等 對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段 稱為臨界區。程序通訊與同步的目的主要有下面 1 資料傳輸 乙個程序需要將他的...

程序同步學習筆記

程序同步的概念 程序同步也是程序之間直接的制約關係,是為完成某種任務而建立的兩個或多個執行緒,這個執行緒需要在某些位置上協調它們的工作次序而等待 傳遞資訊所產生的制約關係,程序間的直接制約關係 於它們之間的合作。由於程序切換並不完全受程序或作業系統的控制,所以在程序執行的任何時刻都可能發生程序切換。...