操作系统实验_Spooling技术_第1页
操作系统实验_Spooling技术_第2页
操作系统实验_Spooling技术_第3页
操作系统实验_Spooling技术_第4页
操作系统实验_Spooling技术_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学号P1514032 专业 计算机科学与技术 姓名 实验日期2017.12.21教师签字 成绩 实验报告【实验名称】Spooling系统模拟【实验目的】体会操作系统中spooling假脱机输入输出的过程,以及缓冲区,输入井,输出井,输出缓冲区间的关系,井管理程序的作用。【实验原理】Spooling技术实质上是利用一个共享设备的一个存储区,并不是真正占有这一设备,用户进程把要完成的任务以及文件的形式存入存储区,在存储区中排队并等待SPOOLING系统调度,只有被SPOOLING系统调度并输入,此项任务才真正完成,通过SPOOLING技术可以使独占设备成为共享设备,由此大大提高了设备的使用率,节约

2、了硬件资源。Spooling系统主要有以下三部分组成: (1)输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存IO设备输入的数据;输出井是模拟脱机输出时磁盘,用于暂存用户程序的输出数据。 (2)输入缓冲区和输出缓冲区。为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后在传送给输出设备。 (3)输入进程SPi和输出进程SP0。这里利用两个进程来模拟脱机IO时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制

3、机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SP0模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上【实验内容】数据结构:#define N 1000/设置缓冲区最大为100int buffer_num ; /缓冲区实际大小int input_numsN;/设置输入数组int input_num; /io设备输入大小double time=0; /需求时间int read_time; /每个字符读取到缓冲区的时间int read_time2; /缓冲区

4、输入到管理主要函数:void init()/初始化缓冲区,初始化输入void set_time()/设置时间void input_process()/Spooling模拟void output_runtime()/输出时间函数流程图:实验源代码:#include<stdio.h>#include<windows.h>#define N 1000/设置缓冲区最大为100int buffer_num ; /缓冲区实际大小int wellN;int pos=0;int input_numsN;int input_num; /io设备输入大小double time=0;int

5、read_time;int read_time2;void set_time()/设置时间printf("输入读取一个字符的时间n"); scanf("%d",&read_time); printf("输入缓冲区到管理的时间n"); scanf("%d",&read_time2);void init()/初始化缓冲区,初始化输入 printf("输入缓冲区大小n"); scanf("%d",&buffer_num); printf("输入io

6、设备要输入的数字量n"); scanf("%d",&input_num); for(int i=1; i<=input_num; i+) input_numsi=i;void input_process()/输入进程 int i,j=0; printf("缓冲区的内容为:n"); if( input_num<=buffer_num) j=0; for(i=0; i< input_num; i+) Sleep(read_time*20);/模拟I/O到 缓冲区的时间 printf("%dt", inp

7、ut_numsi); j+; printf("缓冲区未满,缓冲区将数据写入输入 "); for(int k=0; k<6; k+) Sleep(read_time2*20);/模拟缓冲区到输入时间 printf("."); printf("n"); Sleep(read_time2*20);/模拟缓冲区到输入时间 time+=read_time*j+(j*1.0/buffer_num)*read_time2; return; for(i=0; i< input_num; i+) Sleep(read_time*20); j

8、+; printf("%dt", input_numsi);/输出到屏幕 if(j= buffer_num) j=0; printf("缓冲区满,缓冲区将数据写入输入 "); for(int k=0; k<6; k+) Sleep(read_time2*20); printf("."); printf("n"); time+=read_time*buffer_num+read_time2; printf("当前时间为%.2fnn",time); printf("缓冲区的内容为:n

9、"); if(j!= buffer_num) printf("nn"); time+=read_time*j+(j*1.0/buffer_num)*read_time2;void output_runtime()/输出时间函数 printf("所用的时间为%.2fn",time);int main() int choose; printf("nn*Spooling系统模拟程序*n"); init();/初始化 set_time();/设置时间 input_process();/模拟输入 output_runtime();/输

10、出运行时间实验截图:分三种情况:当要I/O要输入的字符数小于等于缓冲区时,如图,设置缓冲区数量为8,I/O中字符数为4,此时缓冲区不会满,所用的时间为(4*4)+(4/8)*6=19,验证正确。二、当要I/O要输入的字符数恰好等于等于缓冲区的整数倍时。如图,设置缓冲区数量为4,I/O中字符数为52,此时会有13个满缓冲区,输出每一步缓冲区到的当前时间,所用的总时间为(4*52)+13*8=312,验证正确。三、当要I/O要输入的字符数恰好等于等于缓冲区的整数倍并有余数时时。如图,设置缓冲区数量为4,I/O中字符数为54,此时会有13个满缓冲区,和一个半缓冲区输出每一步缓冲区到的当前时间,所用的

11、总时间为(4*54)+13*8+4/8*8=324,验证正确。【小结或讨论】1、Spooling技术实质上是利用一个共享设备的一个存储区,并不是真正占有这一设备,用户进程把要完成的任务以及文件的形式存入存储区,在存储区中排队并等待SPOOLING系统调度,只有被SPOOLING系统调度并输入,此项任务才真正完成,通过SPOOLING技术可以使独占设备成为共享设备,由此大大提高了设备的使用率,节约了硬件资源。2、在编写实验的过程中,分成了三种情况即输入量小于缓冲区数量,输入量等于缓冲区数量的整倍数,输入量等于缓冲区数量的整倍数加余数,需要注意的是,读取结束时,当缓冲区未满时,所需要的时间并不是整个缓冲区移植到管理的时间,而是n/num*time,其中n为缓冲区中的数据量,num为缓冲区大小,time为缓冲区到的时间。3、在对Spooling技术的理解中,由于I/O的速度远远

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论