《2022年操作系统课程设计spooling课程设计报告.docx》由会员分享,可在线阅读,更多相关《2022年操作系统课程设计spooling课程设计报告.docx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 需求分析SPOOLING是 Simultaneous Peripheral Operation On-Line(即外部设备联机并行操作)地缩写 , 它是关于慢速字符设备如何与运算机主机交换信息地一种技术, 通常称为“假脱机技术” .SPOOLING技术实际上是一种外围设备同时联机操作技术 , 又称为排队转储技术 . 它在输入和输出之间增加了“输入井”和“输出井”地排队转储环节 .进程基本状态有 3 种, 分别为可执行 , 等待和终止 . 可执行态就是进程正在运行或等待调度地状态;等待状态又分为等待状态1, 等待状态 2, 等待状态 3.状态变化地条件为:1进程执行完成时 , 置为“终止”态
2、 .2服务程序在将输出信息送输出井时, 如发觉输出井已满 , 将调用进程置为“等待状态 1”.3SPOOLING进程在进行输出时 , 如输出井空 , 就进入“等待状态 2”.4SPOOLING进程输出一个信息快后, 应立刻释放该信息快所占地输出井空间, 并将正在等待输出地进程置为“可执行状态”.5服务程序在输出信息到输出井并形成输出恳求信息快后, 如 SPOOLING进程处于等待态就将其置为“可执行状态”.6当用户进程声请恳求输出快时 , 如没有可用恳求快时 , 调用进程进入“等待状态 3” .满意条件:1) 设计一个实现 SPOOLING技术地进程设计一个 SPOOLING输出服务进程、一个
3、 SPOOLING输出进程、两个用户恳求进程. 用户进程恳求输出一系列信息 , 调用输出服务进程 , 由输出服务进程将该信息送入输出井 . 等待 SPOOLING进程进行输出 .SPOOLING输出进程工作时 , 依据恳求块记录地各进程要输出地信息将其输出.2)设计进程调度算法进 程 调 度 采 用 随 机 算 法 , 两 个 请 求 输出 地 用 户 进 程 地 调 度 概 率 各 为45%,SPOOLIN输G 出进程为 10%,这由随机数发生器产生地随机数来模拟打算.2 概要设计数据结构:1 进程掌握块( PCB) Struct pcbint id;/ 进程标示int status;/进程
4、状态int firstaddr;int length;/ 输出长度int outbufword;*PCB3 ;PCB(Process Control Block), 进程掌握块是操作系统用于记录和刻画进 程状态及有关信息地数据结构 , 也是操作系统把握进程地唯独资料结构, 是操作系统掌握和治理进程地主要依据. 它包括了进程执行时地情形 , 以及进程让出处理器所处地状态、断点等信息 . 对于输出进程和 spooling进程两种不同地进程 , 采纳相同地结构处理 , 包括进程标识 , 进程状态 , 输出缓冲 , 输出指针 , 信息块首地址, 输出长度等内容 . 需要支持在不同状态之间地转换, 输出
5、缓冲晴空等操作 .( 2)恳求输出快 reqblock structint reqname ; /恳求进程名int length; /输出长度int addr; /信息在输出井地首地址reqblock10;输出恳求块地作用是定义标识要求输出进程地变量和相关信息并且定义输出首地址 . 要求输出地进程标识 , 输出长度 , 输出首地址等内容 .3输出井 BUFFERSPOOLING系统为每个恳求输出地进程在输出井中分别开创一个区. 本试验可设计一个二维数组 int buffer210作为输出井 . 每个进程在输出井最多可占用 10 个位置.函数调用关系图:程序框图如下:入口PCB 、输出恳求块、输
6、出井等初始生成随机数1)x ( 0-判 x 及进程状态均不满意x=0.45 且进程1 为 可 执 行 状态0.45x0.9且SPOOLING进 程为可执行状态执行恳求输出进程 1( r=1)执行恳求输出进程2int执 行 请 求输 出 进程 3( r=3)reqname; / 恳求输出恳求完成全部终止SPOOLING 模拟系统主控图3 运行环境Windows xp 系统下 vc+6.04 开发工具和编程语言Vc+6.0开发工具 c 语言编程5 具体设计恳求函数:void requestint i /定义恳求函数int j,m,length=0;struct req*run;ifi=1t1-;e
7、lset2-;printf用户%d恳求数据 :n,i;/ 输出标注run=&reqblocktail%10;/ 定义输出块run-reqname=i;run-length=0;iftail=0run-addr=0;elseint index=tail-1%10;run-addr=reqblockindex.addr+reqblockindex.length;for m=0;maddr=m;break;while1j=rand%10;ifj=0run-length=length;break;bufferi-1run-addr+length=j;length+;printf%d,j;printfn
8、;PCBi-1-length+=length;length=0;ifPCB2-status=2PCB2-status=0;tail+;Spooling函数:void spoolingint i,j;struct req*run;printf调用 SPOOLING输出服务程序输出数据 :n;run=&reqblockhead%10;printf%d ,run-reqname;fprintff,%d ,run-reqname;fori=0;ilength;i+ printf%d,bufferrun-reqname-1run-addr+i ;fprintff,%d,bufferrun-reqname
9、-1run-addr+i ;printfn;fprintff,n;head+;for j=0;jstatus=1PCBj-status=0;主函数:void main int i,n;f=fopenresult.txt,w;fori=0;i2 ;i+forn=0;n100;n+ bufferin=0;fori=0;iid=i; tmpPcb-status=0;tmpPcb-firstaddr=0; tmpPcb-length=0 ;tmpPcb-outbufword=1;PCBi=tmpPcb ;printfHow many work do p1 want to do.;fprintff,Ho
10、w many work do p1 want to do.;scanf%d,&t1;fprintff,%dn,t1;printfHow many work do p2 want to do.;fprintff,How many work do p2 want to do.;scanf%d,&t2;fprintff,%dn,t2;srandunsignedtimeNULL;while1i=rand%100; /用随机数模拟进程执行概率ifistatus=0&t10 request1;else ifi0/执行恳求输出用户进程2ifPCB1-status=0request2;elsespooling
11、;/ 执行 SPOOLING进程 ift1=0&t2=0&head=tailbreak;fori=0;i3 ;i+freePCBi;PCBi=NULL;/PCB 值为空fclosef;/主函数终止6 调试分析1. 该试验中花费了我不少时间去摸索如何更加明显地把两个用户分别地调度进程更好地显示出来 ,由于进程个数地不一样 ,所以就摸索了动态地实现进程地数目,更加便利利用是 spooling 技术.从而更加直观地调度便利地显示了信息.2. 摸索将结果用文件地势式储存 , 但是对于函数 fprint地运用错误 , 忽视了最基本地定义 , 耗费了好多地时间 , 仍是显现了一个错误:桌面liuhaoli
12、u.cpp99 : error C2440:= : cannot convert from struct _iobuf * to intf : undeclared identifier最终在前面定义了一个 FILE *f ;桌面liuhaoliu.cpp83 : error C2065:3. C:Documents and桌 面 liuhaoliu.cpp85:error C2065: reqname : undeclared identifier之类地错误地显现由于已经给结构体 stuct req 通过 struct req*run;所以必需在用指针指向 run地变量.7 测试结果.1.提
13、示输入进程个数:2 回车后显示虚脱机工作:参考文献1 边肇祺,模式识别(其次版) ,北京:清华高校出版社 ,1988,25352 李永忠 ,几种小波变换地图像处理技术, 西北民族学院学报(自然科学版) ,2001.6,22( 3) ,15 181 汤子瀛 ,梁红兵运算机操作系统(第三版)西安电子科技高校出版社20072 任满杰操作系统原理有用教程电子工业出版社20063 张丽芬 刘利雄操作系统试验教程北京;清华高校出版社20064 张尧杰 史美林运算机操作系统教程试验指导北京;清华高校出版社20005 罗宇操作系统课程设计机械工业出版社 2006心得体会在这几天地操作系统课程设计中, 我地题目是 :SPOOLING技术模拟实现 , 这两周课程设计中 ,通过该题目地设计过程 , 学会如何把学到地学问用于解决实际问题, 锤炼了自己动手地才能 .通过这两天地上机试验 , 我也遇到了许多地麻烦 , 原先以为 spooling技术很简洁, 但是真正地去实践地时候才发觉自己地水平是多么地差啊, 纸上得来终觉浅, 绝知此事要躬行 , 这句话说地一点也没错 .在以后地学习中我们要学到嵌入式操作系统, 我想在一开头学地是时候我就应当自觉地去实践 , 然后达到自觉性 , 作为一名运算机学科地同学 , 我在这里真地是感到无比地压力 , 不过压力才能产生动力 .
限制150内