操作系统实验报告模板文档格式.docx

上传人:b****5 文档编号:20793969 上传时间:2023-01-25 格式:DOCX 页数:12 大小:19.52KB
下载 相关 举报
操作系统实验报告模板文档格式.docx_第1页
第1页 / 共12页
操作系统实验报告模板文档格式.docx_第2页
第2页 / 共12页
操作系统实验报告模板文档格式.docx_第3页
第3页 / 共12页
操作系统实验报告模板文档格式.docx_第4页
第4页 / 共12页
操作系统实验报告模板文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统实验报告模板文档格式.docx

《操作系统实验报告模板文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告模板文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统实验报告模板文档格式.docx

实验内容及要求(详见实验讲义与实验指导书):

实验内容

本实验要求用C语言编写和调试一个简单的进程调度模拟程序。

须在实验报告中给出详细算法描述和流程图。

实验要求

①设计进程控制块PCB表结构,分别适用于优先数调度算法和轮转调度算法。

②建立进程就绪队列。

对两种不同算法编制入队子程序。

③编制两种进程调度算法:

1)优先数调度;

2)轮转调度

实验用到的软件(:

Visualstudios2010

实验内容及关键步骤(代码)Q3(15分)

#include<

ctype.h>

stdio.h>

stdlib.h>

string.h>

typedefstructnode

{

charname[10];

/*进程标识符*/

intprio;

/*进程优先数*/

intround;

/*进程时间轮转时间片*/

intcputime;

/*进程占用CPU时间*/

intneedtime;

/*进程到完成还要的时间*/

intcount;

/*计数器*/

charstate;

/*进程的状态*/

structnode*next;

/*链指针*/

}PCB;

PCB*finish,*ready,*tail,*run;

/*队列指针*/

intN;

/*进程数*/

//几个函数的声明

voidcreate1(char);

voidcreate2(char);

voidpriority(char);

voidroundrun(char);

voidinunization()//初始化界面

printf("

\n\n\t\t*********************************************\t\t\n"

);

\t\t\t\t实验六进程调度模拟\n"

\t\t*********************************************\t\t\n"

\n\n\n\t\t\t\t\t2009级计算机/软件\n"

\t\t\t\t\t刘德华\n"

\t\t\t\t\t3204007102\n"

\t\t\t\t\t完成时间:

2011年10月20日\n\n\n\n"

}

/*标题输出函数*/

voidprt1(chara)

if(toupper(a)=='

P'

)/*优先数法*/

进程号cpu时间所需时间优先数状态\n"

else

进程号cpu时间所需时间记数时间片状态\n"

/*进程PCB输出*/

voidprt2(chara,PCB*q)

)/*优先数法的输出*/

%-10s%-10d%-10d%-10d%c\n"

q->

name,

q->

cputime,q->

needtime,q->

prio,q->

state);

else/*轮转法的输出*/

%-10s%-10d%-10d%-10d%-10d%-c\n"

count,q->

round,q->

/*主要的输出函数*/

voidprt(charalgo)

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*/

getchar();

/*压任意键继续*/

/*主函数*/

intmain()

charalgo;

/*算法标记*/

inunization();

选择算法:

P/R(优先数算法/时间片轮转算法)\n"

scanf("

%c"

&

algo);

/*输入字符确定算法*/

输入进程数:

\n"

%d"

N);

/*输入进程数*/

if(algo=='

||algo=='

p'

create1(algo);

/*优先数法*/

priority(algo);

create2(algo);

/*轮转法*/

roundrun(algo);

//system("

pause"

return0;

voidinsert1(PCB*q)//优先数插入函数

PCB*p1,*s,*r;

intb;

s=q;

p1=ready;

r=p1;

b=1;

while((p1!

=NULL)&

&

b)

if(p1->

prio>

=s->

prio)

{

r=p1;

p1=p1->

}

else

b=0;

if(r!

=p1)

r->

next=s;

s->

next=p1;

ready=s;

voidinsert2(PCB*q)//轮转法插入函数

tail->

next=q;

tail=q;

next=NULL;

voidfirrun()//将准备队列的第一个进程投入运行

run=ready;

run->

state='

R'

;

ready=ready->

voidcreate1(charalgo)//优先数进程创建

inti,time;

charjinchengname[10];

ready=NULL;

finish=NULL;

run=NULL;

for(i=1;

i<

=N;

i++)//创建N个进程

p=(structnode*)malloc(sizeof(PCB));

printf("

请输入进程名%d:

i);

scanf("

%s"

jinchengname);

请输入运行时间:

time);

strcpy(p->

name,jinchengname);

//将进程几个属性进行赋值

p->

cputime=0;

needtime=time;

w'

prio=100-time;

//准备队列不为空时进行插入

if(ready!

insert1(p);

//当准备队列为空时将p设定为第一个进程

p->

next=ready;

ready=p;

优先数进程调度模拟:

prt(algo);

//输出进程的信息

firrun();

//将就绪队列的第一个进程投入运行

voidcreate2(charalgo)//轮转法进程创建

finish=NULL;

run=NULL;

p=(structnode*)malloc(sizeof(PCB));

count=0;

round=2;

//时间片赋值

insert2(p);

//当准备队列为空时将p设定为第一个进程

else{

tail=p;

轮转法进程调度模拟:

prt(algo);

firrun;

//将就绪队列的第一个进程投入运行

voidpriority(charalgo)//优先数调度过程

while(run!

=NULL)//当运行队列不为空,进行进程调度操作

run->

cputime=run->

cputime+1;

needtime=run->

needtime-1;

prio=run->

prio-3;

//完成了的进程放入完成队列

if(run->

needtime==0)

run->

next=finish;

finish=run;

F'

run=NULL;

if(ready!

firrun();

//没运行完而且优先数不是最大的,将其插入到就绪队列

elseif((ready!

(run->

prio<

ready->

prio))

{

run->

W'

insert1(run);

}

//输出下一个调度表

voidroundrun(charalgo)//轮转法的调度过程

count=run->

count+1;

needtime==0)//运行完的进程插入到完成队列

firrun();

//如果运行时间达到时间片限制

elseif(run->

count==run->

round)

//运行时间计数器置0

//讲时间片到的进程插入到就绪队列末端!

insert2(run);

//讲第一个进程投入到运行

实验过程中遇到的问题解决办法与实验体会Q4(需手写,10分)

评阅教师特殊评语:

评阅教师:

日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1