一、实验目的
1.理解操作系统进程管理中进行进程调度的过程和编程方法,创建进程控制块PCB。
2.理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况。掌握几种调度算法。
3.理解几种进程调度的方式。
4.用代码将几种进程调度的方式表现出来。
二、实验原理
(1)先到先服务:按照进程提交给系统的先后次序来进行调度。
(2)短作业优先:按照进程所要求的运行时间来衡量。
(3)时间片轮转:根据先来先服务排序,以一个时间片为单位,依次执行不同的进程。
(4)响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度前先计算各作业的优先权,优先数高者优先调度。
RP(响应比)=作业周转时间/作业运行时间=1+作业等待时间/作业运行时间
三、程序实现
(1)FCFS先来先服务
算法思想:①首先将输入的进程放入一个进程数组中,然后根据进程的到达时间进行排序(冒泡排序)。将最先到达的进程放入进程就绪队列中。②当队列不空时,从队头取出一个进程来执行,直至此进程执行完,并将在此进程执行期间到达的进程依次加入进程就绪队列。③如果队列为空,但进程数组中仍存在未到达的进程,这时将要到达进程加入进程就绪队列。
//先来先服务
void fcfs() {
name_server name_server_fcfs[NUMBER];
//初始化
init_data(name_server_fcfs);
int is_true = 1;
int temp_sum = 0;
int is_wait = 0;
while (is_true){
//完成时间
int is_finished = 0;
for (int i = 0; i<NUMBER; i++) {
//当时间无法达到到达时刻时执行
if (is_wait > NUMBER + 1) {
temp_sum++;
is_wait = 0;
break;
}
//判断是否到达
if (name_server_fcfs[i].arrive_time > temp_sum) {
is_wait++;
continue;
}
if (name_server_fcfs[i].is_finished == 1){
is_finished++;
is_wait++;
if (is_finished == NUMBER){
is_true = 0;
break;
}
continue;
}
//完成时间
name_server_fcfs[i].finished = temp_sum