欢迎来到天天文库
浏览记录
ID:6380055
大小:326.12 KB
页数:30页
时间:2018-01-12
《计算机操作系统实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、重庆交通大学计算机操作系统实验报告班级:信息与计算科学二班姓名:李伟凯学号:631122020203实验室:逸夫楼指导老师:杨际祥实验完成时间:2013年5月日教师评阅意见:签名:年月日实验成绩:实验一:处理机调度算法实验内容选择一个调度算法,实现处理机调度。实验目的多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。实验内容设计一个选择调度算法实现处理机调度的程序。基本思想先来先服务(FCFS)调度:按先来后到次序服务,未作优化短作业优先调度算法:1.短作业优先调度算法SJF,是指对短作业或短进
2、程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。SJF调度算法能有效地降低作业的平均等待时间,提高系统吞吐量。该算法对长作业不利,完全未考虑作业的紧迫程度。时间片轮转算法调度:先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大
3、小放入就绪队列中。高响应优先算法:短作业优先调度算法+动态优先权机制既考虑作业的执行时间也考虑作业的等待时间,综合了先来先算法和短作业优先两种算法的特点,每次进行调度算法前都要进行一次高响应优先算法响应比的计算增加系统开销算法分析//m1.h#include#include#include#defineN10/********先来先服务,短作业优先,高响应比算法进程控制块定义***********/typedefstructProc_identity{charname;//进程名floatarrTime;//到达时间flo
4、atfinTime;//完成时间floatserTime;//服务时间floatwaitTime;//等待时间floatprior;//优先权floatrTime;//周转时间floatdrTime;//带权周转时间}Proc_identity,*proc;/******************时间片轮转算法进程控制块定义***********************/typedefstructpcb{charname[N];//进程名intarrTime;//到达时间intrunTime;//运行时间charstate;//运行后的状态structpcb*next;//指向下一
5、个PCB}PCB;/*************按到达时间的先后顺序对进程排序(冒泡法)******************/voidSortArrTime(structProc_identitypro[],intn){inti,j;structProc_identityptemp;intflag;for(i=1;ipro[j+1].arrTime){ptemp=pro[j];pro[j]=pro[j+1];pro[j+1]=ptemp;flag=1;}}if(flag==0)b
6、reak;}}/****************************先来先服务算法*****************************/voidFCFS(structProc_identitypro[],intn){inti;//初始化第一个到达的进程pro[0].finTime=pro[0].arrTime+pro[0].serTime;pro[0].rTime=pro[0].finTime-pro[0].arrTime;pro[0].drTime=pro[0].rTime/pro[0].serTime;//处理后续进程for(i=1;i7、i].arrTime<=pro[i-1].finTime)//判断后一个进程到达时间是否在第一个未完成之前{pro[i].finTime=pro[i-1].finTime+pro[i].serTime;pro[i].rTime=pro[i].finTime-pro[i].arrTime;pro[i].drTime=pro[i].rTime/pro[i].serTime;}else{pro[i].finTime=pro[i].arrTime+pro[i].serTime;pro[i
7、i].arrTime<=pro[i-1].finTime)//判断后一个进程到达时间是否在第一个未完成之前{pro[i].finTime=pro[i-1].finTime+pro[i].serTime;pro[i].rTime=pro[i].finTime-pro[i].arrTime;pro[i].drTime=pro[i].rTime/pro[i].serTime;}else{pro[i].finTime=pro[i].arrTime+pro[i].serTime;pro[i
此文档下载收益归作者所有