操作系统处理机调度实验报告.docx

上传人:b****6 文档编号:13528784 上传时间:2023-06-15 格式:DOCX 页数:14 大小:17.08KB
下载 相关 举报
操作系统处理机调度实验报告.docx_第1页
第1页 / 共14页
操作系统处理机调度实验报告.docx_第2页
第2页 / 共14页
操作系统处理机调度实验报告.docx_第3页
第3页 / 共14页
操作系统处理机调度实验报告.docx_第4页
第4页 / 共14页
操作系统处理机调度实验报告.docx_第5页
第5页 / 共14页
操作系统处理机调度实验报告.docx_第6页
第6页 / 共14页
操作系统处理机调度实验报告.docx_第7页
第7页 / 共14页
操作系统处理机调度实验报告.docx_第8页
第8页 / 共14页
操作系统处理机调度实验报告.docx_第9页
第9页 / 共14页
操作系统处理机调度实验报告.docx_第10页
第10页 / 共14页
操作系统处理机调度实验报告.docx_第11页
第11页 / 共14页
操作系统处理机调度实验报告.docx_第12页
第12页 / 共14页
操作系统处理机调度实验报告.docx_第13页
第13页 / 共14页
操作系统处理机调度实验报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统处理机调度实验报告.docx

《操作系统处理机调度实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统处理机调度实验报告.docx(14页珍藏版)》请在冰点文库上搜索。

操作系统处理机调度实验报告.docx

操作系统处理机调度实验报告

处理机调度算法实验报告

学号

姓名

时间

专业

班级

实验题目:

处理机调度算法

一、实验目的

在了解操作系统的基础上全面了解处理机调度算法的实现以及过程,详细了解处理机调度算法的机制,充分了解调度的过程及状态,采用优先数法进程调度算法来模拟演示进程调度

二、实验内容与步骤:

1.了解进程的三种状态状态:

ready、running、finish

2.了解进程需要的CPU时间以时间片为单位确定

3.编写一段程序

#include

#include

#defineP_NUM5

#defineP_TIME50

enumstate{

ready,

execute,

block,

finish

};

structpcbb{

charname[4];

intpriority;

intcputime;

intneedtime;

intcount;

enumstateprocess;

structpcbb*next;

};

typedefstructpcbbpcb;

