操作系统课程设计_第1页
操作系统课程设计_第2页
操作系统课程设计_第3页
操作系统课程设计_第4页
操作系统课程设计_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学号:0120810340614课程设计题目进程同步模拟设计——生产者和消费者问题学院计算机科学与技术学院专业计算机科学与技术班级0806姓名张方纪指导教师孙玉芬2010年1月20日课程设计任务书学生姓名: 张方纪 专业班级: 计算机0806指导教师: 孙玉芬 工作单位:计算机科学与技术学院题目:进程同步模拟设计一一生产者和消费者问题初始条件:预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)模拟用信号量机制实现生产者和消费者问题。设计报告内容应说明:⑴需求分析;⑵功能设计(数据结构及模块说明);⑶开发平台及源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i) 你认为你完成的设计哪些地方做得比较好或比较出色;ii) 什么地方做得不太好,以后如何改正;iii) 从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv) 完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:系主任(或责任教师)签名:进程同步模拟设计——生产者和消费者问题1课设任务本课程设计的任务在于,通过编写一个具体的有关操作系统进程同步互斥的经典问题,加强对操作系统实现进程间同步与互斥的机制的理解。同时培养提出问题、发现知识、使用工具、解决问题的能力。具体地,我们要编制出一个程序,利用PV原语以及进程创建、同步、互斥、销毁等相关的系统调用来模拟“生产者一消费者”问题。2背景介绍2.1“生产者一消费者”问题(theproducer-consumerproblem)问题描述:一组生产者向一组消费者提供消息,它们共享一个有界缓冲区n,生产者向其中投放消息,消费者从中取得消息。规则:♦对于生产者进程:产生一个数据,当要送入缓冲区时,要检查缓冲区是否已满,若未满,则可将数据送入缓冲区,并通知消费者进程;否则,等待;♦对于消费者进程:当它去取数据时,要看缓冲区中是否有数据可取,若有则取走一个数据,并通知生产者进程,否则,等待。♦缓冲区是个临界资源,因此,诸进程对缓冲区的操作程序是一个共享临界区,所以,还有个互斥的问题。问题分析:该问题涉及到操作系统进程管理当中的两个重要概念一一同步和互斥。同步,表现在生产者和消费者需要协同工作,步调不能拉开太大(由缓冲区大小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的安装安装步骤:

1、下载TOYIXCE.zip文件,将压缩文件中的TOYIXCE文件夹解压到D盘根目录下,如下图。文件更)编辑⑥查看但)收藏⑴工具(I)繁助文件更)编辑⑥查看但)收藏⑴工具(I)繁助®O后退-OF尸搜素文件夹回・地址(山|^0:\TOC\o"1-5"\h\zr 'Ij削建-彻史怦夷 Ij得次个女传买抵鄙到I通晶临件探 I解压Toyix到D:盘根目录2、打开TOYIXCE文件夹,浏览Toyix的系统文件,查看Toyix系统文件的目录结构,如下图。*D:\TOYIXCE文件曷舞牌(曰查者但)收藻⑴工具⑴帮助(E)。后退-0A|Q掀S。文件夹园・aJM我的w—KDKE0).1|5:vron藏ewm浦共享此立件丧ranin支件丧□mmaJM我的w—KDKE0).1|5:vron藏ewm浦共享此立件丧ranin支件丧□mm1女件初文件夹ft等以倒建一个新文伟冥用迂亍女伴哭钢割teSHELL.Elffi眼,砧IT」:.TOVIX_C.EKE1499-1-423:00tuyix.libB-J9-1-?[;35LIB文件WY.EXE1澎-LT6;37OT.OBJ2002^-292;14IrtteTmadtatefileTLINK.EKE19^-1-^7:16CSAIE1-54:55-LI&文件T0TIX.H1獭T-T利CHeader£i1eEDIT.COM1-101Z:OO应用程序_C丽2Q&2-M921:13EX&交件峰很日蚓SOOT年勺月事日'I、44CQ.MT2&0Z-S-2T0:35.Wind口印字早肉密文件图2Toyix操作系统的目录结构如果看到toyix的系统文件在D:\TOYIXCE目录下,说明Toyix系统已安装完毕。2.2.3对Toyix的一点修改

Toyix将用户程序源文件放在了心盘根目录,极不方便打开,又容易与C:盘系统文件混淆。因此我建议更改工作目录。打开Toyix操作系统的目录结构中的CO.BAT文件,将其中内容更改为:@echooffpathd:\toyixcecd/dD:\TOYIXCE\PROJECTStoy并在D:\TOYIXCE目录下建立一PROJECTS文件夹,即可将工作目录设在D:\TOYIXCE\PROJECTS下,可以很方便地将整个Toyix操作系统及你所编写的程序打包,而且也避免了与C:盘主操作系统文件的相互干扰。此后,用户用edit文本编辑器新建的文件以及后面用cc命令编译和用do命令运行的文件/程序就都默认在此工作目录下了。2.2.4Toyix的启动和初步使用WindowsXp及以上的用户可以直接双击CO.BAT启动2.2.4Toyix操作系统。默认当前目录即上面所说的D:\TOYIXCE\PROJECTSoToyix系统很简单,只涉及简单的模拟进程管理,只包含等少许外部程序(当然用户可以利用它的CC内部命令自己生成.prg格式的外部程序)oToy.exe是其在Windows下的启动程序。用户使用普通的文本编辑器,或它自带的editDOS下的编辑器编辑源程序。使用cc命令编译。使用do命令运行。运行过程中,DOS界面上方会有一栏toyix的进程监视器。它显示了所有进程的状态,“running”后面显示的是正在执行进程的进程号,“ready”后面显示的是就绪进程的进程号,“blocked”后面显示的是阻塞进程的进程号。如图3:running*!0vea.<Ly:1 blocksdI TNuLtdprdicbssffoni-fcnroflxQ31-pvgCl)4kFr-easkey 图3toyix的进程监视器2.2.5Toyix编程Toyix编程部分主要讲解toyix系统提供的库函数。Toyix库函数主要分两类:一类是与系统相关的库函数;另一类是c库函数,和一般c库函数的使用基本相同。此部分内容请读者参考,上面的资料。地址:http://www.toyix.nct/tutorial/tutorial.htm#a2读者也可以通过本课设报告来窥知toyix系统的内容。3具体实现(完整代码及分析)完整代码如下:#include<toyix.h>#defineN4semaphoremutex;semaphorefull;semaphoreempty;produce(){delay(3000);/*用3秒钟生产一件产品*/printf("%dProduceaproduct\n",get_pid());p(&empty);p(&mutex);delay(5000);/*用5秒钟将该产品放入缓冲区*/printf("%dPuttheproductintobuffer\n",get_pid());v(&mutex);v(&full);}consume(){p(&full);p(&mutex);delay(5000);/*用5秒钟从缓冲区取走一件产品*/printf("%dFetchaproductformbuffer\n”,get_pid());v(&mutex);v(&empty);delay(3000);/*用3秒钟消费该产品*/printf("%dConsumetheproduct\n”,get_pid());}main(){intn,i;printf("\n");/*设置信号量的初值*/set(&mutex,1);/*mutex=1:缓冲区可用;mutex=0:缓冲区正被占用,不可用*/set(&full,0);/*consume函数的信号量。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("%dsub-processreadytorunconcurrently.\n”,n);printf("\n");getch();/*必须加上,以保证主进程最后才结束。cobegin的子进程都会在主进程结束时被销毁。*/}运行过程与结果:匚:「C:^TlffDOlSVsysl\c>d.eseToyixuersion1_0S,Copyright<c>2093UangShuangTQ<;ixisconcurrentenvironmentivseAinOSteachin?andresea.rcliin9Uan^Shuan^Jsemail:superhopel?!26.cdh,feustu@163.comkCo.:XTO?IXCEXPROJECT£>cccp.cConpiling...cp.c:Availablememory244700Linking...Making-.-.pp-prg-<Co.>D:XTOVIXCEXPEOJECTS>_图4编译源程序,成功生成.prg可执行文件反C:\THTD01SVsysleB32\cad.eserunning:0ready:1 blocked: ToyixThree-statesHonitorU0.03Toyixis-aconcurrentenvironment inOSteachingandresearchinsUan^ShLian^Jsemail:superhopeP,fewstuP163.conkCo.>D:\TOVIKCE\PROJECT£>cccp.cConpiling...cp_c:Availablenemoi'9244700Linking...Making-.-.pp-prffkCo.>D:XTOVIXCEXPKOJECTS>docpcp.prg-<1〉dLPressanyke^F...图5执行可执行文件,父进程就绪0号进程是操作系统初始进程,或命令行进程。1号进程为可执行文件调入内存所产生的进程,即主(父)进程。本程序中,2号开始即为子进程。Cobegin中共7个函数(进程)并发执行,进程号分别为2〜8。

