操作系统课程设计spooling课程设计报告

操作系统课程设计spooling课程设计报告

ID:18649362

大小:101.50 KB

页数:13页

时间:2018-09-20

操作系统课程设计spooling课程设计报告_第1页
操作系统课程设计spooling课程设计报告_第2页
操作系统课程设计spooling课程设计报告_第3页
操作系统课程设计spooling课程设计报告_第4页
操作系统课程设计spooling课程设计报告_第5页
资源描述:

《操作系统课程设计spooling课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1需求分析SPOOLING是SimultaneousPeripheralOperationOn-Line(即外部设备联机并行操作)的缩写,它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。SPOOLING技术实际上是一种外围设备同时联机操作技术,又称为排队转储技术。它在输入和输出之间增加了“输入井”和“输出井”的排队转储环节。进程基本状态有3种,分别为可执行,等待和结束。可执行态就是进程正在运行或等待调度的状态;等待状态又分为等待状态1,等待状态2,等待状态3。状态变化的条件为:1>进程执行完成时,置为“结束”态。2>服务程序在将输出信息送输出井时,如

2、发现输出井已满,将调用进程置为“等待状态1”。3>SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”。4>SPOOLING进程输出一个信息快后,应立即释放该信息快所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。5>服务程序在输出信息到输出井并形成输出请求信息快后,若SPOOLING进程处于等待态则将其置为“可执行状态”。6>当用户进程声请请求输出快时,若没有可用请求快时,调用进程进入“等待状态3”。满足条件:1)设计一个实现SPOOLING技术的进程设计一个SPOOLING输出服务进程、一个SPOOLING输出进程、两个用户请求进程。用户进程请求输出一系

3、列信息,调用输出服务进程,由输出服务进程将该信息送入输出井。等待SPOOLING进程进行输出。SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息将其输出。2)设计进程调度算法进程调度采用随机算法,两个请求输出的用户进程的调度概率各为45%,SPOOLING输出进程为10%,这由随机数发生器产生的随机数来模拟决定。2概要设计数据结构:(1)进程控制块(PCB)Structpcb{intid;//进程标示intstatus;//进程状态intfirstaddr;intlength;//输出长度intoutbufword;}*PCB[3];PCB(ProcessContr

4、olBlock),进程控制块是操作系统用于记录和刻画进程状态及有关信息的数据结构,也是操作系统掌握进程的唯一资料结构,是操作系统控制和管理进程的主要依据。它包括了进程执行时的情况,以及进程让出处理器所处的状态、断点等信息。对于输出进程和spooling进程两种不同的进程,采用相同的结构处理,包括进程标识,进程状态,输出缓冲,输出指针,信息块首地址,输出长度等内容。需要支持在不同状态之间的转换,输出缓冲晴空等操作。(2)请求输出快reqblockstruct{intreqname;//请求进程名intlength;//输出长度intaddr;//信息在输出井的首地址}reqblock

5、[10];输出请求块的作用是定义标识要求输出进程的变量和相关信息并且定义输出首地址。要求输出的进程标识,输出长度,输出首地址等内容。(3)输出井BUFFERSPOOLING系统为每个请求输出的进程在输出井中分别开辟一个区。本实验可设计一个二维数组(intbuffer[2][10])作为输出井。每个进程在输出井最多可占用10个位置。函数调用关系图:程序框图如下:入口PCB、输出请求块、输出井等初始化生成随机数x(0-1)90判x及进程状态均不满足x>0.9且SPOOLING进程为可执行状态x<=0.45且进程1为可执行状态0.45

6、1)执行请求输出进程3(r=3)执行请求输出进程2intreqname;//请求进程名intlength;//输出长度intaddr;//信息在输出井的首地址(r=2)输出请求完成全部结束SPOOLING模拟系统主控图3运行环境Windowsxp系统下vc++6.04开发工具和编程语言Vc++6.0开发工具c语言编程5详细设计请求函数:voidrequest(inti)//定义请求函数{intj,m,length=0;structreq*run;if(i==1)t1--;elset2--;printf("用户%d请求数据:",i);//输出标注run=&reqblock[tai

7、l%10];//定义输出块run->reqname=i;run->length=0;if(tail==0)run->addr=0;else{intindex=(tail-1)%10;run->addr=reqblock[index].addr+reqblock[index].length;}for(m=0;m<100;m++){if(buffer[i-1][m]==0){run->addr=m;break;}}while(1){j=rand()%10;if(j==0)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。