实验一进程调度实验报告文档格式.docx

上传人:b****7 文档编号:22400761 上传时间:2023-02-03 格式:DOCX 页数:18 大小:83.84KB
下载 相关 举报
实验一进程调度实验报告文档格式.docx_第1页
第1页 / 共18页
实验一进程调度实验报告文档格式.docx_第2页
第2页 / 共18页
实验一进程调度实验报告文档格式.docx_第3页
第3页 / 共18页
实验一进程调度实验报告文档格式.docx_第4页
第4页 / 共18页
实验一进程调度实验报告文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

实验一进程调度实验报告文档格式.docx

《实验一进程调度实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《实验一进程调度实验报告文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

实验一进程调度实验报告文档格式.docx

2

****当前正在运行的进程是

!

aa

$七at七巳:

R

supei*:

ndtine!

6

G

rimtine

****当前就绪队列状态为:

super

ndtinc

runtine

CG

10

1

state

ndtine

runtime

ibb

u

5

当进程CC了一个时间片之后而它已占用CPU时间已达到所需要的运行时间,则将它的优先级减1之后,再将三个进程按优先级的大小排列,从中选择优先级大的进程进入运行状态,则该次进入运行态的是进程aa

按照这种方式一直运行下去:

Su

=-一—■

S1

5:

1灯

-键继续…

----

1Theexecutenumber;

3

I

当前正在运行的进程是SC

Iqniame

ndtime

F-untlute

licc:

:

110!

13*当刖就洁队列状态为

(jnane

鲁七atu

•dtin)«

runtirt^

hh

Q

quame

niltine

runtime

iaa

i6il

按任L

扌踰并

首输入法

半丁_

直到:

Iheexecutenunbep:

i?

uintIme

14

****当刖正在运厅的进程是:

hbqnanestatesitpei*ndLtj_mehb亦!

-3IS

当进程bb的CPU占用时间等于它需要的执行时间时,进程bb度完成则这时进程调度中还有两个进程:

进程aa进程cc

按任一键继缄

Theexecutenumber:

17

i当前就绪队列状态为:

进程Caal已完成.

当调度进程中只剩下进程aa程cc这时根据进程优先级的大小,进程aa入运行态。

当进程aa调度时,进程调度程序中直剩下进程cc这时进程cc进入运行态,而当前就绪队列将为空。

TheexecutenuLinbei"

二£

****当前正在运行的进程是託匚

qnanestatesupepndtimeruntine

ce!

H!

-G!

10!

9

****当前就绪队列状态为=

进程l«

J已完咸.

按任一键继续……

当进程i的CPU占用时间等于所需要的执行时间时,进程cc调度完成,则这时进程调度中已经没有需要调度的进程了,则整个进程调度完成。

2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。

轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。

简单轮转法的基本思想是:

所有就绪进程按FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。

如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。

直至所有的进程运行完毕。

将老师给的源程序修改成简单的时间片轮转法

流程图如下:

进程完成,撤消该进程

 

时间片轮转法

#include<

stdio.h>

#include<

stdlib.h>

conio.h>

#definegetpch(type)(type*)malloc(sizeof(type))

#defineNULL0

#defineTIME2〃时间片长度

/////////////

typedefstructpcb{//////进程管理块

charname[10];

///////进程名字

charstate;

///////进程状态

intqueue;

//////进程所在的队列

intntime;

/////进程需要运行的时间

intrtime;

//////进程已经运行的时间

intetime;

////进程在本队列可运行的时间片

structpcb*link;

}PCB;

/*就绪队

PCB*ready=NULL,*pinsert=NULL,*pfend=NULL,*p=NULL;

列,进程插入位置的变量*/

intgeti()//使用户仅能输入整数

{

charch;

inti=0;

fflush(stdin);

ch=getchar();

while(ch=='

\n'

){

printf("

\tf输入不能为空••请重新输入\n"

);

}

while(ch!

='

if(ch>

9||ch<

'

0'

\t输入有误!

输入只能为正整数,请重新输入...\n"

i=0;

}else{

i=

i*10+(ch-'

ch

=getchar();

returni;

voidfindpos()/////〃更新状态量

PCB*ps=pfend;

if(!

ps||!

ps->

link||(ps->

link->

queue-ps->

queue)>

1)

pinsert=ps;

else{

while(ps->

link&

&

ps->

link->

queue!

=(pfend->

queue+2))ps=ps->

link;

插入进程

voidinsert()//////

ready){

ready=p;

pfend=p;

pinsert=p;

第一队列存在

}elseif(ready->

queue==1)//////

{p->

link=pfend->

pfend->

link=p;

pfend=p;

findpos();

Else

p->

link=ready;

voidinput()/*建立进程控制块函数*/

inti,num;

printf("

\n请输入进程的个数:

"

num=geti();

for(i=0;

i<

num;

i++)

\n进程号No.%d:

\n"

i+1);

p=getpch(PCB);

\n输入进程名:

scanf("

%s"

p->

name);

\n输入进程运行时间:

p->

ntime=geti();

rtime=O;

state='

w'

;

queue=1;

etime=TIME;

link=NULL;

insert();

/*调用insert函数*/

voiddisp(PCB*pr)/*建立进程现实函数,用于显示当前进程*/

\nname\tstate\tqueue\tntime\trtime\t在队列可停留时间\t\n"

|%s\t"

pr->

name);

|%c\t"

state);

|%d\t"

queue);

ntime);

rtime);

