教务处制
第 1 页,共 8 页
实 验 报 告
院、系
年级专业
姓名
学号
课程名称
操作系统
成绩
指导教师
同组实验者
实验日期
实 验 名 称
进程通信与进程同步
一. 实验目的
■实验 4.1 进程通信实验
(1)理解进程间通信的概念和方法
(2)掌握常用的 Linux 进程间通信的方法
■实验 4.2 进程同步实验
(1)加强对进程同步和互斥的理解,学会使用信号量解决资源共享问题。
(2)熟悉 Linux 进程同步原语。
(3)掌握信号量 wait/signal 原语的使用方法,理解信号量的定义、赋初值及 wait/signal 操作
二. 实验内容
■实验 4.1 进程通信实验
(1)编写 C 程序,使用 Linux 中的 IPC 机制完成“石头、剪刀、布”游戏
(2)修改上述 C 程序,使之能够在网络上运行。
■实验 4.2 进程同步实验
(1)编写程序,使用 Linux 操作系统中的信号量机制模拟实现生产者-消费者问题。设有一个生产者
和一个消费者,缓冲区可以存放产品,生产者不断生成产品放入缓冲区,消费者不断从缓冲区中取出产
品,消费产品。
三. 实验步骤
●实验 4.1 进程通信实验:
实验 4.1 可以创建三个进程,其中,一个进程为裁判进程,另外两个进程为选手进程。可将“石头、
剪子、布”这三招定义为三个整型值。胜负关系:石头>剪子>布>石头。
选手进程按照某种策略(例如,随机产生)出招,交给裁判进程判断大小。裁判进程将对手的出招
和胜负结果通知选手。比赛可以采取多盘(>100盘)定胜负,由裁判宣布最后结果。每次出招由裁
判限定时间,超时判负。 每盘结果可以存放在文件或其他数据结构中。比赛结束,可以打印每盘的胜
负情况和总的结果。
1.设计表示“石头、剪子、布”的数据结构,以及它们之间的大小规则。
2.设计比赛结果的存放方式。
3.选择 IPC 的方法。
4.根据你所选择的 IPC 方法,创建对应的 IPC 资源。
5.完成选手进程。
6.完成裁判进程。
下面给出代码。该程序使用 fork()函数创建了两个选手进程,当前进程为裁判进程。裁判进程
创建了两个消息队列,且两个选手进程会发送出拳信息至不同的消息队列,最后由裁判进程从消息队列
取得出拳信息并判断结果。