1 / 12
文档名称:

进程调度的模拟实现课程设计报告.doc

格式:doc   页数:12
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

进程调度的模拟实现课程设计报告.doc

上传人:799474576 2013/11/5 文件大小:0 KB

下载得到文件列表

进程调度的模拟实现课程设计报告.doc

文档介绍

文档介绍:课程设计报告
课程名称:操作系统
专业
计算机科学与技术
学生姓名

班级
B计082
学号

指导教师

完成日期
2010年6月29日
信息工程学院
题目:进程调度的模拟实现
一、设计目的
本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。
二、设计内容
(1)概述
选择一个调度算法,实现处理机调度。
设计要求:
1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。
2)可选择进程数量
3)本程序包括三种算法,用C或C++语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。
(2)设计原理
:
进程名
进程状态
要求运行时间
优先数
链接指针

其中优先数是赋给进程的优先级
调度时总是选取优先数最大的进程优先运行
,运行时间,由程序任意指定。
,把进程按给定优先级(动态优先级算法中)从小到大排成一个队列。按给定运行时间(短作业优先)从小到大排成一个队列用一个变量作为队首指针,指向队列的第一个进程。
。由于本实验是模拟处理机调度,所以被选中的进程并不实际的启动运行,而是执行:
优先数-1(动态优先级算法中)
要求运行时间-1
来模拟进程的一次运行。
,若要求运行时间不等于0,则再将它加入队列(动态优先级算法中:按优先数大小插入。),且改变队首指针:若要求运行时间=0,则把它的状态改为完成(C)状态,且退出队列。
,则重复上述的4和5,直接所有的进程成为完成状态。
,以显示或打印每次被选中的进程的进程名以及运行一次后进程队列的变化。
(3)详细设计及编码
(流程图、编程及程序注释等)
:


#include <>
#include <>
#include <>
#include <>
typedef struct node
char name[10];
int prio;
int round;
int cputime;
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;
}
int timesj(void)
{
int i,xt;
time_t t;
srand((unsigned) time(&t));
xt = rand() % 10 +1;
return xt;
}
void prt1(char a)
{ if(toupper(a)=='1')
printf(" name cputime needtime priority state\n");
else
if(toupper(a)=='2')
printf(" name cputime needtime priority state\n");
else
printf(" name cputime needtime priority state\n");
}
void prt2(char a,PCB *q)
{ if(toupper(a)=='1')
printf(" %-10s%-10d%-10d%-10d %c\n",q->name,
q->cputime,q->needtime,q->prio,q->state);
else
if(toupper(a)=='2')
printf(" %-10s%-10d%-10d%-10d %c\n",q->name,
q->cputime,q->needtime,q->prio,q->state);
else
printf(" %-10s%-10d%-10d%-10d %c\n",q->name,
q->cputime,q->needtime,q->prio,q->state);
}
void prt(char algo)
{ PCB *p;
prt1(algo);
if(run!=