etime);

voidcheck()/*建立进程查看函数*/

PCB*pr;

\n****当前正在运行的进程是:

%s"

ready->

/*显示当前运行的进

程*/

disp(ready);

pr=ready->

\n****当前就绪队列状态为:

/*显示就绪队列状态*/

while(pr!

=NULL)

disp(pr);

pr=pr->

voidsort()〃调整进程队列

ready->

link||ready->

queue<

ready->

queue)return;

p=ready->

ready->

link=pinsert->

pinsert->

pinsert=ready;

if(ready&

ready->

queue==pinsert->

queue){findpos();

voidaddnew()〃添加新的进程

if(ready->

=1){

(ready->

queue)++;

etime*=2;

state='

sort();

/*调用sort函数*/input();

input();

voiddestroy。

/*建立进程撤销函数(进程运行结束,撤销进程)*/

\n进程[%s]已完成.\n"

name);

p=ready;

ready=ready->

free(p);

queue)

voidrunning()/*建立进程就绪函数(进程运行时间到,置就绪状态)*/

rtime)++;

etime--;

if(ready->

rtime==ready->

ntime){

destroy();

return;

etime==0){

inttime=2;

for(inti=2;

i!

=ready->

queue;

++i)time*=2;

etime=time;

/*调用sort函数*/

voidmain()

while(ready!

=NULL)

\nTheexecutename:

%s\n"

ready->

state='

R'

check();

running();

\n按i键添加新进程....按其他任意键继续运行..."

if(ch=='

i'

||ch==T)

addnew();

\n\n进程已经完成\n"

getchar();

运行结果如下:

根据题意输入五个进程

按任意键继续

'

C:

\Users\pc\Desktop\Debug\jj-exe"

科键添加新进穆-…按其他任意键继续运行…山

Theexecultename=aa

****当前正在运行的进程是=aa

nane!

aa

state:

queue

11

ntine\12

rtime:

在队列可停留时间

員ttXJt

当前就绪队列状态为:

name

ntine

rti_me

B

\2

naine

ntine

rtine

icc

w

IS

12

nam&

ntime

rtime

dd

Ujp

(7

nane

See

ur

孩舞据加两进程-…按其他任意键继续运行---

serApc\Desktop\Det>

ug\jj.exe'

按i键添加新进程.・.■按其他任意键继续运行.・/

Tlieexecutename

CC

****当前正在运行的进私是

cc

ntin?

rtimQ

cc;

i5

ntlne

rtine

dd:

7

0i

nanestate

ncime

lee

names^^ite

nt±

me

i*time

嗣!

112

namestate

Queue

ntime

ptine

柱队列可停留时间

hh!

110

按i键電Q新囲呈.

丄山焉J丄A.Th-+ridt胡丄、1

…按其他任意犍继续运行.

1?

=■q

按i键添加新进程……按其他任意键继续运行.•丄

Theexecutenane:

当前正在运行的进程<=dd

sitatequeuentine

ftime

在队列可停留时间!

IR!

i

19

“当前就绪队列状态为:

statequeue

ncifne

i*-time

ee

lu:

sCatequeue

idi€L

lw;

vtime

bb

u;

il0

st^itequeue

iCC

ut2

杭久键添加新进程……按其他任意键继续运行.

Xll]XA-1~^T*1■?

9■

€;

\Users\pc\Desktop\Debug\jj.exe"

\Users\pcADesktQp\Debug\jj.exe*

-□

按i键添加新谜程•

…按其他任意键继续运行.

■…p

Theexecutenane

1****当冃证在运仃的进程是心■lamkestatequeuent:

£

liee!

R11!

tlute:

卜**当前就绪队列狀态为:

neiFieitate

aa!

w

i*tine

在队列可停留时间\2

name:

Ibb;

ine

lie

r*tine;

namest*te

Sip

ntineIS

ine

idd!

queue:

n七ine!

tine!

2■坪他任意键继知

■■■

四、实验问题及原因

(1)本次试验,思路设计不难在这个多级反馈的实验中,我采取了用一条实际上的链表队列来模拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还有一个标志位Fend用来表明新插入的队列的位置。

(2)在建立优先数就绪队列时主要运用,链表插入模型。

但是由于本题是从建立、到完成一个就绪对列,所以必须分多种情况讨论。

五、实验体会和收获

(1)本次试验后对优先数调度算法和时间片轮转调度算法实现的过程,有了很清楚的

认识、理解。

设计计数器来对进程执行状态的时间分析,使得进程调度这一抽象模型得

到具体化。

之后,便是对进程的插入(执行完,插入到完成队列,否则插入到就绪)和

再次调度(当改进程再次满足条件时,从就绪队列调度到执行队列)重复过程。

(2)通过设计PCB结构,模拟进程调度,加深了对进程的理解。

(3)提高了C语言编程动手能力

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

当前位置:首页 > 工程科技 > 冶金矿山地质

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

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