




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统原理课程实践报告专 业 计算机科学与技术 班 级 计算机14-1 学 号 123123 姓 名 123123 指导教师 陈 珂 完成时间 20161014 成 绩 进程调度算法模拟一、设计目的 编程实现进程调度的算法,更好地掌握操作系统的原理及实现方法,从而有利于把握进程调度细节。二、设计要求 (1)要求实现先来先服务,短作业优先,时间片轮转,高优先权调度算法四种算法并进行对比分析.(2)要求界面简单,易懂,关键代码部分要注释.(3)编程语言可以采用自己任意精通的语言三、设计思想说明 先来先服务:程序的执行调度顺序按先进入队列的先获得执行,并且其他进程都不能中断正在执行的进程,要等进程完成后才能,让出CPU给其他进程。执行的时候可以随时在队列中插入进程。 短作业优先:进程的调度顺序按程序的服务时间来决定,进程的执行顺序。服务时间短的先被调用。调度时先从队列中选取服务时间最短的进程来执行。进程中途不能中断,即使此时队列中存在服务时间比其更短的进程,仍需要等待该进程执行完后才能被执行。 高优先权调度:选取进程中优先级最高的一个,以优先级的值大,优先级就大。调度时总是选取队列中进程优先级最高的来执行,不管是否有某个进程在执行,只要存在比正在执行进程优先级高的进程,则就会立刻中断正在执行的进程,让给跟高优先级的进程。 时间片轮转:本课程设计采用多级反馈队列调度算法,设立4个进程队列,分给队列1的时间片为3秒,队列2的时间片为6秒,队列3的时间片为12秒,队列4的时间片为24秒。队列1的优先级最高,队列4的优先级最低。高优先级的队列没执行完,即不为空,就永远不执行其下面的低优先级的队列里面的进程。当执行低优先级队列里面的进程时,突然间高优先级的队列插入了进程就立刻跳到高优先级的队列执行其里面的进程。每个队列的进程都是按先来先执行的顺序执行。进程初次执行肯定要进入队列1。如何从头到尾执行一遍队列1中的进程是,存在某些进程在队列1的时间片内还没执行完,就把进程移交到下一个队列中。每个队列都如此类推。直到最后一个队列4,如果在队列4还有进程在本时间片内还没没执行完,就把该程序放到队尾,从新等待时间片执行。四、算法流程1.算法流程图(1) FCFS调度算法流程图 对各进程按到达时间进行排序挑选最先到达的程序一次性执行完判断是否所有进程都被调度是结束(2)SPJ调度算法流程图查找当前已经到达的最短进程调用该进程判断所有进程是否已经结束否是结束高优先权调度算法流程图所有进程按到达时间排序按优先级大小选定一个已到达的进程调度该进程至结束进程是否已经调度完毕否是结束(4)时间片轮转调度算法所有进程按到达时间排序按轮转顺序选定一个已到达的进程当前进程减去一个时间片单位否进程是否已经调度完毕是结束2.进程控制块PCB的设计进程控制块PCB是进程存在的唯一标志,主要包括进程的以下的信息:进程标识符、处理机状态、进程调度信息(进程状态、进程优先级、进程调度所需要的其他信息、事件)、进程的控制信息。 进程属性 变量名 数据类型进程名 sNamechar进程状态 iStatusint优先级 iPrivilegeint服务时间 iRunTimeint进程等待时间 iWaitTimeint五、实现过程与结果1.先来先服务算法运行结果短进程优先算法运行结果3.髙相应比优先算法运行结果4.时间片轮转算法运行结果六、源程序#include #include #include const int block_time=10; /定义时间片的长度为10秒 const int MAXPCB=100; /定义最大进程数 /定义进程结构体 typedef struct node char sName20;/进程名int iStatus;/进程状态int iRunTime; /进程需运行的时间int iPrivilege; /进程的优先数int iFinished; /标志进程是否执行完成int iWaitTime; /进程的等待时间pcb; pcb pcbsMAXPCB; int iPCBNum; void initPCB()/PCB初始化函数 int i; for(i=0;iMAXPCB;i+) strcpy(pcbsi.sName,); pcbsi.iStatus=0; pcbsi.iRunTime=0; pcbsi.iPrivilege=0; pcbsi.iFinished=0; pcbsi.iWaitTime=0; /for(i=0;iMAXPCB;i+)iPCBNum=0; /void initPCB()int readData()/读进程流文件数据函数 FILE *fp; char sFile20; int i; coutsFile; if(fp=fopen(sFile,r)=NULL) cout错误,文件打不开,请检查文件名endl; else while(!feof(fp) fscanf(fp,%s %d %d %d,pcbsiPCBNum.sName,&pcbsiPCBNum.iStatus,&pcbsiPCBNum.iRunTime,&pcbsiPCBNum .iPrivilege); iPCBNum+; /while(!feof(fp)/输出所读入的数据 coutendl输出所读入的数据:endlendl; cout进程名 进程状态 所需时间 优先数endl; for(i=0;iiPCBNum;i+) cout pcbsi.sName pcbsi.iStatus pcbsi.iRunTime pcbsi.iPrivilegeendl; return(1); /if(fp=fopen(sFile,r)=NULL)return(0); / int readData() void reInitPCB()/重置PCB数据,以供另一个算法使用 int i; for(i=0;iMAXPCB;i+) pcbsi.iFinished=0; pcbsi.iWaitTime=0; /void reInitPCB()void sorttime() /短进程优先 reInitPCB();coutendl-endl; cout短进程优先算法执行流:endl; cout进程名 等待时间 运行时间endl; /请大家补充完整int i,j;for(i=1;iiPCBNum-1;i+)for(j=0;jpcbsj+1.iRunTime) pcb temp; strcpy(temp.sName,pcbsj+1.sName); temp.iRunTime=pcbsj+1.iRunTime; temp.iPrivilege=pcbsj+1.iPrivilege; temp.iStatus=pcbsj+1.iStatus; strcpy(pcbsj+1.sName,pcbsj.sName); pcbsj+1.iRunTime=pcbsj.iRunTime; pcbsj+1.iPrivilege=pcbsj.iPrivilege; pcbsj+1.iStatus=pcbsj.iStatus; strcpy(pcbsj+1.sName,temp.sName); pcbsj.iRunTime=temp.iRunTime; pcbsj.iPrivilege=temp.iPrivilege; pcbsj.iStatus=temp.iStatus; pcbs0.iFinished=1; pcbs0.iWaitTime=0; int iTotal= pcbs0.iWaitTime; cout pcbs0.sName pcbs0.iWaitTime pcbs0.iRunTimeendl;for(i=1;iiPCBNum-1;i+) pcbsi.iWaitTime+=pcbsi-1.iWaitTime+pcbsi-1.iRunTime; iTotal+=pcbsi.iWaitTime; pcbsi.iFinished=1;cout pcbsi.sName pcbsi.iWaitTime pcbsi.iRunTimeendl;cout总等待时间:iTotal 平均等待时间:iTotal/(iPCBNum-1)endl; coutendl-endl; /void sorttime() void FIFO() /先进先出算法 int i,j; int iTotal; reInitPCB();/重置PCB数据,以供另一个算法使用/输出FIFO算法执行流 coutendl-endl; coutFIFO算法执行流:endl; cout进程名 等待时间 运行时间endl; for(i=0;iiPCBNum;i+) cout pcbsi.sName pcbsi.iWaitTime pcbsi.iRunTimeendl; for(j=i+1;jiPCBNum;j+) pcbsj.iWaitTime+=pcbsi.iRunTime; iTotal=0; for(i=0;iiPCBNum;i+)iTotal+=pcbsi.iWaitTime; cout总等待时间:iTotal 平均等待时间:iTotal/iPCBNumendl; coutendl-endl; /void FIFO() void privilege()/优先数调度算法 int i,j,iCurMin; int iPassedTime=0; int iTotal; int iQueueMAXPCB; int iCurPriority=1000; reInitPCB();/重置PCB数据,以供另一个算法使用for(i=0;iiPCBNum;i+) /按优先数递增排序PCB iCurPriority=1000; for(j=0;jiPCBNum;j+)if(pcbsj.iFinished=0)&(pcbsj.iPrivilegeiCurPriority) iCurMin=j; iCurPriority=pcbsj.iPrivilege; /for(j=0;jiPCBNum;j+)iQueuei=iCurMin; pcbsiCurMin.iFinished=1; pcbsiCurMin.iWaitTime+=iPassedTime; iPassedTime+=pcbsiCurMin.iRunTime; /for(i=0;iiPCBNum;i+) /输出优先数调度执行流 coutendl-endl; cout优先数调度执行流:endl; cout进程名 优先数 等待时间endl; for(i=0;iiPCBNum;i+)cout pcbsiQueuei.sName pcbsiQueuei.iPrivilege pcbsiQueuei.iWaitTimeendl; iTotal=0; for(i=0;iiPCBNum;i+)iTotal+=pcbsi.iWaitTime; cout总等待时间:iTotal 平均等待时间:iTotal/iPCBNumendl; coutendl-endl; /void privilege() void timer()/时间片轮转调度算法 int i,iNum,iFlag=1; int iRound=0; /轮转周期数int iTotal=0;/总时间片数reInitPCB();/重置PCB数据,以供另一个算法使用coutendl-endl; cout时间片轮转调度执行流(时间片的长度为10秒):endl; while(iFlag=1)iFlag=0; iNum=0; for(i=0;iiPCBNum;i+)/统计末执行完的进程数iNumif(pcbsi.iFinished=0) iNum+; /if(pcbsi.iFinished=0) /for(i=0;i0)iRound+;coutendliRound轮:;for(i=0;iiPCBNum;i+) if(pcbsi.iFinished=0) iFlag=1;coutpcbsi.sName ;iTotal+; if(pcbsi.iRunTime=block_time*(iRound) pcbsi.iFinished=1; /if(pcbsi.iRunTime=block_time*(iRound+1)/if(pcbsi.iFinished=0) /for(i=0;i0) /while(iFlag=1)coutendl轮转周期数:iRound总时间片数:iTotalendl;coutendl-endl; /void timer() void version()/显示版权信息函数 coutendlendl; cout endl; cout 进程调度算法模拟系统 endl; cout endl; cout (c)All Right Reserved endl; cout 作者 endl; cout version 2008 build 1.1 endl; cout endl; coutendlendl; /void version()/主函数 void main() int iInput; bool bGoOn;char sGoOn1; version();/显示版权信息函数initPCB();/PCB初始化函数bGoOn= true;strcpy(sGoOn, );if(readData()=1)/标志 读进程流文件数据函数 执行是否正确while (bGoOn)coutendl请输入算法编号(1 OR 2 OR 3 4)选择进程调度功能:endlendl;cout1 先进先出算法endl2 优先
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏苏州2019-2021年中考满分作文29篇
- 2024年广西定向选调生考试申论甄选
- 2025至2030中国领夹式话筒行业项目调研及市场前景预测评估报告
- 2025至2030中国宠物经济行业项目调研及市场前景预测评估报告
- 2025至2030中国入侵报警系统行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030直流轴流风机行业产业运行态势及投资规划深度研究报告
- 2025至2030中国银行借记卡行业产业运行态势及投资规划深度研究报告
- 2025至2030中国自动喷水灭火系统行业产业运行态势及投资规划深度研究报告
- 青马结业考试题及答案
- 健康教育技能培训
- DB31/T 375-2022柑橘栽培技术规范
- 马克思主义与社会科学方法论课后思考题答案
- 内蒙古交通集团招聘储备人员真题2024
- 2025重庆对外建设(集团)有限公司招聘10人笔试参考题库附带答案详解
- 中医八纲辩证
- 2025年度中国对非洲二手车出口及非洲重点进口国分析白皮书-特易资讯-2025
- 马凳筋专项方案
- 厂房临时用电施工方案
- 成人术后口渴症状评估与管理专家共识
- 模块化建筑快速搭建系统行业跨境出海战略研究报告
- 公园休闲座椅施工方案
评论
0/150
提交评论