【作業系統原理】訊號量機制
訊號量機制是一種卓有成效的程序互斥同步工具。這裡只介紹記錄型訊號量機制,它可以有效的解決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.0】AutoGraph的機制原理
有三種計算圖的構建方式:靜態計算圖,動態計算圖,以及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要完成這樣的特性是有一點付出的 // 非同步讀寫檔案後, 需要通過一些方式