OS學習筆記四:同步機制
一、 程式互斥
1、程式互斥
由於各 程式 要求使用共享資源( 變數 、檔案等),而 這些 資源需要排他性使用各程式之間 競爭使用這些 資源—— 這一關係稱為 程式互斥
臨界資源:critical resource
系統中某些資源一次只允許一個程式使用,稱這樣的資源為 臨界資源 或 互斥資源 或 共享變數臨界區( ( 互斥區) ) :critical section(region)
各個程式中對某個臨界資源(共享變數)實施操作 的程式 片段
2、臨界區(互斥區)使用原則
沒有程式在臨界區時,想進入臨界區的程式可進入
不允許兩個程式同時處於其臨界區 中
臨界區外執行的程式不得阻塞其他程式進入臨界區
不得使程式無限期等待進入臨界區
3、實現互斥的解決方法
軟體方案
- Dekker 解法、Peterson 解法
硬體 方案
- 遮蔽中斷、TSL(XCHG) 指令
二、程式同步
1、程式同步
程式同步:synchronization 指系統中多個程式中發生的事件存在某種時序關係 ,需要相互合作,共同完成一項任務
具體地說,一個程式執行到某一點時,要求另一夥伴程式為它提供訊息,在未獲得訊息之前,該程式進入阻塞態,獲得訊息後被喚醒進入就緒態
三、訊號量及PV操作
1、訊號量及PV操作
一個特殊變數
用於程式間傳遞 信 息 的 一個整數值
定義如下:
struc semaphore
{
int count;
queueType queue;
}
- 對訊號量可以實施的操作:初始化、P 和V (P 、V 分別是荷蘭語的test(proberen) 和increment(verhogen) )
2、p、v操作定義
P( s )
{
s.count--;
if ( s.count < 0 )
{
該進 狀 態 置 為阻 塞 狀 態 ;
將 該進 插入相應的等待 隊
列 s.queue 末 尾 ;
重新 調 度 ;
}
}
P( s )
{
s.count--;
if ( s.count < 0 )
{
該進 狀 態 置 為阻 塞 狀 態 ;
將 該進 插入相應的等待 隊
列 s.queue 末 尾 ;
重新 調 度 ;
}
}
3、有關說明
P 、V 操作為原語 操作(primitive or atomic action)
在 訊號量上定義了三個操作:初始化( 非負數) 、P 操作、V 操作
最初提出的是二元訊號量 (解決互斥 )之後, 推廣 到一般訊號量(多值)或計數訊號量(解決同步)
四、管程的基本概念
1、管程的定義
是一個特殊的模組
有一個名字
由關於共享資源的資料結構及在其上操作的一組過程組成
2、程式與管程
程式 只能通過呼叫 管程中的過程 來間接地訪問管程中的資料結構
3、管程需要保證什麼?
作為一種同步機制,管程要解決兩個問題
互斥
- 管程是 互斥 進入 的(為了保證管程中資料結構的資料完整性)
- 管程的互斥性是由編譯器負責保證的
同步
- 管程中設定 條件 變數及等待/ 喚醒操作 以 解決同步問題
- 可以讓一個程式或 執行緒在 條件變數上等待(此時,應先釋放管程的使用權),也可以通過傳送訊號將等待在條件變數上的程式或執行緒喚醒
五、管程小結
管程 : 抽象資料型別
- 有一個明確定義的操作集合,通過它且只有通過它才能操縱該資料型別的例項
實現管程結構必須保證下面幾點:
(1)只能通過管程的某個過程才能訪問資源;
(2) 管 程是互斥的 , 某個時刻只能有一個程式或執行緒呼叫 管程中 的過程
條件變數:為 提供程式與其他程式通訊或同步 而引入
- wait/signal 或 wait/notify 或 wait/broadcast
六、程式間通訊
1、基本通訊方式
訊息傳遞
共享 記憶體
管道
套接 字
遠端過程呼叫
2、原子操作
不可分割,在執行完之前不會被其他任務或事件中斷
常用於實現資源的引用計數
3、屏障(BARRIER)
一種同步機制( ( 又稱柵欄、關卡) )
用於對一組執行緒進行協調
應用場景
- 一組執行緒協同完成一項任務,需要所有執行緒都到達一個匯合點後再一起向前推進
本文整理自:《作業系統原理》北京大學_陳向群 講義
個人微信公眾號:
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- Redis 學習筆記(四)RDB 和 AOF 持久化機制Redis筆記持久化
- 學習筆記(2)IPC機制筆記
- OS筆記(程式同步)筆記
- OS筆記(中斷/異常機制)筆記
- os/signal學習筆記筆記
- MySQL 學習筆記(二)MVCC 機制MySql筆記MVC
- OS學習筆記八:死鎖筆記
- JVM學習筆記——類載入機制JVM筆記
- goLang學習筆記(四)Golang筆記
- Javascript 學習 筆記四JavaScript筆記
- 【python學習筆記】Python反射機制Python筆記反射
- OS學習筆記五:儲存模型筆記模型
- OS學習筆記七:IO系統筆記
- MFC學習(四) 訊息機制
- ONNXRuntime學習筆記(四)筆記
- activiti學習筆記(四)managementService筆記
- Android學習筆記四Android筆記
- Spss 學習筆記(四)SPSS筆記
- 四元數 學習筆記筆記
- 【讀書筆記】Android的Ashmem機制學習筆記Android
- OS學習筆記六:檔案系統筆記
- 非同步Servlet學習筆記(一)非同步Servlet筆記
- Nginx虛擬主機常用配置(學習筆記四)Nginx筆記
- webrtc QOS筆記四 Nack機制淺析Web筆記
- React學習手冊-React執行機制筆記(二)React筆記
- ES6 學習筆記四筆記
- TS學習筆記(四):函式筆記函式
- springboot 學習筆記(四)Spring Boot筆記
- 大資料學習筆記(四)大資料筆記
- NET Core-學習筆記(四)筆記
- 【Flutter 學習筆記一】Mac OS 安裝 FlutterFlutter筆記Mac
- OS學習筆記一: 中斷與異常筆記
- OS學習筆記二: 程式執行緒模型筆記執行緒模型
- OS學習筆記三:處理器排程筆記
- 計算機網路傳輸層學習筆記---(四)計算機網路筆記
- CUDA學習筆記之柵欄同步筆記
- uc/os-iii學習筆記-任務同步(訊號量、時間標誌組)筆記
- mongoDB研究筆記:複製集資料同步機制MongoDB筆記