voiddisplay_menu(){

printf("CHOOSETHEALGORITHM:

\n");

printf("1PRIORITY\n");

printf("2ROUNDROBIN\n");

printf("3EXIT\n");

}

pcb*get_process(){

pcb*q;

pcb*p;

pcb*t;

inti=0;

printf("inputnameandtime\n");

while(i

q=(pcb*)malloc(sizeof(pcb));

scanf("%s",q->name);

scanf("%d",&q->needtime);

q->cputime=0;

q->priority=P_TIME-q->needtime;

q->process=ready;

q->next=NULL;

if(i==0){

p=q;

t=q;

}

else{

t->next=q;

t=q;

}

i++;

}

returnp;

}

voidfree_process(pcb*p){

pcb*q;

while(p!

=NULL){

q=p;

p=p->next;

free(q);

}

}

voiddisplay(pcb*p){

printf("namecputimeneedtimeprioritystate\n");

while(p){

printf("%s",p->name);

printf("");

printf("%d",p->cputime);

printf("");

printf("%d",p->needtime);

printf("");

printf("%d",p->priority);

printf("");

switch(p->process){

caseready:

printf("ready\n");break;

caseexecute:

printf("execute\n");break;

caseblock:

printf("block\n");break;

casefinish:

printf("finish\n");break;

}

p=p->next;

}

}

intprocess_finish(pcb*q){

intb1=1;

while(b1&&q){

b1=b1&&q->needtime==0;

q=q->next;

}

returnb1;

}

voidcpuexe(pcb*q){

pcb*t=q;

inttp=0;

while(q){

if(q->process!

=finish){

q->process=ready;

if(q->needtime==0){

q->process=finish;

}

}

if(tppriority&&q->process!

=finish){

tp=q->priority;

t=q;

}

q=q->next;

}

if(t->needtime!

=0){

t->priority-=3;

t->needtime--;

t->process=execute;

t->cputime++;

}

}

voidpriority_cal(){

pcb*p;

p=get_process();

intcpu=0;

while(!

process_finish(p)){

cpu++;

printf("cputime:

%d\n",cpu);

cpuexe(p);

display(p);

sleep

(2);

}

free_process(p);

printf("Allprocesseshavefinished\n");

}

pcb*get_process_round(){

pcb*q;

pcb*p;

pcb*t;

inti=0;

printf("inputnameandtime\n");

while(i

q=(pcb*)malloc(sizeof(pcb));

scanf("%s",q->name);

scanf("%d",&q->needtime);

q->cputime=0;

q->count=0;

q->process=ready;

q->next=NULL;

if(i==0){

p=q;

t=q;

}

else{

t->next=q;

t=q;

}

i++;

}

returnp;

}

voidcpu_round(pcb*q){

if(q->needtime==1)

q->cputime++;

else

q->cputime+=2;

q->needtime-=2;

if(q->needtime<0){

q->needtime=0;

}

q->count++;

q->process=execute;

}

pcb*get_next(pcb*k,pcb*head){

pcb*t;

t=k;

do{

t=t->next;

}while(t&&t->process==finish);

if(t==NULL){

t=head;

while(t->next!

=k&&t->process==finish){

t=t->next;}}

returnt;}

voidset_state(pcb*p){

while(p){

if(p->needtime==0){

p->process=finish;

}

if(p->process==execute){

p->process=ready;}

p=p->next;}}

voiddisplay_round(pcb*p){

printf("namecputimeneedtimecountstate\n");

while(p){

printf("%s",p->name);

printf("");

printf("%d",p->cputime);

printf("");

printf("%d",p->needtime);

printf("");

printf("%d",p->count);

printf("");

switch(p->process){

caseready:

printf("ready\n");break;

caseexecute:

printf("execute\n");break;

caseblock:

printf("block\n");break;

casefinish:

printf("finish\n");break;}

p=p->next;}}

voidround_cal(){

pcb*p;

pcb*r;

p=get_process_round();

intcpu=0;

r=p;

while(!

process_finish(p)){

if(r->needtime==1)

cpu+=1;

else

cpu+=2;

cpu_round(r);

r=get_next(r,p);

printf("cputime:

%d\n",cpu);

display_round(p);

set_state(p);

sleep

(2);}

free_process(p);}

main(){

display_menu();

intk;

scanf("%d",&k);

switch(k){

case1:

priority_cal();break;

case2:

round_cal();break;

case3:

break;

default:

printf("YOUHAVENOTCHOOSEANYALGORITHM!

\n");

}

}

运行后结果如下:

[root@rhel5hbzy~]#gcc-ochulijichuliji.c

[root@rhel5hbzy~]#./m

CHOOSETHEALGORITHM:

1PRIORITY

2ROUNDROBIN

3EXIT

1

inputnameandtime

jing2

aaaa8

bbbb5

ffff4

ggg6

cputime:

1

namecputimeneedtimeprioritystate

jing-1145execute

aaaa*0842ready

bbbb20050finish

ffff20050finish

ggg0644ready

rtyucputime:

2

namecputimeneedtimeprioritystate

jing*2042execute

aaaa*0842ready

bbbb20050finish

ffff20050finish

ggg0644ready

5cputime:

3

namecputimeneedtimeprioritystate

jing*2042finish

aaaa*0842ready

bbbb20050finish

ffff20050finish

ggg1541execute

2cputime:

4

namecputimeneedtimeprioritystate

jing*2042finish

aaaa'1739execute

bbbb20050finish

ffff20050finish

ggg1541ready

cputime:

5

namecputimeneedtimeprioritystate

jing*2042finish

aaaa'1739ready

bbbb20050finish

ffff20050finish

ggg2438execute

cputime:

6

namecputimeneedtimeprioritystate

jing*2042finish

aaaa$2636execute

bbbb20050finish

ffff20050finish

ggg2438ready

cputime:

7

namecputimeneedtimeprioritystate

jing*2042finish

aaaa$2636ready

bbbb20050finish

ffff20050finish

ggg3335execute

cputime:

8

namecputimeneedtimeprioritystate

jing*2042finish

aaaa!

3533execute

bbbb20050finish

ffff20050finish

ggg3335ready

cputime:

9

namecputimeneedtimeprioritystate

jing*2042finish

aaaa!

3533ready

bbbb20050finish

ffff20050finish

ggg4232execute

cputime:

10

namecputimeneedtimeprioritystate

jing*2042finish

aaaa4430execute

bbbb20050finish

ffff20050finish

ggg4232ready

cputime:

11

namecputimeneedtimeprioritystate

jing*2042finish

aaaa4430ready

bbbb20050finish

ffff20050finish

ggg5129execute

cputime:

12

namecputimeneedtimeprioritystate

jing*2042finish

aaaa5327execute

bbbb20050finish

ffff20050finish

ggg5129ready

cputime:

13

namecputimeneedtimeprioritystate

jing*2042finish

aaaa5327ready

bbbb20050finish

ffff20050finish

ggg6026execute

cputime:

14

namecputimeneedtimeprioritystate

jing*2042finish

aaaa6224execute

bbbb20050finish

ffff20050finish

ggg6026finish

3

cputime:

15

namecputimeneedtimeprioritystate

jing*2042finish

aaaa7121execute

bbbb20050finish

ffff20050finish

ggg6026finish

cputime:

16

namecputimeneedtimeprioritystate

jing*2042finish

aaaa8018execute

bbbb20050finish

ffff20050finish

ggg6026finish

Allprocesseshavefinished

[root@rhel5hbzy~]#rtyu2

bash:

rtyu2:

commandnotfound

[root@rhel5hbzy~]#3

bash:

3:

commandnotfound

三、分析与体会

多道程序设计中,通常是若干个进程同时处于就绪状态,必须依照某种策略来决定哪个进程优先占有处理机。

因而引起进程调度。

本实验模拟单处理机情况下的处理机调度问题,使我加深了对进程调度的理解。

通过本次试验,使我加深了对进程调度的具体细节的理解,掌握LINUX系统结构、实现处理机和各种典型的算法,系统了解了操作系统的设计和实验思路,动手能力更强了。

 

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2