1. 程式人生 > >【作業系統】第二章 程序管理1

【作業系統】第二章 程序管理1

1.程序的基本概念
(1)程式順序執行時的特徵:順序性
封閉性:程式一旦開始執行,其計算結果不受外界因素影響
可再現性:程式執行只要初始條件一樣,不論如何停頓,重複多少次結果都一樣
(2)程式併發執行時的特徵:間斷性
失去封閉性:執行程式受其他程式影響
結果不可再現性
並非所有程式都能併發執行,只有不存在前趨關係的程式之間才有可能併發執行
2.程序的描述
(1)程式:程式段+資料段
程序實體(程序映像):程式段+資料段+PCB(Process Control Block,程序控制塊)
PCB(Process Control Block,程序控制塊):存放程序的管理和控制資訊的資料結構
分析OS排程某程序的過程


1)查該程序的PCB,獲取其狀態、優先順序;
2)根據PCB儲存的處理機狀態資訊,恢復現場;
3)根據PCB中程式和資料的記憶體始址,找到其程式和資料;
4)執行中的同步訊號等也要查閱PCB,暫停時程序執行的處理機環境儲存回PCB
(2)程序的定義:程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。
程序的根本——PCB,PCB 是程序存在的唯一標誌
(3)程序的特徵:動態性(程序最基本的特徵)
併發性(有PCB的程式才能併發)
獨立性
非同步性
(4)程序的基本狀態
(1)就緒狀態(Ready)
程序獲得除CPU之外的所有必需資源,一旦得到CPU控制權,可立即執行。
就緒態的程序可有多個,排列成一個佇列,稱為就緒佇列。
(2)執行狀態(Running)
程序已獲得所有執行必需的資源,正在處理機上執行。單處理機系統,執行態的程序只有一個。

(3)阻塞狀態(Blocked)
正在執行的程序由於發生某事件(請求I/O、申請緩衝、時間片到)而暫時無法執行時,便放棄CPU後暫停
阻塞態的程序可有多個,排列成一個佇列,稱為阻塞佇列。根據阻塞原因不同,會設定多個阻塞佇列。
在這裡插入圖片描述
(5)掛起操作
不少系統除上述三種狀態,還有其他一些細節狀態:掛起、新建、終止狀態等。
掛起狀態:就緒的、但不會被排程執行

(6)程序控制塊中的資訊
1)程序識別符號:用於唯一的標識一個程序
2)處理機狀態
3)程序排程資訊
4)程序控制資訊
(7)PCB資訊的存放
採用的資料結構:PCB結構體,PCB連結串列或佇列
(8)PCB的組織方式
1)線性方式
2)連結方式
同一狀態的PCB,依靠連結指標連結成佇列。就緒佇列;若干個阻塞佇列;空白佇列(PCB區的空PCB塊)
3)索引方式
同狀態的PCB同樣集中記錄,但以索引表的方式記錄PCB的地址。用專門的單元記錄各索引表的首地址。
管理系統所有PCB時,系統的幾個關鍵指標有:執行指標、就緒指標、阻塞指標、空閒指標

