操作系統課設——linux下基於信號量互斥申請(一)

課設任務

設計內容:

1.創建進程:手動創建幾個進程,或者隨即創建幾個進程,都在界面上完成;要求包括進程的名稱(不能重複)、執行時間和申請資源的等待時間等。在此同時刻可能有多個進行在內存申請某資源。 假設創建5個進程

2.類臨界資源的管理,包括申請以及分配等。分別通過信號量實現或者管程實現。

3.銀行家算法,判斷是否可以進行資源的分配。

 

設計要求:

調用相關的Linux系統內核函數

要求在屏幕上輸出各進程的創建信息,資源的分配信息,進行執行信息,進行動態申請資源信息等。..

 

課設準備:

1、爲什麼要進行進程信號量互斥申請?

在多道環境下,計算機系統中存在多個進程,這些進程並非相互隔絕,一方面,他們相互協作以達到運行作業所預期的目的,另一方面他們又相互競爭使用有限的資源,既協作又競爭,這兩個要素都意味着進程之間需要某種形式的通信,這主要表現爲同步和互斥兩個方面。

同步指的是有寫作關係的進程之間要不斷地調整他們的相對速度,比如說AB進程,A產生數據,B計算結果,AB公用一個緩存區。緩存區爲空時,B不能運行,等待A向緩存區傳遞數據後B才能運行,緩存區滿時,A不能運行,等待B取走數據後,A才能運行。此時AB爲直接制約(即同步)關係。

互斥多個進程之間要互斥地共享某一資源,也就是說,如果一個進程已經開始使用某個資源且未使用完畢,則別的進程不得使用,若另一個進程想使用則必須等待。

2、那麼多個進程如何互斥地共享某一資源(爲什麼引入進程臨界資源)?

假定某一遊樂場,用一個計數器count表示在場人數,進入一人時,進程PIN實現計數+1,出去一人時,進程POUT實現計數器-1,由於入場與退場是隨機的,因此進程PIN和POUT是併發的,程序如下:

PIN

R1:count;

R1:=R1+1;

count:=R1;

POUT

R2:=count;

R2:=R2-1;

count:=R2;

如果兩個進程執行中,由於某種原因使進程PIN打斷,且進程調度使他們呈下面次序:

PIN:      R1:count;

             R1:=R1+1;

POUT:  R2:=count;

             R2:=R2-1;

             count:=R2;

PIN:      count:=R1;

按這樣的次序執行後,count的最終值不能保持爲n,而變成n+1,如果進程被打斷的情況如下:

PIN:      R1:count;

             R1:=R1+1;

POUT:  R2:=count;

             R2:=R2-1;

PIN:      count:=R1;

POUT:  count:=R2;

於是,兩個進程執行完後,count的最終值爲n-1,也就是說兩個進程的執行次序對結果是有影響的,就這個例子來說,導致錯誤的原因有兩個:一是共享了變離,二是同時使用了這個變量,也就是說,在一個進程開始使用且尚未結束使用的期間,另一個進程也開始使用了,這種錯誤通常也叫做“與時間有關的錯誤”;

爲了避免這種錯誤,理論上有兩種辦法:一是取消變量、表格等的共享;二是允許共享,但要互斥地使用;前者當前還不可行,而如何互斥的使用這些資源就引入了臨界資源和臨界區的概念。(這裏不進行更多解釋)

3、那麼,信號量如何實現互斥量申請呢?

一種方法是實施臨界區互斥的鎖操作法(自行百度),重要的是後面一種方法,P,V操作,需要引入信號量的概念。

信號量是1965年由荷蘭人Dijkstra提出的一種卓有成效的進程間同步及互斥工具,有時也叫信號燈,本質上是一個計數器,用於多進程對共享數據對象的讀取,它和管道有所不同,它不以傳送數據爲主要目的,它主要是用來保護共享資源(信號量也屬於臨界資源),使得資源在一個時刻只有一個進程獨享。是一個記錄行數據結構,定義如下:

struct Semaphore {
    int value;    //信號量的值
    int *ptr-of-semque;    //指向隊列的指針
}S;

信號量的一般結構以及PCB隊列如圖: 

 

創建或打開信號量以及PV操作:

https://blog.csdn.net/enjoymyselflzz/article/details/81603577

4、所要求的利用linux內核函數又是什麼,這些函數又怎麼用?

參考鏈接:https://blog.csdn.net/qinglongqishi1/article/details/81015787

https://blog.csdn.net/github_33719169/article/details/84838979

目前還未找到完整的內核函數介紹的鏈接,本次課設以這兩個鏈接爲參考

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章