久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

山東大學操作系統實驗五理發師問題報告

時間:2019-05-14 03:31:13下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《山東大學操作系統實驗五理發師問題報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《山東大學操作系統實驗五理發師問題報告》。

第一篇:山東大學操作系統實驗五理發師問題報告

計算機科學與技術學院操作系統實驗報告

實驗題目:理發店問題

理發店問題:假設理發店的理發室中有3個理發椅子和3個理發師,有一個可容納4個顧客坐等理發的沙發。此外還有一間等候室,可容納13位顧客等候進入理發室。顧客如果發現理發店中顧客已滿(超過20人),就不進入理發店。

在理發店內,理發師一旦有空就為坐在沙發上等待時間最長的顧客理發,同時空出的沙發讓在等候室中等待時間最長的的顧客就坐。顧客理完發后,可向任何一位理發師付款。但理發店只有一本現金登記冊,在任一時刻只能記錄一個顧客的付款。理發師在沒有顧客的時候就坐在理發椅子上睡眠。理發師的時間就用在理發、收款、睡眠上。請利用linux系統提供的IPC進程通信機制實驗并實現理發店問題的一個解法。

實驗目的:

進一步研究和實踐操作系統中關于并發進程同步與互斥操作的一些經典問題的解法,加深對于非對稱性互斥問題有關概念的理解。觀察和體驗非對稱性互斥問題的并發控制方法。進一步了解Linux系統中IPC進程同步工具的用法,訓練解決對該類問題的實際編程、調試和分析問題的能力。

硬件環境:

Inter(R)Core(TM)i5-3210M CPU @ 2.50GHz 內存:4GB 硬盤:500G 軟件環境:

XUbuntu-Linux 操作系統 Gnome 桌面 2.18.3 BASH_VERSION='3.2.33(1)-release gcc version 4.1.2 gedit 2.18.2 OpenOffice 2.3

實驗步驟:

1、問題分析:

為了解決本實驗的同步問題,采用共享內存,信號量,消

息隊列三種IPC 同步對象處理??蛻舫绦蛩枷耄?/p>

每一個客戶把自己的請求當做一條消息發送到相應的消息 隊列中去,并通過阻塞等待接收消息的方式來等待理發師 最終幫自己理發。每一個客戶先判斷sofa 是不是坐滿了,如 果沒有就坐在沙發上等,否者就判斷waitroom 是不是坐滿 了,如果沒有,就坐在waitroom 等,只要有一個坐在sofa 的客戶離開sofa 理發,理發師就會到waitroom 找最先來的 客戶,讓他進入sofa 等待。理發師程序思想:

理發師查看sofa 上有沒有人,沒有就睡3 秒,然后再一次 看有沒有人,如果有人,就到沙發請最先來的客戶來理發。

賬本互斥的實現: Semaphore mutex=1 ;

Sofa 隊列的長度和wait 隊列的長度的實現:

在顧客進程中設置兩個變量sofa_count,wait_count,分別保存沙發和等候室的顧客數。

2、算法設計說明如下:

該解法利用消息隊列的每條消息代表每個顧客,將進入等候室的顧客組織到一個隊列,將坐入沙發的顧客組織到另一個隊列。理發師從沙發隊列請出顧客,空出的沙發位置再從等候室請入顧客進入沙發隊列。三個理發師進程使用相同的程序段上下文,所有顧客使用同一個程序段上下文。這樣可避免產生太多進程,以便節省系統資源。理發師程序(Barber){

建立一個互斥帳本信號量:s_account,初值=1;建立一個同步顧客信號量:s_customer,初值=0;建立沙發消息隊列:q_sofa;建立等候室消息隊列:q_wait;建立3個理發師進程:b1_pid, b2_pid, b3_pid;每個理發師進程作: while(1){ 以阻塞方式從沙發隊列接收一條消息,如果有消息,則消息出沙發隊列(模擬一顧客理發); 喚醒顧客進程(讓下一顧客坐入沙發)。用進程休眠一個隨機時間模擬理發過程。理完發,使用帳本信號量記賬。互斥的獲取賬本 記賬

喚醒用賬本理發師者 否則沒有消息(沙發上無顧客)則理發師進程在沙發隊列上睡眠;

當沙發隊列有消息時被喚醒(有顧客坐入沙發)。

} }

顧客程序(customer){ while(1){ 取沙發隊列消息數(查沙發上顧客數); 如果消息數小于4(沙發沒座滿)

以非阻塞方式從等候室隊列接收一條消息(查等候室有顧客否),如果有消息將接收到的消息發送到沙發隊列(等候室顧客坐入沙發); 否則發送一條消息到沙發隊列(新來的顧客直接坐入沙發); 否則(沙發坐滿)取等候室隊列消息數(查等候室顧客數); 如果消息數小于13 發送一條消息到等候室隊列(等候室沒滿,新顧客進等候室); 否則

在顧客同步信號量上睡眠(等候室滿暫不接待新顧客); 用進程休眠一個隨機時間模擬顧客到達的時間間隔。} }

3、開發調試過程:

在shell命令行下運行$ make barber customer gcc-g-c barber.c ipc.c gcc barber.o ipc.o-o barber gcc-g-c customer.c ipc.c gcc customer.o ipc.o-o customer

假設先運行理發師程序: $./barber 2726號理發師睡眠 2728號理發師睡眠 2727號理發師睡眠 運行$./customer 1號新顧客坐入沙發 2號新顧客坐入沙發 3號新顧客坐入沙發 4號新顧客坐入沙發 5號新顧客坐入沙發 6號新顧客坐入沙發 7號新顧客坐入沙發 8號新顧客坐入沙發 9號新顧客坐入沙發 10號新顧客坐入沙發 11號新顧客坐入沙發 12號新顧客坐入沙發

