使用动态优先权的进程调度算法的模拟实验Word下载.docx
- 文档编号:20969907
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:16
- 大小:152.10KB
使用动态优先权的进程调度算法的模拟实验Word下载.docx
《使用动态优先权的进程调度算法的模拟实验Word下载.docx》由会员分享,可在线阅读,更多相关《使用动态优先权的进程调度算法的模拟实验Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
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以及有关程序,数据等。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 动态 优先权 进程 调度 算法 模拟 实验