1. 程式人生 > >【作業系統原理】訊號量機制

【作業系統原理】訊號量機制

        訊號量機制是一種卓有成效的程序互斥同步工具。這裡只介紹記錄型訊號量機制,它可以有效的解決CPU“忙等”的問題,實現互斥。

       記錄型訊號量機制的資料結構如下(看不懂那些字母是什麼其實沒有關係):

           type semaphore=record

value:integer;   (下文傳說中的S)

L: list of process;(排隊使用的程序要待的阻塞佇列)

end;

       這裡需要注意記錄型訊號量S的整形分量value的值的物理含義,表示該類資源可用的數目,也可以說是執行P操作而不會被阻塞的程序的數目,一般為<=1,因為這裡是程序互斥(但是也可以大於1),等於1時,表示該資源可用,等於0時,表示該資源正在被使用,而且沒有程序被阻塞,但是當期數值小於0時,其絕對值表示訊號量S的阻塞佇列中的程序數。L表示程序的阻塞佇列。

       記錄型訊號機制的實現伴隨著P操作V操作,P操作指的是測試,V操作指的是增加,不要問我為啥叫PV,我只能說來源於荷蘭語。一般P操作要伴隨著V操作,二者成雙成對出現。

           那麼我們來看看P操作和V操作到底是什麼,那麼神奇:

P的原語操作可以描述為:

procedure P(var s:semaphore);

begin

s.value:=s.value-1;(將訊號量值減1)

if s.value<0 then block(s.L);(若訊號量值小於0,則呼叫阻塞原語阻塞自己,插入到阻塞佇列中去)

end;

V的原語操作可以描述為:

procedure P(var s:semaphore);

begin

s.value:=s.value+1;(將訊號量值加1)

if s.value<0 then wakeup(s.L);(若訊號量值小於等於0,則呼叫喚醒原語從阻塞佇列中喚醒一個程序)

舉個實際的栗子

用P,V操作實現火車網際網路定票系統在北京,天津兩地的兩個終端售票程序發售同一班次車票的過程。

(1)   根據顧客要求找到公共資料單元

(2)   P(S);

(3)   把Pk的值讀到工作暫存器R1中;(程序的臨界區)

(4)   根據顧客訂票數修改R1;(程序的臨界區)

(5)   將R1的值寫到Pk中;(程序的臨界區)

(6)   V(S);

(7)   售出顧客所定的票,返回;

例如北京的售票區搶先執行並且進入自己的臨界區,這時輪到天津區執行程序,也要求進入臨界區,執行P(S),但是因為北京已經在臨界區中,執行完P了,此時的訊號量S的值已經從1減為0,然後因為天津售票執行P(S),此時P(S)的值變為-1,導致自己阻塞,直到北京之行完V(S),使得S的值變為0,然後天津從阻塞佇列中喚醒,當它再次訪問公共票據單元時,資料已經被背景改過了,然後就實現了互斥。

相關推薦