沙發坐滿13號顧客在等候室等候 13號顧客從等候室坐入沙發 沙發坐滿14號顧客在等候室等候 14號顧客從等候室坐入沙發 沙發坐滿15號顧客在等候室等候 15號顧客從等候室坐入沙發 沙發坐滿16號顧客在等候室等候 16號顧客從等候室坐入沙發 17號新顧客坐入沙發

沙發坐滿18號顧客在等候室等候 18號顧客從等候室坐入沙發 沙發坐滿19號顧客在等候室等候 19號顧客從等候室坐入沙發 沙發坐滿20號顧客在等候室等候 20號顧客從等候室坐入沙發 沙發坐滿21號顧客在等候室等候 21號顧客從等候室坐入沙發......在理發師窗體理發師進程被喚醒: 2726號理發師為1號顧客理發…… 2726號理發師收取1號顧客交費 2726號理發師睡眠

2728號理發師為2號顧客理發…… 2728號理發師收取2號顧客交費 2728號理發師睡眠

2727號理發師為3號顧客理發…… 2726號理發師為4號顧客理發…… 2727號理發師收取3號顧客交費 2727號理發師睡眠

2726號理發師收取4號顧客交費 2726號理發師睡眠

2728號理發師為5號顧客理發…… 2728號理發師收取5號顧客交費 2728號理發師睡眠

2727號理發師為6號顧客理發…… 2726號理發師為7號顧客理發…… 2727號理發師收取6號顧客交費 2727號理發師睡眠

2726號理發師收取7號顧客交費 2726號理發師睡眠

2728號理發師為8號顧客理發…… 2728號理發師收取8號顧客交費......反之,如果先運行顧客程序: $./customer 1號新顧客坐入沙發 2號新顧客坐入沙發 3號新顧客坐入沙發 4號新顧客坐入沙發

沙發坐滿5號顧客在等候室等候 沙發坐滿6號顧客在等候室等候 沙發坐滿7號顧客在等候室等候 沙發坐滿8號顧客在等候室等候 沙發坐滿9號顧客在等候室等候 沙發坐滿10號顧客在等候室等候 沙發坐滿11號顧客在等候室等候 沙發坐滿12號顧客在等候室等候 沙發坐滿13號顧客在等候室等候 沙發坐滿14號顧客在等候室等候 沙發坐滿15號顧客在等候室等候 沙發坐滿16號顧客在等候室等候 沙發坐滿17號顧客在等候室等候 等候室滿18號顧客沒有進入理發店

當18號顧客到達時理發店20個位置已滿,顧客進程阻塞(假設理發師進程沒運行表示三個理發師正坐在3個理發椅上睡覺)。

再運行理發師程序: $./barber 運行截圖如下: 附

4.7.分析與感悟:

首先運行顧客程序的話,顧客程序首先向沙發隊列發送消息,然后向等候室隊列發送消息,當兩個隊列都滿了之后,該進程會暫停,及停止在顧客同步信號量上。而隨著理發師程序的開始運行,理發師進程會喚醒顧客進程,及在顧客同步信號量上進行up操作,并且從消息隊列中接受消息。反之,若理發師程序先運行,則三個理發師由于無法從沙發隊列上接收到消息,而且由于是阻塞式接受,就會阻塞在這個消息隊列上,只有當顧客程序運行時,向沙發隊列發送消息后理發師進程才會繼續。通過編寫這個實驗,是我更加熟練了信號量的使用,明白了消息隊列的使用方法,進一步了解了Linux系統中IPC進程同步工具的用法。附件:

Ipc.c #include “ipc.h”

int get_ipc_id(char *proc_file,key_t key){ FILE *pf;int i,j;char line[BUFSZ],colum[BUFSZ];if((pf = fopen(proc_file,“r”))== NULL){ perror(“Proc file not open”);exit(EXIT_FAILURE);} fgets(line, BUFSZ, pf);while(!feof(pf)){ i = j = 0;fgets(line, BUFSZ,pf);while(line[i] == ' ')i++;while(line[i]!=' ')colum[j++] = line[i++];colum[j] = '

主站蜘蛛池模板: 人人妻人人做人人爽精品| 亚洲伊人久久综合影院| 国产精品对白交换视频| 亚洲区综合区小说区激情区| 99无码精品二区在线视频| 午夜内射中出视频| 国产欧美一区二区精品性色| 人妻熟妇乱又伦精品视频无广告| 亚洲av无码国产精品永久一区| 久久久久久曰本av免费免费| 亚洲热线99精品视频| 日本久久久久久级做爰片| 久久久精品波多野结衣av| 亚洲精品国产av成拍色拍个| 青青草国产精品人人爱| 中文字幕亚洲一区二区va在线| 无码国模产在线观看免费| 新版天堂资源中文8在线| 少妇激情艳情综合小视频| 免费看国产黄线在线观看| 精品久久久久久无码免费| 日本真人边吃奶边做爽免费视频| 亚洲欧洲国产码专区在线观看| 精品免费av一区二区三区| 亚洲AV无码成人精品区国产| 亚洲七七久久桃花影院| 日韩理论午夜无码| 久久不见久久见www日本网| 玩弄丰满少妇xxxxx性多毛| 顶级欧美熟妇高潮xxxxx| 激情国产av做激情国产爱| 亚洲国产日韩精品一区二区三区| 日韩乱码人妻无码中文视频| 精品国产制服丝袜高跟| 欧美日产亚洲国产精品| 亚洲狠狠婷婷综合久久久久图片| 亚洲日本一区二区三区在线播放| 国产旡码高清一区二区三区| 日日碰日日摸日日澡视频播放| 男女超爽视频免费播放| 亚洲hdmi高清线|