篇四:作业调度实习报告
作业调度 实习报告
2009118252 计科一 樊星
一、实习题目
采用先来先服务算法和运行时间最短者优先算法模拟设计作业调度程序。
二、结构及说明
程序采用结构体来定义进程控制块PBC单元,整个控制块利用单向循环链表。 typedef struct tagPCB //进程控制块PBC
{
int num; //进程号 char user; //用户名 char name[5]; //进程名 struct tagPCB *next; //下个进程 int demand_time; //需求时间 int demand_memory; //需求内存 int demand_tap; //需求磁带 int used_time; //已用时间
}PCB;
同时采用另一结构体来定义作业控制块,整个控制块利用单向循环列表。 typedef struct tagWORK //作业控制块
{
int num; //作业号 char user; //用户名 char name[5]; //作业名 struct tagWORK *next; //下个作业 int demand_time; //需求时间 int demand_memory; //需求内存 int demand_tap; //需求磁带
}WORK;
分别编写先到先服务(FIFS)与短作业优先(SJF)的作业调度算法:
int FIFS();
int SJF();
在实际操作中分别用这两个函数来替代作业调度过程,达到不同的效果。
三、源程序
#include "stdafx.h"
#include "stdlib.h"
#include "iostream.h"
#include "string.h"
#include "fstream.h"
//-----------------------------------------------
typedef struct tagPCB //进程控制块PBC
{
int num; //进程号 char user; //用户名
char name[5]; //进程名 struct tagPCB *next; //下个进程 int demand_time; //需求时间 int demand_memory; //需求内存 int demand_tap; //需求磁带 int used_time; //已用时间
}PCB;
typedef struct tagWORK //作业控制块
{
int num; //作业号
char user; //用户名 char name[5]; //作业名 struct tagWORK *next; //下个作业 int demand_time; //需求时间 int demand_memory; //需求内存 int demand_tap; //需求磁带
}WORK;
//--------------------------------------------------
WORK *work_head,*work_p; //工作表链首指针,活动指针
PCB *head_r, *r_p; //就绪链首指针,活动指针
int process_num=0; //进程数
int free_memory=100; //内存剩余空间
int free_tap=5; //磁带剩余数
int current_thread=0; //当前进程数
int total_work;
//----------------------------------------------------
int i,j; //自由变量
ifstream infile("indata.txt"); //文件输入
ofstream outfile("outdata.txt"); //文件输出
//----------------------------------------------------函数声明
int create_work();
int init_work_table(WORK **,WORK **);
int enter_work_table(WORK **,WORK **);
WORK *exit_work_table(WORK *);
int create_process(WORK *);
int init_link(PCB**,PCB**);
int enter_link(PCB*,PCB*);
PCB *exit_link(PCB*);
int random_choose_process();
int execute_process(PCB *);
int FIFS();
int SJF();
//----------------------------主程序---------------------------//
int main(int argc, char* argv[])
{
init_link(&head_r, &r_p);
init_work_table(&work_head,&work_p);
//////////////////////////////////////初始化
infile>>total_work; for (i=0;i
}
/*****************************************************************************/ int create_work() //创建作业信息 {
WORK *temp; temp = (WORK *)malloc(sizeof(WORK)); temp->num = i; infile>>temp->user; infile>>temp->name; infile>>temp->demand_time; infile>>temp->demand_memory; infile>>temp->demand_tap;
enter_work_table(&work_p,&temp);
return 0;
}
int init_work_table(WORK **head,WORK **p) //作业队列初始化
{
(*head) = (WORK *)malloc(sizeof(WORK));
(*head)->next = (*head);
(*p) = (*head);
return 0;
}
int enter_work_table(WORK **p,WORK **temp) //加入作业队列
{
(*p)->next = (*temp); if (total_work-1 == (*temp)->num) { } else { } (*p)= (*temp); (*temp)->next = work_head;
return 0;
}
WORK *exit_work_table(WORK *p) //退出作业队列
{
WORK *q; q = p; while (p != q->next) { q = q->next; } q->next = p->next;
return p;
}
/*****************************************************************************/ int create_process(WORK *current) //创建进程
{
PCB *temp; temp = (PCB *)malloc(sizeof(PCB)); temp->num = process_num++; temp->user = current->user; strcpy(temp->name,current->name);
temp->demand_time = current->demand_time;
temp->used_time = 0;
temp->demand_memory = current->demand_memory; temp->demand_tap = current->demand_tap;
free_memory-=current->demand_memory;
free_tap-=current->demand_tap;
enter_link(head_r,temp);
current_thread++; //增加一线程 return 0;
}
int init_link(PCB **head,PCB **p) //PBC表初始化 {
(*head) = (PCB *)malloc(sizeof(PCB)); (*head)->demand_time = 0; (*head)->used_time = 32768;
(*head)->next = (*head);
(*p) = (*head);
return 0;
}
int enter_link(PCB *head,PCB *temp)
{
temp->next = head->next;
head->next = temp;
return 0;
}
PCB *exit_link(PCB *p)
{
PCB *q;
q = p;
free_memory+=p->demand_memory;
free_tap+=p->demand_tap;
while (p != q->next)
{
q = q->next;
}
q->next = p->next;
current_thread--;
return p;
}
//--------------------------------------------
int random_choose_process()
{
int x;
x = rand() % process_num;
r_p = head_r;
for (j=0;j { r_p = r_p->next; } //加入进程队列 //退出进程队列 //减少一线程 //处理器随机调度算法 //产生随机数 //活动指针返回链首篇五:调度员实践报告 中国石油大学(华东)现代远程教育 毕业大作业(实践报告) 题 目: 学习中心: 广州学习中心 年级专业: 网络10春 化学工程与工艺 学生姓名: 学 号: 实践单位: 实践起止时间: 年 月 日~11年11月8日 中国石油大学(华东)远程与继续教育学院 完成时间: 年 月 日 中国石油大学(华东)现代远程教育 毕业大作业(实践报告)实践单位评议表 瑞丰石化调度员实践报告