臨界區(qū)資源互斥訪問(wèn)
進(jìn)程管理中,對(duì)臨界資源需要互斥訪問(wèn)。其中對(duì)實(shí)現(xiàn)對(duì)臨界區(qū)互斥訪問(wèn)有軟件和硬件方法沪铭。
- 軟件方法包括:?jiǎn)螛?biāo)志發(fā),雙標(biāo)志先檢查法偏瓤,雙標(biāo)志后檢查法杀怠,皮特斯Peterson's算法。
- 硬件方法包括:中斷屏蔽法厅克,TSL指定和Swap指定赔退。
但是四種軟件實(shí)現(xiàn)方法,三種硬件實(shí)現(xiàn)方法都依然存在各種問(wèn)題证舟。最主要問(wèn)題是都不能實(shí)現(xiàn)讓權(quán)等待硕旗。
信號(hào)量
是一個(gè)變量,一個(gè)信號(hào)量對(duì)應(yīng)一種資源女责,只能被兩種PV兩種原語(yǔ)操作漆枚,以此實(shí)現(xiàn)進(jìn)程互斥,進(jìn)程同步抵知。(PV源于荷蘭語(yǔ)proberen和verhogen分別是嘗試試用和增加的意思)
補(bǔ)充:原語(yǔ)是一種特殊的程序段墙基,不可被中斷。原語(yǔ)是由關(guān)中斷/開(kāi)中斷指令來(lái)實(shí)現(xiàn)的刷喜。
wait() //進(jìn)入?yún)^(qū)
訪問(wèn)臨界資源 //臨界區(qū)
signal() //退出區(qū)
然后對(duì)于整型信號(hào)量種的pv操作原語(yǔ)wait和signal分別實(shí)現(xiàn)邏輯是:
wait(S){
while(S<=0);
S-=1; //檢查和上鎖都在wait中不能被中斷(進(jìn)程不能被切換走)
}
signal(S){
S+=1
}
對(duì)于記錄型信號(hào)量:
typedef struct{
int value;
struct process *L;
} semaphore;
void wait (semaphore S) { //相當(dāng)于申請(qǐng)資源
S.value--;
if(S.value<0) {
add this process to S.L;
block(S.L);
}
}
void signal (semaphore S) { //相當(dāng)于釋放資源
S.value++;
if(S.value<=0){
remove a process P from S.L;
wakeup(P);
}
}
信號(hào)量機(jī)制實(shí)現(xiàn)進(jìn)程的同步残制,互斥,前驅(qū)關(guān)系
一個(gè)信號(hào)量對(duì)應(yīng)一種資源
信號(hào)量的值=這種資源的剩余數(shù)量(若為負(fù)吱肌,說(shuō)明此時(shí)有進(jìn)程在等待這種資源)
1.進(jìn)程的同步
一前一后的操作
同步量信號(hào)S痘拆,初始為0
在前操作之后執(zhí)行V
在后操作之后執(zhí)行P 口訣:前v后p
2.進(jìn)程的互斥
如上pv操作
3.進(jìn)程的前驅(qū)關(guān)系
本質(zhì)上是多級(jí)同步問(wèn)題
經(jīng)典進(jìn)程同步問(wèn)題1-生產(chǎn)者消費(fèi)者問(wèn)題
緩沖區(qū)的這種臨界資源只能互斥訪問(wèn)
p嘗試消耗
v 增加
semaphore mutex=1;//互斥信號(hào)量仰禽,實(shí)現(xiàn)對(duì)緩沖區(qū)的互斥訪問(wèn)
semaphore empty=n; //同步信號(hào)量氮墨,表示空閑緩沖區(qū)的數(shù)量
semaphore ful1=0;//同步信號(hào)量纺蛆,表示產(chǎn)品的數(shù)量,也即井空緩沖區(qū)的數(shù)量
producer(){
while(1){
生產(chǎn)一個(gè)產(chǎn)品;
P(empty);①
P(mutex);② //如果1 2 順序顛倒呢规揪,會(huì)出行死鎖
把產(chǎn)品放入緩沖區(qū);
V(mutex);
V(full)
}
}
所以實(shí)現(xiàn)互斥的p操作一定要在實(shí)現(xiàn)同步的P操作之后桥氏。
v操作不會(huì)導(dǎo)致進(jìn)程阻塞,因此兩個(gè)v操作順序可以交換猛铅。
經(jīng)典進(jìn)程同步問(wèn)題2-吸煙者問(wèn)題
一個(gè)生產(chǎn)者 生產(chǎn)多類產(chǎn)品
經(jīng)典進(jìn)程同步問(wèn)題3-讀寫(xiě)者問(wèn)題
緩沖區(qū)不會(huì)消耗掉
經(jīng)典進(jìn)程同步問(wèn)題4-哲學(xué)家進(jìn)餐問(wèn)題
管程
封裝思想