《操作系统原理》课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统原理》课程设计
课题名称:进程调度算法
姓名:
班级:
学号:
课程设计起止时间:2005年1月2日——2005年1月7日指导教师:成绩:
课程设计任务书
进程调度算法
一、设计说明
该程序实现了进程的创建,且对该进程队列进行动态优先权抢占式和时间片轮转算法的调度。
二、详细设计
1. 流程图
2. 程序运行环境
Turbo C 2.0
3. 变量的名称、作用及含义说明
链表结构process,整型变量name表示进程名称,整型变量prior表示优先数,整型变量needtime表示需要执行时间,整型变量CPUtime表示CPU执行时间,整型变量runtime表示进程执行时间,整型变量state表示运行状态(1:ready, 2:execute, 3:finish)。
4. 各主要模块的功能表述
[ 子函数]
①Createp() 用来创建新进程,其中的整型变量n表示需要创建的进程个数;
②PrintP1(h) 用来打印输出时间片轮转算法的创建进程和运行进程的各变量值;
③Finish(h) 用来判断某个进程是否执行完;
④Find(h) 用来查找该进程队列中优先数最大的进程;
⑤PrintP2(h) 用来打印输出动态优先权抢占式算法的创建进程和运行进程的各变量值;
⑥ExecuteP_prio(h) 执行动态优先权抢占式进程调度算法;
⑦ExecuteP_time(h) 执行时间片轮转进程调度算法;
[ 主函数]
main()中使用字符变量select表示a和b中的一个字母,整型变量num表示1至3中的一个数,用双层switch语句实现各模块功能。
5.程序源代码
#include
#include
#include
#include
#define NULL 0
#define Max_Pri 100
struct Process
{
int name;
int prio;
int needtime;
int piecetime;
int CPUtime;
int runtime;
int state;
struct Process *next;
};
typedef struct Process process;
/**************************************/
process *CreateP()
{
process *h,*t,*p;
int i,a;
int ct=0;
for(i=0;i<5;i++)
{
t=(process *)malloc(sizeof(process));
printf("\n Enter the name of process:");
scanf("%d",&a);
printf("\nEnter the CPUtime of process:");
scanf("%d",&ct);
t->name=a;
t->CPUtime=ct;
t->runtime=0;
t->prio=100-t->CPUtime;
t->needtime=t->CPUtime;
t->piecetime=t->CPUtime/2+t->CPUtime%2;
t->state=1;
if(i==0)
{
h=t;
p=t;
}
else
{
p->next=t;
p=p->next;
}
}
p->next=NULL;
return h;
}
/**************************************/
void PrintP1(process*h)
{
process*t;
t=h;
printf(" 1:ready 2:execute 3:finish ");
printf("\n name priority needtime runtime state\n");
{
while(t)
{
printf("\n%4d%8d%10d%10d%10d",t->name,t->prio,t->needtime,t->runtime, t->state);
t=t->next;
}
}
putchar('\n');
}
/**************************************/
void PrintP2(process *h)
{
process *t;
t=h;
printf(" 1:ready 2:execute 3:finish ");
printf("\n name piecetime needtime runtime CPUtime state\n");
while(t)
{
printf("\n%4d%8d%10d%10d%10d%8d",t->name,t->piecetime,t->needtime,t->runtime, t->CPUtime,t->state);
t=t->next;
}
putchar('\n');
}
/**********************************************/
int Finish(process *h)
{
int i=1;