进程调度课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;