清華大學作業系統OS學習(十二) 訊號量與管程

2021-09-24 13:49:41 字數 1911 閱讀 8459

一、訊號量

1、訊號量(semaphore):是作業系統提供的一種協調共享資源訪問的方法

①訊號是一種抽象資料結構

乙個整型int(sem),可進行兩個原子操作

p() sem–,如果sem<0,等待,否則繼續,類似lock_acquire 

v() sem++,如果sem<=0,說明當前有等著的,喚醒掛在訊號量上的程序,可以是乙個,可以是多個

②訊號量的特性

訊號量是被保護的整數變數。初始化完成後,只能通過p()v()操作修改;由作業系統保證,pv操作時原子操作。

p()可能阻塞,v()不會阻塞

2、訊號量的實現

二、訊號量使用

1、訊號量分兩種型別: 

①二進位制訊號量:約等於鎖,取值0 or 1 

②資源訊號量:資源數目任何非負值 

可以用在兩個方面,互斥或者條件同步(排程約束—–乙個執行緒等待另乙個執行緒的事情發生)

③用二進位制訊號量實現鎖的互斥

mutex= new semaphore(0)  //設定乙個訊號量初值為0

mutex->p();

…critical section…

mutex->v();

④必須成對使用p()和v()操作

p()操作保證互斥訪問臨界資源

v()操作在使用後釋放臨界資源

p()v()操作不能次序錯誤、重複或遺漏

2、訊號量實現

class semaphore

//p()操作

semaphore::p()

}//v()操作

semaphore::v()

}

存在問題:

3、生產者—消費者問題

生產者——>緩衝區——>消費者

①問題描述:乙個或多個生產者在生成資料後放在乙個緩衝區裡;單個消費者從緩衝區取出資料處理;任何時刻只能有乙個生產者或消費者可訪問緩衝區

②問題分析:任何時刻只能有乙個執行緒操作緩衝區(互斥訪問);緩衝區空時,消費者必須等待生產者(條件同步);緩衝區滿時,生產者必須等待消費者(條件同步)

③訊號量描述各個約束

二進位制訊號量mutex

資源訊號量fullbuffers

資源訊號量emptybuffers

ⅰ、初始化:

class boundedbuffer
ⅱ、如果buffer不空,則full/empty設別的值

boundedbuffer::deposit(c)

boundedbuffer::remove(c)

//p&v可以換順序嗎?可以。

三、管程

1、管程monitor

①、定義:包含了一系列的共享變數,以及針對這些變數的操作的函式的組合/模組 包含了:乙個鎖,指定臨界區,確保互斥性;0或者多個條件變數,根據條件的個數決定,等待/通知訊號量,併發訪問共享資料 

②、條件變數(condition variab)

ⅰ、條件變數是管程內的等待機制:進入管程的執行緒因資源被占用而進入等待狀態;每個條件變數表示一種等待原因,對應乙個等待佇列;

ⅱ、wait() 操作:將自己阻塞在等待佇列中,喚醒乙個等待者或釋放管程的互斥訪問;

ⅲ、signal()操作:將自己佇列中的乙個執行緒喚醒;如果等待隊列為空,則等同空操作;

↑ schedule選擇下乙個process區執行

呼叫管程解決消費者生產者問題 

count記錄了當前buffer的資料個數 

先在前後加鎖,因為要保證只有乙個執行緒在臨界區 lock在等待/睡眠的時候通過;lock->acquire()管程進入和lock->release()管程釋放;notfull.wait(&lock)釋放鎖。喚醒後獲得鎖。

2、管程條件變數的釋放處理方式

作業系統OS筆記目錄(清華大學)

不得不說想自學學作業系統,清華大學慕課是個不錯的選擇,但難度比較大,特別是想把慕課的實驗部分內容也完成的話。不過如果能把它的實驗部分也完成的話,相信你會對作業系統有個新的認識,在以後的接觸有關計算機方面的內容都很有幫助。如果有打算考清華專業課912研究生的也可以參考下我的筆記 有些我的總結,比較水,...

清華大學作業系統(二)

定義系統呼叫 於應用程式 應用程式主動向作業系統發出服務請求 異常 於不良的應用程式 非法指令或者壞的處理狀態 中斷 於外設 來自不同的硬體裝置的計時器或者是網路中斷 為什麼使用系統呼叫 處理時間 響應硬體 1 將內部 外部事件設定為中斷標記 2 中斷事件的id 軟體 作業系統 異常 異常標號 殺死...

作業系統筆記 清華大學陳渝

分頁page 記憶體塊大小固定 幀 頁表 page frame 解決頁表過大 最不常用演算法 least frequently used,lfu 將訪問次數最少的資料換出 belady現象,分配更多物理記憶體,缺頁反而更多的現象,如fifo 全域性頁面置換演算法 抖動 thrashing 記憶體嚴重...