实验一 进程调度实验
专业:信息管理与信息系统
学号:2014******
:*
实验日期:2016年11月11日
实验目的
通过本实验,采用动态优先权优先的调度算法编写和调试一个简单的进程调度程序,加深理解了有关进程控制块、进程队列的概念,并体会了优先权调度算法的具体实施办法。
实验要求
用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解.
三、实验方法容
算法设计思路(流程图)
算法中用到的数据结构
(1)首先定义一个结构体,用以保存一个进程的各种信息,最后一个指针便于将所有进程形成一个链表
typedef struct pcb{
int id;
int arriveTime; //到达时间
int priority;
int cpuTime;
int allTime;
int startBlock;
int blockTime;
char state;
struct pcb *next;
}PCB;
(2)接着建立一个链表存储所有进程,以结构体PCB为节点(头节点为空节点,从第二个节点开始存储数据)。链表建立过程如下:
int i = 0;
PCB *head,*p1,*p2;
head = (PCB *)malloc(sizeof(PCB)); //创建链表头
p2 = head;
//三个进程
for(i = 0; i < 3; i++){
p1 = (PCB *)malloc(sizeof(PCB));
//设置进程的初始状态,各个数据已经保存在对应的各个数组中
p1->id = pcId[i];
p1->priority = priority[i];
p1->cpuTime = cpuTime[i];
p1->allTime = allTime[i];
p1->startBlock = startBlock[i];
p1->blockTime = blockTime[i];
p1->state = 'W'; //初始状态为就绪
p2->next = p1;
p2 = p1;
}
p2->next = NULL; //表尾指针设为空指针,表示链表结束
主要模块(函数名)
如下:
创建初始队列,用链表存储
PCB *createLink(){};
(2)输出链表中所有进程的状态
void printLink(PCB *head, int time);
(3)判断是否所有进程都已完成
int isFinish(PCB *head);
(4)判断是否所有未完成的进程都处于阻塞状态
int isBlock(PCB *head);
(5)获得当前时刻优先权最高且处于就绪状态的进程
PCB *getHighPriority(PCB *head);
(6)运行(调度函数,在这里展示所有代码)
void run(PCB *head){};
所有代码如下:
#include <>
#include <>
//三个进程的初始状态
int pcId[] = { 0, 1, 2};
int priority[] = { 6, 8, 5};
int cpuTime[] = { 0, 0, 0};
int allTime[] = { 7, 7, 6};
int startBlock[] = { 6, 4, 2};
int blockTime[] = { 3, 8, 6};
typedef struct pcb{
int id;
int arriveTime; //到达时间
int priority;
int cpuTime;
int allTime;
int startBlock;
int blockTime;
char state;
struct pcb *next;
}PCB;
//创建初始队列,用链表存储
PCB *createLink(){
//int pcNum = 0; //进程个数
int i = 0;
PCB *head,*p1,*p2;
head = (PCB *)malloc(sizeof(PCB)); //创建链表头
p2 = head;
for(i = 0; i < 3; i++){
p1 = (P
进程调度实验实验报告 来自淘豆网m.daumloan.com转载请标明出处.