




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上實(shí)驗(yàn)二 進(jìn)程同步一、實(shí)驗(yàn)?zāi)康模赫莆栈镜耐剿惴ǎ斫饨?jīng)典進(jìn)程同步問題的本質(zhì);學(xué)習(xí)使用Linux的進(jìn)程同步機(jī)制,掌握相關(guān)API的使用方法;能利用信號量機(jī)制,采用多種同步算法實(shí)現(xiàn)不會發(fā)生死鎖的哲學(xué)家進(jìn)餐程序。二、實(shí)驗(yàn)平臺:虛擬機(jī):VMWare12操作系統(tǒng):kali linux編輯器:Gedit 編譯器:Gcc三、實(shí)驗(yàn)內(nèi)容:(1)以哲學(xué)家進(jìn)餐模型為依據(jù),在Linux控制臺環(huán)境下創(chuàng)建5個(gè)進(jìn)程,用semget函數(shù)創(chuàng)建一個(gè)信號量集(5個(gè)信號量,初值為1),模擬哲學(xué)家的思考和進(jìn)餐行為:每一位哲學(xué)家饑餓時(shí),先拿起左手筷子,再拿起右手筷子;筷子是臨界資源,為每一支筷子定義1個(gè)互斥信號
2、量;想拿到筷子需要先對信號量做P操作,使用完釋放筷子對信號量做V操作。偽代碼描述:semaphore chopstick5=1,1,1,1,1; 第i位哲學(xué)家的活動可描述為: do printf(%d is thinkingn,i); printf(%d is hungryn,i); wait(chopsticki); /拿左筷子 wait(chopstick(i+1) % 5); /拿右筷子 printf(%d is eatingn,i); signal(chopsticki); /放左筷子 signal(chopstick(i+1) % 5); /放右筷子 whiletrue; 運(yùn)行該組進(jìn)
3、程,觀察進(jìn)程是否能一直運(yùn)行下去,若停滯則發(fā)生了什么現(xiàn)象?并分析原因。(2)解決哲學(xué)家進(jìn)餐問題可采用如下方法:a.僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時(shí),才允許他拿起筷子進(jìn)餐;b.至多只允許有4位哲學(xué)家同時(shí)去拿左邊的筷子,最終能保證至少有一位哲學(xué)家能夠進(jìn)餐;c.規(guī)定奇數(shù)號哲學(xué)家先拿起他左手的筷子,然后再拿起他右手的筷子,而偶數(shù)號哲學(xué)家則先拿起他右手的筷子,然后再拿起他左手的筷子。方法a在示例程序中給出,請用方法b和c寫出不會發(fā)生死鎖的哲學(xué)家進(jìn)餐程序。 (3)設(shè)計(jì)程序,實(shí)現(xiàn)生產(chǎn)者/消費(fèi)者進(jìn)程(線程)的同步與互斥。在該程序中創(chuàng)建4個(gè)進(jìn)程(或線程)模擬生產(chǎn)者和消費(fèi)者,實(shí)現(xiàn)進(jìn)程(線程)的同步與互斥。四、實(shí)驗(yàn)
4、步驟:一、Linux的信號量機(jī)制為了簡化對多個(gè)信號量的操作,Linux系統(tǒng)中提出了信號量集的概念。一個(gè)信號量集對象中可以容納多個(gè)信號量,System V 信號量的分配和操作是以信號量集為單位的。1. 進(jìn)程利用信號量獲得共享資源的步驟:a.測試控制該資源的信號量;b.若信號量為正,則進(jìn)程可以使用該資源;使用資源時(shí),進(jìn)程將該信號量減1(P操作);不再使用資源時(shí),進(jìn)程將該信號量值加1(V操作);c.若信號量為0,則進(jìn)程進(jìn)入睡眠狀態(tài)P操作和V操作都原子操作。2. 創(chuàng)建或打開信號量集semget()系統(tǒng)調(diào)用創(chuàng)建一個(gè)新信號量集或獲取一個(gè)既有信號量集的表示符。函數(shù)原型:#include int semget
5、(key_t key, int nsems, int flag);返回值:成功返回信號量集ID,出錯(cuò)返回-1。nsems信號量集中信號量個(gè)數(shù);flags:IPC_CREAT,IPC_EXCL,權(quán)限組合;第一個(gè)參數(shù)key是整數(shù)值(唯一非零),不相關(guān)的進(jìn)程可以通過它訪問一個(gè)信號量,它代表程序可能要使用的某個(gè)資源,程序?qū)λ行盘柫康脑L問都是間接的,程序先通過調(diào)用semget函數(shù)并提供一個(gè)鍵,再由系統(tǒng)生成一個(gè)相應(yīng)的信號標(biāo)識符(semget函數(shù)的返回值),只有semget函數(shù)才直接使用信號量鍵,所有其他的信號量函數(shù)使用由semget函數(shù)返回的信號量標(biāo)識符。如果多個(gè)程序使用相同的key值,key將負(fù)責(zé)協(xié)調(diào)
6、工作。第三個(gè)參數(shù)sem_flags是一組標(biāo)志,當(dāng)想要當(dāng)信號量不存在時(shí)創(chuàng)建一個(gè)新的信號量,可以和值IPC_CREAT做按位或操作。設(shè)置了IPC_CREAT標(biāo)志后,即使給出的鍵是一個(gè)已有信號量的鍵,也不會產(chǎn)生錯(cuò)誤。而IPC_CREAT | IPC_EXCL則可以創(chuàng)建一個(gè)新的,唯一的信號量,如果信號量已存在,返回一個(gè)錯(cuò)誤。注意:建立信號量集時(shí)每個(gè)信號量的初始值不確定。3. 信號量控制操作semctl()系統(tǒng)調(diào)用在一個(gè)信號量集或集合中的單個(gè)信號量上執(zhí)行各種控制操作。函數(shù)原型:#include int semctl (int semid, int semnum, int cmd, /*union sem
7、un arg*/)semnum:信號量編號或0,表示對指定信號量做控制操作;cmd: 操作命令,實(shí)施的控制操作;cmd參數(shù):IPC_STAT 獲取信號量集的屬性IPC_SET 設(shè)置信號量集的屬性IPC_RMID 刪除信號量集GETVAL 返回semnum信號量的值SETVAL 設(shè)置semnum信號量的值GETALL 獲取所有信號量的值SETALL 設(shè)置所有信號量的初始值第四個(gè)參數(shù)是union semununion semun int val; struct semid_ds *buf; unsigned short *array;例:定義一個(gè)信號量集,含3個(gè)信號量,初始值分別為(2,5,1)。
8、semid = semget(IPC_PRIVATE,3,IPC_CREAT|IPC_EXCL|0777);unsigned short vals3 = 2,5,1;union semnu se;se.array = vals;semclt(semid,0,SETALL,se);4. 信號量集操作semop()系統(tǒng)調(diào)用在semid標(biāo)識的信號量集中的信號量上執(zhí)行一個(gè)或多個(gè)up或down操作,可用于進(jìn)程間的同步和互斥。函數(shù)原型:#include int semop(int semid, struct sembuf *semop, size_t nops);返回:成功返回0,出錯(cuò)返回-1。Struc
9、t sembufunsigned sem_num; /*member # in set*/short sem_op; /*operation(negative, 0, positive*/short sem_flg; /*IPC_NOWAIT,SEM_UNDO*/例:對上文定義的信號量集semid中的3個(gè)信號量,分別執(zhí)行如下操作:1: p(1); 2: p(3); 3: v(3);其semop的操作語句為:struct sembuf ops3 = 0, -1, SEM_UNDO, 1,-3, SEM_UNDO,2,3, SEM_UNDO;semop(semid, ops ,3);5.組合權(quán)限說
10、明0666 文件或目錄的所有者、所有者所在組、其他用戶對該對象均可讀、可寫rw-rw-rw-0777 文件或目錄的所有者、所有者所在組、其他用戶對該對象均可讀、可寫、可執(zhí)行rwxrwxrwx附:示例程序(左、右兩只筷子均可用時(shí)才允許拿起筷子)#include #include #include #include #include #include #include #include #include #include #include #include #ifdef_SEM_SEMUN_UNDEFINEDunion semunint val;struct semid_ds *buf;unsig
11、ned short *array;struct seminfo *_buf;#endif#defineERR_EXIT(m) do perror(m); exit(EXIT_FAILURE); while(0)int wait_1chopstick(int no,int semid)struct sembuf sb = no,-1,0;int ret;ret = semop(semid,&sb,1);if(ret 0) ERR_EXIT(semop);return ret;int free_1chopstick(int no,int semid)struct sembuf sb = no,1,
12、0;int ret;ret = semop(semid,&sb,1);if(ret 0) ERR_EXIT(semop);return ret;#defineDELAY (rand() % 5 + 1)void wait_for_2chopstick(int no,int semid)int left = no;int right = (no + 1) % 5;struct sembuf buf2 = left,-1,0,right,-1,0;semop(semid,buf,2);void free_2chopstick(int no,int semid)int left = no;int r
13、ight = (no + 1) % 5;struct sembuf buf2 = left,1,0,right,1,0;semop(semid,buf,2);void philosophere(int no,int semid)srand(getpid();for(;) #if 0printf(%d is thinkingn,no);sleep(DELAY);printf(%d is hungryn,no);wait_for_2chopstick(no,semid);printf(%d is eatingn,no);sleep(DELAY);free_2chopstick(no,semid);
14、#elseint left = no;int right = (no + 1) % 5;printf(%d is thinkingn,no);sleep(DELAY);printf(%d is hungryn,no);wait_1chopstick(left,semid);sleep(DELAY);wait_1chopstick(right,semid);printf(%d is eatingn,no);sleep(DELAY);free_1chopstick(left,semid); free_1chopstick(right,semid);#endifint main(int argc,char *argv)int semid;semid = semget(IPC_PRIVATE,5,IPC_CREAT | 0666);if(semid 0) ERR_EXIT(semid);u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校生物室管理制度
- 學(xué)生會設(shè)備管理制度
- 學(xué)生項(xiàng)目部管理制度
- 安保部綜合管理制度
- 安全管理與管理制度
- 定向井公司管理制度
- 實(shí)訓(xùn)室水電管理制度
- 客戶保證金管理制度
- 客運(yùn)包車牌管理制度
- 家裝業(yè)務(wù)員管理制度
- 廣東省茂名高州市2024-2025學(xué)年下學(xué)期期中考試七年級生物試題 七年級 生物 期中考試卷
- 社區(qū)工作者心理健康培訓(xùn)大綱
- 《分子動力學(xué)模擬》課件
- 新生兒重癥監(jiān)護(hù)病房捐贈人乳應(yīng)用與管理專家共識(2025)解讀
- 皮膚科進(jìn)修心得分享
- 2025年上半年廣東省廣州市白云區(qū)委宣傳部政府雇員招聘5人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解
- 項(xiàng)目經(jīng)理講安全課件
- 《休閑農(nóng)業(yè)》課件 項(xiàng)目二 休閑農(nóng)業(yè)分類及模式分析
- 2025年安徽省省情試題及答案
- 2025年消控室考核試題及答案
- 江西省吉安市遂川縣2024-2025學(xué)年數(shù)學(xué)三下期末達(dá)標(biāo)檢測試題含解析
評論
0/150
提交評論