作業系統 訊號量 併發控制

2021-07-05 03:41:41 字數 1358 閱讀 7086

0. 基礎概念

程序同步: 有邏輯的程序之間需要有一定的先後順序;

程序互斥: 程序之間對臨界資源的使用;

1. 產生背景:

由於多個程序要使用臨界資源,必須對臨界資源進行管理;

臨界資源是一次僅允許乙個程序使用的共享資源

每個程序中訪問臨界資源的那段程式稱為臨界區,或者叫臨界**。

2. 關於pv操作

p,v原語的理論不得不提到的乙個人便是赫赫有名的荷蘭科學家e.w.dijkstra

在計算機作業系統中,pv操作是程序管理中的難點。

首先應弄清pv操作的含義:pv操作由p操作原語和v操作原語組成(原語是不可中斷的過程),對訊號量進行操作,具體定義如下:

p(s):①將訊號量s的值減1,即s=s-1;

②如果s>=0,則該程序繼續執行;否則該程序置為等待狀態,排入等待佇列。

v(s):①將訊號量s的值加1,即s=s+1;

②如果s>0,則該程序繼續執行;否則釋放佇列中第乙個等待訊號量的程序。

3.  訊號量的機制:

訊號量分為整型訊號量有忙等情況,記錄型訊號量沒有,只能有原子操作函式更改;

訊號量(semaphore)的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量;當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改變。

一般來說,訊號量s>0時,s表示可用資源的數量。執行一次p操作意味著請求分配乙個單位資源,因此s的值減1;當s<0時,表示已經沒有可用資源,請求者必須等待別的程序釋放該類資源,它才能執行下去。而執行乙個v操作意味著釋放乙個單位資源,因此s的值加1;若s£0,表示有某些程序正在等待該資源,因此要喚醒乙個等待狀態的程序,使之執行下去。

4. 相關系統介面

可以使用系統呼叫semget()建立乙個新的訊號量集,或者訪問乙個已經存在的訊號量集:

系統呼叫semctl用來執行在訊號量集上的控制操作。因為訊號量一般是作為乙個訊號量集使用的,而不是乙個單獨的訊號量。所以在訊號量集的操作中,不但要知道ipc關鍵字值,也要知道訊號量集中的具體的訊號量。

5. 相關說明 

雖說訊號量機制畢加鎖方法要好得多,但是也不是說它沒有任何的缺陷。由此我們也可以清晰地看到,這種訊號量機制必須有公共記憶體,不能用於分布式作業系統,這是它最大的弱點。  1

.訊號量對程序而言是共享的的,也就是說對系統來說,必須要有共享記憶體; 2

.如果不刪除訊號量,它將繼續在系統中存在,即使無程式在使用她也是粗次。 3

.訊號量也是一種有限資源,大家需要節約使用。

6. 推薦文章:

消費者生產者問題:

讀者寫者問題:

其他部落格:

作業系統訊號量

本文將針對較為簡單的生產者消費者問題,給出利用訊號量解決問題的方法。生產者 能產生並投放資源的程序 消費者 單純使用 消耗 資源的程序 問題表述 一組 生產者程序和一 組消費者程序 設每組有多個程序 通過緩衝區發生聯絡。生產者程序將生產的產品 資料 訊息等統稱為產品 送入緩衝區,消費者程序從中取出產...

作業系統 訊號量

代表了一類物理資源,是相應的物理資源的抽象,通常為整型或結構體型,除了初始化之外,其他情況下只能使用p v進行操作 執行一次p s 則s.value減一,若執行p s 之後s.value 0,則表示該類資源可用,否則不可用 執行一次v s 則s.value加一,若執行v操作以後,s.value的值仍...

作業系統 訊號量機制

用乙個整數型的變數作為訊號量,用來表示股系統中某種資源的數量。與普通整數變數的區別 對訊號量的操作只有三種,初始化,p操作,v操作。p操作 相當於wait原語,進入區 v操作 signal原語,相當於退出區。大體實現 wait 方法一氣呵成,避免併發導致的問題。但是不滿足 讓權等待原則 程序會處於忙...