- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验_spooling技术
学号P1514032 专业 计算机科学与技术 姓名 实验日期2017.12.21教师签字 成绩 实验报告【实验名称】Spooling系统模拟【实验目的】体会操作系统中spooling假脱机输入输出的过程,以及缓冲区,输入井,输出井,输出缓冲区间的关系,井管理程序的作用。【实验原理】Spooling技术实质上是利用一个共享设备的一个存储区,并不是真正占有这一设备,用户进程把要完成的任务以及文件的形式存入存储区,在存储区中排队并等待SPOOLING系统调度,只有被SPOOLING系统调度并输入,此项任务才真正完成,通过SPOOLING技术可以使独占设备成为共享设备,由此大大提高了设备的使用率,节约了硬件资源。Spooling系统主要有以下三部分组成: (1)输入井和输出井。这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I∕O设备输入的数据;输出井是模拟脱机输出时磁盘,用于暂存用户程序的输出数据。 (2)输入缓冲区和输出缓冲区。为了缓和CPU和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后在传送给输出设备。 (3)输入进程SPi和输出进程SP0。这里利用两个进程来模拟脱机I∕O时的外围控制机。其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SP0模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上【实验内容】数据结构:#define N 1000//设置缓冲区最大为100int buffer_num ; //缓冲区实际大小int input_nums[N];//设置输入数组int input_num; //io设备输入大小double time=0; //需求时间int read_time; //每个字符读取到缓冲区的时间int read_time2; //缓冲区输入到#管理主要函数:void init()//初始化缓冲区,初始化输入void set_time()//设置时间void input_process()//Spooling模拟void output_runtime()//输出时间函数流程图:实验源代码:#includestdio.h#includewindows.h#define N 1000//设置缓冲区最大为100int buffer_num ; //缓冲区实际大小int well[N];int pos=0;int input_nums[N];int input_num; //io设备输入大小double time=0;int 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设备要输入的数字量\n); scanf(%d,input_num); for(int i=1; i=input_num; i++) input_nums[i]=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(%d\t, input_nums[i]); j++; } printf(缓冲区未满,缓冲区将数据写入输入# ); for(int k=0; k6; 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++; printf(%d\t, input_nums[i]
文档评论(0)