实验报告
实验一:进程调度算法
一、实验目的
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<stdio.h>
#include<malloc.h>
#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; //优先级
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论