
操作系统课程设计进程同步模拟设计.doc
13页操作系统课程设计-进程同步模拟设计———————————————————————————————— 作者:———————————————————————————————— 日期: 学 号: 课 程 设 计题 目进程同步模拟设计——生产者和消费者问题学 院计算机科学与技术学院专 业计算机科学与技术班 级0806姓 名张方纪指导教师孙玉芬2021年1月20日课程设计任务书学生姓名: 张方纪 专业班级: 计算机0806 指导教师: 孙玉芬 工作单位: 计算机科学与技术学院题 目: 进程同步模拟设计——生产者和消费者问题 初始条件:1.预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解2.实践准备:掌握一种计算机高级语言的使用要求完成的主要任务: 〔包括课程设计工作量及其技术要求,以及说明书撰写等具体要求〕1.模拟用信号量机制实现生产者和消费者问题2.设计报告内容应说明:⑴ 需求分析;⑵ 功能设计〔数据构造及模块说明〕;⑶ 开发平台及源程序的主要局部;⑷ 测试用例,运行结果与运行情况分析;⑸ 自我评价与总结:i〕你认为你完成的设计哪些地方做得比拟好或比拟出色;ii〕什么地方做得不太好,以后如何改正;iii〕从本设计得到的收获〔在编写,调试,执行过程中的经历和教训〕;iv〕完成此题是否有其他方法〔如果有,简要说明该方法〕;时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试周4、周5:验收、撰写课程设计报告〔考前须知:严禁抄袭,一旦发现,一律按0分记〕指导教师签名: 年 月 日系主任〔或责任教师〕签名: 年 月 日进程同步模拟设计——生产者和消费者问题1 课设任务本课程设计的任务在于,通过编写一个具体的有关操作系统进程同步互斥的经典问题,加强对操作系统实现进程间同步与互斥的机制的理解同时培养提出问题、发现知识、使用工具、解决问题的能力具体地,我们要编制出一个程序,利用PV原语以及进程创立、同步、互斥、销毁等相关的系统调用来模拟“生产者—消费者〞问题2 背景介绍2.1 “生产者—消费者〞问题(the producer-consumer problem)问题描述:一组生产者向一组消费者提供消息,它们共享一个有界缓冲区n,生产者向其中投放消息,消费者从中取得消息规那么:u 对于生产者进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满,假设未满,那么可将数据送入缓冲区,并通知消费者进程;否那么,等待;u 对于消费者进程:当它去取数据时,要看缓冲区中是否有数据可取,假设有那么取走一个数据,并通知生产者进程,否那么,等待。
u 缓冲区是个临界资源,因此,诸进程对缓冲区的操作程序是一个共享临界区,所以,还有个互斥的问题问题分析:该问题涉及到操作系统进程管理当中的两个重要概念——同步和互斥同步,表现在生产者和消费者需要协同工作,步调不能拉开太大〔由缓冲区大小n决定,n越大,缓冲空间越大,步调可以拉得越开;n=1时,必须是生产一个,消费一个,生产者和消费者就完全同步了〕当步调差距超过极限时,走在前面的当前进程〔生产者〕调用P原语时由于资源耗尽,被阻塞;步调靠后的继续向前推进由此实现同步互斥,表现在生产者与消费者、生产者与生产者、消费者与消费者任何两个成员之间必须互斥地使用缓冲区当有一个成员进入缓冲区存/取产品时,其他成员将被关在门外排队等候〔被阻塞〕;当完毕时,通知队首成员进入由操作系统理论可知,我们需要三个信号量,分别命名full, empty, mutex,来分别代表消费者的可用资源数、生产者的可用资源数、缓冲区是否可用初值:full=0〔消费者无资源可用〕,empty=N〔生产者有N个资源可用,N代表缓冲区大小〕,mutex=1〔缓冲区可用〕要模拟多个进程的并发,我们要使用一个系统调用,使多个函数或程序同时地执行。
鉴于VC下这样的函数太过复杂,Linux下笔者暂未找到,因此我们使用Toyix系统提供的一个系统调用函数:cobegin其说明如下:cobegin原型:int cobegin();功能:创立多个子进程并发执行函数参数:函数名用0完毕,例如: cobegin(f1,f2,f3,0);返回值:创立子进程的个数说明:所有子进程共享数据段,主进程撤销,所有子进程将被撤销我们于下一小节具体讲述有关Toyix的背景知识2.2 Toyix简介2.2.1 概述Toyix 是我国著名计算机教育家王爽教师开发的一个专门用于操作系统根底理论教学的软件该软件很好的解决了目前存在于计算机专业操作系统课程教学中无法使学习者 获得实践体验和对理论直观的了解的问题以下是Toyix软件的重要意义和特点的描述:〔该软件下载地址 〕传统的操作系统教学中存在的问题:u 重理论轻实践,学习的理论没有与编程结合,使学习者无法获得实际的体验u 以unix或windows为平台实践,这两种系统比拟复杂,须学习许多相关的知识,分散学习者的精力,不能把主要精力放在操作系统的问题的研究上因此我们需要一个既能提供编程体验,又不能太复杂的试验平台。
为了解决这个问题,王爽教师开发了一个专门用于操作系统根底理论教学的系统-ToyixToyix的特点: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.2 Toyix的安装安装步骤:1、下载文件,将压缩文件中的TOYIXCE文件夹解压到D盘根目录下,如下列图图1 解压Toyix到D:盘根目录2、翻开TOYIXCE文件夹,浏览Toyix的系统文件,查看Toyix系统文件的目录构造,如下列图图2 Toyix操作系统的目录构造如果看到toyix的系统文件在D:\TOYIXCE目录下,说明Toyix系统已安装完毕2.2.3 对Toyix的一点修改Toyix将用户程序源文件放在了C:盘根目录,极不方便翻开,又容易与C:盘系统文件混淆。
因此我建议更改工作目录翻开Toyix操作系统的目录构造中的CO.BAT文件,将其中内容更改为:@echo offpath d:\toyixcecd /d D:\TOYIXCE\PROJECTStoy并在D:\TOYIXCE目录下建立一PROJECTS文件夹,即可将工作目录设在D:\TOYIXCE\PROJECTS下,可以很方便地将整个Toyix操作系统及你所编写的程序打包,而且也防止了与C:盘主操作系统文件的相互干扰此后,用户用edit文本编辑器新建的文件以及后面用cc命令编译和用do命令运行的文件/程序就都默认在此工作目录下了2.2.4 Toyix的启动和初步使用Windows Xp及以上的用户可以直接双击启动2.2.4 Toyix操作系统默认当前目录即上面所说的D:\TOYIXCE\PROJECTSToyix〔当然用户可以利用它的CC内部命令自己生成.prg格式的外部程序〕Toy.exe是其在Windows下的启动程序用户使用普通的文本编辑器,或它自带的edit DOS下的编辑器编辑源程序使用cc命令编译使用do命令运行运行过程中,DOS界面上方会有一栏toyix的进程监视器它显示了所有进程的状态,“running〞后面显示的是正在执行进程的进程号,“ready〞后面显示的是就绪进程的进程号,“blocked〞后面显示的是阻塞进程的进程号。
如图3:图3 toyix的进程监视器2.2.5 Toyix编程Toyix编程局部主要讲解toyix系统提供的库函数Toyix库函数主要分两类:一类是与系统相关的库函数;另一类是c库函数,和一般c库函数的使用根本一样此局部内容请读者参考,上面的资料地址: :// 读者也可以通过本课设报告来窥知toyix系统的内容3 具体实现〔完整代码及分析〕完整代码如下:#include
full=1~N:缓冲区有产品可取走; full<=0:缓冲区无产品 */ set(&empty,N);/*produce函数的信号量empty=1~N:缓冲区有空位放产品;full<=0:缓冲区无空位 */ n=cobegin(/*多个函数〔进程〕并行执行测试各种情况〔注:cobegin最多支持7个函数同时运行〕*/ produce, produce, produce, produce, produce, consume, consume, 0 ); printf("%d sub-process ready to run concurre。
