操作系统实验设备管理spooling.doc_第1页
操作系统实验设备管理spooling.doc_第2页
操作系统实验设备管理spooling.doc_第3页
操作系统实验设备管理spooling.doc_第4页
操作系统实验设备管理spooling.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

实验五 设备管理(spooling 技术)实验题目:编写一个Spooling 程序来模拟假脱机输入输出过程2一、实验目的假脱机(Spooling)技术是广泛用于各种系统的一种行之有效的输入输出手段,这种技术使用比较简单的方法,缓和了处理机与低速输入输出设备速度不匹配的矛盾,提高设备的利用率。为了更好地掌握这种技术,本实习要求学生独立地用高级语言编写一个Spooling程序来模拟假脱机输入输出过程。二、实验要求及实验环境可将Spooling 输入输出程序编制成一个独立的进程与其它要求输入输出的进程并发工作。Spooling 进程负责从卡片机或光电读带机等设备读入信息送到磁盘或磁鼓的输入井中,或是把磁盘、磁鼓输出井的信息块送到打印机或CRT 等设备输出。其余进程只要求编写输入输出部分的程序,可不考虑其它操作。本实验编制一个Spooling 输出进程与另外二个要求输出的进程并发运行。要求输出进程每运行一次只输出一项信息到输出井,待输出到一个结束标志时,表示一批信息输出完成,在输出井中形成一输出信息块,再由Spooling 进程把整个信息块实际输出到打印机或CRT。因此,进程的运行必须考虑同步问题。采用进程的随机调度法模拟Spooling 输出是合适的,因为各进程的输出应是随机的。(1)进程调度采用随机调度法,二个要求输出进程的调度概率各为45%,Spooling 进程为10%。(2)可为进程设置三种工作状态:可运行状态,不可运行状态和结束状态。为了区分要求输出进程和Spooling 进程处于不可运行状态的不同原因,又把不可运行状态分成不可运行状态1 和2。分别叙述如下:进程执行完毕后应置成“结束状态”。要求输出进程在输出信息时,如发现输出井已满,应置成“不可运行状态1”。Spooling 进程在输出井空时应置成“不可运行状态2”。Spooling 进程输出一个信息块后,应释放该信息块所占的输出井位置,并将正在等待输出的进程置成“可运行状态”。要求输出进程在输出信息到输出井并形成信息块后,应将Spooling 进程置成“可运行状态”。三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)1流程图4图 假脱机输出系统框图5图 请求输出进程程序框图6图 Spooling 进程程序框图2逻辑设计进程控制块(PCB)对于输出进程和spooling 进程两种不同的进程,采用相同的结构处理,包括进程标识,进程状态,输出缓冲,输出指针,信息块首地址,输出长度等内容。需要支持在不同状态之间的转换,输出缓冲晴空等操作。输出请求块包括要求输出的进程标识,输出长度,输出首地址等内容。7输出井使用队列结构模拟。需要支持队列重整,取队首元素,删除队首元素,在队尾插入等操作,需要使用closed,open 两个指针协助操作。3、物理设计进程控制块(PCB)struct info_PCBlong ID;/进程标识long status;/状态long po;/输出指针long head;/信息块首地址long count;/输出长度long wait1000;/输出缓冲PCB4;输出请求块struct info_blocklong ID;/要求输出的进程long len;/输出长度long head;/输出首地址block128;输出井struct info_walllong num10000;/输出内容long open,closed;/队列指针wall3;四、测试结果实际运行的结果如下:Input the times of user1s output file:4Input the times of user2s output file:7Process 2 produces a block 1!Process 1 produces a block 2!Output block 1: (ID=2)1 1 4 8 9 3 7 1 8 3 2 8 6 2 8 08Process 2 produces a block 3!Process 2 produces a block 4!Output block 2: (ID=1)2 4 5 9 5 9 8 5 4 9 4 8 0Output block 3: (ID=2)7 6 2 8 3 0Process 2 produces a block 5!Process 2 produces a block 6!Output block 4: (ID=2)6 0Process 1 produces a block 7!Process 1 produces a block 8!Output block 5: (ID=2)6 5 1 9 4 0Output block 6: (ID=2)9 4 0Output block 7: (ID=1)2 8 7 5 5 4 2 9 2 1 1 1 5 7 0Process 2 produces a block 9!Process 2 produces a block 10!Output block 8: (ID=1)0Process 1 produces a block 11!Output block 9: (ID=2)5 4 9 1 1 4 4 6 3 2 6 1 2 5 7 0Output block 10: (ID=2)3 4 2 4 0Output block 11: (ID=1)2 1 8 9 7 8 1 5 4 9 3 4 5 5 8 1 3 1 4 8 6 9 4 6 0五、系统不足与经验体会系统的不足包括健壮性尚不够好,界面比较简单,对于模拟过程,输出信息不够详细,对某些规模的的初始化需要修改程序。经验体会:注意数据达到上限时的情况,对于进程调度,要注意避免没有任何一个进程处于等待状态的情况出现。六、附录:源代码(带注释)#include #include #include 9#include struct info_PCBlong ID;/进程标识long status;/状态long po;/输出指针long head;/信息块首地址long count;/输出长度long wait1000;/输出缓冲PCB4;struct info_blocklong ID;/要求输出的进程long len;/输出长度long head;/输出首地址block128;struct info_walllong num10000;/输出内容long open,closed;/队列指针wall3;long K3,L1,L23;long n;void input()/输入函数printf(Input the times of user1s output file:);scanf(%ld,&K1);printf(Input the times of user2s output file:);scanf(%ld,&K2);void init()/初始化函数L1=10;L21=L22=100;memset(PCB,0,sizeof(PCB);PCB1.ID=1;PCB2.ID=2;PCB3.ID=3;PCB3.status=2;memset(wall,0,sizeof(wall);10n=0;void work()/模拟进程调度long r;long k;long a,b;long i,j;while (PCB1.status!=3 | PCB2.status!=3 | PCB3.status!=3)r=rand()%100+1;/用随机数模拟进程执行概率if (r=45)k=1;elseif (r=90)k=2;elsek=3;if (PCBk.status!=0)continue;switch (k)case 1:case 2:/输出进程ka=rand()%10;+PCBk.po;PCBk.waitPCBk.po=a;if (a=0)b=wallk.closed+1;for (i=1;i=PCBk.po;i+)wallk.num+wallk.closed=PCBk.waiti;PCBk.po=0;11PCBk.count+;if (PCBk.count=Kk)/进程执行完毕后应置成结束状态。PCBk.status=3;if (PCB3.status=2)/要求输出进程在输出信息到输出井并形成信息块后,应将Spooling 进程置成可运行状态。PCB3.status=0;if (L2k=0 & PCBk.status=0)/如果输出井满,将进程置为不可运行状态1PCBk.status=1;n+;blockn.ID=k;blockn.head=b;blockn.len=wallk.closed-b+1;printf(Process %ld produces a block %ld!n,k,n);break;case 3:/Spooling 进程PCB3.po+;a=PCB3.po;printf(Output block %ld: (ID=%ld)n,a,blocka.ID);for (i=1;i=blocka.len;i+)printf(%ld ,wallblocka.ID.

温馨提示

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

评论

0/150

提交评论