作業系統 訊號量機制

2021-10-08 16:24:51 字數 1342 閱讀 3113

用乙個整數型的變數作為訊號量,用來表示股系統中某種資源的數量。

與普通整數變數的區別:對訊號量的操作只有三種,

初始化,p操作,v操作。

p操作:相當於wait原語,進入區

v操作:signal原語,相當於退出區。

大體實現:

wait()方法一氣呵成,避免併發導致的問題。

但是不滿足「讓權等待原則」,程序會處於忙等的狀態。

int s=1;

void

wait

(int s)

void signal (

int s)

/記錄型訊號量的定義/

typedef

struct

semaphore;

/*某程序需要使用資源時,通過wait原語申請*/

void

wait

(semaphore s)

}// 程序使用完資源後,通過signal原語釋放資源

void

signal

(semaphore s)

}

s.value的初始值表示系統中某種資源的數目。 對訊號量s的一次p操作意味著程序請求乙個單位的該類資源,因此需要執行s.value--,表示資源數減1,當s.value<0時表示該類資源已經被分配完畢,因此使申請資源的程序呼叫block原語進行自我阻塞(執行態->阻塞態),主動放棄處理機,並插入該類資源等代佇列中,該實現遵循了讓權等待原則,不會出現忙等現象。 v操作中,一定是先s.value++,如果加一後,s.value仍然大於等於0,表示依然有程序在等待該類資源。 可能需要執行wakeup原語。 記錄型訊號量實現系統資源的申請和釋放,還可以實現程序的互斥和同步。

訊號量機制實現程序互斥

1、分析併發程序的關鍵活動,滑動臨界區

2、設定互斥訊號量mutex,初始值為1

3、在臨界區之前執行p

4、在臨界區之後執行v

注意:對於不同的臨界資源需要設定不同的互斥訊號量

p,v操作必須成對出現。缺少p操作不能保證程序互斥訪問資源,缺少v操作,導致資源永不被釋放,等待的程序永遠不被喚醒。

訊號量實現程序同步

分析問題,找出**需要實現「一前一後的」同步關係

設定同步訊號量,初始值為0

在「前操作」之後執行v操作

在「後操作之前」執行p操作。

訊號量實現程序的前驅關係

分析問題劃出前驅圖,把每乙個前驅關係都看成乙個同步問題

為每一對前去關係設定同步訊號量,初始值為0

在「前操作」之後執行v操作

在「後操作之前」執行p操作。

作業系統之 訊號量機制

訊號量機制是一種卓越成效的程序同步工具,訊號量機制已經被廣泛的使用於單處理機,和多處理系統的計算機網路中。訊號量s 是乙個整數,s大於等於零代表可供併發程序使用的資源實體數,當 s小於零時則表示正在等待使用臨界區的程序數,整型訊號量 整型訊號量定義乙個用於表示資源數目的整型量數目s 但是僅能通過兩個...

作業系統 2 3訊號量機制

荷蘭科學家 dijkstra 狄克斯特拉 提出的一種卓有成效的程序同步機制。1 整型訊號量 1.訊號量定義為乙個 整型量 2.根據初始情況賦相應的值 3.僅能通過 兩個原子操作 來訪問。p操作 wait s while s 0 do no op s s 1 v操作 signal s s s 1 2....

作業系統之訊號量機制

使用者程序可以使用作業系統提供的原語來操作訊號量,以實現程序的互斥和同步 原語是一塊不可中斷的程式段,由關中斷實現 這對原語是wait signal 又稱為p v操作 訊號量可分為整形訊號量記錄型訊號量 程序的互斥需要遵守 四個原則,空則讓進,忙則等待,有限等待,讓全等待 由圖可以看出,在進行p操作...