您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 广工操作系统实验报告
操作系统实验报告学生学院计算机学院专业班级2010级计算机科学与技术四班学号3110006015学生姓名张法光指导教师何翠红2013年1月05日3目录实验一、进程调度....................................................................................4实验二、作业调度....................................................................................8实验三、动态分区分配方式的模拟......................................................16实验四、文件系统..................................................................................2441实验一进程调度1、实验目的编写并调试一个模拟的进程调度程序,采用“短进程优先”调度算法对五个进程进行调度。以加深对进程的概念及进程调度算法的理解.2、实验原理在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对调度的处理又都可采用不同的调度方式和调度算法。调度算法是指:根据系统的资源分配策略所规定的资源分配算法。短进程优先调度算法是指对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。短进程优先调度源程序如下:#includestdio.h#definen5#definenum5#definemax65535typedefstructpro{intPRO_ID;//进程号intarrive_time;//到达时间intsum_time;//运行总时间intflag;}Pro;//整数排序intbubble(inttemp[]){inti,j,tem=0;for(i=1;inum;i++)5{intlastX=1;for(j=0;jnum-i;j++){if(temp[j]temp[j+1]){tem=temp[j];temp[j]=temp[j+1];temp[j+1]=tem;lastX=0;}}if(lastX==1)break;}returntemp[0];}//进程排序Probubble(Prop[]){inti,j;Protemp={0};Pros[num];for(i=0;inum;i++){s[i]=p[i];}for(i=1;inum;i++){intlastX=1;for(j=0;jnum-i;j++){if(s[j].sum_times[j+1].sum_time){temp=s[j];s[j]=s[j+1];s[j+1]=temp;lastX=0;}}if(lastX==1)break;}returns[0];}6voidSPF(intp){if(n0){inti,j,k,l,tc=0;Proseq[n];Protemp_seq[n];printf(****************************************************************\n);printf(10计科4班张法光3110006015\n);printf(\n);printf(实验一:短进程优先调度算法SPF\n);printf(请依次输入5个进程的进程号、到达时间和执行时间\n);printf(成员变量用逗号隔开;进程间用回车隔开\n);printf(****************************************************************\n);for(i=0;in;i++){scanf(%d,%d,%d,&seq[i].PRO_ID,&seq[i].arrive_time,&seq[i].sum_time);}printf(调度顺序是:\n);//初始化tcinttemp[num];for(i=0;inum;i++){temp[i]=seq[i].arrive_time;}tc=bubble(temp);//tc是断点啊//flag表示对应i的pro的队列情况//-1表示未进入过队列,0表示在队列中,1表示被清除了for(i=0;in;i++){seq[i].flag=-1;}for(i=0;in;i++){for(j=0;jn;j++){if(seq[j].flag!=1&&seq[j].arrive_time=tc){seq[j].flag=0;}}for(j=0;jn;j++){temp_seq[j]=seq[j];if(seq[j].flag!=0){temp_seq[j].sum_time=max;}7}l=bubble(temp_seq).PRO_ID;for(j=0;jn;j++){if(l==seq[j].PRO_ID){k=j;}}tc=tc+bubble(temp_seq).sum_time;seq[k].flag=1;printf(%d,l);}printf(\n);}}voidmain(){SPF(n);}运行结果:结果分析与实验小结非抢占式的短进程优先调度相对简单,有个易错的地方就是最早来的不管所需服务时间长短均必须先服务,而且数量可能不止一个,此时可以再根据短进程优先法则调度。总的来说,短进程优先调度算法可以照顾到实际上在所有进程中占很大比例的短进程,使它能比长进程优先执行,但不利于长进程的执行。82实验二作业调度1、实验目的本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。2、实验内容及要求1、为单道批处理系统设计一个作业调度程序(1)、编写并调试一个单道处理系统的作业调度模拟程序。(2)、作业调度算法:分别采用先来先服务(FCFS)、响应比高者优先(HRN)的调度算法。(3)、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。(4)、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。(5)、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。2、模拟批处理多道操作系统的作业调度(1)、写并调试一个作业调度模拟程序。(2)、作业调度算法:分别采用先来先服务(FCFS)和短作业优先调度算法。(3)、在批处理系统中,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求,所需要的资源是否得到满足。作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中作出选择。当作业正常运行完毕或因发生错误非正常终止时,作业进入完成状态,此时,系统将收回该作业所占用的全部资源,并清除有关的JCB。并输出显示作业运行情况及作业输出结果。3、实验设计方案及原理1、编写并调试一个单道处理系统的作业等待模拟程序。假设在单道批处理环境下有四个作业JOB1、JOB2、JOB3、JOB4,已知它们进入系统的时间、估计运行时间。分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法,计算出作业的平均周转时间和带权的平均周转时间。9对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。4、源程序清单(需附详细的注释)#includestdio.h#includestdlib.h#includeconio.h#definegetpch(type)(type*)malloc(sizeof(type))#definenull0intn;floatT1=0,T2=0;inttimes=0;structjcb//作业控制块{charname[10];//作业名intreachtime;//作业到达时间intstarttime;//作业开始时间intneedtime;//作业需要运行的时间floatsuper;//作业的响应比intfinishtime;//作业完成时间floatcycletime;//作业周转时间floatcltime;//作业带权周转时间charstate;//作业状态structjcb*next;//结构体指针}*ready=NULL,*p,*q;typedefstructjcbJCB;voidinital()//建立作业控制块队列,先将其排成先来先服务的模式队列{inti;printf(\n输入作业数:);scanf(%d,&n);for(i=0;in;i++){p=getpch(JCB);printf(\nNo.%d输入作业名:,i);scanf(%s,p-name);getch();p-reachtime=i;printf(作业默认到达时间:%d,i);printf(\n输入作业要运行的时间:);scanf(%d,&p-needtime);p-state='W';10p-next=NULL;if(ready==NULL)ready=q=p;else{q-next=p;q=p;}}}voidoutput(JCB*q,intj){/*显示所有作业的情况*/JCB*pr=ready;floatf=0.0;printf(所有作业的情况:\n);//列表显示所有作业的情况if(j==3){printf(作业名\t\t到达时间\t所需运行间\t响应比\t\t作业状态\n);printf(%s\t\t%d\t\t%d\t\t%f\t%c\n,q-name,q-reachtime,q-needtime,q-super,q-state);while(pr){if(pr-super=0)printf(%s\t\t%d\t\t%d\t\t%f\t%c\n,pr-name,pr-reachtime,pr-needtime,f,pr-state);elseprintf(%s\t\t%d\t\t%d\t\t%f\t%c\n,pr-name,pr-reachtime,pr-needtime,pr-super,pr-state);pr=pr-next;}}else{printf(作业名\t\t到达时间\t所需运行间\t作业状态\n);printf(%s\t\t%d\t\t%d\t\t%c\t\n,q-name,q-reachtime,q-needtime,q-state);while(pr){printf(%s\t\t%d\t\t%d\t\t%c\t\n,pr-name,pr-reachtime,pr-needtime,pr-state);pr=pr-next;}}}voiddisp(JCB*q,intm)//显示作业运行后的周转时间及带权周转时间等{if(m==3)//显示高响应比算法调度作业后的运行情况{output(q,m);printf(\n作业%s正在运行,估计其运行情况:\n,q-
本文标题:广工操作系统实验报告
链接地址:https://www.777doc.com/doc-6017039 .html