1. 程式人生 > >作業系統筆記2

作業系統筆記2

 

l  程序

l  併發:多個程式在一段時間內同時發生

l  程序是什麼?與程式區別

程序就是用於描述、控制程式在記憶體中併發執行的一個東東

程式的一次執行

是一個程式與其資料一道通過處理機的執行所發生的活動

程序是程序實體的執行過程,是系統進行資源分配和排程的一個獨立單位。

¡ 動與靜:

程序是動態的,程式是靜態的:程式是有序程式碼的集合;程序是程式的執行。

¡ 永久與暫時:

程序是暫時的,程式是永久的:程序是一個狀態變化的過程,程式可長久儲存。

¡ 結構:

程序的組成包括程式、資料和程序控制塊

(程序各種控制資訊)。

¡ 程序與程式的對應關係:

都可1對n。通過多次執行,一個程式可對應多個程序;通過呼叫關係,一個程序可包括多個程式。

 

l  程序的基本狀態

(1)就緒狀態(Ready)

      程序獲得除CPU之外的所有必需資源,一旦得到CPU控制權,可立即執行。

(2)執行狀態(Running)

      程序已獲得所有執行必需的資源,正在處理機上執行。

(3)阻塞狀態(Blocked)

     

正在執行的程序由於發生某事件(請求I/O、申請緩衝、時間片到)而暫時無法執行時,便放棄CPU後暫停

 

 

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 常用的實施方法:撤銷或掛起一些程序,以便回收一些資源並將他們分配給已阻塞程序,使之轉為就緒以繼續執行。

死鎖的檢測與解除措施,有可能使系統獲得較好的資源利用率和吞吐量(死鎖機率不一定很高),但在實現上難度也最大。

 

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