操作系统进程调度实验.docx
- 文档编号:4923236
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:16
- 大小:136.09KB
操作系统进程调度实验.docx
《操作系统进程调度实验.docx》由会员分享,可在线阅读,更多相关《操作系统进程调度实验.docx(16页珍藏版)》请在冰豆网上搜索。
操作系统进程调度实验
《操作系统B》课程综合性实验报告
开课实验室:
计算机基础实验室2010年6月26日
实验题目
进程调度算法模拟程序设计
一、实验目的
通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。
二、设备与环境
1.硬件设备:
PC机一台
2.软件环境:
安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C\C++\Java等编程语言环境。
三、实验内容
(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。
(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:
✧进程标识数ID。
✧进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。
✧进程已占用CPU时间CPUTIME。
✧进程还需占用的CPU时间ALLTIME。
当进程运行完毕时,ALLTIME变为0。
✧进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。
✧进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。
✧进程状态STATE。
✧队列指针NEXT,用来将PCB排成队列。
(3)优先数改变的原则:
✧进程在就绪队列中呆一个时间片,优先数增加1。
✧进程每运行一个时间片,优先数减3。
(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。
(5)分析程序运行的结果,谈一下自己的认识。
四、实验结果及分析
1.实验步骤
(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。
(2)分析程序运行的结果,谈一下自己的认识。
2.实验代码
#include
#include
inti;//循环值
intj;//还在阻塞或就绪队列中的进程数
ints;
intm;//最大priority的id
structpcb
{
intid;
intp;//priority优先数
intcputime;
intalltime;
intstartblock;
intblocktime;
intstate;//0表示ready1表示end-1表示block
};
structpcbpro[5]={
{0,9,0,3,2,3,0},
{1,38,0,3,-1,0,0},
{2,30,0,6,-1,0,0},
{3,29,0,3,-1,0,0},
{4,0,0,4,-1,0,0}
};
intchangestate0()
{if(pro[0].startblock==0)
{
pro[0].state=-1;
pro[0].startblock--;
return1;
}
if(pro[0].blocktime==0)
{
pro[0].state=0;
return1;
}
if(pro[0].state==0&&pro[0].startblock!
=-1)
{pro[0].startblock--;return1;}
if(pro[0].state==-1&&pro[0].blocktime!
=0)
{pro[0].blocktime--;return1;}
}
intstate0()
{
changestate0();
s=pro[0].p;
if(pro[0].state==-1)
s=-100;
returns;
}
intmaxp()//求出最大priority
{state0();
intmax=s;
m=pro[0].id;
for(i=0;i { if(pro[i+1].p>pro[i].p) { max=pro[i+1].p; m=pro[i+1].id; } } returnm; } voidchange() { maxp(); intx;//得到m现在的数组编号 for(i=0;i { pro[i].p++; } for(i=0;i { if(pro[i].id==m) x=i; } pro[x].cputime++; pro[x].p=pro[x].p-4; pro[x].alltime--; if(pro[x].alltime==0) { pro[x].state=1; } } voiddisplay() { change(); cout<<"RUNNINGPROG: "< cout<<"===============================================================\n"; cout<<"ID"; for(i=0;i { cout.width(10); cout< } cout< for(i=0;i { cout.width(10); cout< } cout< for(i=0;i { cout.width(10); cout< } cout< for(i=0;i { cout.width(10); cout< } cout< for(i=0;i { cout.width(10); cout< } cout< for(i=0;i { cout.width(10); cout< } cout< for(i=0;i { cout.width(10); cout< } cout< } voidmain() { j=5;//刚开始有5个进程 while(j! =0) { for(i=0;i { if(pro[i].state==1){ for(;i {pro[i]=pro[i+1];} j=j-1;} } display(); getchar(); } } 3.实验结果 在MicrosoftVisualC++6.0中运行以上程序,得结果如下: RUNNINGPROG: 1 =============================================================== ID01234 PRIORITY103531301 CPUTIME01000 ALLTIME32634 STARTBLOCK1-1-1-1-1 BLOCKTIME30000 STATE00000 RUNNINGPROG: 1 =============================================================== ID01234 PRIORITY113232312 CPUTIME02000 ALLTIME31634 STARTBLOCK0-1-1-1-1 BLOCKTIME30000 STATE00000 RUNNINGPROG: 1 =============================================================== ID01234 PRIORITY122933323 CPUTIME03000 ALLTIME30634 STARTBLOCK-1-1-1-1-1 BLOCKTIME30000 STATE-11000 RUNNINGPROG: 2 =============================================================== ID0234 PRIORITY1330334 CPUTIME0100 ALLTIME3534 STARTBLOCK-1-1-1-1 BLOCKTIME2000 STATE-1000 RUNNINGPROG: 3 =============================================================== ID0234 PRIORITY1431305 CPUTIME0110 ALLTIME3524 STARTBLOCK-1-1-1-1 BLOCKTIME1000 STATE-1000 RUNNINGPROG: 2 =============================================================== ID0234 PRIORITY1528316 CPUTIME0210 ALLTIME3424 STARTBLOCK-1-1-1-1 BLOCKTIME0000 STATE-1000 RUNNINGPROG: 3 =============================================================== ID0234 PRIORITY1629287 CPUTIME0220 ALLTIME3414 STARTBLOCK-1-1-1-1 BLOCKTIME0000 STATE0000 RUNNINGPROG: 2 =============================================================== ID0234 PRIORITY1726298 CPUTIME0320 ALLTIME3314 STARTBLOCK-1-1-1-1 BLOCKTIME0000 STATE0000 RUNNINGPROG: 3 =============================================================== ID0234 PRIORITY1827269 CPUTIME0330 ALLTIME3304 STARTBLOCK-1-1-1-1 BLOCKTIME0000 STATE0010 RUNNINGPROG: 2 =============================================================== ID024 PRIORITY192410 CPUTIME040 ALLTIME324 STARTBLOCK-1-1-1 BLOCKTIME000 STATE000 RUNNINGPROG: 2 =============================================================== ID024 PRIORITY202111 CPUTIME050 ALLTIME314 STARTBLOCK-1-1-1 BLOCKTIME000 STATE000 RUNNINGPROG: 2 =============================================================== ID024 PRIORITY211812 CPUTIME060 ALLTIME304 STARTBLOCK-1-1-1 BLOCKTIME000 STATE010 RUNNINGPROG: 0 =============================================================== ID04 PRIORITY1813 CPUTIME10 ALLTIME24 STARTBLOCK-1-1 BLOCKTIME00 STATE00 RUNNINGPROG: 0 =============================================================== ID04 PRIORITY1514 CPUTIME20 ALLTIME14 STARTBLOCK-1-1 BLOCKTIME00 STATE00 RUNNINGPROG: 0 =============================================================== ID04 PRIORITY1215 CPUTIME30 ALLTIME04 STARTBLOCK-1-1 BLOCKTIME00 STATE10 RUNNINGPROG: 4 =============================================================== ID4 PRIORITY12 CPUTIME1 ALLTIME3 STARTBLOCK-1 BLOCKTIME0 STATE0 RUNNINGPROG: 4 =============================================================== ID4 PRIORITY9 CPUTIME2 ALLTIME2 STARTBLOCK-1 BLOCKTIME0 STATE0 RUNNINGPROG: 4 =============================================================== ID4 PRIORITY6 CPUTIME3 ALLTIME1 STARTBLOCK-1 BLOCKTIME0 STATE0 RUNNINGPROG: 4 =============================================================== ID4 PRIORITY3 CPUTIME4 ALLTIME0 STARTBLOCK-1 BLOCKTIME0 STATE1 4.实验结果分析 动态优先权是指,在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。 在此次实验中具体来说是指: 进程在就绪队列中呆一个时间片,优先数增加1;进程每运行一个时间片,优先数减3。 运行程序后,进程1的优先数最大,即优先权最高。 因此首先调度进程1,RUNNINGPROG: 1 图1优先调度进程1 此后进程1完成,状态值为1表示END,再比较0,2,3,4进程的优先数,发现进程2的优先数最大,运行进程2,运行1个时间片后再比较,进程3优先数最高,则优先运行进程3。 以此类推。 图2最终5个进程全部完成 综上所述,程序运行过程中逐步实现各进程的调度,最终如结果所示,0-4共5个进程都已完成,即STATE值均为1。 5.实验心得 通过本次操作系统综合实验我更好地掌握了操作系统的基本概念、基本原理、及基本功能。 特别是进程的概念、进程控制块的概念以及进程的三种基本状态等概念。 从而培养和提高了编制清晰、合理、可读性好的系统程序的能力,进一步加深了对操作系统课程的理解,切实锻炼了我的实践技能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 进程 调度 实验