(实验四设备管理.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(实验四设备管理

SPOOLING模拟系统 一、实验目的 假脱机(Spooling)技术是广泛用于各种系统的一种行之有效的输入输出手段,这种技术使用比较简单的方法,缓和了处理机与低速输入输出设备速度不匹配的矛盾,提高设备的利用率。为了更好地掌握这种技术,本实习要求学生独立地用高级语言编写一个Spooling程序来模拟假脱机输入输出过程。 二、实验要求及实验环境 可将 Spooling 输入输出程序编制成一个独立的进程与其它要求输入输出的进程并发工作。Spooling 进程负责从卡片机或光电读带机等设备读入信息送到磁盘或磁鼓的输入井中,或是把磁盘、磁鼓输出井的信息块送到打印机或 CRT 等设备输出。其余进程只要求编写输入输出部分的程序,可不考虑其它操作。 本实验编制一个 Spooling 输出进程与另外二个要求输出的进程并发运行。要求输出进程每运行一次只输出一项信息到输出井,待输出到一个结束标志时,表示一批信息输出完成,在输出井中形成一输出信息块,再由 Spooling 进程把整个信息块实际输出到打印机或CRT。因此,进程的运行必须考虑同步问题。 采用进程的随机调度法模拟 Spooling输出是合适的, 因为各进程的输出应是随机的。 (1)进程调度采用随机调度法,二个要求输出进程的调度概率各为45%,Spooling 进程为 10%。 (2)可为进程设置三种工作状态:可运行状态,不可运行状态 3和结束状态。 为了区分要求输出进程和Spooling 进程处于不可运行状态的不同原因,又把不可运行状态分成不可运行状态 1 和2。分别叙述如下: ①进程执行完毕后应置成“结束状态” 。 ②要求输出进程在输出信息时,如发现输出井已满,应置成“不可运行状态1” 。 ③Spooling 进程在输出井空时应置成“不可运行状态2” 。 ④Spooling 进程输出一个信息块后,应释放该信息块所占的输出井位置,并将正在等待输出的进程置成“可运行状态” 。 ⑤要求输出进程在输出信息到输出井并形成信息块后,应将Spooling进程置成“可运行状态” 。 三、设计思想 1. 数据结构: ① 进程控制块PCB: struct { int d;进程标识数 int status;进程状态 int outpointer;输出指针 int firetaddr;信息块首地址 int length;输出长度 int outbufword;输出缓冲字 }PCB[3] status=0为可执行态 1为等待状态输出井满 2为等待状态无请求块 3为结束态 outpointer指向输出井的第一个空位置。 ②输出请求块 reqblock: struct { int reqname;请求进程名 int length;本次输出长度 int addr;本次输出的首地址 }reblock[10] ③输出井 well:SPOOLING 系统为每一个请求输出的进程在输出井中分别开辟一个区域。本例设置一个数组int well[2][100]作为输出井。 2. 程序框图。程序框图见附图1、附图2和附图3。 四、 #include cstdio #include cstring #include cstdlib #include ctime struct info_PCB { long ID;//进程标识 long status;//状态 long po;//输出指针 long head;//信息块首地址 long count;//输出长度 long wait[1000];//输出缓冲 }PCB[4]; struct info_block { long ID;//要求输出的进程 long len;//输出长度 long head;//输出首地址 }block[128]; struct info_wall { long num[10000];//输出内容 long open,closed;//队列指针 }wall[3]; long K[3],L1,L2[3]; long n; void input()//输入函数 { printf(Input the times of user1s output file:); scanf(%ld,K[1]); printf(Input the times of user2s output file:); scanf(%ld,K[2]); } void init()//初始化函数 { L1=10; L2[1]=L2[2]=100; memset(PCB,0,sizeof(PCB)); PCB[1].ID=1; PCB[2].I

文档评论(0)

lisufan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档