作業系統筆記2
l 程序
l 併發:多個程式在一段時間內同時發生
l 程序是什麼?與程式區別
程序就是用於描述、控制程式在記憶體中併發執行的一個東東
程式的一次執行
是一個程式與其資料一道通過處理機的執行所發生的活動
程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。
¡ 動與靜:
l 程序是動態的,程式是靜態的:程式是有序程式碼的集合;程序是程式的執行。
¡ 永久與暫時:
l 程序是暫時的,程式是永久的:程序是一個狀態變化的過程,程式可長久儲存。
¡ 結構:
l 程序的組成包括程式、資料和程序控制塊
¡ 程序與程式的對應關係:
l 都可1對n。通過多次執行,一個程式可對應多個程序;通過呼叫關係,一個程序可包括多個程式。
l 程序的基本狀態
(1)就緒狀態(Ready)
程序獲得除CPU之外的所有必需資源,一旦得到CPU控制權,可立即執行。
(2)執行狀態(Running)
程序已獲得所有執行必需的資源,正在處理機上執行。
(3)阻塞狀態(Blocked)
l 程序控制塊PCB.
程序實體:程式碼段+資料段+PCB
Pcb存放程序的管理和控制資訊的資料結構
程序控制塊中的資訊(pcb內):
程序識別符號資訊
處理機狀態資訊
程序排程資訊
程序控制資訊
l 程序的建立、阻塞、終止過程
建立過程:
(1) 申請空白PCB
(2) 為新程序分配資源
(3) 初始化程序控制塊
識別符號(包括父程序的)、程式計數器指向程式入口地址,就緒態、優先順序等資訊的填寫。
(4) 將新程序插入就緒佇列
阻塞過程:
(1)將PCB中的狀態改為阻塞
(2)該PCB加入到阻塞佇列中
(3)轉程序排程,將處理機分配給另一程序
(4)進行程序切換,即根據兩切換程序的PCB,保護與重新設定處理機狀態
(阻塞原因瞭解:)
請求系統服務的滿足情況
啟動某種需等待(I/O)操作
合作需要的新資料尚未到達
執行某功能的程序暫時無新工作可做(如傳送資料程序)
終止過程:
(1) 根據程序標示符,檢索出該程序PCB,讀其狀態。
*IF 執行態,立即終止該程序,置排程標誌為真,指示重新進行排程。
*IF 有子孫程序,亦應予以終止,以防成為不可控程序。
(2) 歸還全部資源至其父程序或系統。
(3) 將該程序PCB從所在佇列或連結串列中移出。
l 程序同步問題:源於程序的相互制約關係:資源共享,有序合作
l 同步的概念:併發執行的諸程序之間能有效地共享資源和相互合作,從而使程式的執行具有可再現性。
l 控制同步的四大原則
空閒讓進:資源使用最基本原則
忙則等待:保證互斥
有限等待:合適時被喚醒防止死等
讓權等待:能主動釋放CPU防止忙等
l 臨界資源、臨界區
一次僅允許一個程序使用的資源
每個程序中訪問臨界資源的那段程式碼叫臨界區。
為了正確同步,對臨界區的程式碼要增加控制
l 訊號量機制
最初的訊號量機制,兩個原子操作對一個共享整型量進行操作。
訊號量定義為一個整型量;
根據初始情況賦相應的值;
僅能通過兩個原子操作來訪問。
l 訊號量操作原語wait、signal
P操作 wait(S):
While S<=0 do no-op;
S:=S-1;
V操作 signal(S):
S:=S+1;
互斥:在作業系統中,當一個程序進入臨界區使用臨界資源時,另一個程序必須等待,直到佔用臨界資源的程序退出臨界區,我們稱程序之間的這種相互制約關係為“互斥”。
同步:多個相互合作的程序,在一些關鍵點上可能需要互相等待或互相交換資訊,這種相互制約關係稱為程序同步關係。可理解為“有序”。
l 典型同步題目:
l 生產者-消費者 互斥-同步
一群生產者程序生產產品供給消費者程序消費,在兩者之間設定具有n個緩衝區的緩衝池,生產者程序所生產的產品放入一個緩衝區中,消費者程序可從一個緩衝區中取走產品去消費。
生產者和消費者都以非同步方式執行,但它們之間必須保持同步:沒有產品不能取,沒有空間不能放。也不能同時對一個空間進行取和放
type item=……;表示一個產品
Var n, integer;緩衝區大小
counter:0, 1, …, n; 緩衝區內產品計數的變數
var buffer: array[0, 1, …, n-1] of item;該陣列代表具有n個緩衝區的緩衝池
in, out: 0, 1, …, n-1指示生產者和消費者放或取的下一個緩衝區位置指標,初值均為0。
in加1表示為in:=(in+1)mod n
out加1表示為out:=(out+1)mod n
當(in+1)mod n=out時表示緩衝池滿
in=out表示緩衝池空
Producer:
repeat
…
生產 an item in nextp;
…
while counter= n
do no-op;
buffer[in]:=nextp;
in:=in+1 mod n;
counter:=counter+1;
until false;
Consumer:
repeat
while counter= 0
do no-op;
nextc:=buffer[out];
out:=out+1 mod n;
counter:=counter-1;
…
消費產品item in nextc;
until false;
取、用類,計數控制+互斥
l 哲學家進餐 互斥
計數類、死鎖相關
l 讀者-寫者
l 有條件的互斥 類似典型題目:單行路,同方向的不互斥;異向互斥
Writer :
repeat
wait(wmutex);
寫入檔案;
signal(wmutex);
until false;
l 訊號量規律:
l 分析同步關係、設定訊號量初值、PV操作順序
1. P、V操作成對出現
2. 多個程序對互斥同步,PV操作成對出現的同進程中,初值為1
3. 多個程序的有序同步,PV操作成對出現在不同程序中,有V操作的程序可通過控制先於有P操作的程序執行。初值根據應用情況設定。
l 一閱覽室最多容納100人,讀者進入和離開都要在登記表上登記,每次只允許一個人登記。如何編寫程序間的同步關係。
l 資源:空數N,登記表S
l 訊號量n=N,mutex=1
l 程序:讀者程序
u wait(n)
u wait(mutex)
l 進入
u signal(mutex)
l 閱讀後離開
u signal(n)
l 有一隻鐵籠子,每次只能放入一隻動物,獵手向籠中放入老虎,農民向籠中放入豬,動物園等待取籠中的老虎,飯店等待取籠中的豬,試用訊號量機制實現獵手、農民、動物園、飯店之間同步執行的程式。(解釋其中的訊號量含義,並給出合適的初值。)
l 設有一自助餐廳,可容納10名顧客就餐,餐廳滿時顧客需在門外排隊等候;顧客若能進入則自取食物後到款臺付款;收款員負責在收款臺等待顧客付款,付款完畢顧客自行就餐後離開。分析該問題中的同步關係,試寫出顧客程序和收款員程序訊號量機制下的同步演算法,注意寫明訊號量的初值和作用。
l 【分析】顧客存在爭搶進店的競爭關係,設定一個資源訊號量r,初值為10;
收款員與顧客間存在雙向有序合作關係,收款員需等待顧客付款,顧客需等待收款員確認付款完畢,需設定兩個同步訊號量money,ok,初值均為0.
【演算法虛擬碼如下】
semaphore r=10,money=0,ok=0;
l 顧客:
l void custom(){
u while(true){
l wait(r);
u //資源訊號量操作成對正確
l enter;
l take something;
l signal(money);
l pay money;
l wait(ok);
l signal(r);
l leave;
u }}
l 售貨員:
l void seller(){
u while(true){
n wait(money);
u //同步訊號操作配對正確
n accept money,give changes
n signal(ok);
u //同步訊號操作配對正確
u }}
l CPU排程
l 三級排程
高階排程:主要在早期批處理階段,處理在外存上的作業
低階排程: 決定記憶體就緒佇列中的哪個程序獲得處理機,進行分配工作。是最基本的一種排程
中級排程:提高記憶體利用率和系統吞吐量。根據條件將一些程序調出或再調入記憶體
l 排程時機\搶佔\演算法計算
l 排程程式的執行時機:
程式正常完成
IO\PV阻塞
時間片到
新任務產生
排程演算法
基本排程演算法:
a) 先來先服務排程演算法FCFS,不利於短作業
b) 短作業(程序)優先排程演算法SJF/SPF,降低作業的平均等待時間,提高系統吞吐量。
c) 高優先權優先排程演算法HPF,
d) 高響應比優先排程演算法HRRN,
e) 基於時間片的輪轉排程演算法RR,
f) 多級反饋佇列演算法FB
* 實時排程
l 某系統的程序請求如右圖,畫出RR排程下的排程過程圖。並計算平均週轉時間。設時間片為2。
程序名 |
開始時刻 |
執行時間 |
A |
0 |
3 |
B |
2 |
3 |
C |
3 |
4 |
D |
4 |
7 |
l 死鎖的相關概念與認識
1. 四個必要條件
u 互斥條件:程序對所分配到的資源進行排他性使用
u 請求和保持條件:程序已經保持了至少一個資源,又提出新的資源請求,而新請求資源被其他程序佔有只能造成自身程序阻塞,但對自己已獲得的其他資源保持不放,必然影響其他程序。
u 不剝奪條件:程序已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。
u 環路等待條件
2. 處理死鎖的各種方法
① 預防死鎖
v 設定限制條件,破壞四個必要條件的一個或幾個,預防發生死鎖。
v 較易實現。限制條件的嚴格也會導致系統資源利用率和系統吞吐量降低。
② 避免死鎖
v 不須事先限制,破壞四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。
v 這種事先加以較弱限制的方法,實現上有一定難度,但可獲較高的資源利用率及系統吞吐量,目前在較完善的系統中,常用此方法來避免發生死鎖。
③ 檢測死鎖。
v 允許系統執行過程中發生死鎖,但通過系統檢測機構可及時的檢測出,能精確確定與死鎖有關的程序和資源;然後採取適當的措施,從系統中將已發生的死鎖清除掉。
④ 解除死鎖。
v 與死鎖檢測配套的一種措施。
v 常用的實施方法:撤銷或掛起一些程序,以便回收一些資源並將他們分配給已阻塞程序,使之轉為就緒以繼續執行。
v 死鎖的檢測與解除措施,有可能使系統獲得較好的資源利用率和吞吐量(死鎖機率不一定很高),但在實現上難度也最大。
l 避免死鎖的銀行家演算法(相對預防死鎖,是一種軟限制。)
下面出現P1請求資源的操作,具體請求向量為Request1(1,0,2),利用銀行家演算法進行檢查該操作是否是安全可行的:
1)兩個基本判斷
Request1(1,0,2)<=Need1(1,2,2)
Request1(1,0,2)<=Available1(3,3,2)
2)先假設為P1分配資源,並修改Available,Allocation1和Need1向量。
向量Available
最大需求、已獲得的、還需要的
最大需求矩陣Max
已分配矩陣Allocation
還需求的矩陣Need
1. 安全狀態
2. 演算法、計算
a) 系統中有m個程序,出現死鎖時死鎖程序的個數k: 2≤k≤m
b) 某類資源m個,n個程序都需要此種資源a個,如何不死鎖:n*(a-1)+1≤m
l 儲存器管理
l 連續分配
1. 單一連續、固定分割槽
2. 動態分割槽分配
3. 可重定位動態分割槽(有緊湊功能)
l 離散分配
1. 分頁,地址轉換過程,計算
記憶體劃分成多個小單元,每個單元K大小,稱(物理)塊。作業也按K單位大小劃分成片,稱為頁面。
① 物理劃分塊的大小 = 邏輯劃分的頁的大小
②
記憶體位數=頁面大小(位數)+頁表項(塊號位數)
大小:記憶體=頁面大小x頁面個數
2. 分段
虛擬
概念:虛擬、區域性性
先進先出置換演算法(FIFO)Belady現象(出現分配的頁面數增多,缺頁率反而提高的異常現象)的原因:FIFO演算法的置換特徵與程序訪問記憶體的動態特徵矛盾,即被置換的頁面並不是程序不會訪問的
1. 置換排程演算法:最近最久未使用(LRU)置換演算法, 最近未使用演算法CLOCK:
2. 缺頁次數(掉入次數)
u 缺頁率=缺頁次數/總的頁面數
l 例
l 分頁系統,主存容量64K,頁面大小1K。
l 一個4K大的作業,0-3頁分別分配到物理塊2、4、6、7中。
1. 該作業的邏輯地址格式如何?
2. 十進位制的邏輯地址1023(B)轉換為實體地址
3. 畫出地址變換過程。
答:
即頁號與頁內地址位數大小
該作業的4個頁面編號需要2位;每頁1K大小,即1K條指令編號需10位
l 邏輯地址1023
1023/1K=0 餘 1023
0頁對應物理塊2,所以實體地址是
2 * 1K + 1023 = 2048+1023=3071
l 例
l 虛擬記憶體管理中的LRU頁面置換演算法
l 設頁面走向如下,分配給該作業3個記憶體塊,畫出置換過程圖,並計算缺頁率。
4 5 8 1 3 4 4 6 5 1 2 7 6 1 3
檔案管理
l 檔案的結構
l 邏輯結構:
u 有結構檔案:順序,連結,索引
l 物理結構: 已分配空間的記錄
u 連續、連結、索引、混合索引分配方式
l FAT表計算,索引檔案大小的計算,UNIX下的混合索引
l 空閒空間管理
l 表、盤區\盤塊鏈、成組連結、位示圖
l 目錄、共享
l 例:FAT與索引的計算
l FAT表的計算
1. 物理空間容量/盤塊大小 = FAT表項個數
2. 個數決定位數,決定每項大小
3. 個數*每項大小
l 索引結點
1. 盤塊大小/盤塊號大小 = 可記錄的盤塊個數
2. 單索引下,一個索引結點能記錄N個盤塊,則檔案最大長度為:N*盤塊大小
l 例:混合索引分配方式的計算
l FCB有13個地址項,0-9為直接地址,10為一次間接地址,11為二次間接地址,12為三次間接地址。若盤塊大小為512B,盤塊號需3B記錄,每個盤塊最多存放170個盤塊地址。
l 該檔案系統檔案最大允許多長?
u 10+170+170*170+170*170*170 = 4942080塊
u = 4942080*512B = 2471040 KB
l 將檔案位元組偏移量15000轉換為物理塊號和塊內偏移。
u 15000/512 = 29 餘152。10=<29<=10+170.
u 所以檔案使用的第29塊盤塊號,記錄在FCB中的10項,即一次間接地址的索引盤塊中。從10項記錄的地址找到索引表,第19項即是要找的物理塊。
l 若FCB已存在記憶體,其他資訊均在外存,訪問該檔案某位置的內容,最少/最多需要幾次訪問磁碟?
最少需訪問磁碟的情況是直接定址,直接讀FCB中記錄的地址,訪問磁碟1次即可
最多需訪問磁碟的情況是三次間接定址的過程,需讀三次間接索引塊中的內容,然後讀它裡面記錄的二次接索引塊中的內容,再一次的,最後才能獲得檔案資訊的實際地址。姑,最多情況需4次訪問磁碟。
l 外存空間的管理
空閒空間的三種分配方式:連續、連結、索引
空閒空間的管理
1. 空閒表/鏈、位示土圖、成組連結
2. 成組連結
l 例:某系統採用成組連結法管理磁碟空閒空間,目前狀態如下圖,問:
l 還有多少空閒盤塊?
l 若從當前狀態下,系統分配3個盤塊給某檔案後,又刪除另一檔案,回收了第700,711,703,788,701這5個盤塊。則磁碟空間的狀態圖中的連結情況又如何?
l 空閒盤塊成組連結示意圖
l 裝置管理
l I\0 系統的組成
CPU\通道\控制器\裝置
l 磁碟緩衝管理的作用、方式
l 虛擬:spooling
l I\O軟體層次
中斷處理程式\裝置驅動程式\裝置獨立性程式\使用者應用程式
l 磁碟排程
電梯排程演算法等p233