目錄
一、同步互斥
?二、互斥的實現(xiàn)方法
2.1軟件實現(xiàn)
2.1.1單標(biāo)志法
2.1.2雙標(biāo)志先檢查
2.1.3雙標(biāo)志后檢查
2.1.4Petersons算法
2.2硬件實現(xiàn)
2.2.1 TestAndSet指令
2.2.2 Swap指令?
?三、信號量機制
3.1整形變量
?3.2 記錄型變量
?3.3用信號量實現(xiàn)進(jìn)程互斥、同步、前驅(qū)關(guān)系
3.3.1互斥
?3.3.2同步
3.3.3前驅(qū)關(guān)系
四、同步和互斥經(jīng)典問題
4.1 生產(chǎn)者-消費者問題
?4.2多生產(chǎn)多消費問題
?4.3 吸煙者問題
?4.4 讀寫者問題
?4.5 哲學(xué)家進(jìn)餐問題
?五、管程
?六、死鎖
6.1死鎖產(chǎn)生得必要條件
6.2發(fā)生死鎖的時候
七、死鎖的處理策略
?7.1預(yù)防死鎖 靜態(tài)策略
7.2 避免死鎖(銀行家算法)動態(tài)策略
7.3 死鎖得檢測和解除
死鎖得檢測
死鎖得解除
一、同步互斥
?二、互斥的實現(xiàn)方法
2.1軟件實現(xiàn)
2.1.1單標(biāo)志法
兩個進(jìn)程在訪問完臨界區(qū)后會使用臨界區(qū)的權(quán)限轉(zhuǎn)交給另一個進(jìn)程,也就是說每個進(jìn)程進(jìn)入臨界區(qū)的權(quán)限只能被另一個進(jìn)程賦予
只能輪流使用?
2.1.2雙標(biāo)志先檢查
2.1.3雙標(biāo)志后檢查
2.1.4Petersons算法
2.2硬件實現(xiàn)
中斷屏蔽方法:利用“開/關(guān)中斷指令”實現(xiàn)
關(guān)中斷-》臨界區(qū)-》開中斷
2.2.1 TestAndSet指令
簡稱TS或TSL
2.2.2 Swap指令?
?三、信號量機制
信號量其實就是一個變量(可以是一個整數(shù),也可以是復(fù)制的記錄型變量),可以用一個信號量表示系統(tǒng)中某種資源數(shù)量
一對原語:wait(s)和signal(s),簡稱P(s),V(s)
3.1整形變量
表示系統(tǒng)中某種資源的數(shù)量
?3.2 記錄型變量
?3.3用信號量實現(xiàn)進(jìn)程互斥、同步、前驅(qū)關(guān)系
3.3.1互斥
?3.3.2同步
?并發(fā)進(jìn)程要求有序的推進(jìn)
3.3.3前驅(qū)關(guān)系
四、同步和互斥經(jīng)典問題
實現(xiàn)互斥P操作一定要早實現(xiàn)同步P操作后
4.1 生產(chǎn)者-消費者問題
?4.2多生產(chǎn)多消費問題
?4.3 吸煙者問題
?4.4 讀寫者問題
?4.5 哲學(xué)家進(jìn)餐問題
?五、管程
管程是一種特殊的軟件模塊,有這些部分組成:
1.局部于管程的共享數(shù)據(jù)結(jié)構(gòu)說明
2.對該數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的一組過程
3.對局部于管程的共享數(shù)據(jù)結(jié)構(gòu)設(shè)置初始值語句
4.管程有一個名字
基本特征:
1.局部于管程的數(shù)據(jù)只能被局部于管程的過程訪問
2.一個進(jìn)程只有通過調(diào)用管程內(nèi)的過程才能進(jìn)入管程訪問共享數(shù)據(jù)
3.每次僅允許一個進(jìn)程在管程內(nèi)執(zhí)行某個內(nèi)部過程
?用管程解決生產(chǎn)者消費者問題
?六、死鎖
死鎖:多個進(jìn)程競爭資源造成的一種僵局(相互等待),若無外力作用,這些進(jìn)程是無法向前推進(jìn)的
饑餓:由于長期得不到想要資源,某進(jìn)程無法向前推進(jìn)現(xiàn)象。
死循環(huán):某進(jìn)程執(zhí)行過程中一直跳不出某個循環(huán)得現(xiàn)象。
6.1死鎖產(chǎn)生得必要條件
1.互斥條件:只有對必須互斥使用得資源的爭搶才會導(dǎo)致死鎖
2.不剝奪條件:進(jìn)程所獲得的資源在未完成之前,不能由其他進(jìn)程強行奪走,只能主動釋放
3.請求和保存條件:進(jìn)程已經(jīng)保持了至少一個資源,但又提出新資源請求,而該資源又被其他進(jìn)程占有,此時進(jìn)程阻塞又對已有資源保持不放
4.循環(huán)等待條件:存在一種進(jìn)程資源的循環(huán)等待鏈,鏈中的每一個進(jìn)程已獲得的資源同時被下一個資源請求
6.2發(fā)生死鎖的時候
七、死鎖的處理策略
?7.1預(yù)防死鎖 靜態(tài)策略
破壞互斥條件:SPOOLing技術(shù)、
破壞不剝奪條件:1.得不到資源,就釋放全部資源,以后要就重新請求? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.系統(tǒng)協(xié)助,直接剝奪其他資源自己使用
破壞請求和保持條件:靜態(tài)分配法:進(jìn)程運行前一次申請完所需得全部資源,資源未滿足前不讓它投入使用,一旦投入使用就一直歸它所有? ? ?資源利用率低,可能饑餓
破壞循環(huán)等待條件:順序資源分配法:
7.2 避免死鎖(銀行家算法)動態(tài)策略
7.3 死鎖得檢測和解除
死鎖得檢測
死鎖得解除
1.資源剝奪法:掛起某些死鎖進(jìn)程,并搶占它得資源,將這些資源分配給其他死鎖進(jìn)程,但防止給i去得長期得不到資源而饑餓
2.撤銷進(jìn)程法:強制撤銷部分、甚至全部死鎖進(jìn)程,并剝奪這些進(jìn)程得資源,簡單但代價大,有些進(jìn)程運行很長時間接近結(jié)束,被終止就功虧一簣,還得從頭再來文章來源:http://www.zghlxwxcb.cn/news/detail-473830.html
3.進(jìn)程回退法:讓一個或多個死鎖進(jìn)程回退到足以避免死鎖的地步,操作系統(tǒng)就要記錄信息設(shè)置還原點?文章來源地址http://www.zghlxwxcb.cn/news/detail-473830.html
到了這里,關(guān)于操作系統(tǒng)-進(jìn)程和線程-同步、互斥、死鎖的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!