网站大量收购独家精品文档,联系QQ:2885784924

实验五模拟spooling技术.doc

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

实验五 模拟SPOOLING技术 实验目的 通过设计一个SPOOLING假脱机输出的模拟程序,更好地理解和掌握SPOOLING假脱机技术.。 实验原理 1.设计一个实现SPOOLING技术的进程 设计一个SPOOLING输出进程和两个请求输出的用户进程。 当用户需要输出时,调用请求输出进程,将需要输出的信息输出到输出井。 SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息,将其实际输出到显示器。这里,SPOOLING进程与请求输出的用户进程可并发运行。 2.设计进程调度算法 进程调度采用随机算法,这与进程输出信息的随机性相一致。两个请求输出的用户进程的调度概率各为45%,SPOOLING输出进程为10%,这由随机数发生器产生的随机数模拟决定。 3.数据结构 进程控制快PCB struct pcb //进程控制块PCB { int id; //进程标识 int status; //状态 int length; //输出长度 int buf[BUFFERNUM];//输出缓冲 } 其中状态可用值为 0:就绪状态 1:等待状态1,表示输出井满,请求输出的用户进程必须等待 2:等待状态2,表示输出井空,SPOOLING输出进程必须等待 3:等待状态3,表示输出请求块使用完,请求输出的用户进程必须等待 4:结束状态 请求输出块 struct req { int reqid;//要求输出的进程 int length;//输出长度 int addr;//输出首地址 } 输出井结构 struct outbuf { int buf[OUTBUFFERNUM]; //输出井缓冲区 int usedNum; //输出井缓冲区已使用的数目 int head; //指示输出井空闲块首地址 //int tail; //指示输出井信息块(有信息的部分)尾地址 } 5.程序流程图 1)进程调度工作模拟流程 2)请求输出进程流程 2)SPOOLING输出进程流程 实验内容 根据给出程序框架,将spooling()函数补充完整。 #include stdio.h #include stdlib.h #include time.h #include iostream.h #define PROCESSNUM 2 //输出进程个数 #define BUFFERNUM 100 //内存缓冲字节个数 #define OUTBUFFERNUM 200 //输出井存储字节个数 #define REQBLOCKNUM 10 struct pcb //进程控制块PCB { int id; //进程标识 int status; //状态 int length;//输出长度 int buf[BUFFERNUM];//输出缓冲 }PCB[PROCESSNUM+1]; struct req //请求输出块 { int reqid;//要求输出的进程 int length;//输出长度 int addr;//输出首地址 }ReqBlock[REQBLOCKNUM]; struct outbuf //输出井结构 { int buf[OUTBUFFERNUM]; //输出井缓冲区 int usedNum; //输出井缓冲区已使用的数目 int head; //指示输出井空闲块首地址 //int tail; //指示输出井信息块(有信息的部分)尾地址 }OutBuffer[PROCESSNUM]; int UsedReqBlockNum=0; //记录当前已使用的请求块数目 int head=0,tail=0; //指示当前使用的输出请求块,request从tail开始取,spooling从head开始取 int FileNum[PROCESSNUM]; void input()//输入函数 { for(int i=0;iPROCESSNUM;i++) { cout输入第i+1个用户需要输出的文件数目:; cinFileNum[i]; } } void init()//初始化函数 { int i,j; for(i=0;iPROCESSNUM;i++) { OutBuffer[i].head=0; OutBuffer[i].usedNum=0; for(j=0;jOUTBUFFERNUM;j++) OutBuffer[i].buf[j]=0; } for(i=0;iREQBLOCKNUM;i++) { ReqBlock[i].reqid=-1;

文档评论(0)

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

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

1亿VIP精品文档

相关文档