北理操作系统实验三

  • 格式:docx
  • 大小:845.42 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计实验报告

实验名称:生产者消费者问题

姓名/学号:

一.实验目的

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、了解了信号量、共享内存的创建和删除,如果不删除可能导致再次打开程序时的错误。