3.程序控制與同步
(1)程序控制的基本過程
程序的建立:
(1) 申請空白PCB
(2) 為新程序分配資源:主要是記憶體資源的處理
(3) 初始化程序控制塊:識別符號(包括父程序的)、程式計數器指向程式入口地址,就緒態、優先順序等資訊的填寫。
(4) 將新程序插入就緒佇列
原語是由若干指令構成的原子操作過程,作為整體實現功能,不可被打斷。
程序的終止:
引起程序中終止的事件:正常結束、異常結束、外界干預
終止過程:
1) 根據程序標示符,檢索出該程序PCB,讀其狀態。
2) 歸還全部資源至其父程序或系統。
3) 將該程序PCB從所在佇列或連結串列中移出。
程序的阻塞與喚醒:
由程序呼叫阻塞原語阻塞自己,是主動行為:
(1)將PCB中的狀態改為阻塞
(2)該PCB加入到阻塞佇列中
(3)轉程序排程,將處理機分配給另一程序
(4)進行程序切換,即根據兩切換程序的PCB,保護與重新設定處理機狀態。
程序的掛起與啟用:
掛起原語將指定程序或阻塞程序掛起。
(1)檢查被掛起程序的狀態,活動就緒則改為靜止就緒,活動阻塞則改為靜止阻塞
(2)將該PCB複製到記憶體(方便檢查)/外存(對換)指定區域
(3)若掛起的程序是執行態,則需重新進行程序排程。
程序只能掛起自己或其子孫程序。
(2)程序同步
控制同步的關鍵:不被打斷的進行標誌值的判斷和修改
1)程序同步的主要任務:
使併發執行的諸程序之間能有效地共享資源和相互合作,從而使程式的執行具有可再現性。
2)臨界資源:一次僅允許一個程序使用的資源。
3)互斥:在作業系統中,當一個程序進入臨界區使用臨界資源時,另一個程序必須等待,直到佔用臨界資源的程序退
出臨界區,我們稱程序之間的這種相互制約關係為“互斥”。
同步:多個相互合作的程序,在一些關鍵點上可能需要互相等待或互相交換資訊,這種相互制約關係稱為程序同步
關係。可理解為“有序”。
4)臨界區:每個程序中訪問臨界資源的那段程式碼叫臨界區。
5)同步機制應遵循的規則
空閒讓進:資源使用最基本原則
忙則等待:保證互斥
有限等待:合適時被喚醒防止死等
讓權等待:能主動釋放CPU防止忙等
4.訊號量機制
(1)整形訊號量 (符合有限等待原則,但不符合讓權等待原則)
P操作 wait(S):
While S<=0 do no-op;
S:=S-1;
V操作 signal(S):
S:=S+1;
(2)記錄型訊號量
定義訊號量semaphore代表可用資源實體的數量。
P操作wait():
S.value = S.value - 1;
if S.value < 0 then block(S,L) //當≥0,代表可供併發程序使用的資源實體數
V操作signal():
S.value = S.value + 1;
if S.value <= 0 then wakeup(S,L) //將程序喚醒,由阻塞態改為就緒態 .當<0,表示正在等待使用該資源的程序數。
(3)訊號量的基本應用
實現互斥:
1)互斥訊號量mutex初值為1;
2)每個程序中將臨界區程式碼置於P(mutex)和V(mutex)原語之間
3)必須成對使用P和V原語(在同一程序中),不能次序錯誤、重複或遺漏
實現有序:
併發執行的程序P1和P2中,分別有程式碼C1和C2,要求C1要在C2開始前完成。
P1 : C1 ;signal(S);
P2 : wait(S);C2 ;
同步訊號量成對出現在不同程序中
(4)and型訊號量
Swait(S1, S2, …, Sn)
if (S1 >=1 and … and Sn>=1 )then
for i:=1 to n do
Si:= Si -1 ;
endfor
else
將程序阻塞在第一個不能滿足資源訊號量的佇列中。
endif

Ssignal(S1, S2, …, Sn)
for i:=1 to n do
Si:= Si +1 ;
喚醒所以與si相關的阻塞程序
endfor
(5)訊號量集
Swait(S1, t1, d1, …, Sn, tn, dn)
S 為訊號量(現有值);t 為下限值(現有不能少於該條件);d 為需求值;
Ssignal(S1, d1, …, Sn, dn)
只有一個訊號量S的幾種特殊情況:
Swait(S, d, d),,允許每次申請d個資源,若現有資源數少於d,不予分配。
Swait(S, 1, 1),蛻化為一般的記錄型訊號量,一次申請一個,至多分配一個(S>1時可計數,或S=1時可控制互斥)。
Swait(S, 1, 0),當S>=1時,允許多個程序進入某特定區,當S變為0後,阻止任何程序進入特定區,相當於可控開關。並不
對S資源的數量產生影響。