计算机操作系统专题一:多道环境下进程同步与互斥制约关系的学习
1. 問題描述
設自行車生產線上有一只箱子,其中有N個位置(N≥3),每個位置可存放一個車架或一個車輪,又設有三名工人,其活動分別為:
2. 問題分析(包括涉及的知識點、制約關系分析、問題的解決思路等)
? 根據題目意義分析,該題所述作業(yè)工人1、工人2與工人3構成生產者與消費者關系,存在著生產者-消費者問題的同步關系,涉及的知識點包括:信號量、PV原語、進程同步、死鎖問題等。
? 問題解決思路:
? 用信號量與PV操作實現三個工人的合作,首先不考慮死鎖問題,工人1與工人3、工人2與工人3構成生產者與消費者關系,這兩對生產-消費關系通過共同的緩沖區(qū)——箱子相聯(lián)系。從資源的角度來看,箱子中的空位置相當于工人1和工人2的資源,而車架和車輪相當于工人3的資源。定義三個信號量empty(空位置數量)、frame(車架數量)、wheel(車輪數量)來實現這種同步關系,分析會產生什么問題:
semaphore empty = N;//空位置數量 semaphore frame = 0;//車架數量 semaphore wheel = 0;//車輪數量do{ //工人1活動 P(empty); 加工一個車架; 車架放入箱中; V(frame); }while(1)do{ //工人2活動 P(empty); 加工一個車輪; 車輪放入箱中; V(wheel); }while(1)do{ //工人3活動 P(frame); P(wheel); P(wheel); 箱中取一個車架; 箱中取一個車架; 組裝一臺車; V(empty); V(empty); V(empty); }while(1)? 分析易見,當工人1加工速度較快時,箱中空位置可能完全被車架占滿或只留有一個存放車輪的位置,而當此時工人3同時取2個車輪時將無法得到,而工人2又無法將新加工的車輪放入箱中;當工人2加工速度較快時,箱中空位置可能完全被車輪占滿,而當此時工人3取車架時將無法得到,而工人1又無法將新加工的車架放入箱中。上述兩種情況都意味著死鎖的發(fā)生。為防止死鎖的發(fā)生,箱中車架的數量不可超過N-2,車輪的數量不可超過N-1,這些限制可以添加另外兩個信號量maxframe(箱中最大車架數)、maxwheel(箱中最大車輪數)來解死鎖產生問題,解決方案如下。
3. 解決方案(包括所用工具介紹、方案流程圖、方案偽代碼等)
方案偽代碼如下:
semaphore empty = N;//空位置數量 semaphore maxframe = N-2;//箱中最大車架數量 semaphore maxwheel = N-1;//箱中最大車輪數量 semaphore frame = 0;//車架數量 semaphore wheel = 0;//車輪數量do{ //工人1活動P(maxframe); P(empty); 加工一個車架; 車架放入箱中; V(frame); }while(1)do{ //工人2活動P(maxwheel); P(empty); 加工一個車輪; 車輪放入箱中; V(wheel); }while(1)do{ //工人3活動 P(frame); P(wheel); P(wheel); 箱中取一個車架; 箱中取一個車架; 組裝一臺車; V(maxframe); V(maxwheel); V(maxwheel); V(empty); V(empty); V(empty); }while(1)工具介紹:
所用工具為jBACI,該工具包有自己的編譯器和解釋器,源代碼有編譯器編譯,再解釋執(zhí)行,類似于java,該工具可以在windows10系統(tǒng)下直接運行。程序編寫有“.cm”和“.pm”兩種格式,“.cm”格式和C語言、C++相似,內置一些圖形函數,具體可以參照docs文件夾下的說明書和examples文件夾下的范例來學習使用,使用前需要更改內部配置文件config.cfg文件,修改內容為:
SOURCE_DIRECTORY=.\examples\
PASCAL_COMPILER=.\bin\bapas.exe
C_COMPILER=.\bin\bacc.exe
(下載地址:https://github.com/motib/jbaci)
代碼編寫好后,需要點擊Compile進行編譯,才能夠點擊Run執(zhí)行,進入執(zhí)行頁面可以看到有代碼執(zhí)行區(qū)、控制臺、全局變量區(qū)等,可以對代碼Add添加斷點,可以step單步執(zhí)行,點擊Go執(zhí)行后還可以很好看清各個進程的詳細執(zhí)行情況和各個變量的數值變化。
總之,jBACI是用來學習計算機操作系統(tǒng)進程同步與互斥制約關系的一個相當友好而且實用的工具。
方案示意流程圖如下:
方案具體實現代碼如下:
4.實驗結果分析(包括結果展示、結果原因剖析等)
結果展示:
? 左邊結果顯示,工人1率先停下工作,工人2其次,工人3最后完成工作,右邊結果顯示,箱中車架數frame和車輪數wheel為0,箱中空位置數empty復位為6,最大可容納車架數maxframe和最大可容納車輪數maxwheel復位,生產出的車架數、車輪數、車輛數正好達到所設期望值,不超出也沒減少,而且程序執(zhí)行過程中并沒有發(fā)出“A deadlock occured”的死鎖警告。
結果原因剖析:
? 該結果符合預期,成功避免了死鎖發(fā)生。原因一是新添了兩個信號量最大可容納車架數maxframe和最大可容納車輪數maxwheel,阻止了生產中出現的工人1或2加工過快導致箱中無法湊齊一輛車必要部件的死鎖情況,原因二是通過設置生產車量的期望值來給每個工人一個工作結束條件,避免了工人1或2其中一個率先結束工作時工人3未結束工作但因一個部件缺少而一直等待,另一工人也等待工人3拿走箱中部件才能繼續(xù)加工的死鎖情況。
總結
以上是生活随笔為你收集整理的计算机操作系统专题一:多道环境下进程同步与互斥制约关系的学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: esp32cam与下载板的实际有效接线图
- 下一篇: 配置git 账户密码时bash:$:co