山东大学操作系统试验进程互斥试验.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
山东大学操作系统试验进程互斥试验

计算机科学与技术学院实验报告 ? 实验题目:实验学号: 日期:2014.4 班级:姓名: 实验目的: 进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法,加深对于非对称性互斥问题有关概念的理解。观察和体验非对称性互斥问题的并发控制方法。进一步了解Linux系统中IPC进程同步工具的用法,训练解决对该类问题的实际编程、调试和分析问题的能力。 理发店问题:假设理发店的理发室中有3个理发椅子和3个理发师,有一个可容纳4个顾客坐等理发的沙发。此外还有一间等候室,可容纳13位顾客等候进入理发室。顾客如果发现理发店中顾客已满(超过20人),就不进入理发店。 在理发店内,理发师一旦有空就为坐在沙发上等待时间最长的顾客理发,同时空出的沙发让在等候室中等待时间最长的的顾客就坐。顾客理完发后,可向任何一位理发师付款。但理发店只有一本现金登记册,在任一时刻只能记录一个顾客的付款。理发师在没有顾客的时候就坐在理发椅子上睡眠。理发师的时间就用在理发、收款、睡眠上。 总结和分析示例实验和独立实验中观察到的调试和运行信息,说明您对与解决非对称性互斥操作的算法有哪些新的理解和认识?为什么会出现进程饥饿现象?本实验的饥饿现象是怎样表现的?怎样解决并发进程间发生的饥饿现象?您对于并发进程间使用消息传递解决进程通信问题有哪些新的理解和认识?根据实验程序、调试过程和结果分析写出实验报告。 硬件环境:操作系统:32位 磁盘: G 软件环境:ubuntu11.02 gcc4.8 实验步骤: (1) 首先创建ipc.h文件,在里面定义生产者/消费者共用的IPC函数的原型和变量。 (2) 然后创建ipc.c文件,在里面定义生产者/消费者共用的IPC的具体的相应函数。 (3)声明两个消息队列,当沙发空闲时则会将空闲的消息放入相应的队列中,让顾客可以进入沙发中,当理发师空闲时,也会将相应的消息放入队列中,从而可以让顾客到理发椅上进行理发。 (4)在消息队列中实现,当等待室里的人数少于十三个时,若从消息队列中获得信息,则顾客可以进入,当沙发上有空位时,在等待室的人可以进入沙发等待。 (5)创建customer文件cons,里面声明两个消息队列,当获得允许进入的信息时,顾客进入等待室,当顾客理完发则会离开,同时向消息队列中发送信息。 (6)创建barbour文件bar,在里面声明三个队列,当理发师就绪则会向队列中发送消息,若顾客收到消息就会去理发,当顾客离开时,也会向队列中发送一条消息。同时理发师理发与收账是互斥的。通过上述的文件就可以实现相应的功能。 3、分析清楚实验要求,便开始用编程语言进行编程,将分析的思路用编程语言实现。 4、 完成编写程序,要进行运行调试,找到编写中的错误,进行进一步的修改,直到程序运行过程中不再出现错误。 5、 完成程序的调试与修改,保存程序,对编程的过程进行总结,找到编程中的不足,并完成实验报告。 实现方式:Makefile: hdrs = ipc.h opts = -g -c c_src = cons.c ipc.c c_obj = cons.o ipc.o p_src = bar.c ipc.c p_obj = bar.o ipc.o all: producer consumer consumer: $(c_obj) gcc $(c_obj) -o consumer cons.o: $(c_src) $(hdrs) gcc $(opts) $(c_src) producer: $(p_obj) gcc $(p_obj) -o producer bar.o: $(p_src) $(hdrs) gcc $(opts) $(p_src) clean: rm cons bar *.o ipc.h: #include stdio.h #include stdlib.h #include sys/types.h #include sys/ipc.h #include sys/shm.h #include sys/sem.h #include sys/msg.h #define BUFSZ 256 int get_ipc_id(char *proc_file,key_t key); char *set_shm(key_t shm_key,int shm_num,int shm_flag); int set_msq(key_t msq_key,int msq_flag); int set_sem(key_t sem_key,int sem_val,int sem_flag); int down(int sem_id); int up(int sem_id); /*

文档评论(0)

sunshaoying + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档