作業系統原理訊號機制

        訊號量機制是一種卓有成效的程序互斥同步工具。這裡只介紹記錄型訊號量機制,它可以有效的解決CPU“忙等”的問題,實現互斥。        記錄型訊號量機制的資料結構如下(看不懂那些字母

OS訊號機制

儲存一下自己看,侵刪。 原文地址:http://blog.csdn.net/speedme/article/details/17597373 上篇部落格中(程序同步之臨界區域問題及Peterson演算法),我們對臨界區,臨界資源,鎖機制詳細解讀了下,留下了一個問題,就是鎖機制只能判斷臨界資源是否被佔用,所

計算機作業系統感悟隨筆--訊號機制

2.訊號量的基本應用 實現程序互斥 實現程序間的前趨關係(有序) 3.整型訊號量 把整型訊號量定義為一個表示資源數目的整型量S,除初始化外,僅能通過兩個標準的原子操作wait(S)和signal(S)來訪問。 wait(S)和signal(S)操作可以描述為

C語言unix c訊號集(system v ipc)

二、訊號量集(system v ipc) 訊號量集就是陣列,數組裡的每個元素都是訊號量的型別 1、獲取鍵值 ftok(3) 2、使用鍵值獲取訊號量集的id semget(2) #in

Windows原理執行緒同步-訊號

#include "stdafx.h" #include <windows.h> int g_num = 0; HANDLE g_hSemaphore = nullptr; DWORD WINAPI ThreadProc(LPVOID lpParam) { for

作業系統訊號與P、V操作

知識點: 訊號量機制主要有整形訊號量、記錄性訊號量、訊號量集機制。 訊號量是一個整形變數,根據控制物件的不同賦不同的值。訊號量可分為公用訊號量和私用訊號量兩類。 公用訊號量:實現程序間的互斥,初值=1或資源的數目 私用訊號量:實現程序間的同步,初值=0或某個整數 訊

Nginx訊號

TERM, INT Quick shutdown     QUIT Graceful shutdown 優雅的關閉程序,即等請求結束後再關閉 KILL

Linux訊號通訊程式設計訊號互斥程式設計

一、訊號量(semaphore)         在程序互斥中,訊號量主要用來保護臨界資源。程序通過訊號量來判斷 是否能夠訪問該共享資源。(當然,後面我們還會用來控制程序同步)。 二、訊號量

tensorflow2.0AutoGraph的機制原理

有三種計算圖的構建方式:靜態計算圖,動態計算圖,以及Autograph。 TensorFlow 2.0主要使用的是動態計算圖和Autograph。 動態計算圖易於除錯,編碼效率較高,但執行效率偏低。 靜態計算圖執行效率很高,但較難除錯。 而Autograph機制可以將動態圖轉換成靜態計算圖,兼收執行效率和編碼

Storm篇--Storm 容錯機制

其他 同時 strong 都得 keep idt 重新啟動 font pos 一、前述 Storm容錯機制相比其他的大數據組件做的非常不錯。 二、具體原因 結合Storm集群架構圖: 我們的程序提交流程如下: 其中各個組件的作用如下: Nimbus資源調度任務分

底層原理四位計算機的原理及其實現

一點 led燈 waiting lean div rm2 src and nvt 你是否想過,計算機為什麽會加減乘除?或者更直接一點,計算機的原理到底是什麽? Waitingforfriday有一篇詳細的教程,講解了如何自己動手,制作一臺四位計算機。從中可以看到,二進制、數

計算機原理程序執行過程

進程 cnblogs div 空間 時間片 chat 內存管理 tro alt 本章主要介紹程序執行過程中操作系統、CPU都幹了什麽 運行前 程序在運行前,只是在硬盤上待著,此時就是一堆二進制代碼而已,沒有任何作用。 程序只有進入了內存才能運行,但是要進入內存,則需要服從操

計算機原理CPU部分.md

工作 信號 通過 臃腫 流水線 處理 2.6 操作 ade 本文由CPU阿甘改編而得,主要講的是系統啟動和程序執行時CPU做的工作。 CPU的構成 中央處理器(CPU,Central Processing Unit)由運算器、控制器、Cache等。 控制器:主要是對指令進

組成原理第一章 計算機系統概述

表示 運算 傳遞 intro 指令 掌握 周期 style 主存 重點掌握:MAR和MDR的含義,主存容量大小、CPU執行時間的計算,性能指標CPI、MIPS、主頻等等。 1. 存儲單元:CPU訪問存儲器的基本單位,每個單元有一個地址。通常是字節大小的整數倍。 2. CPU

線上直播數據下的風控

數字 dba chat TP strip 人工 com for 數據分析師 嘉賓: 王頓 Wolfric 講師簡介: 極光數據部風控中心高級數據分析師、高級售前工程師。 王頓於美國史蒂文斯理工學院獲得碩士學位,本科畢業於上海財經大學,精通大數據技術

編譯原理c++實現自下而上語法分析器

不可 acm times style size PC -i 表達式 鏈接 寫在前面:本博客為本人原創,嚴禁任何形式的轉載!本博客只允許放在博客園(.cnblogs.com),如果您在其他網站看到這篇博文,請通過下面這個唯一的合法鏈接轉到原文! 本博客全網唯一合法URL:ht

計數原理UVA11538 Chess Queen

put typename return col nbsp 題意 putchar cst putc 傳送門 Description   給你一個n*m的棋盤,在棋盤上放置一黑一白兩個皇後,求兩個皇後能夠互相攻擊的方案個數 Input   多組數據,每組數據包括:

MongoDB 復制集 第 二 部 之選舉原理

command primary red and 優先權 mongo mongodb 主機 set 目錄: 1·復制與選舉的原理與驗證2·oplog 日誌調整3·配置復制集的優先級4·部署認證的復制5·總結 復制與選舉的原理: 上一篇文章搭建了多臺實例,部署成復制集,

Memcached 主主復制 + Keepalived 高可用架構附上原理

ima pki nag ali event 主服務器 figure tel outer 目錄: 1·Memcached 主主復制概念2·Memcached 高可用的實現3·案例部署4·總結 Memcached 主主復制概念 (1)主主復制概念: Memcached

Windows原理非同步IO-_APC(非同步過程呼叫)

// 同步IO的缺點是, 在讀寫檔案時, 如果檔案太大, 或者讀寫的時間太長, 就會在讀寫函式中 // 阻塞住. // 非同步IO解決了這個問題, 非同步IO讀寫檔案時, 檔案再大也不會阻塞住 // 但是非同步IO要完成這樣的特性是有一點付出的 // 非同步讀寫檔案後, 需要通過一些方式