时间片轮转法cpu调度.doc
文本预览下载声明
昆 明 理 工 大 学 理 学 院
信息与计算科学专业 操作性实验报告
年级: 09级 姓名: 学号: 指导教师:
实验课程名称: 操作系统原理 开课实验室: 理学院机房
实验成绩:
学风(5) 观察能力(15) 操作能力(30) 调试能力(50) 其它 总分
实验内容:
1.实验/作业题目: 时间片轮转法cpu调度
2.实验/作业课时:4学时
3.实验过程(包括实验环境、实验内容的描述、完成实验要求的知识或技能):
实验环境:windowsXP;vc++;visual studio 2008,MyEclipse6.5
实验内容:编写程序模拟时间片轮转法cpu调度。
a、运行编写的程序,写出程序中使用的数据结构及符合说明;
b、画出程序的流程图,程序中附有详细的注释;
c、运行程序,输入运行时的初值,输出运行结果;
d、写出对时间片轮转法cpu调度的认识及它的适应环境;
e、改写下面的程序,改成java代码。
4.程序结构(程序中的函数调用关系图)
#include stdio.h
#include stdlib.h
#include string.h
typedef struct node
{
char name[10]; /*进程标识符*/
int prio; /*进程优先数*/
int round; /*进程时间轮转时间片*/
int cputime; /*进程占用CPU时间*/
int needtime; /*进程到完成还要的时间*/
int count; /*计数器*/
char state; /*进程的状态*/
struct node *next; /*链指针*/
}PCB;
PCB *finish,*ready,*tail,*run; /*队列指针*/
int N; /*进程数*/
/*将就绪队列中的第一个进程投入运行*/
firstin()
{
run=ready; /*就绪队列头指针赋值给运行头指针*/
run-state=R; /*进程状态变为运行态*/
ready=ready-next; /*就绪对列头指针后移到下一进程*/
}
/*标题输出函数*/
void prt1(char a)
{
if(toupper(a)==P) /*优先数法*/
printf( 进程号 cpu时间 所需时间 优先数 状态\n);
else
printf( 进程号 cpu时间 所需时间 记数 时间片 状态\n);
}
/*进程PCB输出*/
void prt2(char a,PCB *q)
{
if(toupper(a)==P) /*优先数法的输出*/
printf( %-10s%-10d%-10d%-10d %c\n,q-name,
q-cputime,q-needtime,q-prio,q-state);
else/*轮转法的输出*/
printf( %-10s%-10d%-10d%-10d%-10d %-c\n,q-name,
q-cputime,q-needtime,q-count,q-round,q-state);
}
/*输出函数*/
void prt(char algo)
{
PCB *p;
prt1(algo); /*输出标题*/
if(run!=NULL) /*如果运行指针不空*/
prt2(algo,run); /*输出当前正在运行的PCB*/
p=ready; /*输出就绪队列PCB*/
while(p!=NULL)
{
prt2(algo,p);
p=p-next;
}
p=finish; /*输出完成队列的PCB*/
while(p!=NULL)
{
prt2(algo,p);
p=p-next;
}
getchar(); /*压任意键继续*/
}
/*优先数的插入算法*/
insert1(PCB *q)
{
PCB *p1,*s,*r;
int b;
s=q; /*待插入的PCB指针*/
p1=ready; /*就绪队列头指针*/
r=p1; /*r做p1的前驱指针*/
b=1;
while((p1!=NULL)b) /*根据优先数确定插入位置*/
if(p1-prio=s-prio)
{
显示全部