北理操作系统实验三
- 格式:docx
- 大小:845.42 KB
- 文档页数:6
操作系统课程设计实验报告
实验名称:生产者消费者问题
姓名/学号:
一.实验目的
1.学习掌握操作系统中进程之间的通信
2.理解掌握使用信号量机制来多进程互斥访问共享内存区的控制
3.学习进程的创建及控制,共享内存区的创建和删除,信号量的创建使用
删除
二.实验内容
•一个大小为3的缓冲区,初始为空,每个缓冲区能存放一个长度若为10个字符的字符串。
•2个生产者
–随机等待一段时间,往缓冲区添加数据,
–若缓冲区已满,等待消费者取走数据后再添加
–重复6次
•3个消费者
–随机等待一段时间,从缓冲区读取数据
–若缓冲区为空,等待生产者添加数据后再读取
–重复4次
说明:
•显示每次添加和读取数据的时间及缓冲区的状态
•生产者和消费者用进程模拟,缓冲区用共享内存来实现
三.实验环境
VMware Fushion8:Windows和ubuntu14.10
四.程序设计与实现
1、Windows下:
A:主要函数说明
1.PROCESS_INFORMATION StartClone(int nCloneID)
功能:创建一个克隆的进程并赋于其ID值,并返回进程和线程信息
2.CreateProcess:创建进程
3.CreateSemaphore():创建信号量
4.CreateFileMapping():在当前运行的进程中创建文件映射对象,模
拟共享内存区
5.MapViewOfFile():在此文件映射基础上创建视图映射到当前应用
程序的地址空间
B:程序流程图(下图)
C:实验结果:
2、Linux下:
A:主要函数说明
1.void(p):申请缓冲区
2.void(v):释放缓冲区
3.shmget():用来获得共享内存区域的ID,如果不存在这个内存
区,就创建这个共享内存区。
4.semget():返回信号量集的Id,如果不存在就创建这个信号量集B:程序流程图
C:实验结果
五. 实验收获与体会
1、进一步熟悉了Windows 、Linux 中进程的创建与管理
2、掌握了WINDOWS 和Linux 下进程之间的通信:Windows 主要在于句柄的获取并用于API 函数的调用,并利用文件映射创建共享缓冲区;Linux 主要使
用信号量机制和相关API的调用。
3、进一步了解生产者消费者中P、V操作的控制过程,和信号量FULL、EMPTY、MUTEX的创建以及值的改变。
4、了解了信号量、共享内存的创建和删除,如果不删除可能导致再次打开程序时的错误。