一、问题描述与分析
1.1 设计构想
程序能够完成以下操作:选择调度算法;查看历史记录;创建进程;进程调度:进程创建完成后就选择进程调度算法,每次执行的结果都在屏幕上输出。
1.2 基本要求
- 利用高级语言实现七种不同及进程调度算法:先来先服务调度算法,优先级调度算法,时间片轮转调度算法,短进程优先调度算法,最短剩余时间调度算法,最高响应比优先调度算法,多级反馈队列调度算法。
- 通过实验理解有关进程控制块进程队列等的概念。
1.3 需求分析
- 需求:在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一-个进程,使之执行。分配处理机的任务是由处理机:调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。
- 软件的基本功能:本软件在 vs code 环境下实现先来先服务、短作业优先、高响应比优先、时间片轮转调度算法、优先级调度算法和多级反馈队列调度算法,满足不同需求调度。
- 输入/输出形式:I/O 输入:data 数组键盘输入。I/O 输出:运行结果从屏幕输出。文本输出:新的键盘输入的 data 数组添加到历史数据中。
- 测试数据要求:对 data 数组赋值时,赋值的长度不可大于 data 数据的长度。
1.4 理论依据
为了描述和管制进程的运行,系统为每个进程定义了一个数据结构一进程控制块,程控制块中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过进程控制块对进程进行控制,亦即,系统是根据进程的进程控制块而不是任何别的什么而感知进程的存在的,进程控制块是进程存在的惟一标志。本次课程设计用不同结构体代替进程控制块的功能。
1.5 课程任务
- 用 C++ 编程实现操作模拟操作系统进程调度子系统的基本功能;运用多种算法实现对进程的模拟调度。
- 通过编写程序实现先来先服务调度算法,优先级调度算法,时间片轮转调度算法,短进程优先调度算法,最短剩余时间调度算法,最高响应比优先调度算法,多级反馈队列调度算法等七个算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。
- 通过控制台显示用户界面。
二、设计分析
2.1 概要设计
数据结构分七个算法:先来先服务调度算法,优先级调度算法,时间片轮转调度算法,短进程优先调度算法,最短剩余时间调度算法,最高响应比优先调度算法,多级反馈队列调度算法。
typedef struct FSA
{
int pro_num; //进程号
int time; //进程所需时间
} fsa;
typedef struct PSA
{
int pro_num; //进程号
int time; //进程所需时间
int priority; //优先级
bool operator<(const struct PSA &a) const
{
return priority < a.priority;
}
} psa;
2.2 详细设计
1.先来先服务调度算法:
按照进程进入就绪队列的先后次序进行选择。一旦一个进程得到处理机,他就会一直运行下去,直到该进程完成任务,才会让出处理机。
2.时间片轮转调度算法:
在时间片轮转调度算法中,系统将所有的就绪进程排成一个就绪队列。系统可设置每隔一定时间(如30ms)便产生一次中断,去激活进程调度程序进行调度,把CPU分配给下一个进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中下一个进程,也让其执行一个时间片,当到队列尾再回到队首。
3.优先级调度算法:
优先级调度算法是指在创建进程之初便确定的,由优先级高的开始执行。
4.短进程优先调度算法:
短进程优先调度算法是从进程的就绪队列中挑选运行时间最短进程进入主存运行,一旦选中某个短进程,应该尽可能快地完成并让出处理机。这样减少了就绪队列中等待的进程数,同时也缩短了进程的平均等待时间。
5.最短剩余时间优先调度算法:
最短剩余时间优先调度算法是将短进程优先调度算法用于分时环境的变形。
6.最高响应比优先调度算法:
最高响应比优先调度算法是指在创建进程之初,先赋予其一个优先级,然后其值随着进程的推进或等待时间的增加而改变响应比,以便获得更好的调度性能。若所有的就绪进程具有各不相同的优先级初值,那么对于优先级初值低的进程,在等待了足够的时间后,也可以获得处理机。
7.多级反馈队列调度算法
短进程优先调度算法或最短剩余时间优先调度算法均是在估计的进程运行时间基础上进行调度的,但在程序开发环境或其他情况下,往往难以估计进程的运行时间。这里所研究的算法是时间片轮转调度算法的发展,不必估计进程运行时间。系统中有多个进程就绪队列,每个就绪队列对应一个调度级别。第 1 级队列的优先级最高,以下各级队列的优先级逐次降低。调度时,选择高优先级队列中的第 1 个就绪进程。
规则 1:如果 A 的优先级大于 B 的优先级,运行 A 不运行 B
规则 2:如果 A 的优先级等于 B 的优先级,轮转运行 A 和 B
规则 3:工作进入系统时,放在最高优先级(最上层)队列
规则 4:工作用完整个时间片后,降低其优先级(移入低一级队列)
规则 5:每经过一段时间,就将系统中所有工作重新加入最高优先级队列
三、系统编译与调试分析
文件写入会覆盖上一条记录,使用追加模式
算法方面每个算法设置一个函数接口,同时使用数组存储各个进程的时间
四、使用说明
选择算法-> 是否查看历史记录-> 输入进程所需时间-> 对应算法运行-> 输入 exit 退出系统
五、测试结果
- 选择算法
- 是否查看历史记录
- 输入进程所需时间(添加到历史记录中,自动生成进程号)
非历史记录自动添加到历史记录中
- 算法对进程实现不同操作
先来先服务调度算法(FSA)
优先级调度算法
时间片轮转调度算法
短进程优先调度算法
最短剩余时间调度算法(可以实现添加进程)
最高响应比优先调度算法
多级反馈队列调度算法
- 退出(输入 exit)