1、操作系统实习报告2011年秋操作系统小学期操作系统小学期实习报告成 绩:评阅人:学院:信息科学与技术专业:计算机科学与技术年级:2008级班级:信080 班姓名: 学号:200 3日期:2011年9月一、问题描述1.分析进程的同步与互斥现象,编程实现经典的进程同步问题生产者消费者问题的模拟;2.编写允许进程并行执行的进程调度程序,在常用的进程(作业)调度算法:先来先服务算法、短作业优先算法、最高响应比优先算法、高优先权优先算法等调度算法中至少选择三种调度算法进行模拟,并输出平均周转时间和平均带权周转时间。二、问题分析1、进程管理是操作系统的职能之一,主要是对处理机进行管理 。为了提高CPU的利
2、用率而采用多道程续技术。通过进程管理来协调多道程序之间的关系,使CPU得到充分的利用。2、在问题的解决过程中,用到了三种算法:首先用到了先来先服务算法,通过sort函数判断各个进程的的到达时间,并将先到达的进程先运行;其次用到了最短作业优先算法,首先将第一个进程先运行,然后从第二个开始判断时间长短,将短作业先运行;最后用到了最高响应比优先算法,每次运行完一个进程之后将剩余进程重新比较优先级,将优先级高的进程先运行;然后用deal函数求出周转时间的总和和带权周转时间的总和,并将二者除以总数N(此处我设置的是3)后输出。三、数据模型描述算法中需要的数据结构:#define N 3 /一个宏定义,将
3、N的值定义为3struct time; /定义的一个结构,其中包含五个时间变量和一个名称变量用到的辅助函数:void InputTime /输入作业名、到达时间、运行时间的函数void Print /帮助输出运行次序及平均周转时间和平均带权周转时间的函数void sort /将到达时间早的进程排在作业队列的前面void deal /求出周转时间和带权周转时间之和四、算法描述1解题算法的设计思路介绍a、 先来先服务算法(FCFS):安服务请求的顺序处理请求。b、 短作业优先算法(SJF):对预计执行时间短的作业(进程)优先分派处理机。c、 高响应比算法(TRRF):把CPU分配给就绪队列中响应比
4、最高的进程。2、程序结构、模块划分 3、主要程序代码#include#define N 3struct time float arriveTime; float runTime; float finishTime; float totalTime; float weightTotalTime; char name;/定义一个时间结构 void InputTime(time *p) int i;/counter coutinput name & arrive time & run time:endl; for(i=0;i=N-1;i+) float temp1,temp2; char name;
5、 cout作业名:name; pi.name=name; cout到达时:temp1; pi.arriveTime=temp1; cout运行时间:temp2; pi.runTime=temp2; /输入时间函数,用于输入作业名、到达进程名、运行时间 void Print(time *p,float totalTimeSum,float weightTotalTimeSum) cout运行次序:; for(int k=0;k=N-1;k+) coutpk.name ; coutendl; cout平均周转时间:totalTimeSum/Nendl; cout平均带权周转时间:weightTot
6、alTimeSum/Nendl;/输出函数,用于输出运行次序、平均周转时间和平均带权周转时间void sort(time *p) for(int i=0;i=N-1;i+) for(int j=0;j=i;j+) if(pi.arriveTimepj.arriveTime) time temp; temp=pi; pi=pj; pj=temp; /将先到达的进程排在前面void deal(time *p,float &totalTimeSum,float &weightTotalTimeSum) int k;/counter for(k=0;k=N-1;k+) if(k=0) pk.finis
7、hTime=pk.arriveTime+pk.runTime; else pk.finishTime=pk-1.finishTime+pk.runTime; for(k=0;k=N-1;k+) pk.totalTime=pk.finishTime-pk.arriveTime; pk.weightTotalTime=pk.totalTime/pk.runTime; totalTimeSum+=pk.totalTime; weightTotalTimeSum+=pk.weightTotalTime; /用于计算周转时间和带权周转时间之和void FCFS(time *p) float totalT
8、imeSum=0,weightTotalTimeSum=0; sort(p); deal(p,totalTimeSum,weightTotalTimeSum); cout先来先服务:endl;Print(p,totalTimeSum,weightTotalTimeSum);/先来先服务算法,p标识进程void SWF(time *p) float totalTimeSum=0,weightTotalTimeSum=0; sort(p); for(int m=0;mN-1;m+) if(m=0) pm.finishTime=pm.arriveTime+pm.runTime; else pm.fi
9、nishTime=pm-1.finishTime+pm.runTime; int i=0; for(int n=m+1;n=N-1;n+) if(pn.arriveTime=pm.finishTime) i+; float min=pm+1.runTime; int follow=m+1; for(int k=m+1;km+i;k+) if(pk+1.runTimemin) min=pk+1.runTime; follow=k+1; time temp; temp=pm+1; pm+1=pfollow; pfollow=temp; deal(p,totalTimeSum,weightTotal
10、TimeSum); cout短作业优先:endl; Print(p,totalTimeSum,weightTotalTimeSum);/短作业优先算法,p标识进程void TRRF(time *p) float totalTimeSum=0,weightTotalTimeSum=0; sort(p); for(int m=0;mN-1;m+) if(m=0) pm.finishTime=pm.arriveTime+pm.runTime; else pm.finishTime=pm-1.finishTime+pm.runTime; int i=0; for(int n=m+1;n=N-1;n+)
11、 if(pn.arriveTime=pm.finishTime) i+; float max=(pm.finishTime-pm+1.arriveTime)/pm+1.runTime; int follow=m+1; for(int k=m+1;km+i;k+) if(max=(pm.finishTime-pk+1.arriveTime)/pk+1.runTime) max=(pm.finishTime-pk+1.arriveTime)/pk+1.runTime; follow=k+1; time temp; temp=pm+1; pm+1=pfollow; pfollow=temp; dea
12、l(p,totalTimeSum,weightTotalTimeSum); cout最高响应比优先:endl; Print(p,totalTimeSum,weightTotalTimeSum);/最高响应比优先算法,p标识进程void main() time aN; InputTime(a); time *b=a;time *c=a; FCFS(a); SWF(b); TRRF(c);五、运行结果六、实习心得本次实习是模拟操作系统的实现,我做的是其中的进程管理,其中用了三种进程管理算法:先来先服务算法、短作业优先算法和高响应比优先算法,这几个原理以前学的时候感觉挺简单,但实现起来就有些力不从心了,其中第一个是最容易实现的,第三个是最难实现的,但编程过程中遇到的问题我都通过网上查资料和与同学讨论一一解决了。通过这次课程设计,使我又一次深刻体会到了编程的简单与困难,加深了对编程的喜爱,对以后的就业情况有了进一步的认识。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1