好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

(完整word版)进程调度算法实验报告.doc

17页
  • 卖家[上传人]:cn****1
  • 文档编号:544054900
  • 上传时间:2023-01-31
  • 文档格式:DOC
  • 文档大小:134.01KB
  • / 17 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 实验报告实验一:进程调度算法一、实验目的1.利用高级语言实现三种不同及进程调度算法:短作业优先算法、时间片轮转调度算法和优先级调度算法2.通过实验理解有关进程控制块,进程队列等的概念二、实验原理各调度算法思想:1. 先来先服务算法(FCFS):按照进程进入就绪队列的先后次序来分配CPU,一旦一个进程占有CPU,就一直运行下去,知道该进程完成工作,才释放CPU2. 时间片轮转算法:系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择队列中的第一个进程执行,且仅能执行一个时间片,在使用完一个时间片后,即使进程并未完成其运行,也必须将CPU交给下一个进程;如果一个时间片未使用完就完成了该进程,则剩下的时间分配给下一个进程3. 优先权调度算法;在创建进程时就确定优先权,确定之后在整个程序运行期间不再改变,根据优先级排列,系统会把CPU分配给优先权最高的进程三、 实验步骤、数据记录及处理1、 算法流程抽象数据类型的定义:PCB块结构体类型struct PCB{ int name; int arrivetime; //到达时间 int servicetime; //服务时间 //int starttime[max]; //开始时间 int finishtime; //完成/结束时间 int turntime; //周转时间 int average_turntime; //带权周转时间 int sign; //标志进程是否完成 int remain_time; //剩余时间 int priority; //优先级}pcb[max];主程序的流程以及各程序模块之间的层次(调用)关系:主程序中从键盘得到进程的数量,创建PCB,调用layout()函数显示选择界面。

      Layout()函数中选择相应的算法并调用相关函数如:FCFS()、time_segment();、Priority(),这三个函数分别实现先来先服务算法,时间片轮转算法和优先级算法,最后分别打印程序流程图:2、运行结果分析:先来先服务算法:时间片轮转算法:优先级算法: 西安工业大学实验报告 四、总结与体会经过此次实验,我觉得具体写代码就是对解题步骤的一个细化,也发现了已往课程中学习的不足,以便日后改正附录:源代码#include#include#define max 50struct PCB{ int name; int arrivetime; //到达时间 int servicetime; //服务时间 //int starttime[max]; //开始时间 int finishtime; //完成/结束时间 int turntime; //周转时间 int average_turntime; //带权周转时间 int sign; //标志进程是否完成 int remain_time; //剩余时间 int priority; //优先级}pcb[max];void init(int n) //初始化{ for(int i=0;i=pcb[0].arrivetime) { pcb[0].finishtime=pcb[0].servicetime+starttime; } else { pcb[0].finishtime=pcb[0].finishtime+pcb[0].servicetime; } for(int i=1;ipcb[i].arrivetime) pcb[i].finishtime=pcb[i-1].finishtime+pcb[i].servicetime; else pcb[i].finishtime=pcb[i].arrivetime+pcb[i].servicetime; pcb[i].turntime=pcb[i].finishtime-pcb[i].arrivetime; pcb[i].average_turntime=pcb[i].turntime/pcb[i].servicetime; }}void print_FCFS(int n){ //printf("进程名,到达时间\t服务时间\t完成时间\t周转时间\t周转时间:,%s\t%d\t%d\t%d\t%d\t%d\t"); printf("进程名 到达时间 服务时间 完成时间 周转时间 带权周转时间:\n"); for(int i=0;i T) { flag=1; time=time+T; pcb[i].remain_time=pcb[i].remain_time-T; //printf("%10d%16d%12d%12d%12d\n",pcb[i].name,time-T,T,pcb[i].remain_time,time); } //没有完成的进程需要的时间小于或等于一个时间片 else if(pcb[i].remain_time <= T) { flag=1; //加入就绪队列 time=time+pcb[i].remain_time; pcb[i].finishtime=time; pcb[i].sign=1; //printf("%10d%16d%12d%12d%12d\n",pcb[i].name,time-pcb[i].remain_time,pcb[i].servicetime,0,time); pcb[i].remain_time=0; } if(pcb[i].sign==1) sum++; } }//for if(flag==0&&sum

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.