生产者与消费者 进程的同步与互斥模拟

上传者: qq469236803 | 上传时间: 2021-06-22 16:05:23 | 文件大小: 312KB | 文件类型: RAR
实验题目: 生产者与消费者(综合性实验) 实验环境: C语言编译器 实验内容: ① 由用户指定要产生的进程及其类别,存入进入就绪队列。    ② 调度程序从就绪队列中提取一个就绪进程运行。如果申请的资源被阻塞则进入相应的等待队列,调度程序调度就绪队列中的下一个进程。进程运行结束时,会检查对应的等待队列,激活队列中的进程进入就绪队列。运行结束的进程进入over链表。重复这一过程直至就绪队列为空。    ③ 程序询问是否要继续?如果要转直①开始执行,否则退出程序。 实验目的: 通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。 实验要求: 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程类型标号、进程系统号、进程状态、进程产品(字符)、进程链指针等等。 系统开辟了一个缓冲区,大小由buffersize指定。 程序中有三个链队列,一个链表。一个就绪队列(ready),两个等待队列:生产者等待队列(producer);消费者队列(consumer)。一个链表(over),用于收集已经运行结束的进程 本程序通过函数模拟信号量的操作。 参考书目: 1)徐甲同等编,计算机操作系统教程,西安电子科技大学出版社 2)Andrew S. Tanenbaum著,陈向群,马红兵译. 现代操作系统(第2版). 机械工业出版社 3)Abranham Silberschatz, Peter Baer Galvin, Greg Gagne著. 郑扣根译. 操作系统概念(第2版). 高等教育出版社 4)张尧学编著. 计算机操作系统教程(第2版)习题解答与实验指导. 清华大学出版社 实验报告要求: (1) 每位同学交一份电子版本的实验报告,上传到202.204.125.21服务器中。 (2) 文件名格式为班级、学号加上个人姓名,例如: 电子04-1-040824101**.doc   表示电子04-1班学号为040824101号的**同学的实验报告。 (3) 实验报告内容的开始处要列出实验的目的,实验环境、实验内容等的说明,报告中要附上程序代码,并对实验过程进行说明。 基本数据结构: PCB* readyhead=NULL, * readytail=NULL; // 就绪队列 PCB* consumerhead=NULL, * consumertail=NULL; // 消费者队列 PCB* producerhead=NULL, * producertail=NULL; // 生产者队列 over=(PCB*)malloc(sizeof(PCB)); // over链表 int productnum=0; //产品数量 int full=0, empty=buffersize; // semaphore char buffer[buffersize]; // 缓冲区 int bufferpoint=0; // 缓冲区指针 struct pcb { /* 定义进程控制块PCB */ int flag; // flag=1 denote producer; flag=2 denote consumer; int numlabel; char product; char state; struct pcb * processlink; …… }; processproc( )--- 给PCB分配内存。产生相应的的进程:输入1为生产者进程;输入2为消费者进程,并把这些进程放入就绪队列中。 waitempty( )--- 如果缓冲区满,该进程进入生产者等待队列;linkqueue(exe,&producertail); // 把就绪队列里的进程放入生产者队列的尾部 void signalempty() bool waitfull() void signalfull() void producerrun() void comsuerrun() void main() { processproc(); element=hasElement(readyhead); while(element){ exe=getq(readyhead,&readytail); printf("进程%d申请运行,它是一个",exe->numlabel); exe->flag==1? printf("生产者\n"):printf("消费者\n"); if(exe->flag==1) producerrun();

文件下载

资源详情

[{"title":"( 16 个子文件 312KB ) 生产者与消费者 进程的同步与互斥模拟","children":[{"title":"实验报告2.doc <span style='color:#111;'> 92.00KB </span>","children":null,"spread":false},{"title":"sy2","children":[{"title":"sy2.dsp <span style='color:#111;'> 3.29KB </span>","children":null,"spread":false},{"title":"sy2.opt <span style='color:#111;'> 47.50KB </span>","children":null,"spread":false},{"title":"sy2.dsw <span style='color:#111;'> 531B </span>","children":null,"spread":false},{"title":"sy2.ncb <span style='color:#111;'> 41.00KB </span>","children":null,"spread":false},{"title":"sy2.cpp <span style='color:#111;'> 4.91KB </span>","children":null,"spread":false},{"title":"Debug","children":[{"title":"vc60.pdb <span style='color:#111;'> 60.00KB </span>","children":null,"spread":false},{"title":"sy2.obj <span style='color:#111;'> 17.12KB </span>","children":null,"spread":false},{"title":"sy2.bsc <span style='color:#111;'> 73.00KB </span>","children":null,"spread":false},{"title":"vc60.idb <span style='color:#111;'> 41.00KB </span>","children":null,"spread":false},{"title":"sy2.ilk <span style='color:#111;'> 253.21KB </span>","children":null,"spread":false},{"title":"sy2.pdb <span style='color:#111;'> 513.00KB </span>","children":null,"spread":false},{"title":"sy2.pch <span style='color:#111;'> 257.21KB </span>","children":null,"spread":false},{"title":"sy2.sbr <span style='color:#111;'> 0B </span>","children":null,"spread":false},{"title":"sy2.exe <span style='color:#111;'> 212.10KB </span>","children":null,"spread":false}],"spread":true},{"title":"sy2.plg <span style='color:#111;'> 869B </span>","children":null,"spread":false}],"spread":true}],"spread":true}]

评论信息

  • weixin_42124072 :
    还好,不错
    2018-05-14
  • zzj11223344 :
    代码无错误,注释能清楚的看懂,能根据要求做出修改
    2014-05-04
  • u014778424 :
    代码一次通过 而且是原创的 很好
    2014-04-28
  • cccbbc :
    还不错,但是没有模拟对缓冲池的互斥访问阿好像
    2014-01-07
  • abigbadboy :
    代码没有错误,程序可以运行
    2013-10-17

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明