广工操作系统实验报告(共32页).doc





《广工操作系统实验报告(共32页).doc》由会员分享,可在线阅读,更多相关《广工操作系统实验报告(共32页).doc(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上操作系统实验报告 学生学院_ 计算机学院_专业班级_ 计科(8)班 学 号 学生姓名_ _指导教师_ _2013年 12月 29 日目录1 实验一 进程调度52 实验二 作业调度93 实验三 可变式分区分配184 实验四 简单文件系统26 实验一 进程调度一、实验目的编写并调试一个模拟的进程调度程序,采用“短进程优先”调度算法对五个进程进行调度。以加深对进程的概念及进程调度算法的理解二、实验内容及要求 编写并调试一个模拟的进程调度程序,采用“短进程优先”调度算法对五个进程进行调度。三、实验设计方案及原理 在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得
2、处理机执行。对调度的处理又都可采用不同的调度方式和调度算法。调度算法是指:根据系统的资源分配策略所规定的资源分配算法。短进程优先调度算法是指对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。 四、重要数据结构或源程序中疑难部分的说明,需附详细注释 #include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL0struct pcb /* 定义进程控制块PCB */
3、 char name10; /进程名 char state; /状态 int super; /优先数 int ntime; /需要运行时间 int rtime; /运行时间 struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; int num;sort() /* 建立对进程进行短进程优先排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-ntime)ntime) /*需要运行时间最小者,插入队首*/ p-link=ready; ready=p; else /* 进程
4、比较需要运行时间,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-ntime)ntime) /*若插入进程比当前进程需要运行时间小,*/ /*插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程需要运行时间最大,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; void input() /* 建立进程控制块函数*
5、/ int i; /clrscr(); /*清屏*/ printf(n 请输入进程数:); scanf(%d,&num); for(i=0;iname); printf(n 输入进程需要运行时间:); scanf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(); /* 调用sort函数*/ void main() /*主函数*/ int i,len,h=0; char ch; input(); ch=getchar(); printf(n调度序列为:); p=ready; for(i=num;i0;i-) printf
6、( %s,p-name); p=p-link; printf(nn 进程已经完成.n); ch=getchar(); 五、程序运行结果七、结果分析与实验小结 结果正确。短进程优先需要把进程按左右运行时间排序,然后让其按顺序执行即可。实验二 作业调度一、 实验目的:用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。二、 实验内容:1 写并调试一个单道处理系统的作业等待模拟程序。2 作业等待算法:分别采用先来先服务(FCFS)、响应比高者优先(HRN)的调度算法。 3 由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考
7、虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。4 每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。5 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。5、重要数据结构或源程序中疑难部分的说明,需附详细注释三、实验设计方案及原理 编写一个程序将输入的进程按其提交时间进行排列,按排列顺序进行调度,计算其开始时间
8、、完成时间、周转时间等数值四、重要数据结构或源程序中疑难部分的说明,需附详细注释先来先服务#include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL0struct pcb /* 定义进程控制块PCB */ char name10; /进程名 char state; /状态 int super; /优先数 int ntime; /需要运行时间 int rtime; /运行时间 int ctime; /提交时间 int stime; /开始时间 int ftime;
9、/完成时间 int ttime; /周转时间 float dtime; /带权周转时间 struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; int num;void sort() /* 建立对进程先来先服务排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-ctime)ctime) /*达到时间最小者,插入队首*/ p-link=ready; ready=p; else /* 进程比较到达时间,插入适当的位置中*/ first=ready; second=firs
10、t-link; while(second!=NULL) if(p-ctime)ctime) /*若插入进程比当前进程到达时间小,*/ /*插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程到达时间最大,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; void input() /* 建立进程控制块函数*/ int i; /clrscr(); /*清屏*/ printf(n 请输入进程数:); sc
11、anf(%d,&num); for(i=0;iname); printf(n 输入提交时间:); scanf(%d,&p-ctime); printf(n 输入进程需要运行时间:); scanf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(); /* 调用sort函数*/ void main() /*主函数*/ PCB *first,*second; int i,x,y; float s1=0,s2=0; char ch; input(); ch=getchar(); /输出 printf(进程名t 开始时间t 完成时
12、间t 周转时间t 带权周转时间n); second=ready; first=ready; first-ftime=0; for(i=num;i0;i-) if(second-ctimefirst-ftime) /*计算完成时间,周转时间等*/ second-stime=second-ctime; else second-stime=first-ftime; second-ftime=(second-ntime)+(second-stime); second-ttime=(second-ftime)-(second-ctime); x=second-ttime; y=second-ntime;
13、 second-dtime=(float)x/(float)y; printf( %s t %d t %d t %d t %f n,second-name,second-stime,second-ftime,second-ttime,second-dtime); s1=s1+second-ttime; s2=s2+second-dtime; if(second-link!=NULL) first=second; second=second-link; s1=s1/num; s2=s2/num; printf(n平均周转时间=%fn,s1); printf(平均周转时间=%fnn,s2); pr
14、intf(按任意键结束); ch=getchar(); 响应比#include #include #include #define getpch(type) (type*)malloc(sizeof(type) #define null 0int n;float T1=0,T2=0;int times=0;struct jcb /作业控制块 char name10; /作业名 int ctime; /作业到达时间 int stime; /作业开始时间 int ntime; /作业需要运行的时间 float super; /作业的响应比 int ftime; /作业完成时间 float ttim
15、e; /作业周转时间 float dtime; /作业带权周转时间 char state; /作业状态 struct jcb *next; /结构体指针*ready=NULL,*p,*q;typedef struct jcb JCB; void inital() /建立作业控制块队列,先将其排成先来先服务的模式队列 int i; printf(n输入作业数:); scanf(%d,&n); for(i=0;iname); printf(n输入作业到达时间:); scanf(%d,&p-ctime); printf(n输入作业需要运行的时间:); scanf(%d,&p-ntime); p-st
16、ate=W; p-next=NULL; if(ready=NULL) ready=q=p; else q-next=p; q=p; void output(JCB* q) /*显示所有作业的情况*/ JCB *pr=ready;float f=0.0; printf(所有作业的情况:n);/列表显示所有作业的情况 printf(作业名tt到达时间t所需运行间t响应比tt作业状态n); printf(%stt%dtt%dtt%ft%cn, q-name,q-ctime,q-ntime,q-super,q-state); while(pr) if(pr-supername,pr-ctime,pr-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告 32

限制150内