进程调度算法实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

实验一:进程调度算法

一、实验目的

1.利用高级语言实现三种不同及进程调度算法:

短作业优先算法、时间片轮转调度算法和优先级调度算法。

2.通过实验理解有关进程控制块,进程队列等的概念。

二、实验原理

各调度算法思想:

1.先来先服务算法(FCFS):

按照进程进入就绪队列的先后次序来分配CPU,一旦一个进程占有CPU,就一直运行下去,知道该进程完成工作,才释放CPU。

2.时间片轮转算法:

系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择队列中的第一个进程执行,且仅能执行一个时间片,在使用完一个时间片后,即使进程并未完成其运行,也必须将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 50

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];

void init(int n) // 初始化

{

for(int i=0;i

{

pcb[i].arrivetime=0;

pcb[i].servicetime=0;

//pcb[i].starttime=0;

pcb[i].finishtime=0;

pcb[i].turntime=0;

pcb[i].average_turntime=0;

pcb[i].remain_time=0;

pcb[i].sign=0;

pcb[i].priority=0;

}

}

void creat(int n) // 创建PCB

{

int i;

for(i=1;i<=n;i++)

printf("\n%d:\n 请依次输入进程的信息\n 请输入进程名:",i);

scanf("%d",&pcb[i].name);

printf(" 请输入到达时间:");

scanf("%d",&pcb[i].arrivetime);

printf(" 请输入服务时间:");

scanf("%d",&pcb[i].servicetime);

printf(" 请输入优先级:");

scanf("%d",&pcb[i].priority);

pcb[i].remain_time=pcb[i].servicetime; //初始化剩余时间为服务时

}

}

void FCFS(int n) // 先来先服务

{

int starttime;

printf(" 请输入开始执行时间:\n");

scanf("%d",&starttime);

if(starttime>=pcb[0].arrivetime)

{

pcb[0].finishtime=pcb[0].servicetime+starttime;

else

相关文档
最新文档