南通大学计算机学院
操作系统 课程设计
报 告 书
设计题目 处理器调度算法模拟
专业班级 软嵌161 学生姓名 候玉权 学 号 1613072015 指导教师 丁红 日 期 2024.07.05
实验报告正文内容
1、课程设计的目的
在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪状态进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下处理器调度,帮助学生加深了解处理器调度的工作。
2、课程设计的要求
用C++语言编写程序完成单处理机的进程调度
3、课程设计的环境
在机房完成,运行环境vs2017
4、问题描述
对cpu调度算法进行模拟实现,包含先来先服务,短作业优先,响应比最高优先,时间片轮转等算法。
5、算法分析
数据结构
struct ef { }
char name[10]; //进程名称 int number; //进程编号 float daodatime; //到达时间 float kaishitime; //开始运行时间 float yunxingtime; //运行时间 float jieshutime; //运行结束时间 int shengyutime; // 剩余时间 int fuwutime; //服务时间 int order; //运行次序 int run_flag; //调度标志 int priority; //优先级 struct ef *next;
先来先服务算法
int fcfs() //先来先服务
{
1
}
float tp = 0; int i; int zx;
tp = ef[0].daodatime; for (i = 0; i return 0; ef[i].kaishitime = tp; ef[i].jieshutime = ef[i].kaishitime + ef[i].yunxingtime; ef[i].run_flag = 1; tp = ef[i].jieshutime; zx = i; ef[zx].order = i + 1; 2 短作业优先 int sjf() //短作业优先 for (j = 0; j if ((ef[j].daodatime <= temp_time) && (!ef[j].run_flag)) if (ef[j].yunxingtime yunxingtime = ef[j].yunxingtime; zx= j; { float temp_time = 0; int i = 0, j; int zx, tc; float yunxingtime; yunxingtime = ef[i].yunxingtime; j = 1; while ((j if (ef[j].yunxingtime //对第一个被调度的进程求相应的参数 yunxingtime = ef[j].yunxingtime; i = j; } //查找第一个被调度的进程 zx = i; ef[zx].kaishitime = ef[zx].daodatime; ef[zx].jieshutime = ef[zx].kaishitime + ef[zx].yunxingtime; ef[zx].run_flag = 1; temp_time = ef[zx].jieshutime; ef[zx].order = 1; tc = 1; while (tc for (j = 0; j if ((ef[j].daodatime <= temp_time) && (!ef[j].run_flag)) { } yunxingtime = ef[j].yunxingtime; zx = j; break; 3 } } } //查找下一个被调度的进程 //对找到的下一个被调度的进程求相应的参数 ef[zx].kaishitime = temp_time; ef[zx].jieshutime = ef[zx].kaishitime + ef[zx].yunxingtime; ef[zx].run_flag = 1; temp_time = ef[zx].yunxingtime; tc++; ef[zx].order = tc; }return 0; 4