《操作系统实验报告(共9页).docx》由会员分享,可在线阅读,更多相关《操作系统实验报告(共9页).docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上操作系统实验报告实验名称: I/O管理 评分: 班级: 计科1602班 学号: 姓名: 王岩 一实验目的: 通过设计并运行一个简单的SPOOLing系统来模拟SPOOLing输入/出过程,以掌握这种有用的技术,从而熟悉基本的;加深对输入输出管理的了解;二实验要求:要求将SPOOLing输入/出处理程序编成一个独立的进程模块并与其他请求输入/出的进程并发运行;SPOOLing进程负责把从输入设备读入的信息送到外存输入井中,或把外存输入井中的信息送到打印机等输出设备上输出。其余进程只要求编写输入出部分程序。三实验题目和内容:1问题描述本系统利用内存来模拟SPOOLing输
2、出过程。管理系统包括一个SPOOLing输出进程模块spoolout和一个SPOOLing输出请求服务程序spoolserver。Spoolserver负责接收并处理用户进程的输出请求;spoolout完成实际的输出。另外,系统中设计了3个请求SPOOLing输出的用户进程。它们共享用户进程模块userpro。2数据结构进程控制块PCB,内容含有:id 进程标识数;status 进程运行状态,可为“e”(执行)或“c”(完成);bufflag 输出缓冲区空闲标志,FALSE为空闲;filec 输出文件计数。本系统赋予spoolout进程和3个用户进程的标识数分别为0,1,2,3。程序启动后,在
3、完成必要的初始化工作后便显示命令选择菜单,根据输入命令调用相应的功能模块。系统每完成一次请求即输出执行结果,直至键入“Quit”命令(命令码“4”)。系统退出运行为止。输出请求块reqblock,内容含有:reqid 请求进程标识数;size 输出文件长度;addr 输出文件在输出井中的首地址。输出井,用数组well 表示。输出缓冲区,用二维数组userbuf3 表示。每个用户进程分别使用各自的输出缓冲区。此外,系统中还安排了下列管理数据(均属全程量):ebc 空闲reqblock计数,初值为10;ebp 当前空闲reqblock指针,初值为0;cbp 当前非空reqblock指针,初值为0;
4、wellsize 输出井当前可用空间的大小;wellptr 输出井环形指针,指初当前空区首地址;n 用户的输出请求总数,用以控制系统的运行结束。算法进程调度采用随机调度法。3个用户进程的调度概率各为30%,spoolout进程为10%。这由产生随机数来模拟。用户进程在各自的缓冲区中形成输出信息序列,而后调用服务程序spoolserver请求输出。Spoolserver接受输出请求,从相应输出缓冲区中取出信息序列送输出井,并构造一个reqblock,提交spoolout进程使用,然后返回用户进程继续执行。Spoolout进程执行时,根据取出的某reqblock的内容将输出井中的相应输出文件送实际
5、输出设备,如打印机或CRT,随之释放相应井区。四实验程序 #include#include#include#includestruct info_PCBlong ID; /进程标识 long status; /状态 long po; /输出指针 long head;/信息块首地址 long count;/输出长度 long wait1000;/输出缓冲 PCB4;struct info_blocklong ID; /要求输出的进程 long len;/输出长度 long head;/输出首地址 block128;struct info_walllong num10000;/输出内容 long
6、open,closed;/队列指针 wall3;long K3,L1,L23;long n;void input() /输入函数printf(input the times of user1s output file:); scanf(%ld,&K1);printf(input the times of user2s output file:); scanf(%ld,&K2); void init() /初始化函数 L1=10;L21=L22=100;memset(PCB,0,sizeof(PCB);PCB1.ID=1;PCB2.ID=2;PCB3.ID=3;PCB3.status=2;mem
7、set(wall,0,sizeof(wall);n=0;void work()/模拟进程调度 long r;long k;long a,b;long i,j;while(PCB1.status!=3|PCB2.status!=3|PCB3.status!=3) r=rand()%100+1;/用随机数模拟进程执行概率 if(r=45)k=1; elseif(r=90)k=2;elsek=3;if(PCBk.status!=0)continue;switch(k)case 1:case 2:/输入进程ka=rand()%10;+PCBk.po;PCBk.waitPCBk.po=a;if(a=0)
8、b=wallk.closed+1;for(i=1;i=PCBk.po;i+)wallk.num+wallk.closed=PCBk.waiti;PCBk.po=0;PCBk.count+;if(PCBk.count=Kk) /进程执行完毕后应置成“结束状态” PCBk.status=3; if(PCB3.status=2) /要求输出进程在输出信息到输出井并形成信息快后,应将spooling进程置成“可运行状态 ”PCB3.status=0; if(L2k=0 & PCBk.status=0) /如果输出井满,将进程置为“不可运行状态1” PCBk.status=1; n+;blockn.ID
9、=k;blockn.head=b;blockn.len=wallk.closed-b+1;printf(Process %ld produces a block %ld !n,k,n); break;case 3: /Spooling 进程PCB3.po+;a=PCB3.po;printf(Output block %ld :(ID=%ld)n,a,blocka.ID);for(i=1;i=blocka.len;i+)printf(%ld ,wallblocka.ID.numi+blocka.head-1);printf(n);if(PCB3.po=n)PCB3.status=2; /Spoo
10、ling 进程在输出井空时置成“不可运行状态2”if(PCB1.status=3 & PCB2.status=3)PCB3.status=3; break; int main()srand(time(NULL);input();init();work();return 0;五 实验结果首先进行输入产生结果如下图:六 实验总结 通过本次实验,加深了对与设备管理的连接和认识,了解了各种数据结构在设备管理中的作用和操作系统进行设备管理的原理,而SPOOLing技术就是在内核外运行的系统I/O软件,采用预输入、缓输出和井管理技术,是多道程序设计系统中处理独占型设备的一种方法,创建守护进程和特殊目录解决独占型设备的空占问题。 专心-专注-专业