第⼆章 進程管理 中
目錄
第⼋節 調度算法的評價指标
知識預覽
⼀些指标
第⼋節 ⼩結
第九節 FCFS、SJF、HRRN調度算法知識總覽
先來先服務(FCFS,First come first serve) 例題
短作業優先(SJF,ShorTest job First)例題1 (⾮搶占式)
例題2(搶占式)srtn最短剩餘時間優先算法
對于FCFS和SJF兩種算法的思考
⾼響應⽐優先(HRRN,Highest Response Ratio Next)例題
第九節⼩結
第⼗節 調度算法:時間⽚輪轉、優先級、多級反饋隊列知識總覽
時間⽚輪轉調度算法例題
優先級調度算法例題
優先級如何合理設置
動态優先級該如何調整思考
多級反饋隊列算法例題
第⼗節⼩節第⼗⼀節 進程同步 進程互斥概念引⼊
第⼗⼀節⼩結
第⼗⼆節 進程互斥地軟件實現⽅法知識總覽
如果不存在互斥單标志法
雙标志先檢查法例⼦雙标志後檢查法
pererson算法(⽪特森算法)第⼗⼆節⼩節
第⼗三節 進程互斥地硬件實現⽅法知識總覽
中斷屏蔽⽅法
TestAndSet指令 swap指令
第⼗三節⼩結第⼗四節 信号量機制
知識總覽
wait(P)和signal(V)整形信号量記錄型信号量第⼗四節⼩結
第⼗五節 ⽤信号量實現進程互斥、同步、前驅關系知識總覽
信号量機制實現進程互斥信号量機制實現進程同步信号量機制實現前驅關系第⼗五節⼩結
第⼗六節 ⽣産者消費者問題
思考是否能改變相鄰pv操作順序第⼗六節⼩結
第⼋節 調度算法的評價指标知識預覽⼀些指标
CPU利⽤率:指CPU“忙碌”的時間占總時間的⽐例。
利⽤率=忙碌的時間/總時間
系統吞吐量:單位時間内完成作業的數量
系統吞吐量=總共完成了多少道作業/總共花了多少時間eg:某計算機系統處理10道作業,共花費100買,則系統吞吐量為
10/100=0.1道/秒
周轉時間:是指從作業被提交給系統開始,道作業完成诶那個為⽌的這段時間間隔。他包括四個部分:作業在外存後備隊列上等待作業調度(⾼級調度)的時間、進程在就緒隊列上等待進程調度(低級調度)的時間、進程在CPU上執⾏的時間、進程等待I/O 操作完成的時間。後三項在⼀個作業的整個處理過程中,可能發⽣多次。(後三項實為就緒态、運⾏态、阻塞态)
作業周轉時間=作業完成時間-作業提交時間帶權周轉時間=作業周轉時間/作業實際運⾏時間=(作業完成時間-作業提交時間)/作業實際運⾏時間
對于周轉時間相同的零個作業,實際運⾏時間⻓的作業在相同時間内被服務的時間更多,帶權周轉時間更⼩,⽤戶滿意度更⾼
對于實際運⾏時間相同的兩個作業,周轉時間短的帶權周轉時間更⼩,⽤戶滿意度更
⾼
平均帶權周轉時間=各作業帶權周轉時間之和/作業數
等待時間,指進程/作業處于等待處理機狀态時間之和,等待時間越⻓,⽤戶滿意度越低
響應時間: |
指⽤戶提交請求到⾸次産⽣響應所⽤的時間。
第⼋節 ⼩結第九節 FCFS、SJF、HRRN調度算法知識總覽
調度算法的學習思路
1、算法思想 2、算法規則
算法思想 主要從“公平”的⾓度考慮(類似⽣活中買東⻄的例⼦算法規則 按照作業/進程到達的先後順序進⾏服務
⽤于作業/進程調度 ⽤于作業調度時,考慮的式那個作業先到達後備隊列,⽤于進程調度時。考慮的式哪個進程先到達就緒隊列是否可搶占 ⾮搶占式的算法
優缺點 優點 公平、算法實現簡單 缺點排在⻓作業(進程)後⾯的短作業需要等待很
⻓時間,帶權周轉時間很⼤,對短作業來說⽤戶體驗不好。即,FCFS算法對⻓作業有利,對短作業`不利(Eg:排隊買奶茶 你隻買⼀杯奶茶⽽你的前邊有⼀個⼈排隊買
20被奶茶 你的帶權周轉時間會變得很⻓ 體驗很差)是否會導緻饑餓 不會
例題
先來先服務調度算法:按照到達的先後順序調度,事實上就是等待時間越久的越優先得到服務。
因此上圖調度順序為:P1-P2-P3-P4
周轉時間=完成時間-到達時間
P1的周轉時間=7-0=7
P2的周轉時間=11-2=9 因為P2在2時刻就到達了然後等待P1執⾏完畢後P2才可以開始
P3的周轉時間=12-4=8
P4的周轉時間=12 4-5=11
帶權周轉時間=周轉時間/運⾏時間
p1=7/7=1 p2=9/4=2.25 p3=8/1=8
p4=11/4=2.75
等待時間=周轉時間-運⾏時間
P1=7-7=0
P2=9-4=5
P3=8-1=7
P4=11-4=7
平均周轉時間=(7 9 8 11)/4=8.75
平均帶權周轉時間=(1 2.25 8 2.75)/4=3.5 平均等待時間=(0 5 7 7)/4=4.75
短作業優先(SJF,Shortest job First)算法思想 追求最少的平均等待時間,最少的平均周轉時間、最少的平均帶權周轉時間算法規則 最短的作業(進程)優先得到服務(所謂最短指的是要求服務時間最短)
⽤于作業/進程調度 即可⽤于作業調度,也可以⽤于進程調度。⽤于進程調度時稱為“短進程優先算法” 是否可搶占?
SJF和SPF是⾮搶占式的算法。但是也有搶占式的版本—最短剩餘時間優先算法
優點 ”最短的“平均等待時間、平均周轉時間
缺點 不公平 對短作業有利,對⻓作業不利。可能産⽣饑餓現象,另外作業進程的運⾏時間是由⽤戶提功德,并不⼀定真實,不⼀定做到真正的短作業優先
是否會導緻饑餓 會,如果源源不斷地有短作業/進程到來,可能使⻓作業/進程⻓時間得不到服務,産⽣“饑餓”現象。如果⼀直得不到服務,則程為“饑餓” 例題1 (⾮搶占式)
短作業/進程優先調度算法:每次調度時選擇當前已到達且運⾏時間最短的作業(進程)
上圖優先級順序為p1-p3-p2-p4
周轉時間=完成時間-到達時間
P1=7-0=7
P3=8-4=4
P2=12-2=10
P4=16-5=11
帶權周轉時間=周轉時間/運⾏時間
P1=7/7=1 P3=4/1=4 P2=10/4=2.25 P4=11/4=2.75 等待時間=周轉時間-運⾏時間
P1=7-7=0 P3=4-1=3 P2=10-4=6 P4=11-4=7
例題2(搶占式)srtn最短剩餘時間優先算法
srtn最短剩餘時間優先算法:每當有進程加⼊就緒隊列改變時就需要調度,如果新到達的進程剩餘時間⽐當前運⾏的進程剩餘時間更短,則由新進程搶占處理機,當前進程重新回到就緒隊列,另外當⼀個進程完成時也需要調度
TIPs:如果題⽬中未特别說明所提的短作業/進程優先算法默認時⾮搶占的
SJF調度算法的平均等待時間、平均周轉時間最少是不嚴謹的 因為最短剩餘時間算法得到的平均等待、周轉時間更少 如果加上附加條件“在所有進程同時可運⾏時。采⽤
SJF算法的平均等待時間、平均周轉時間最少
對于FCFS和SJF兩種算法的思考
FCFS先來先服務算法是在每次調度的時候選擇⼀個等待時間最⻓的作業(進程)為其服務。的那是沒有考慮到作業的運⾏時間,因此導緻了對短作業不由好的問題(買奶茶例⼦)
SJF算法是選擇⼀個執⾏時間最短的作業為其服務。但是⼜完全不考慮各個作業的等待時間,因此導緻了對⻓作業不友好的問題,甚⾄還會造成饑餓問題
為了解決這兩個的缺點問題引出了⾼響應⽐優先(HRRN,Highest Response Ratio
Next)
⾼響應⽐優先(HRRN,Highest Response Ratio Next)算法思想 要綜合考慮作業/進程的等待時間和要求服務的時間算法規則 在每次調度時先計算各個作業/進程的響應⽐,選擇響應⽐最⾼的作業/進程為其服務
響應⽐=(等待時間 要求服務時間)/ 要求服務時間 〉=1
⽤于作業/進程調度 即可⽤于作業調度,也可⽤于進程調度
是否可搶占 ⾮搶占式的算法。因此隻有當前運⾏的作業/進程主動放棄處理機時,才需要調度,才需要計算響應⽐
優缺點 綜合考慮了等待時間和運⾏時間(要求服務時間) 等待時間相同時,要求服務時間短的優先(SJF的優點) 要求服務時間相同時,等待時間⻓的優先(FCFS的優點) 對于⻓作業來說,随着等待會四濺越來越久,其響應⽐也會越來越⼤,從⽽避免了⻓作業饑餓的問題。
是否會導緻饑餓 不會
例題
0時刻:隻有P1到達就緒隊列,P1上處理機
7時刻:(P1結束主動發起CPU):就緒隊列中有P2(響應⽐=(5 4)/4=2.25)、
P3((3 1)=4) 、P4((2 4)/4=1.5)
8時刻:(P3完成):P2(2.5)、P4(1.75)
12時刻:(P2完成):就緒隊列中隻剩下P4
P2和P4要求服務時間⼀樣,但P2等待時間⻓,所以必然是P2響應⽐更⼤
第九節⼩結本⼩結需要多做題進⾏練習。
第⼗節 調度算法:時間⽚輪轉、優先級、多級反饋隊列知識總覽
時間⽚輪轉調度算法
算法思想 公平的、輪流的為各個進程服務,讓每個進程在⼀定的時間間隔内都可以得到響應
算法規則 按照各進程到達就緒隊列的順序,輪流讓各個進程執⾏⼀個時間⽚(如
ms)。若進程未在⼀個時間⽚内執⾏完,則剝奪處理機,将進程重新放到就緒隊列尾重新排隊。
⽤于作業/調度 主要⽤于進程調度(因為隻有作業放⼊内存建⽴了相應的進程後,才能呢個杯分配處理機時間⽚)
是否可搶占 是⼀種搶占式的算法,由時鐘裝置發出的時鐘中斷來通知CPU時間已到。(計算機組成原理相關内容)
優缺點 優點:公平;⾹硬塊,适⽤于分時操作系統,缺點:由于⾼頻率切換進程,因此有⼀定開銷;不去分任務的緊急程度是否會導緻饑餓 不會導緻饑餓例題
如果時間⽚太⼤,每⼀個進程都可以在⼀個時間⽚内完成诶那個,則時間⽚輪轉調度
⽅法就退化為先來先服務調度算法⽽且會增⼤響應時間,因此時間⽚不能呢個太⼤但是如果時間⽚太⼩會導緻系統頻繁的切換,系統會化肥⼤量地時間來處理切換進程,從⽽導緻⽤于進程執⾏的時間⽐例減⼩。因此時間⽚也不能太⼩。
優先級調度算法算法思想 實時操作系統的出現,越來越多的應⽤場景需要根據任務的緊急程度來決定處理順序
算法規則 每隔作業/進程有各⾃的優先級,調度室選擇優先級最⾼的作業/進程
⽤于作業/調度 即可⽤于作業調度,也可⽤于進程調度。甚⾄嘛還會⽤于在之後會學習的I/O調度中
是否可搶占 搶占式、⾮搶占式都有。做題是的去别在于:⾮搶占式在進程主動放棄處理機時進⾏調度即可,⽽搶占式還需要在就緒隊列變化是檢查是否會發⽣搶占。優缺點 優點:⽤優先級區分緊急程度、重要程度,适⽤于實時操作系統。克靈活的調整對各種作業/進程的偏好程度。 缺點 若源源不斷的有⾼優先級進程到來,則可能導緻饑餓
是否會導緻饑餓 會導緻饑餓 新來的進程如果優先級較⾼ 原先到達的優先級較低的進程可能⼀直沒有機會上處理機運⾏
例題⾮搶占式
⾮搶占式的優先級算法,⾸先P1到達了處理機,P1先運⾏直到主動放棄處理機然後此時P2和P3都到達了選擇優先數⼤的P3運⾏,然後P2和P4優先數⼀樣但是由于P2先到達所以先運⾏P2 搶占式
除了要關注主動放棄處理機的情況 還要關注新到達的進程優先級是否更⾼。每次調度時選擇當前已到達且優先級最⾼的進程。當前進程主動放棄處理機時發⾏商呢個調度。另外,當就緒隊列發⽣改變時也需要檢查是否會發⽣搶占。
就緒隊列未必隻有⼀個,可以按照不同的優先級來進⾏組織。另外可以吧優先級⾼的進程排在更靠近隊頭的位置。 根據優先級是否可以動态改變,可以将優先級分為靜态優先級和動态優先級兩種。
靜态優先級:創建進程時确定,之後⼀直不變。
動态優先級:創建進程時有⼀個初始值,之後會根據情況動态的調整優先級
優先級如何合理設置系統進程優于⽤戶進程前台進程優于後台進程
操作系統更偏好于I/O繁忙型進程(對⽴時計算型進程—cpu繁忙型進程)
1.解釋 I/O設備和CPU可以并⾏⼯作,如果優先讓io繁忙型進程優先運⾏的話,則
⽉有可能呢個讓2.io設備盡早的投⼊⼯作,則資源利⽤率,系統吞吐量都會得到提升
動态優先級該如何調整從各進程公平、提升資源利⽤率等⾓度
1.如果進程在隊列中等待了很⻓時間,則可以适當提升其優先級 ——等待時間變
⻓響應⽐會變⼤
2.如果進程占⽤處理機運⾏了很⻓時間,則可以适當降低其優先級
3.如果⼀個進程頻繁的進⾏I/O操作,則可以認為該程序是⼀個I/O繁忙型進程 适當提升其優先級
思考FCFS先來先服務算法的優點是公平
SJF短作業優先算法優點是能盡快處理完短作業,平均等待時間/周轉時間等參數都很優秀
時間⽚輪轉算法是可以讓各個進程得到及時的響應 每個進程都被分配相對公平的執⾏時間
優先級調度算法可以靈活的調整各種進程被服務的機會
針對此我們引⼊了⼀種 多級反饋隊列算法
多級反饋隊列算法算法思想 對其他調度算法的折中權衡算法規則
⽤于作業/進程調度 ⽤于進程調度
是否可搶占 搶占式的算法。在k級隊列的進程運⾏過程中,若更上級的隊列(1~`k-1 級)中進⼊了⼀個新進程,則優于新進程處于優先級更⾼的隊列中,因此新進程會搶占處理機,原來運⾏的進程放回K級隊列隊尾
優缺點 優點:對于各種類型的進程相對公平;每個新到達的進程都可以很快就得到響應;短進程隻⽤較少的時間就可完成;不必實現估計進程的運⾏時間(避免⽤戶作假);可靈活的調整對各類進程的偏好程度,⽐如CPU密集型進程、I∕O密集型進程
(因為将因I/O⽽阻塞的進程重新放回原隊列,這樣I/O進程就了⼀保持較⾼優先級)是否會導緻饑餓 會 被降為低級優先級的進程可能⻓時間得不到服務。
例題
隻有K級隊列為空時,才會為K 1級隊頭的進程分配時間⽚最後⼀級 被搶占處理機的進程重新放回原隊列的隊尾第⼗節⼩節
第⼗⼀節 進程同步 進程互斥
回顧 異步性的特征 異步性是指,各并發執⾏的進程以各⾃獨⽴的,不可預知的速度向前推進。
進程通信—管道通信
需要先寫數據到管道然後在讀數據
概念引⼊進程同步讀進程和寫進程并發的執⾏,優于并發必然導緻異步性,因此寫數據和讀數據兩個操作的先後順序是不确定的。⽽實際應⽤中⼜必須按照“寫數據-讀數據”的順序來執⾏的。
如何解決這種異步問題就是“進程同步”所讨論的内容
同步亦稱直接制約關系,他是指為完成某種任務⽽建⽴的兩個或多個進程,這些進程因為需要在某些位置上協調他們的⼯作次序⽽産⽣的制約關系,進程間的直接制約關系就是源于他們之間的相互合作進程互斥
進程的“并發”需要“共享”的⽀持,各個并發執⾏的進程不可避免的需要共享⼀些系統資源(⽐如内存,⼜⽐如打印機、攝像⼜這樣的I/O設備)兩種資源共享⽅式
互斥共享⽅式 — 系統中的某些資源(臨界資源),雖然可以提供給多個進程使
⽤,但是⼀個時間段隻允許⼀個進程訪問該資源
(臨界資源):⼀個時間段隻允許⼀個進程使⽤的資源,⽐如許多物理設備,還有很多變量 數據 内存緩沖區等都屬于臨界資源,必須互斥地訪問,隻有⼀個進程訪問完成然後釋放資源後其他進程才能去訪問
臨界區是進程中訪問臨界資源的代碼段
進⼊區和退出區是負責實現互斥的代碼段臨界區也可稱為”臨界段“
思考
進程互斥訪問需要遵循以上四個原則 在後期會詳細學到
同時共享⽅式 — 系統中的某些資源,允許⼀個好似簡短内⼜多個進程”同時“對他們進⾏訪問。第⼗⼀節⼩結
第⼗⼆節 進程互斥地軟件實現⽅法知識總覽
1.本節需要學習各個算法的思想 原理
2.接合上節學習的”實現互斥的四個邏輯分區“ 重點理解各算法理解各種算法在進⼊區、退出區都做了什麼
3.分析各算法存在的缺陷如果不存在互斥
單标志法
算法思想:兩個進程诶那各在訪問完臨界資源後會把使⽤臨界區的權限轉交給另⼀個進程。也就是說每個進程進⼊臨界區的權限隻能被另⼀個進程賦予。
這⼀段剛開始還沒看明⽩;這段的意思是因為turn的初值是0,所以允許P0
進程上處理機操作,但是是P1現在處理機隻能等待P1進程的時間⽚先消耗完調度到
P0上處理機
xdm我感覺這⼀段沒看明⽩ 因為turn的初值是0 然後如果P1進程先執⾏括号内(0!
=1)是成⽴的 所以他的值就是1吧,然後P1進程就能執⾏吧要是⼤家看明⽩這塊還⿇煩跟我說⼀聲反正以上算法可以實現”同⼀時刻最多隻允許⼀個進程訪問臨界區“ 就是他的解釋這點沒⼤理解協助理解的例⼦
因為隻能按照P0-P1-P0-P1循環這樣輪流訪問,帶來的問題是如果P1此刻允許進⼊臨界資源區⼆P1⼀直不訪問這時候turn的值⽆法改變P0也⽆法去訪問該臨界資源,所以為翻了”空閑讓進“原則
雙标志先檢查法算法思想: 設置⼀個 布爾類型數組flag「」,數組中各個元素⽤來标記各進程進⼊臨界區的意願,⽐如”flag[0]=ture“意味着0号進程P0現在想要進⼊臨界區,每個進程在進
⼊臨界區之前先檢查當前有沒有别的進程想進⼊臨界區,如果沒有,則把⾃⾝對應的标志flag[i]設置為ture,之後開始訪問臨界區
例⼦
如果在P0進程剛執⾏完判斷還沒有對true的值進⾏修改時發⽣了進程切換P1判斷并上鎖就會發⽣很尴尬的事情 P1訪問臨界資源後切換會P0進程繼續也去把flag的值設為 true訪問臨界資源
所以按照152637的順序進⾏執⾏的時候,P0和P1将會同時訪問臨界區。
因此,雙标志先檢查法的主要問題是違反了”忙則等待“原則。
原因在于,進⼊區的”檢查“和”上鎖“兩個處理不是⼀⽓呵成的,檢查後上鎖前可能發⽣進程切換
雙标志後檢查法算法思想 先上鎖後檢查 其餘與先檢查法
雖然解決了忙則等待的問題但是⼜違背了”空閑讓進“和”有限等待“原則,會因各進程都
⻓期⽆法訪問臨界資源⽽産⽣”饑餓“現象
pererson算法(⽪特森算法)算法思想 :結合雙标志法 單标志法的思想,如果雙⽅都整着想要進⼊臨界區,可以讓進程嘗試”孔融讓梨“(謙讓)。
⽪特森算法看似複雜其實在進⼊區就⼲了
主動争取 主動謙讓 檢查對⽅是否也想使⽤,且最後⼀次是不是⾃⼰謙讓了
如果上⼀次是對⽅謙讓則⾃⼰進⼊臨界區(誰在最後進⾏了謙讓,誰就失去了⾏動的優先權)
⽪特森算法⽤軟件的⽅法解決了進程互斥問題,遵循了空閑讓進、忙則等待、有限等待 三個原則,但是依然為遵循讓權等待的原則。
第⼗⼆節⼩節第⼗三節 進程互斥地硬件實現⽅法知識總覽
中斷屏蔽⽅法
前邊在學習原語的不可被打斷中可以引導此種⽅法
利⽤“開/關中斷指令”實現(與原語的實現思想相同,即在某進程開始訪問臨界區到結束訪問為⽌都不允許被中斷,也就不能發⽣進程切換,因此也不可能發⽣兩個同時訪問臨界區的情況)
。。。
關中斷———關中斷後即不允許當前進程被中斷,也必然不會發⽣進程切換臨界區
開中斷———-直到當前進程訪問完臨界區,再執⾏開中斷指令,才有可能有别的進程上處理機并訪問臨界資源
。。。
優點:簡單⾼效
缺點:不是⽤于多處理機;隻适⽤于操作系統内核程序,不适⽤于⽤戶進程(因為開關中斷指令隻能運⾏在内核态,這組指令如果讓⽤戶随意使⽤會很危險)
TestAndSet指令由硬件完成
swap指令
第⼗三節⼩結
第⼗四節 信号量機制知識總覽
⽤戶進程可以通過操作系統的⼀堆原語來對信号量進⾏操作,從⽽很⽅便的
信号量其實就是⼀個變量(可以是⼀個整數,也可以是更複雜的記錄型變量)可以⽤⼀個信号量來表⽰系統中某種資源的數量,⽐如:系統中隻有⼀台打印機就可以設置
⼀個初值為1的信号量
原語是⼀種特殊的程序段,其執⾏隻能⼀起呵成,不可被中斷。原語是由關中斷開中斷指令實現的。軟件解決⽅案的主要問題是有“進⼊區的各種操作⽆法⼀起呵成”,因此如果能把進⼊區、退出區的操作都⽤原語實現,使這些操作都能“⼀⽓呵成”就能避免這些問題。
wait(P)和signal(V)
簡寫記憶為PV操作
整形信号量⽤⼀個整數型的變量作為信号量,⽤來表⽰系統中某種資源的數量
與普通的整形變量不同之處在于 對信号量的操作隻有三種即 初始化 P操作 V操作
Eg:計算機系統中有⼀台打印機
代碼的部分說明
在第⼀個圖中 while(s≤0);結束是分号 s的初始值是1所也不滿⾜循環條件直接執⾏s=s-1;若是資源被占⽤
S的值=0則⼀直重複while循環直到時間⽚⽤完發⽣進程調度改變s的值。
記錄型信号量整形信号量的缺陷是存在“忙等”問題,因此⼈們⼜提出了“記錄型信号量”即⽤記錄型數據結構表⽰的信号量
Eg:
每有⼀個進程申請打印機進程就會使value的值減⼀,P0,P1進程使value值由2到1到 0,P2再進⾏申請時會使value的值變為-1,這時候P2進程會主動把⾃⼰阻塞放⼊打印機的等待隊列中。
P3進⾏申請時會使value值變為-2然後也會主動進⼊阻塞隊列。每個進程在調⽤完後都會對value的值進⾏加⼀,如果⼩于0的話說明仍然有進程還在等待隊列 進程在使⽤完成後會使⽤⼀個wake up原語喚醒處于等待隊列的進程
第⼗四節⼩結
第⼗五節 ⽤信号量實現進程互斥、同步、前驅關系知識總覽
⼀個信号量對應⼀種資源
信号量的值=這種資源的剩餘數量(信号量的值如果⼩于0,說明此時有進程正在等待這種資源)
P(s)—申請⼀個資源s,如果資源補夠就阻塞等待
V(s)—釋放⼀個資源s,如果有進程在等待該資源,則喚醒進程信号量機制實現進程互斥
分析并發進程的關鍵活動,劃定臨界區(如:對臨界資源打印機的訪問就放在臨界區)
設置互斥信号mutex,初始值為1 進⼊區P(mutex)申請資源退出區v(mutex)釋放資源代碼
semaphore mutex=1聲明記錄型信号量
注意對于不同的臨界資源要設置不同的互斥信号量每⼀個進程進⼊臨界區都需要對mutex進⾏p操作 處臨機區都要進⾏v操作—可以認為 mutex表⽰進⼊臨界區的名額 初始值為1表⽰⽤有⼀個名額進⼊臨界區
信号量機制實現進程同步
進程同步:要讓各并發進程按要求有序的推進
設置⼀個初始信号量s為0
如果P1先上處理機運⾏則執⾏完代碼2後才會對s進⾏v操作使s的值加⼀這時候執⾏P2代碼4之前的P操作就能得到資源繼續執⾏
如果P2先上處理機運⾏,⾸先對s進⾏P操作發現s的值是0知識後P2進程就會發⽣阻塞,發⽣進程調度執⾏P1進程釋放⼀個s資源然後喚醒進程P2就可以⼀直保證代碼2是在代碼4之前執⾏的了。
注意
在前操作之後執⾏V(s)在後操作之前執⾏P(s) 前V後P
信号量機制實現前驅關系這⼀塊跟數據結構上的⼀樣
第⼗五節⼩結
第⼗六節 ⽣産者消費者問題
問題描述:有⽣産者 有消費者 有容量有限的倉庫 倉庫滿了不能存,倉庫沒有不能取我們需要設置的變量有
semaphore mutex = 1; //互斥信号量,實現對緩沖區的互斥訪問 semaphore empty = n; //同步信号量,表⽰空閑緩沖區的數量 semaphore full = 0; //同步信号量,表⽰産品的數量,也即⾮空緩沖區的數量如何實現
思考是否能改變相鄰pv操作順序
第⼗六節⼩結
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!