日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

计算机操作系统专题一:多道环境下进程同步与互斥制约关系的学习

發(fā)布時間:2025/3/19 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机操作系统专题一:多道环境下进程同步与互斥制约关系的学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 問題描述

設(shè)自行車生產(chǎn)線上有一只箱子,其中有N個位置(N≥3),每個位置可存放一個車架或一個車輪,又設(shè)有三名工人,其活動分別為:
2. 問題分析(包括涉及的知識點、制約關(guān)系分析、問題的解決思路等)

? 根據(jù)題目意義分析,該題所述作業(yè)工人1、工人2與工人3構(gòu)成生產(chǎn)者與消費者關(guān)系,存在著生產(chǎn)者-消費者問題的同步關(guān)系,涉及的知識點包括:信號量、PV原語、進程同步、死鎖問題等。

? 問題解決思路:

? 用信號量與PV操作實現(xiàn)三個工人的合作,首先不考慮死鎖問題,工人1與工人3、工人2與工人3構(gòu)成生產(chǎn)者與消費者關(guān)系,這兩對生產(chǎn)-消費關(guān)系通過共同的緩沖區(qū)——箱子相聯(lián)系。從資源的角度來看,箱子中的空位置相當于工人1和工人2的資源,而車架和車輪相當于工人3的資源。定義三個信號量empty(空位置數(shù)量)、frame(車架數(shù)量)、wheel(車輪數(shù)量)來實現(xiàn)這種同步關(guān)系,分析會產(chǎn)生什么問題:

semaphore empty = N;//空位置數(shù)量 semaphore frame = 0;//車架數(shù)量 semaphore wheel = 0;//車輪數(shù)量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ā)生,箱中車架的數(shù)量不可超過N-2,車輪的數(shù)量不可超過N-1,這些限制可以添加另外兩個信號量maxframe(箱中最大車架數(shù))、maxwheel(箱中最大車輪數(shù))來解死鎖產(chǎn)生問題,解決方案如下。

3. 解決方案(包括所用工具介紹、方案流程圖、方案偽代碼等)

方案偽代碼如下:

semaphore empty = N;//空位置數(shù)量 semaphore maxframe = N-2;//箱中最大車架數(shù)量 semaphore maxwheel = N-1;//箱中最大車輪數(shù)量 semaphore frame = 0;//車架數(shù)量 semaphore wheel = 0;//車輪數(shù)量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++相似,內(nèi)置一些圖形函數(shù),具體可以參照docs文件夾下的說明書和examples文件夾下的范例來學習使用,使用前需要更改內(nèi)部配置文件config.cfg文件,修改內(nèi)容為:

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í)行情況和各個變量的數(shù)值變化。

總之,jBACI是用來學習計算機操作系統(tǒng)進程同步與互斥制約關(guān)系的一個相當友好而且實用的工具。

方案示意流程圖如下:

方案具體實現(xiàn)代碼如下:

const int ValueOfCars = 50;//設(shè)定生產(chǎn)車的數(shù)量期望值int sumframe = 0;//用于計數(shù)生產(chǎn)車架的數(shù)量int sumwheel = 0;//用于計數(shù)生產(chǎn)車輪的數(shù)量int sumcar = 0;//用于計數(shù)生產(chǎn)車的數(shù)量semaphore empty = 6;//信號量:為了易于程序?qū)崿F(xiàn),設(shè)置位置N=6semaphore maxframe = 4;//信號量:為了防止死鎖產(chǎn)生,箱中最大可容納的車架數(shù)semaphore maxwheel = 5;//信號量:為了防止死鎖產(chǎn)生,箱中最大可容納的車輪數(shù)semaphore frame = 0;//信號量:車架數(shù)初始值=0semaphore wheel = 0;//信號量:車輪數(shù)初始值=0void worker1() {while (sumframe < ValueOfCars) {//為了防止死鎖,給工人1一個停止條件wait(maxframe);wait(empty);sumframe = sumframe + 1;cout << "Worker1 is working " << endl;signal(frame);}cout << "Worker1 have finished work " << endl;//工人1工作結(jié)束}void worker2() {while (sumwheel < 2*ValueOfCars) {//為了防止死鎖,給工人2一個停止條件wait(maxwheel);wait(empty);sumwheel = sumwheel + 1;cout << "Worker2 is working "<< endl;signal(wheel);}cout << "Worker2 have finished work " << endl;//工人2工作結(jié)束}void worker3() {while (sumcar < ValueOfCars) {//為了防止死鎖,給工人3一個停止條件wait(frame);wait(wheel);wait(wheel);sumcar = sumcar + 1;cout << "Worker3 is working "<< endl;signal(maxframe);signal(maxwheel);signal(maxwheel);signal(empty);signal(empty);signal(empty);}cout << "Worker3 have finished work " << endl;//工人3工作結(jié)束}void main() {cobegin { worker1(); worker2();worker3();}cout << "Sumframe = " << sumframe << endl;//輸出生產(chǎn)的車架總數(shù)cout << "Sumwheel = " << sumwheel << endl;//輸出生產(chǎn)的車輪總數(shù)cout << "Sumcar = " << sumcar << endl;//輸出生產(chǎn)的車總數(shù)}

4.實驗結(jié)果分析(包括結(jié)果展示、結(jié)果原因剖析等)

結(jié)果展示:

? 左邊結(jié)果顯示,工人1率先停下工作,工人2其次,工人3最后完成工作,右邊結(jié)果顯示,箱中車架數(shù)frame和車輪數(shù)wheel為0,箱中空位置數(shù)empty復位為6,最大可容納車架數(shù)maxframe和最大可容納車輪數(shù)maxwheel復位,生產(chǎn)出的車架數(shù)、車輪數(shù)、車輛數(shù)正好達到所設(shè)期望值,不超出也沒減少,而且程序執(zhí)行過程中并沒有發(fā)出“A deadlock occured”的死鎖警告。

結(jié)果原因剖析:

? 該結(jié)果符合預期,成功避免了死鎖發(fā)生。原因一是新添了兩個信號量最大可容納車架數(shù)maxframe和最大可容納車輪數(shù)maxwheel,阻止了生產(chǎn)中出現(xiàn)的工人1或2加工過快導致箱中無法湊齊一輛車必要部件的死鎖情況,原因二是通過設(shè)置生產(chǎn)車量的期望值來給每個工人一個工作結(jié)束條件,避免了工人1或2其中一個率先結(jié)束工作時工人3未結(jié)束工作但因一個部件缺少而一直等待,另一工人也等待工人3拿走箱中部件才能繼續(xù)加工的死鎖情況。

總結(jié)

以上是生活随笔為你收集整理的计算机操作系统专题一:多道环境下进程同步与互斥制约关系的学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。