图6按任意键开始运行可以看到,此时进程5被调度到,61234处于就绪状态,78被阻塞。3C:\¥IlTD01SVsys-t eserunning:1readj/:3 blocked:245&78ToyixThree-statesHonitorU0.03<Co_JD:\T0¥IXCEXPKOJECTS>cccp_cGonpiling...cp.c:Availablenemor^r2447BBLinkinc[-..Making-.-.cp-prffkCo.>D:ST0?IXCESPBOJECTS>docpcp_pi'fftl>okPressanykey.-7sub—pi'ocessreadytoi'uncancLLi't'entlu.ProduceaproductProduceaproductProduceaproductProduceaproductProduceaproduct图7进程的切换调度可见,34256都已经执行过至少一次,而且并发的7个进程的调度先后顺序并无一定之规。6进程(生产者)生产了1件产品,可是因为缓冲区才4个单位,前四个生产者已经往其中放满了产品。接下来会发生什么?8C:\THTD01SVsysl»32\c>d.eserunning:running:1ready: blocked:Flaking...cp.prcrToyixThree-statesNonitorU0.03<Co.7D:<Co.7D:\TO¥IKCESPKOJECTS>docp.prcfCl>opsPressanykey...7sub-processreadytoi'nnCPconcurrent34256342577ProduceProduceProduceProduceProducePutthePutthePutthePuttheFetchaConsumeFetchaConsumePuttheaproductaproductaproductaproductaproductproductintoproductintoproductintoproductintoproductfol'r34256342577ProduceProduceProduceProduceProducePutthePutthePutthePuttheFetchaConsumeFetchaConsumePuttheaproductaproductaproductaproductaproductproductintoproductintoproductintoproductintoproductfol'rtJieproductproductfot'nthepr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论