- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统原理课程设计
题 目: 苹果-桔子问题的实现
目 录
前 言 2
摘 要 3
正 文 4
1. 设计思想 4
2. 算法中用到的主要数据结构(采用类c语言定义) 5
3. 相关的各模块的伪码算法 6
4. 测试结果 12
5. 源程序(带注释) 15
总 结 27
参考文献 28
致 谢 29
前 言
通过该题目的设计过程,掌握磁盘存储管理的原理、软件开发方法并提高解决实际问题的能力。学习使用位示图管理磁盘空间的分配与回收,了解程序运行前和回收磁盘的物理地址过程。学会用模拟Linux系统的成组链接法实现磁盘空间的管理。了解Linux的命令及使用格式,熟悉Linux的常用基本命令,练习并掌握Linux提供的vi编辑器来编译C程序,学会利用gcc、gdb编译、调试C程序。希望通过本次设计过程可以提高自己的分析问题的能力和实际动手的能力,将学到的知识用于实践中。
摘 要
本设计实际上是生产者-消费者问题的一种变形。这里,生产者(父亲和母亲)放入缓冲区(盘子)的产品有两类(苹果和桔子),消费者(女儿和儿子)也有两类,每类消费者只消费其中固定的一类产品。生产者和消费者共享缓冲区,缓冲区中有空时,生产者可放入产品(不许放重),否则等待。缓冲区中有产品时,消费者可取出产品(不许取重),否则等待。
关键词:进程同步,PV操作,互斥,信号量
正 文
1.设计思想
桌上有一个空盘子,只允许放一个水果。爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时,一次只能放一个水果。
学生通过该题目的设计过程,可以掌握生产者与消费者问题、软件开发方法并提高解决实际问题的能力。各进程在执行过程中为合作完成一个共同的任务,需要协调步伐,交换信息。
并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通消息,称为进程同步。
利用信号量和PV操作实现进程同步,PV操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。
本题实际上是生产者-消费者问题的一种变形。这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。生产者和消费者共享缓冲区,缓冲区中有空时,生产者可放入产品(不许放重),否则等待。缓冲区中有产品时,消费者可取出产品(不许取重),否则等待。
2.算法中用到的主要数据结构(采用类C语言定义)
struct event
{
int type;
int t;
struct event *next;
}
struct plate
{
int flag;
struct plate *next;
}
struct person
{
int type;
int flag;
struct person *next;
}
struct event *prod,*cons;
struct plate *in,*out,*head;
struct person *parents,*children;
3.相关的各模块伪码算法
1)开始进程
void start(void)
{
int i;
struct event *p1;
struct plate *p2;
struct person *p3;
printf(\nPlease input the totaltime!\n);
printf(totaltime=(180): );
scanf(%d,totaltime);
rand();
prod=(struct event *)malloc(sizeof(struct event));
prod-type=1;
prod-t=rand()%6+5;
prod-next=0;
parents=(struct person *)malloc(sizeof(struct person));
parents-type=parnum;
parents-flag=1;
parents-next=0;
for(i=1;iparnum;i++)
{
p1=(struct event *)malloc(sizeof(struct event));
p1-type=i+1;
p1-t=rand()%6+5;
p1-next=0;
OrderInse
文档评论(0)