现代操作系统课程设计报告--生产者与消费问题.doc

现代操作系统课程设计报告--生产者与消费问题.doc

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

进程同步模拟设计

——生产者和消费者问题

第一章课设任务

本课程设计的任务在于,通过编写一个具体的有关操作系统进程同步互斥的经典问题,加强对操作系统实现进程间同步与互斥的机制的理解。同时培养提出问题、发现知识、使用工具、解决问题的能力。

具体地,我们要编制出一个程序,利用PV原语以及进程创建、同步、互斥、销毁等相关的系统调用来模拟“生产者—消费者”问题。

第二章背景介绍

2.1“生产者—消费者”问题(theproducer-consumerproblem)

生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法是让生产者此时进行休眠,等待消费者从缓冲区中取走了一个或者多个数据后再去唤醒它。同样地,当缓冲区已经空了,而消费者还想去取消息,此时也可以让消费者进行休眠,等待生产者放入一个或者多个数据时再唤醒它。

问题分析:

该问题涉及到操作系统进程管理当中的两个重要概念——同步和互斥。

同步,表现在生产者和消费者需要协同工作,步调不能拉开太大(由缓冲区大小n决定,n越大,缓冲空间越大,步调可以拉得越开;n=1时,必须是生产一个,消费一个,生产者和消费者就完全同步了)。当步调差距超过极限时,走在前面的当前进程(生产者)调用P原语时由于资源耗尽,被阻塞;步调靠后的继续向前推进。由此实现同步。

互斥,表现在生产者与消费者、生产者与生产者、消费者与消费者任何两个成员之间必须互斥地使用缓冲区。当有一个成员进入缓冲区存/取产品时,其他成员将被关在门外排队等候(被阻塞);当完毕时,通知队首成员进入。

由操作系统理论可知,我们需要三个信号量,分别命名full,empty,mutex,来分别代表消费者的可用资源数、生产者的可用资源数、缓冲区是否可用。初值:full=0(消费者无资源可用),empty=N(生产者有N个资源可用,N代表缓冲区大小),mutex=1(缓冲区可用)。

要模拟多个进程的并发,我们要使用一个系统调用,使多个函数或程序同时地执行。鉴于VC下这样的函数太过复杂,Linux下笔者暂未找到,因此我们使用Toyix系统提供的一个系统调用函数:cobegin。其说明如下:

cobegin

原型:

intcobegin();

功能:

创建多个子进程并发执行函数。

参数:

函数名用0结束,例如:cobegin(f1,f2,f3,0);

返回值:

创建子进程的个数。

说明:

所有子进程共享数据段,主进程撤销,所有子进程将被撤销。

我们于下一小节具体讲述有关Toyix的背景知识。

2.2Toyix简介

2.2.1概述

Toyix是我国著名计算机教育家王爽老师开发的一个专门用于操作系统基础理论教学的软件。该软件很好的解决了目前存在于计算机专业操作系统课程教学中无法使学习者获得实践体验和对理论直观的了解的问题。以下是Toyix软件的重要意义和特点的描述:(该软件下载地址)

传统的操作系统教学中存在的问题:

重理论轻实践,学习的理论没有与编程结合,使学习者无法获得实际的体验。

以unix或windows为平台实践,这两种系统比较复杂,须学习许多相关的知识,分散学习者的精力,不能把主要精力放在操作系统的问题的研究上。

因此我们需要一个既能提供编程体验,又不能太复杂的试验平台。

为了解决这个问题,王爽老师开发了一个专门用于操作系统基础理论教学的系统-Toyix。

Toyix的特点:

1、Toyix小巧简单

Toyix安装包只有几百KB,下载后解压即可使用。

2、Toyix的用户操作方便

Toyix兼容Dos的大多数命令。

3、Toyix下使用的是TC的编译器

多数学习者在学操作系统前都学过C语言,一般是从TC起步的,这样在Toyix下编程时就不需要再学习新的编程知识,就可以开始编程。

4、Toyix的编程接口兼容性好

系统部分与UNIX兼容,C库函数与标准的C库函数兼容,这样书上的代码非常容易在Toyix下实现。当然Toyix没有实现UNIX和标准C的所有函数,只实现了一些教学实践中必须的。

2.2.2Toyix的安装

安装步骤:

下载TOYIXCE.zip文件,将压缩的文件加压到D盘中,切必须压缩在D盘中,如下图:

图1Toyixce解压到D盘根目录

打开TOYIXCE文件夹,浏览Toyix的系统文件,查看Toyix的系统文件的目录结构,如图:

图2Toyix操作系统的目录结构

二.实现代码:

#includetoyix.h

#defineN4

sema

您可能关注的文档

文档评论(0)

偶遇 + 关注
实名认证
内容提供者

个人介绍

1亿VIP精品文档

相关文档