作業系統 程序同步

2021-10-22 09:09:29 字數 2923 閱讀 4696

生產者消費者問題

哲學家就餐

讀者寫著問題

銀行家演算法

程序同步是指在多道程式的環境下,存在著不同的制約關係,為了協調這種相互制約的關係,實現資源共享和程序協作,從而避免程序之間的衝突,進而引入程序同步。

對於某些資源來說,在同一時間只能被乙個程序所占用,這些資源就被成為臨界資源。典型的臨界資源比如物理上的印表機等等。

對於臨界資源的訪問,必須是互斥的,也就是當臨界資源被占用時,另乙個申請臨界資源的程序會被阻塞,直到其所申請的臨界資源被釋放。程序內訪問臨界資源的**被稱為臨界區。

指為了完成某任務而建立的兩個或多個執行緒,這些執行緒需要在某些位置上協調他們的工作而等待、傳遞資訊所產生的制約關係。

比如b程序需要a程序執行完畢才能執行,所以為了等待a程序,b程序就先會阻塞,等a程序執行完畢之後才會去執行。

某個程序進入臨界區後,另外乙個想要進入臨界區的程序必須等待,只有當臨界區中的程序退出臨界區後,等待的程序才可以進入臨界區。

也就是pv操作。設定乙個表示資源個數的訊號量s,通過對s的p、v操作來實現程序的互斥。

p也就是占有,也就是對s進行減操作,表示有乙個程序將占有或者等待資源,如果s≥0則繼續,否則將程序阻塞,並放入阻塞佇列。

v也就是釋放,也就是對s進行加操作,表示有乙個占用資源的程序釋放了資源,如果s≤0則會從阻塞佇列中喚醒乙個程序來執行。

需要三個訊號量:empty(空資源)、full(滿資源)、mut(互斥)

生產者生產資源時,就p(empty) v(full),並且在進入臨界區時p(mut)出來時v(mut)。

消費者消費資源時,就p(full) v(empty),並且在進入臨界區時p(mut)出來時v(mut)。

哲學家只需要乙個訊號量,但是他的核心在於他對筷子的控制。當有5位哲學家時:

/*當哲學家飢餓時,總是先拿左邊的筷子,再拿右邊的筷子*/

// p操作

wait

(chopstick[i]);

wait

(chopstick[

(i+1)%

5]);

// 吃飯

/*當哲學家進餐完成後,總是先放下左邊的筷子,再放下右邊的筷子*/

// v操作

signal

(chopstick[i]);

signal

(chopstick[

(i+1)%

5]);

讀者和寫者之間互斥訊號量wrmutex,代表讀者個數的訊號量訊號量readcount,以及保護readcount的互斥訊號量rmutex。

互斥訊號量wrt,初值是1,代表乙個共享檔案,解決「讀-寫」互斥,「寫-寫」互斥。

乙個記數器,即整型變數readcount,記錄讀者數,初值是0。 來乙個讀者, readcount加1 當readcount =1表示是第乙個讀者, 則需要執行p操作搶占檔案;否則表示已有讀者在安全的讀資料。 走乙個讀者,readcount減1 當readcount =0表示是最後乙個讀者,則需要v操作釋放資源;否則表示還有讀者在讀資料。

所以對於讀者來說,開始讀之前,得讓readcount加一,並且這段操作需要使用到rmutex互斥訊號量;讀完之後也得讓readcount—,這段操作也得需要rmutex互斥訊號量。中間的操作需要用到wrmutex,先p再v。

寫者,直接先p再v

int readcount=0; 

semaphore mutex=

1, wrt=1;

讀者程序:

wait (mutex)

; readcount++;if

(readcount ==1)

wait

(wrt)

; signal (mutex)

; …

reading is performed

…wait (mutex)

; readcount--;if

(readcount ==0)

signal (wrt)

; signal (mutex);

寫者程序:

wait

(wrt)

; …

writing is performed

…signal

(wrt)

;

當乙個程序申請使用資源的時候,銀行家演算法通過先 試探 分配給該程序資源,然後通過安全性演算法判斷分配後的系統是否處於安全狀態,若不安全則試探分配作廢,讓該程序繼續等待。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-wr09m9w9-1615871085077)(

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-lriowkdb-1615871085082)(

執行緒同步的方式主要有: 臨界區(critical section)、互斥量(mutex)、訊號量(semaphore)、事件(event)。

他們的主要區別和特點如下:

**1)臨界區:**通過對多執行緒的序列化來訪問公共資源或一段**,速度快,適合控制資料訪問。在任意時刻只允許乙個執行緒對共享資源進行訪問,

如果有多個執行緒試圖訪問公共資源,那麼在有乙個執行緒進入後,其他試圖訪問公共資源的執行緒將被掛起,並一直等到進入臨界區的執行緒離開,臨界區在被釋放後,其他執行緒才可以搶占。

**2)互斥量:**採用互斥物件機制。 只有擁有互斥物件的執行緒才有訪問公共資源的許可權,因為互斥物件只有乙個,所以能保證公共資源不會同時被多個執行緒訪問。

互斥不僅能實現同一應用程式的公共資源安全共享,還能實現不同應用程式的公共資源安全共享。

**3)訊號量:**它允許多個執行緒在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大執行緒數目。

4)事 件:通過通知操作的方式來保持執行緒的同步,還可以方便實現對多個執行緒的優先順序比較的操作。

作業系統 程序同步

臨界資源 critical resouce 臨界區 critical section 硬體同步機制 訊號量機制 訊號量的應用 管程3使用多道批處理系統不僅能有效的改善資源的利用率,還可以顯著地提高系統的吞吐量,但同時會使系統變得更加複雜,會使程式的執行結果存在不確定性。所以必須引入程序同步機制從而保...

作業系統 程序同步

引入程序 提高了資源的利用率和系統的吞吐量 程序的非同步性 會給系統造成混亂 程序同步基本概念 1,兩種形式的制約關係 a 間接相互制約 ab兩程序爭用一台印表機 b 直接相互制約 a程序放資料 緩衝區 b程序從緩衝區取資料 2,臨界資源 硬體臨界資源 軟體臨界資源 印表機,磁帶機,緩衝區。3,臨界...

作業系統 程序同步

ipc.件 include include include include include include include define bufsz 256 建立或獲取 ipc 的一組函式的原型說明 int get ipc id char proc file,key t key char set s...