欢迎来到天天文库
浏览记录
ID:59195759
大小:305.12 KB
页数:49页
时间:2020-09-10
《操作系统进程调度编程.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.实验内容编写一个单处理机下的进程调度程序,模拟操作系统对进程的调度。2.实验目的进程是操作系统中最基本、最重要的概念,进程调度又是操作系统的核心模块。本实验要求学生独立设计并实现进程调度模拟程序,以加深对进程控制块概念和各种进程调度算法的理解。3.实验要求可以随机输入若干进程,支持先来先服务、短作业优先、最短剩余时间优先、时间片轮转、动态优先级调度算法,能够输出进程的调度过程。4.程序中使用的数据结构及符号说明(1).PCB(进程控制块)1.structpcb2.{3.intid;4.intarrive;5.intrun;6.in
2、tpriority;7.inttime;8.booldone;9.};说明: 在进程控制块中记录了以下信息:数据项类型说明idint进程号pidarriveint进程到达时间runint进程运行时间priorityint进程优先级timeint进程运行的时间片donebool记录进程是否已经完成运行(2).PCB数组1.structpcbprocess[N];说明: process数组用于保存调度所涉及的进程的信息。5.各种调度算法的处理流程,重要模块的详细设计及功能和接口说明(1).预处理算法流程对应程序代码及注释1.intmain
3、()2.{3.//初始化PCB数组4.memset(process,0,sizeof(process));5.//读入调度类型6.inttype;7.scanf("%d",&type);1.//读入调度进程数据2.for(n=0;~scanf("%d/%d/%d/%d/%d",3.&process[n].id,4.&process[n].arrive,5.&process[n].run,6.&process[n].priority,7.&process[n].time);n++);8.//根据调度类型转到子程序进行调度9.switch
4、(type)10.{11.//各调度子程序:12.case1:fcfs();break;//先来先服务13.case2:sjf();break;//短作业优先14.case3:sltf();break;//最短剩余时间优先15.case4:tpt();break;//时间片轮转16.case5:dp();break;//动态优先级17.}18.return0;19.}(2).先来先服务算法逻辑流程本题中算法实际流程对应程序代码及注释1.voidfcfs()2.{3.//按到达时间、pid排序4.sort(process,process
5、+n,cmp_ar_id);5.//初始化系统时间6.inttime=0;7.//顺序遍历各进程8.for(inti=0;i6、ss[i].priority);19.//进程运行,系统时间流逝20.time+=process[i].run;21.}22.return;23.}(3).短作业优先算法逻辑流程本题中算法实际流程对应程序代码及注释1.voidsjf()2.{3.//按运行时间、pid排序4.sort(process,process+n,cmp_run_id);5.//初始化系统时间6.inttime=0;7.//有未运行进程8.for(intm=1;m<=n;)9.{10.//找出已到达的未运行进程中,运行时间最短的进程11.intmin=INT_M7、AX,mini=-1;12.for(inti=0;i8、
6、ss[i].priority);19.//进程运行,系统时间流逝20.time+=process[i].run;21.}22.return;23.}(3).短作业优先算法逻辑流程本题中算法实际流程对应程序代码及注释1.voidsjf()2.{3.//按运行时间、pid排序4.sort(process,process+n,cmp_run_id);5.//初始化系统时间6.inttime=0;7.//有未运行进程8.for(intm=1;m<=n;)9.{10.//找出已到达的未运行进程中,运行时间最短的进程11.intmin=INT_M
7、AX,mini=-1;12.for(inti=0;i8、
8、
此文档下载收益归作者所有