1 / 8
文档名称:

山大操作系统实验五.docx

格式:docx   大小:12KB   页数:8页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

山大操作系统实验五.docx

上传人:雨林书屋 2024/3/23 文件大小:12 KB

下载得到文件列表

山大操作系统实验五.docx

相关文档

文档介绍

文档介绍:该【山大操作系统实验五 】是由【雨林书屋】上传分享,文档一共【8】页,该文档可以免费在线阅读,需要了解更多关于【山大操作系统实验五 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。山东大学软件学院操作系统实验报告实验题目:进程互斥实验实验目的:进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法,加深对于非对称性互斥问题有关概念的理解。 观察和体验非对称性互斥问题的并发控制方法。进一步了解Linux系统中IPC进程同步工具的用法,训练解决对该类问题的实际编程、调试和分析问题的能力。实验要求:理发店问题:假设理发店的理发室中有 3个理发椅子和3个理发师,有一个可容纳 4个顾客坐等理发的沙发。此外还有一间等候室,可容纳 13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过 20人),就不进入理发店。在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。 顾客理完发后,可向任何一位理发师付款。但理发店只有一本现金登记册, 在任一时刻只能记录一个顾客的付款。 理发师在没有顾客的时候就坐在理发椅子上睡眠。理发师的时间就用在理发、收款、睡眠上。请利用linux系统提供的IPC进程通信机制实验并实现理发店问题的一个解法。总结和分析示例实验和独立实验中观察到的调试和运行信息,说明您对与解决非对称性互斥操作的算法有哪些新的理解和认识为什么会出现进程饥饿现象本实验的饥饿现象是怎样表现的怎样解决并发进程间发生的饥饿现象您对于并发进程间使用消息传递解决进程通信问题有哪些新的理解和认识根据实验程序、调试过程和结果分析写出实验报告。硬件环境:CPU:P4/ 内存:256MB硬盘:10GB软件环境:Linux操作系统Gnome桌面'gccversionvigeditOpenOffice实验步骤:问题分析假设理发店的理发室中有 3个理发椅子和3个理发师,有一个可容纳 4个顾客坐等理发的沙发。此外还有一间等候室,可容纳 13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过 20人),就不进入理发店。在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。 顾客理完发后,可向任何一位理发师付款。但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。理发师在没有顾客的时候就坐在理发椅子上睡眠。理发师的时间就用在理发、收款、睡眠上。算法设计说明该解法利用消息队列的每条消息代表每个顾客,将进入等候室的顾客组织到一个队列,将坐入沙发的顾客组织到另一个队列。理发师从沙发队列请出顾客,空出的沙发位置再从等候室请入顾客进入沙发队列。三个理发师进程使用相同的程序段上下文,所有顾客使用同一个程序段上下文。这样可避免产生太多进程,以便节省系统资源。intsem_p(intsemid,intindex,intipc_nowait){ ,顾客类似写者进程。最后,通过不断的调试,使我熟练了在 Linux环境下编程的技巧,对进程的创建与控制更加熟悉。附录A:本实验全部程序源代码及注释#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);//等待沙发上有人sem_p(wait_semid,0,0);// 等待理发师有空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);//沙发上有空位了sem_v(wait_lock_semid,0,0);//通知有人来理发了}return0;}if((pid=fork())<0){perror("forkerror!");exit(EXIT_FAILURE);}elseif(pid==0){//childprocesswhile(1){sem_p(wait_lock_semid,2,0);//等待室内有人sem_p(wait_semid,1,0);// 沙发上有空位if(msg_get(wait_msg,&msg,WAIT_ID_ROOM,0)<0){perror("messagegeterror!");exit(-1);}msg_send(wait_msg,WAIT_ID_SOFA,,0);printf("the consumer%d==>sofa,wait%dseconds\n",,(time(NULL)-);//room==>sofasem_v(wait_semid,2,0);//等待室空出1个位子sem_v(wait_lock_semid,1,0);//通知沙发上有人了}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){// 检查理发店(等待室)是否已满printf("我是顾客%d,理发店满了,我走人了。。。\n",getpid());//full}elseif(consumer_status==0){//仍然有空间printf("我是顾客%d,进入理发店\n",getpid());printf("我是顾客%d,正在等待室等待\n",getpid());msg_send(wait_msg,WAIT_ID_ROOM,getpid(),0);//进入等待室sem_v(wait_lock_semid,2,0);//通知等待室有人了}exit(0);}sleep(3);//}return0;}

最近更新

2024年小学聚会邀请函 21页

品瑞磁致伸缩综合治疗仪治疗牙周病的临床疗效.. 2页

简单介绍脊髓型颈椎病的近几年来出现的新的治.. 41页

呼和浩特市城市道路景观构建状况的研究的开题.. 2页

第章肾上腺激动药 42页

2024年小学美术教学设计(15篇) 41页

2024年小学线上教学工作方案6篇 19页

2024年小学第一周值周工作总结 18页

2024年小学科幻作文汇总6篇 7页

含Sn金属化合物的第一性原理研究中期报告 2页

吡咯取代三氮唑及其铁配合物的合成、结构和磁.. 2页

后房型有晶体眼人工晶体植入后对白内障人工晶.. 2页

同轴电纺皮芯结构无机纳米纤维膜的制备及其应.. 2页

合肥市城乡居民消费结构调整研究的开题报告 2页

叶三拨油田沙河街组—孔店组有利圈闭综合评价.. 2页

2024年小学生科学手抄报相关图片 3页

可燃气体(或蒸气)最小点火能与物质结构的构效.. 2页

可回转双机双桨船模糊神经网络航向控制的开题.. 2页

2024年小学生环境污染调查报告范文 6页

口腔干预对慢性牙周炎大鼠颈动脉MMP--2,9和血.. 2页

变分不等式的优化控制的开题报告 2页

2024年小学生有趣自我介绍(12篇) 11页

云南公务员录用体检通用标准(试行) 5页

入党积极分子考察表(打印版) 6页

2023年学前教育毕业论文2000字范文(精选3篇) 29页

社区矫正人员每月思想汇报 3页

招标投标-劳务投标技术标 94页

大乘离文字普光明藏经拼音版 10页

民间祖传秘方大全 33页

产品返修管理流程图 8页