




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
v1.0可編輯可修改v1.0可編輯可修改PAGEPAGE8v1.0可編輯可修改PAGE山東大學(xué)軟件學(xué)院操作系統(tǒng)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目:進(jìn)程互斥實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康模哼M(jìn)一步研究和實(shí)踐操作系統(tǒng)中關(guān)于并發(fā)進(jìn)程同步與互斥操作的一些經(jīng)典問題的解法,加深對(duì)于非對(duì)稱性互斥問題有關(guān)概念的理解。觀察和體驗(yàn)非對(duì)稱性互斥問題的并發(fā)控制方法。進(jìn)一步了解Linux系統(tǒng)中IPC進(jìn)程同步工具的用法,訓(xùn)練解決對(duì)該類問題的實(shí)際編程、調(diào)試和分析問題的能力。實(shí)驗(yàn)要求:理發(fā)店問題:假設(shè)理發(fā)店的理發(fā)室中有3個(gè)理發(fā)椅子和3個(gè)理發(fā)師,有一個(gè)可容納4個(gè)顧客坐等理發(fā)的沙發(fā)。此外還有一間等候室,可容納13位顧客等候進(jìn)入理發(fā)室。顧客如果發(fā)現(xiàn)理發(fā)店中顧客已滿(超過20人),就不進(jìn)入理發(fā)店。在理發(fā)店內(nèi),理發(fā)師一旦有空就為坐在沙發(fā)上等待時(shí)間最長(zhǎng)的顧客理發(fā),同時(shí)空出的沙發(fā)讓在等候室中等待時(shí)間最長(zhǎng)的的顧客就坐。顧客理完發(fā)后,可向任何一位理發(fā)師付款。但理發(fā)店只有一本現(xiàn)金登記冊(cè),在任一時(shí)刻只能記錄一個(gè)顧客的付款。理發(fā)師在沒有顧客的時(shí)候就坐在理發(fā)椅子上睡眠。理發(fā)師的時(shí)間就用在理發(fā)、收款、睡眠上。請(qǐng)利用linux系統(tǒng)提供的IPC進(jìn)程通信機(jī)制實(shí)驗(yàn)并實(shí)現(xiàn)理發(fā)店問題的一個(gè)解法。總結(jié)和分析示例實(shí)驗(yàn)和獨(dú)立實(shí)驗(yàn)中觀察到的調(diào)試和運(yùn)行信息,說明您對(duì)與解決非對(duì)稱性互斥操作的算法有哪些新的理解和認(rèn)識(shí)為什么會(huì)出現(xiàn)進(jìn)程饑餓現(xiàn)象本實(shí)驗(yàn)的饑餓現(xiàn)象是怎樣表現(xiàn)的怎樣解決并發(fā)進(jìn)程間發(fā)生的饑餓現(xiàn)象您對(duì)于并發(fā)進(jìn)程間使用消息傳遞解決進(jìn)程通信問題有哪些新的理解和認(rèn)識(shí)根據(jù)實(shí)驗(yàn)程序、調(diào)試過程和結(jié)果分析寫出實(shí)驗(yàn)報(bào)告。硬件環(huán)境:CPU:P4/內(nèi)存:256MB硬盤:10GB軟件環(huán)境:-Linux操作系統(tǒng)Gnome桌面'gccversionvigeditOpenOffice實(shí)驗(yàn)步驟:?jiǎn)栴}分析假設(shè)理發(fā)店的理發(fā)室中有3個(gè)理發(fā)椅子和3個(gè)理發(fā)師,有一個(gè)可容納4個(gè)顧客坐等理發(fā)的沙發(fā)。此外還有一間等候室,可容納13位顧客等候進(jìn)入理發(fā)室。顧客如果發(fā)現(xiàn)理發(fā)店中顧客已滿(超過20人),就不進(jìn)入理發(fā)店。在理發(fā)店內(nèi),理發(fā)師一旦有空就為坐在沙發(fā)上等待時(shí)間最長(zhǎng)的顧客理發(fā),同時(shí)空出的沙發(fā)讓在等候室中等待時(shí)間最長(zhǎng)的的顧客就坐。顧客理完發(fā)后,可向任何一位理發(fā)師付款。但理發(fā)店只有一本現(xiàn)金登記冊(cè),在任一時(shí)刻只能記錄一個(gè)顧客的付款。理發(fā)師在沒有顧客的時(shí)候就坐在理發(fā)椅子上睡眠。理發(fā)師的時(shí)間就用在理發(fā)、收款、睡眠上。算法設(shè)計(jì)說明該解法利用消息隊(duì)列的每條消息代表每個(gè)顧客,將進(jìn)入等候室的顧客組織到一個(gè)隊(duì)列,將坐入沙發(fā)的顧客組織到另一個(gè)隊(duì)列。理發(fā)師從沙發(fā)隊(duì)列請(qǐng)出顧客,空出的沙發(fā)位置再?gòu)牡群蚴艺?qǐng)入顧客進(jìn)入沙發(fā)隊(duì)列。三個(gè)理發(fā)師進(jìn)程使用相同的程序段上下文,所有顧客使用同一個(gè)程序段上下文。這樣可避免產(chǎn)生太多進(jìn)程,以便節(jié)省系統(tǒng)資源。intsem_p(intsemid,intindex,intipc_nowait){程間的互斥2.理發(fā)師類似讀者進(jìn)程,顧客類似寫者進(jìn)程。最后,通過不斷的調(diào)試,使我熟練了在Linux環(huán)境下編程的技巧,對(duì)進(jìn)程的創(chuàng)建與控制更加熟悉。附錄A:本實(shí)驗(yàn)全部程序源代碼及注釋#ifndefCZW_IPC_H_INCLUDED#defineCZW_IPC_H_INCLUDED#include<>#include<sys/>#include<sys/>intsem_create(constchar*pathname,intproj_id,intnsems,intinit_value){key_tkeyid;intsemid,i;if((keyid=ftok(pathname,proj_id))==-1){perror("ftokerror!");return-1;}if((semid=semget(keyid,nsems,IPC_CREAT|0666))<0){perror("semgeterror!");return-1;}for(i=0;i<nsems;i++){semctl(semid,i,SETVAL,init_value);}returnsemid;}intsem_delete(constchar*pathname,intproj_id){key_tkeyid;intsemid,i;if((keyid=ftok(pathname,proj_id))==-1){perror("ftokerror!");return-1;}if((semid=semget(keyid,0,0666))<0){perror("semgeterror!");return-1;}if(semctl(semid,0,IPC_RMID)<0){perror("semdeletefail!");return-1;}return1;}intsem_set(intsemid,intindex,intvalue){if(index==-1){,10);sem_delete(".",11);msg_delete(".",31);sem_delete(".",110);exit(0);}intmain(){intwait_semid=sem_create(".",10,3,0);intwait_lock_semid=sem_create(".",11,4,0);intwait_msg=msg_create(".",31);intcash_semid=sem_create(".",110,1,1);debug&&printf("\twait_semidis%d\n",wait_semid);debug&&printf("\twait_lock_semidis%d\n",wait_lock_semid);debug&&printf("\twait_msgis%d\n",wait_msg);debug&&printf("\tcash_semidis%d\n",cash_semid);sem_set(wait_semid,0,3);sem_set(wait_semid,1,4);sem_set(wait_semid,2,13);pid_tpid[3]={0};inti;intbarber_id,barber_status,barber_consumer;structex5msgbufmsg;for(i=0;i<3;i++){if((pid[i]=fork())<0){perror("forkerror!");exit(EXIT_FAILURE);}elseif(pid[i]==0){barber_id=i+1;barber_status=0;debug&&printf("\tI'mbarber%d,mypidis%d\n",barber_id,getpid());break;}}if(pid[2]==0){while(1){if(barber_status==0){if(sem_p(wait_lock_semid,0,1)==-2){,10,0,0);intwait_lock_semid=sem_create(".",11,0,0);intwait_msg=msg_create(".",31);debug&&printf("\twait_semidis%d\n",wait_semid);debug&&printf("\twait_lock_semidis%d\n",wait_lock_semid);debug&&printf("\twait_msgis%d\n",wait_msg);debug&&printf("\twait_semid_0is%d\n",sem_show(wait_semid,0));pid_tpid=0;structex5msgbufmsg;inti;intconsumer_status;if((pid=fork())<0){perror("forkerror!");exit(EXIT_FAILURE);}elseif(pid==0){//childprocesswhile(1){sem_p(wait_lock_semid,1,0);//等待沙發(fā)上有人sem_p(wait_semid,0,0);//等待理發(fā)師有空if(msg_get(wait_msg,&msg,WAIT_ID_SOFA,0)<0){perror("messagegeterror!");exit(-1);}msg_send(wait_msg,WAIT_ID_CHAIR,,0);printf("theconsumer%d==>chair,wait%dseconds\n",,(time(NULL)-);//sofa==>chairsem_v(wait_semid,1,0);//沙發(fā)上有空位了sem_v(wait_lock_semid,0,0);//通知有人來理發(fā)了}return0;}if((pid=fork())<0){perror("forkerror!");exit(EXIT_FAILURE);}elseif(pid==0){//childprocesswhile(1){sem_p(wait_lock_semid,2,0);//等待室內(nèi)有人sem_p(wait_semid,1,0);//沙發(fā)上有空位if(msg_get(wait_msg,&msg,WAIT_ID_ROOM,0)<0){perror("messagegeterror!");exit(-1);}msg_send(wait_msg,WAIT_ID_SOFA,,0);printf("theconsumer%d==>sofa,wait%dseconds\n",,(time(NULL)-);//room==>sofasem_v(wait_semid,2,0);//等待室空出1個(gè)位子sem_v(wait_lock_semid,1,0);//通知沙發(fā)上有人了}return0;}while(1){if((pid=fork())<0){perror("forkerror!");exit(EXIT_FAILURE);}elseif(pid==0){//if((consumer_status=sem_p(wait_semid,2,1))==-2){//檢查理發(fā)店(等待室)是否已滿printf("我是顧客%d,理發(fā)店滿了,我走人了。。。\n",getpid());//full}elseif(consumer_status==0){//仍然有空間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技型中小企業(yè)創(chuàng)業(yè)資金使用合同范本
- 船舶漁船租賃合同范本
- 生物工程發(fā)電機(jī)租賃合同范本
- 宿豫勞務(wù)合同范本
- 不銹鋼烤酒設(shè)備合同范本
- 勞動(dòng)合同范本2013
- 二手石場(chǎng)機(jī)械購(gòu)買合同范本
- 雙方落款合同范本
- 業(yè)務(wù)往來款合同范本
- 廠房抵賬合同范例
- 有創(chuàng)動(dòng)脈血壓監(jiān)測(cè)
- 全國(guó)導(dǎo)游基礎(chǔ)知識(shí)-全國(guó)導(dǎo)游基礎(chǔ)知識(shí)章節(jié)練習(xí)
- 【安排表】2024-2025學(xué)年下學(xué)期學(xué)校升旗儀式安排表 主題班會(huì)安排表
- 2025年度老舊小區(qū)改造施工委托合同范本
- 2024黑龍江公務(wù)員考試【A類、B類、省直、筆試】四套真題及答案
- 2025年安徽中醫(yī)藥高等專科學(xué)校高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫含答案解析
- 《智能網(wǎng)聯(lián)汽車 自動(dòng)駕駛系統(tǒng)要求及測(cè)試方法 第1部分:高速公路及城市快速路》
- 2024年濟(jì)南護(hù)理職業(yè)學(xué)院高職單招語文歷年參考題庫含答案解析
- 2025廣東省國(guó)家稅務(wù)局系統(tǒng)事業(yè)單位招聘400人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 投行競(jìng)爭(zhēng)格局-洞察分析
- 考研學(xué)習(xí)筆記 《國(guó)際貿(mào)易實(shí)務(wù)》(第6版)筆記和課后習(xí)題(含考研真題)詳解-1-200
評(píng)論
0/150
提交評(píng)論