计算机软件基础实践报告.doc
文本预览下载声明
计算机软件实践报告
题 目处理机调度专 业电子工程班 级电子1班学生姓名钟涛指导教师冯建群二0一四 年 十 月实验名称:处理机调度
一 实验内容
选择一个调度算法,实现处理机调度。
二 实验目的
多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。
三 实验题目
设计一个按优先权调度和时间片轮转算法实现处理机调度的程序。
四 基本思想先选择时间片的个数和每个时间片需要的时间,正在运行的进程每运行一秒其优先权数目加一,即其优先权减小。每个时间片运行结束后,选择进入时间片进程优先权数目最小的进程,开始下一个时间片的运行。如果有进程运行结束,则离开,再在就绪队列中选择优先权数目最小的进程进入。在运行期间,如果有新的进程来到,按优先权大小放入就绪队列中。
五 算法分析定义一个结构体,此包含了PCB的信息:
struct PCBchar PID[5];/*进程名*/
int needtime; /*要求运行的时间*/
int cputime;/*已运行时间*/
int priority;/*优先权越小越高*/
int starttime; /*进入就绪队列的时间*/
int overtime; /*运行完成的时间*/
int state;/*状态:1就绪2运行3完成*/
struct PCB *next;
;
子函数struct PCB *createint num,int n用来建立一个按优先级大小排列的就绪进程链表和一个按时间先后循序排列的将进入就绪进程的链表。
main函数中用一while循环输出进入时间片的进程状态。
六 流程图
七 算法描述
#define NULL 0
#define LEN sizeofstruct PCB
#includestdio.h
#includestdlib.h
struct PCBchar PID[5];/*进程名*/
int needtime; /*要求运行的时间*/
int cputime;/*已运行时间*/
int priority;/*优先权越小越高*/
int starttime; /*进入就绪队列的时间*/
int overtime; /*运行完成的时间*/
int state;/*状态:1就绪2运行3完成*/
struct PCB *next;
;
struct PCB *createint num,int n
/*创建进程,并将进程按优先级顺序插入队列中*/struct PCB *head,*p,*p1,*p2;
int i;
headNULL;/*头指针指零*/
fori1;inum;i++/*循环建立所有进程*/printf请输入第%d个进程的信息\n,i;
pstruct PCB *mallocLEN; /*开辟一个空间*/printf进程名:;/*输入进程名*/
scanf%s,p-PID;
printf要求运行的时间:;/*输入要运行的时间*/
scanf%d,p-needtime;
p-cputime0;/*占用处理机的时间赋为零*/
printf优先权:;/*输入优先权*/
scanf%d,p-priority;
ifn1p-starttime0;/*进入就绪队列的时间赋为零*/
elseprintf进入就绪队列时间:;/*输入进入就绪队列的时间*/scanf%d,p-starttime;p-overtime-1;/*运行没有结束所以运行完成的时间赋为-1*/
p-state1;/*状态赋为就绪状态*/
p1head;/*p1指针指向头指针*/
ifheadNULL/*如果头指针为零将头指针指向新建立的进程*/headp;head-nextNULL;
else/*头指针不为零的情况*/ifn1whilep1!NULLp-priorityp1-priority /*查找插入点*/p2p1;p1p1-next;elsewhilep1!NULLp-starttimep1-starttime /*查找插入点*/p2p1;p1p1-next;ifheadp1/*优先权的值最小作为表头*/p-nexthead;p2headp;else/*否则的话插入*/p2-nextp;p-nextp1;returnhead;
void mainchar now[5];
int cho,num,num1,timepiece,time,i,j,k,flag,choo,clock0;
struct PCB *head,*head1,*over,*l
显示全部