进程调度课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西华大学计算机系上机实践报告

课程名称:操作系统原理年级:10级上机实践成绩:

指导教师:姓名:

上机实践名称:进程调度学号:上机实践日期:2012.04.30上机实践编号:1组号:上机实践时间:4 学时

一. 实验目的

1、掌握进程的各种基本状态和状态之间的转换;

2、掌握进程调度的过程;

3、用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。

二. 实验内容与设计思想

上机实践内容:

编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。

“最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。

静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。

动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等。

设计思想:(以下内容共参考,同学们可增加功能,相应的数据结构和流程图也要变哈!!!建议增加I/O时间)

PCB的信息可以存放在结构或类中,如定义

struct PCB{ /* 定义进程控制块PCB */

char name[10];

char state;

int super;

int ntime;

int rtime;

struct pcb* link;

};

2、数据结构

采用链式列队。

图1 最高优先数进程调度模拟程序流程图

三. 使用环境

windows XP ,VC++6.0(语言不限,自定)

···结束

四. 核心代码及调试过程

#include

#include

#include

using namespace std;

struct PCB{

char name; //进程名字

char state; //state值为false时表示就绪状态,值为true表示运行状态

int super; //优先权

int ntime; //运行时间

int rtime; //等待时间

};

void createpcb(PCB p[],int m);//创建进程

void display(PCB p[],int m);//显示进程

void Arraypcb(PCB p[],int m);//进程排序

void calculatesuper(PCB p[],int m);//计算优先权

int main(){

int n;

int cpu=0;

bool b=true;

cout<<"进程的个数:";

cin>>n;

PCB *pcb=new PCB[n];

createpcb(pcb,n);

cout<<"创建的进程为:"<

display(pcb,n);

Arraypcb(pcb,n);

cout<<"排序后的进程为:"<

display(pcb,n);

while(b){

if(n==0){

b=false;

cout<<"执行完毕!"<

}

else{

pcb[0].state='Y';

pcb[0].rtime=0;

pcb[0].ntime=pcb[0].ntime-1;

cpu++;

cout<<"cpu="<

display(pcb,n);

pcb[0].state='N';

pcb[0].super=pcb[0].super-1;

for(int i=1;i

pcb[i].rtime++;

}

if(pcb[0].ntime==0){

for(int i=0;i

pcb[i].name=pcb[i+1].name;

pcb[i].state=pcb[i+1].state;

pcb[i].super=pcb[i+1].super;

pcb[i].ntime=pcb[i+1].ntime;

pcb[i].rtime=pcb[i+1].rtime;

}

n--;

}

calculatesuper(pcb ,n);

Arraypcb(pcb,n);

cout<<"cpu="<

display(pcb,n);

}

}

return 0;

}

void createpcb(PCB p[],int m){

for(int i=0;i

cout<<"进程名:";

cin>>p[i].name;

p[i].state='N';

cout<<"优先度:";

cin>>p[i].super;

cout<<"运行时间:";

cin>>p[i].ntime;

相关文档
最新文档