37 作業系統的訊號量

2021-10-05 17:14:00 字數 1870 閱讀 5578

訊號量又有人叫訊號燈

將訊號量之前我們先講講執行緒的互斥同步

舉個例子:

我們之前講過程序是乙個公司執行緒員工。我們知道乙個公司是有很多員工的,但是有的資源往往沒有那麼多。比如印表機往往只有一台或兩台。那麼只有一台的情況下,小張和小李兩個人同時要用到的話,他們現在就是執行緒的互斥狀態,印表機只能乙個人用。這種互斥是無序競爭,因為誰先用是不知道的。那麼同步是什麼呢?同步就是一種有序合作,是建立在互斥上的。

這個其實還涉及了臨界區臨界資源pv操作

臨界資源很容易理解:就是印表機

因為臨界資源的使用是互斥的,所以必須設定臨界區,臨界區是指使用臨界資源的**段。 也就是相當於臨界區就是乙個列印室,裡面放著印表機。這個列印室門口只放著一把鑰匙,也就是只能同時進去乙個人,然後就會自動反鎖。只有等待這個人出來之後把鑰匙放回門上,下個人才能進去,這樣就避免上面小張小李尷尬的情況。這種狀態就是同步,同步是有序的。

訊號量其實就包括兩個東西,乙個指標,乙個是訊號值

指標就是列印室門口排隊的人的順序。訊號值就是門口的鑰匙

如果門口還有鑰匙,也就是訊號值為正,說明正在排隊的人還能進去。

如果沒有鑰匙,也就是訊號值為負。就說明裡面有人。

那麼問題又來了?我們知道辦公室的鑰匙使用辦公室的人使用的。

有乙個概念叫做pv操作。概念上 p是荷蘭語的申請的意思。v則是釋放。

也很容易理解p操作相當於拿鑰匙。v操作相當於把鑰匙放回去。

那麼pv操作的應該注意的地方:

pv操作是成對出現的,相當於你拿了鑰匙就要把鑰匙放回去。

那麼訊號燈是有什麼注意的呢?就是鑰匙的數量是根據資源決定的,加入列印室裡有3臺印表機,那麼門口就應該放三把鑰匙。

說了這麼久?那麼訊號燈是什麼呢?

資料結構上來說 訊號燈就是乙個有指標和整型值的結構體,作用是跟pv操作一起實現執行緒的同步

再補充一點:pv操作又叫pv原語。

原語的概念:

原語通常由若干條指令組成,用來實現某個特定的操作。

通過一段不可分割的或不可中斷的程式實現其功能。原語是作業系統的核心,是作業系統的乙個組成部分。

通俗來講:原語是作業系統的核心指令,實現特定的操作。

那麼原語相當於公司裡的什麼呢?

我們之前說過cpu相當於公司的老闆,擁有很多家公司。但是只能在同一時刻打理一家公司。作業系統就是老闆對所有公司定下的規則,公司守則。原語就是這些規則裡面的核心部分。不如說上班遲到扣工資等等。那麼pv原語就是規定了:你進去之前要排隊拿鑰匙,不能踹門。出來後要放鑰匙,不能帶走。

好吧,撤多了。

作業系統訊號量

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

作業系統 訊號量

代表了一類物理資源,是相應的物理資源的抽象,通常為整型或結構體型,除了初始化之外,其他情況下只能使用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 方法一氣呵成,避免併發導致的問題。但是不滿足 讓權等待原則 程序會處於忙...