生产者与消费者进程同步问题
第3页共6页
④使用 Append()与 Take()函数进行循环。 5、实验测试及分析
结果分析: 1、在每个程序中先做 P(mutex),后做 V(mutex),二者要成对出现。夹在二者 中间的代码段就是该进程的临界区。 2、对同步信号量 full 和 empty 的 P,V 操作同样必须成对出现,但它们分别位 于不同的程序中。 3、无论在生产者进程中还是在消费者进程中,两个 P 操作的次序不能颠倒:应 先执行同 步信号量的 P 操作,然后执行互斥信号量的 P 操作。否则可能造成进程
3、实验环境: VC6++
4、实验内容: 生产者和消费者是经典的进程同步问题,在这个问题中,生产者不断的向缓冲
区中写入数据,而消费者则从缓冲区中读取数据。生产者进程和消费者对缓冲区的 操作是互斥,即当前只能有一个进程对这个缓冲区进行操作,生产者进入操作缓冲 区之前,先要看缓冲区是否已满,如果缓冲区已满,则它必须等待消费者进程将数 据取出才能写入数据,同样的,消费者进程从缓冲区读取数据之前,也要判断缓冲 区是否为空,如果为空,则必须等待生产者进程写入数据才能读取数据。
2)程序要求 ①缓冲区采用循环队列表示,利用头、尾指针来存放、读取数据,以及判断队 列是否为空。缓冲区中数组大小为 15; ②利用函数 producer()作为生产者每次生产的数据,存放到缓冲区中; ③使用 main()函数调用实现共享主存段的创建,返回共享内存区的 ID。对于已 经申请到的共享段,进程需把它附加到自己的虚拟空间中才能对其进行读写。
目前,计算机系统中用得比较普遍的高级通信机制可分为 3 大类:共享存储器 系统、消息传递系统及管道通信系统。
• 共享存储器系统 共享存储器系统为了传送大量数据,在存储器中划出一块共享存储区,诸进程 可通过对共享存储区进行读数据或写数据以实现通信。进程在通信之前,向系统申 请共享存储区中的一个分区,并为它指定一个分区关键字。 信息的交换称为低级通 信,而把进程间大批量数据的交换称为高级通信。 目前,计算机系统中用得比较普遍的高级通信机制可分为 3 大类:共享存储器 系统、消息传递系统及管道通信系统。 • 消息传递系统 在消息传递系统中,进程间的数据交换以消息为单位,在计算机网络中被称为 报文。消息传递系统的实现方式又可以分为以下两种: (1)直接通信方式 发送进程可将消息直接发送给接收进程,即将消息挂在接收进程的消息缓冲队 列上,而接收进程可从自己的消息缓冲队列中取得消息。 (2)间接通信方式 发送进程将消息发送到指定的信箱中,而接收进程从信箱中取得消息。这种通 信方式又称信箱通信方式,被广泛地应用于计算机网络中。相应地,该消息传递系 统被称为电子邮件系统。 • 管道通信系统 向管道提供输入的发送进程,以字符流方式将大量的数据送入管道,而接收进 程从管道中接收数据。由于发送进程和接收进程是利用管道进行通信的,故称为管 道通信。 为了协调发送和接收双方的通信,管道通信机制必须提供以下 3 方面的协调功 能。
1)实验原理 在本实验中,进程之间要进行通信来操作同一缓冲区。一般来说,进程间的通 信根据通信内容可以划分为两种:即控制信息的传送与大批量数据传送。有时,也 把进程间控制在本实验中,进程之间要进行通信来操作同一缓冲区。一般来说,进
第1页共6页
程间的通信根据通信内容可以划分为两种:即控制信息的传送与大批量数据传送。 有时,也把进程间控制信息的交换称为低级通信,而把进程间大批量数据的交换称 为高级通信。
第5页共6页
实验报告
课程名称:
操作系统
实验名称: 生产者与消费者的进程同步问题
学 号:Leabharlann 学生姓名:班 级:
指导老师:
1、实验目的:
实验日期:2014 年 11 月 4 日
① 熟悉临界资源、信号量及 PV 操作的定义与物理意义 ② 了解进程通信的方法 ③ 掌握进程互斥与进程同步的相关知识 ④ 掌握用信号量机制解决进程之间的同步与互斥问题 ⑤ 实现生产者-消费者问题,深刻理解进程同步问题 2、实验要求: 本实验的主要目的是模拟操作系统中进程同步和互斥。在系统进程并发执行异 步推进的过程中,由于资源共享和进程间合作而造成进程间相互制约。进程间的相 互制约有两种不同的方式。 (1)间接制约。这是由于多个进程共享同一资源(如 CPU、共享输入/输出设 备)而引起的,即共享资源的多个进程因系统协调使用资源而相互制约。 (2)直接制约。只是由于进程合作中各个进程为完成同一任务而造成的,即并 发进程各自的执行结果互为对方的执行条件,从而限制各个进程的执行速度。
第4页共6页
死锁。 6、实验心得体会
在分析程序的过程中发现了几点问题,第一个便是 C 语言与 C++混乱,C 语言 里面的语句用到了本程序中如“/n”在 C 语言中为换行符号,但在 C++中却不是; 第二个便是符号问题,在程序编写过程中应用英文标点符号。本次实验是关于生产 者与消费者之间互斥和同步的问题。问题的是指是 P、V 操作,实验设一个共享缓冲 区,生产者和消费者互斥的使用,当一个线程使用缓冲区的时候,另一个让其等待 直到前一个线程释放缓冲区为止。实验中包含的知识点很多,包括临界区资源共享 问题、信号量定义、PV 操作流程、进程间的通信方式(消息传递和共享内存)、进 程同步和互斥、信号量机制解决进程之间的同步与互斥问题等等。加深了对于本部 分内容的理解,通过本实验设计,我们对操作系统的 P、V 进一步的认识,深入的了 解 P、V 操作的实质和其重要性。课本的理论知识进一步阐述了现实中的实际问题。
第2页共6页
(1)互斥 当一个进程正在对文件进行读或写操作时,另一个进程必须等待。 (2)同步 当写进程把一定数量的数据写入文件后,便阻塞等待,直到读进程取走数据后, 再把写进程唤醒。 (3)确认对方是否存在 只有确定对方已存在时,才能进行管道通信,否则会造成因对方不存在而无限制 地等待。在这个问题当中,我们采用信号量机制进行进程之间的通信,设置两个信 号量,空的信号量和满的信号量。使用信号量机制可以实现进程之间的同步和互斥, 允许并发进程一次对一组信号量进行相同或不同的操作。每个 P、V 操作不限于减 1 或加 1,而是可以加减任何整数。在进程终止时,系统可根据需要自动消除所有被进 程操作过的信号量的影响。