




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 处理机管理71实验内容处理机管理是操作系统中非常重要的部分。为深入理解进程管理部分的功能,设计几个调度算法,模拟实现处理机的调度。72实验目的在多道程序或多任务系统中,系统同时处于就绪状态的进程有若干个。也就是说能运行的进程数远远大于处理机个数。为了使系统中的各进程能有条不紊地运行,必须选择某种调度策略,以选择一进程占用处理机。要求学生设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。73实验题目731设计一个按先来先服务调度的算法提示(1)假设系统中有5个进程,每个进程由一个进程控制块(PCB)来标识。进程控制块内容如图7-1所示。进程名即进程标识。链接指针:按照进程到达系统的时间将处于就绪状态的进程连接成一个就绪队列。指针指出下一个到达进程的进程控制块首地址。最后一个进程的链指针为NULL。估计运行时间:可由设计者指定一个时间值。达到时间:进程创建时的系统时间或由用户指定。调度时,总是选择到达时间最早的进程。进程状态:为简单起见,这里假定进程有两种状态:就绪和完成。并假定进程一创建就处于就绪状态,用R表示。当一个进程运行结束时,就将其置成完成状态,用C表示。(2)设置一个队首指针head,用来指出最先进入系统的进程。各就绪进程通过链接指针连在一起。(3)处理机调度时总是选择队首指针指向的进程投入运行。由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行:估计运行时间减1用这个操作来模拟进程的一次运行,而且省去进程的现场保护和现场恢复工作。(4)在所设计的程序中应有显示或打印语句,能显示或打印正运行进程的进程名,已运行是、还剩时间,就绪队列中的进程等。所有进程运行完成是,给出各进程的周转时间和平均周转时间。先来先服务(FCFS)调度算法/*源程序1.cpp,采用先来先无法法在Visual C+ 6.0下调试运行*/*数据结构定义及符号说明*/#include #include #include #include using namespace std; enum STATUS RUN,READY,WAIT,FINISH; struct PCBNode int processID; /进程ID STATUS status; /进程状态 int reqTime; /总的需要运行时间 int remainTime; /剩下需要运行时间 int arriveTime; /进入就绪队列时间 int startTime; /开始运行时间 int finishTime; /结束运行时间 int totalTime; /周转时间 float weightTotalTime; /带权周转时间 ; struct QueueNode /队列结点结构 int ID; /进程ID struct QueueNode * next; /队列中下一个进程指针 ; struct LinkQueue /队列结构 QueueNode *head;/队首 ; void Fcfs(LinkQueue& R, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable); void InitialQueue(LinkQueue& R,PCBNode * ProcessTable,const int processnum); /初始化就绪队列R void Input(PCBNode * ProcessTable, const int processnum); /从input.txt文件输入数据 int main() LinkQueue R; /就绪队列R R.head = NULL; /首地址为空 const int processnum =5;/进程数为5 int totalTimeSum = 0; /定义周转时间 int WeightTotalTimeSum = 0;/定义带权周转时间 PCBNode * ProcessTable=new PCBNodeprocessnum; /建立进程表 Input(ProcessTable, processnum); /输入进程表,进程数 InitialQueue(R, ProcessTable, processnum); /初始队列 Fcfs(R, totalTimeSum,WeightTotalTimeSum,ProcessTable); /定义为FCFS结构 cout先来先服务的平均周转时间为:totalTimeSum/processnumendl; cout先来先服务的平均带权周转时间为:WeightTotalTimeSum/processnumnext;/头结点指向下一个结点为p if (p !=NULL ) /设p不为空 ProcessTablep-ID.startTime = ProcessTablep-ID.arriveTime;/进程表p进程开始时间=到达时间 ProcessTablep-ID.finishTime = ProcessTablep-ID.arriveTime + ProcessTablep-ID.reqTime;/进程表p进程结束时间=到达时间 for(q=p-next; q!=NULL; q=q-next)/ for循环 if (ProcessTableq-ID.arriveTime ID.finishTime)/如果进程表q进程到达时间ID.startTime = ProcessTablep-ID.finishTime;/进程表q进程开始时间=p进程结束时间 ProcessTableq-ID.finishTime = ProcessTablep-ID.finishTime+ProcessTableq-ID.reqTime;/进程表q进程结束时间=p进程结束时间+q进程总需要时间 else ProcessTableq-ID.startTime = ProcessTableq-ID.arriveTime;/进程表q进程开始时间=q进程到达时间 ProcessTableq-ID.finishTime = ProcessTableq-ID.arriveTime+ProcessTableq-ID.reqTime;/进程表q进程结束时间=q进程到达时间+q进程总需要时间 p = q; for(q=R.head-next; q!=NULL; q=q-next)/for循环 ProcessTableq-ID.totalTime = ProcessTableq-ID.finishTime - ProcessTableq-ID.arriveTime;/进程表q周转时间=q进程结束时间-q进程到达时间 ProcessTableq-ID.weightTotalTime = ProcessTableq-ID.totalTime/ProcessTableq-ID.reqTime; /进程表q带权周转时间=q进程周转时间/q进程总需时间 totalTimeSum += ProcessTableq-ID.totalTime;/周转总时间=q进程周转时间+总周转时间 weightTotalTimeSum += ProcessTableq-ID.weightTotalTime;/带权周转总时间=q进程带权周转时间+带权周转总时间 int t = 0;/定义时间t for(q=R.head-next; q!=NULL; q=q-next)/for循环 cout*endl;/输出 while ( tID.finishTime )/当进程表q进程结束时间T时 cout时刻t: 进程ID活动next != NULL)/设q指向的下个结点不为空 cout时刻t: 进程ID结束活动,开始下一个进程.endl;/输出 cout进程ID的周转时间为: ID.totalTimeendl;/输出周转时间 cout进程ID的带权周转时间为: ID.weightTotalTimeendlendl;/输出带权周转时间 else cout时刻t: 进程ID结束活动.endlendl;/输出 cout进程ID的周转时间为: ID.totalTimeendl;/输出 cout进程ID的带权周转时间为: ID.weightTotalTimeendlendl; /输出 cout所有进程结束活动.endlnext; q!=NULL; q=q-next)/for循环 delete p;/删除p p = q; void InitialQueue(LinkQueue& R, PCBNode * ProcessTable,const int processnum) for (int i=0;inext = NULL;/头指针指向为空 QueueNode * p; QueueNode * q;/定义结点q,p for (i=0;iID = i;/p的ID号与i对应 p-next = NULL;/p指向空 if (i = 0)/设i为0 R.head-next = p;/头指针指向p else q-next = p;/q指向p q = p; void Input(PCBNode * ProcessTable, const int processnum) FILE *fp; /读入进程的相关内容 if(fp=fopen(input.txt,r)=NULL)/设in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届湖南邵阳市城区数学九年级第一学期期末经典试题含解析
- 广西贺州市昭平县2024年物理八上期末考试模拟试题含解析
- 重庆市万州二中学2024-2025学年物理八年级第一学期期末学业水平测试模拟试题含解析
- 江苏省常州市教育会2024年八年级物理第一学期期末检测模拟试题含解析
- 河北省承德兴隆县联考2024年九上化学期末监测试题含解析
- 新疆乌鲁木齐市达坂城区达坂城中学2025届化学九年级第一学期期末检测试题含解析
- 人工智能辅助配血-第2篇-洞察及研究
- 智能数据分析工具-洞察及研究
- 平衡训练的肌力关联性-洞察及研究
- 气候政策国际合作-洞察及研究
- GB/T 1048-2019管道元件公称压力的定义和选用
- 金属学及热处理练习题答案
- 高校内部控制之实务与案例课件
- 初一英语时态专题复习(附答案)
- 抖音号代运营合同范本
- 2022年上高县教师进城考试笔试题库及答案解析
- 河北省秦皇岛市各县区乡镇行政村居民村民委员会明细及行政区划代码
- 全国地下水超采区评价技术大纲
- 防汛物资检查记录
- 苏教版(2019)通用技术必修《技术与设计1》第三单元 发现与明确问题 单元测试题(含答案)
- 医院免疫室标准化操作程序免疫室内质量控制操作指南(ELISA)人民医院检验科免疫SOP人民医院质量管理体系课件
评论
0/150
提交评论