使用动态优先权的进程调度算法的模拟实验Word文件下载.docx

上传人:b****2 文档编号:3988095 上传时间:2023-05-02 格式:DOCX 页数:18 大小:167.27KB
下载 相关 举报
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第1页
第1页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第2页
第2页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第3页
第3页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第4页
第4页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第5页
第5页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第6页
第6页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第7页
第7页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第8页
第8页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第9页
第9页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第10页
第10页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第11页
第11页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第12页
第12页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第13页
第13页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第14页
第14页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第15页
第15页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第16页
第16页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第17页
第17页 / 共18页
使用动态优先权的进程调度算法的模拟实验Word文件下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

使用动态优先权的进程调度算法的模拟实验Word文件下载.docx

《使用动态优先权的进程调度算法的模拟实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《使用动态优先权的进程调度算法的模拟实验Word文件下载.docx(18页珍藏版)》请在冰点文库上搜索。

使用动态优先权的进程调度算法的模拟实验Word文件下载.docx

CPUTIME

ALLTIME

6

STARTBLOCK

-1

BLOCKTIME

STATE

READY

(5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下:

RUNNINGPROG:

i

READY_QUEUE:

->

id1->

id2

BLOCK_QUEUE:

id3->

id4

==================================

ID01234

PRIORITYP0P1P2P3P4

CPUTIMEC0C1C2C3C4

ALLTIMEA0A1A2A3A4

STARTBLOCKT0T1T2T3T4

BLOCKTIMEB0B1B2B3B4

STATES0S1S2S3S4

 

程序代码:

//A.4使用动态优先权的进程调度算法的模拟

//byYanQiwei

#include<

stdio.h>

#defineN5

voidinit();

voidprint();

intgetRunning();

voidsort();

intrun(inttime);

enumSTATE{Ready,Run,Block,RunOut};

structPROCESS{

intID;

intPriority;

intCputime;

intAlltime;

intStartblock;

intBlocktime;

enumSTATEState;

}Process[N];

intREADY[N];

intBLOCK[N];

intRUNOUT[N][2];

intmain(){

intTime=0;

init();

printf("

Time:

%d\n"

Time);

sort();

print();

while

(1){

Time++;

getchar();

printf("

if(run(Time))

break;

//sort();

}

//print(Time);

return0;

}

voidinit()

{

inti;

//printf("

Inputpropertiesof%dprocess(PRIORITY,ALLTIME,STARTBLOCK,BLOCKTIME):

\n"

//N);

for(i=0;

i<

N;

++i){

READY[i]=-1;

BLOCK[i]=-1;

RUNOUT[i][0]=-1;

RUNOUT[i][1]=-1;

Process[i].ID=i;

Process[i].Cputime=0;

Process[i].State=Ready;

/*printf("

Number%d:

"

i);

scanf("

%d,%d,%d,%d"

&

Process[i].Priority,&

Process[i].Alltime,

&

Process[i].Startblock,&

Process[i].Blocktime);

*/

Process[i].Startblock=-1;

Process[i].Blocktime=0;

Process[0].Priority=9;

Process[0].Alltime=3;

Process[0].Startblock=2;

Process[0].Blocktime=3;

Process[1].Priority=38;

Process[1].Alltime=3;

Process[2].Priority=30;

Process[2].Alltime=6;

Process[3].Priority=29;

Process[3].Alltime=3;

Process[4].Priority=0;

Process[4].Alltime=4;

voidprint()

if(getRunning()>

=0)

\tRUNNINGPROG:

%d\n"

getRunning());

\tREADY_QUEUE:

);

if(READY[i]>

printf("

%d"

Process[READY[i]].ID);

else{

}

\n\tBLOCK_QUEUE:

if(BLOCK[i]>

Process[BLOCK[i]].ID);

}

\n=====================================================\n"

ID\t"

\t%d"

Process[i].ID);

\nPRIORITY"

Process[i].Priority);

\nCPUTIME\t"

Process[i].Cputime);

\nALLTIME\t"

Process[i].Alltime);

\nSTARTBLOCK"

Process[i].Startblock);

\nBLOCKTIME"

Process[i].Blocktime);

\nSTATE\t"

switch(Process[i].State){

case0:

printf("

\tReady"

break;

case1:

\tRun"

if(Process[i].Alltime==0)

{

Process[i].State=RunOut;

}

elseProcess[i].State=Ready;

case2:

\tBlock"

case3:

\tRunOut"

\tRUNOUTLIST:

if(RUNOUT[i][0]>

%d(%d)"

Process[RUNOUT[i][0]].ID,RUNOUT[i][1]);

intgetRunning()

if(Process[i].State==Run)

returni;

if(Process[i].Startblock==0)

return-1;

voidsort()

inti,j,k;

if(Process[i].State==Ready||Process[i].State==Run){

//Process[i].State=Ready;

continue;

for(j=0;

j<

++j){

if(READY[j]<

0)

{

READY[j]=i;

break;

}

elseif(Process[i].Priority<

=Process[READY[j]].Priority)

{continue;

else{

for(k=N-1;

k>

j;

--k){

READY[k]=READY[k-1];

}

elseif(Process[i].State==Block){

if(BLOCK[j]<

BLOCK[j]=i;

elseif(Process[i].Blocktime>

=Process[BLOCK[j]].Blocktime)

BLOCK[k]=BLOCK[k-1];

intrun(inttime)

inti,runNum;

runNum=READY[0];

if(runNum<

0&

&

BLOCK[0]<

0){

EveryprocessisOVER!

return1;

else{

if(runNum>

=0){

Process[runNum].Priority-=3;

Process[runNum].Alltime-=1;

Process[runNum].Cputime+=1;

Process[runNum].State=Run;

for(i=0;

if(i!

=runNum){

if(Process[i].State==Ready){

Process[i].Priority+=1;

elseif(Process[i].State==Block){

Process[i].Blocktime-=1;

if(Process[i].Blocktime==0){

Process[i].State=Ready;

}

//print();

if(Process[runNum].Alltime==0)

//Process[runNum].State=RunOut;

for(i=0;

if(RUNOUT[i][0]<

RUNOUT[i][0]=runNum;

RUNOUT[i][1]=time;

break;

elseif(Process[runNum].Startblock>

Process[runNum].Startblock-=1;

if(Process[runNum].Startblock==0){

Process[runNum].State=Block;

//Process[runNum].Startblock-=1;

elseif(BLOCK[0]>

if(Process[i].State==Block){

Process[i].Startblock=-1;

Process[i].Blocktime-=1;

if(Process[i].Blocktime==0){

Process[i].State=Ready;

//print();

3、思考题

(1)在实际的调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作?

答:

1.记录系统中所有进程的执行情况

作为进程调度的准备,进程管理模块必须将系统中各个进程的执行特征记录在各个进程的PCB表中。

2.进行进程上下文交换

一个进程的上下文包括进程的状态,有关变量和数据结构的值。

机器寄存器的值和PCB以及有关程序,数据等。

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

当前位置:首页 > 法律文书 > 判决书

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

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