《SPOOLING技术模拟实现 操作系统原理课程设计》由会员分享,可在线阅读,更多相关《SPOOLING技术模拟实现 操作系统原理课程设计(14页珍藏版)》请在金锄头文库上搜索。
1、*实践教学*兰州理工大学计算机与通信学院2010年秋季学期操作系统原理课程设计题 目: SPOOLING技术模拟 专业班级: 08级计算机(5)班姓 名: 赵永丽 学 号: 指导教师: 庞淑侠 成 绩: 目 录摘 要 1正 文 21.设计思想22.各模块的伪码算法33.函数的调用关系图54.测试6总结 14参考文献 15致 谢 16附件I 源程序代码 17摘 要SPOOLING假脱机输入输出技术广泛应用于各种计算机的I/O。该技术通过采用预输入和缓输出的方法,使用共享设备的一部分空间来模拟独占设备,以提供独占设备的利用率。 本设计程序就是一个能实现spooling技术的进程,并采用随机调度算法
2、模拟spooling进程的调度过程。在设计过程中,我们不仅要理解spooling技术原理,学会利用数据结构算法,学会利用调用函数的方法,还要巧妙地利用随机函数,才能更好地设计出本程序SPOOLING假脱机输入输出技术广泛应用于各种计算机的I/O。该技术通过采用预输入和缓输出的方法,使用共享设备的一部分空间来模拟独占设备,以提供独占设备的利用率。 关键字: SPOOLING假脱机共享设备模拟独占设备随机函数正 文1. 设计思想本课题是设计了一个SPOOLING输出进程和两个请求输出的用户进程,以及一个SPOOLING输出服务程序。SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息
3、,将其实际输出到打印机或显示器。这里,SPOOLING进程与请求输出的用户进程可并发运行。进程调度采用随机算法,这与进程输出信息的随机性相一致。两个请求输出的用户进程的调度概率各为45%,SPOOLING输出进程为10%,这由随机数发生器产生的随机数模拟决定。进程基本状态有3种,分别为可执行,等待和结束。可执行态就是进程正在运行或等待调度的状态;等待状态又分为等待状态1,等待状态2,等待状态3。状态变化的条件为:1进程执行完成时,置为“结束”态。2服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。3SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”
4、。4SPOOLING进程输出一个信息快后,应立即释放该信息快所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。5服务程序在输出信息到输出井并形成输出请求信息快后,若SPOOLING进程处于等待态则将其置为“可执行状态”。6当用户进程声请请求输出快时,若没有可用请求快时,调用进程进入“等待状态3”。程序为两个请求输出的用户进程设计两个输出井。每个可存放10个信息,即buffer210。 当用户进程将其所有文件输出完时,终止运行。为简单起见,用户进程简单地设计成:每运行一次,随机输出数字09之间的一个数,当输入10个数时形成一个请求信息块,填入请求输出信息块reblock结构中。2. 各
5、模块的伪码算法1.包含几个函数的头文件#include/*调用随机函数的头文件*/#include/*调用时间函数的头文件*/#include/*标准输入输出的头文件*/2.定义结构体struct pcb/*进程状态*/int status;int length;*PCB3;struct req/*定义请求输出快结构体*/int reqname;int length;int addr;reqblock10;/*申请10个输出请求块*/3.定义指针pcb *tmpPcb=(struct pcb*)malloc(sizeof(struct pcb); /*为pcb申请空间*/tmpPcb-stat
6、us=0;tmpPcb-length=0;PCBn=tmpPcb;/*初始化pcb*/req*run;/*给req定义一个指针run*/run=&reqblocktail%10;run-reqname=i;run-length=0;4.定义函数void request(int i);/*定义一个request()函数*/void spooling();/*定义一个spooling()函数*/void main()/*定义一个main()函数*/5.几个重要变量定义int buffer2100;/*定义一个而维数组*/int head=0,tail=0;int t1=5,t2=5;/*t1,t2
7、各可以申请数据5次*/int reqname;int length;int addr;6.定义随机数srand(unsigned)time(NULL);k=rand()%100;/*决定执行哪个进程*/j=rand()%10;/*决定产生的请求数据*/3. 函数的调用关系图4. 测试程序测试结果如下:两个用户的进程请求分别是5 ,K和j都是一个随机数,k的值用来决定执行哪个进程,而j则是决定用户请求的数据,j从1到9产生的数据都不一样,当j=0时就不再请求数据当K45&k90&k100时执行spooling进程总 结在这次操作系统课程设计中,我的题目是:SPOOLING技术模拟实现,在二周课程
8、设计中,通过该题目的设计过程,我加深了对进程调用及C语言中一些基本的编程步骤、函数间的嵌套递归调用等知识的理解和应用,对进程调用上基本运算的实现有所掌握,对课本中所学的知识进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。一个人要完成所有的工作是非常困难和耗时的。在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助,和对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。二周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积
9、累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,二周中我收益很大,学到很多。四、 主要参考文献1. 汤子瀛,哲凤屏.计算机操作系统.西安电子科技大学学出版社.2. 王清,李光明.计算机操作系统.冶金工业出版社.3.孙钟秀等. 操作系统教程. 高等教育出版社4.曾明. Linux操作系统应用教程. 陕西科学技术出版社. 5. 张丽芬,刘利雄.操作系统实验教程. 清华大学出版社.6. 孟静,操作系统教程原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9. 任满杰,操作系统原理实用教程,电子工业出版社致 谢感谢我的操作系统老师王旭阳老师和数据结构老师李睿老师以及C语言老师张宪立老师在以往的基础课学习中为我打下良好的基础,这使我这次课程设计能够顺利完成的前提。感谢我的同学在设计完成后的程序测试过程中对我的帮助,没有他们,也许就难以发现一些潜在的错误,在此一并表示感谢。