进程调度算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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