当前位置:文档之家› 按优先数调度算法实现处理器调度的模拟设计与实现

按优先数调度算法实现处理器调度的模拟设计与实现

实验1 处理器调度
一、实验内容
选择一个调度算法,实现处理器调度。

二、实验目的
在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。

当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。

本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。

三、实验题目
按优先数调度算法实现处理器调度的模拟设计与实现。

四、源程序
#include<iostream>
#include<string>
using namespace std; //-----------------------
struct _proc {
char name[32];
struct _proc *next;
int run_time;
int priority;
int state;//就绪为
};
_proc *root;
//向就绪队列中插入进程,按照降序
void Insert(_proc* pr) {
_proc *q=root;//方便插入,记录插入位置的前面的进程
_proc *p=root->next;
if(root->state!=0) {
while(p!=NULL)//找插入位置
{
if(p->priority>pr->priority)//优先级小于时,继续遍历
{
q=p;
p=p->next;
}
else//找到插入
{
break;
}
}
}
pr->next=p;//插入
q->next=pr;
++root->state;//进程个数加一
}
//创建进程
_proc Creat(char name[],int priority,int run_time)
{
_proc pr;
strcpy(,name);
pr.priority=priority;
pr.run_time=run_time;
pr.state=0;
pr.next=NULL;
return pr;
}
//删除就绪队列中对首进程
_proc* Delete() {
_proc* pr=root->next;
root->next=root->next->next;
--root->state;
return pr;
}
//对就绪队列排序,按照降序
void Sort() {
if(root->next->run_time==0)//要执行时间为时,从就绪队列中删除该进程{
Delete();
root->next->state=1;
else//不为时,先删除,再根据变化后的优先级,插入到相应位置{
_proc *pr=Delete();
Insert(pr);
}
}
//输出执行进程号
void OutPut()
{
cout<<root->next->name<<endl;//输出,模拟进程执行
--root->next->priority;//修改进程的优先级和运行时间,状态
--root->next->run_time; }
void Solve() {
//根结点
root=new _proc;
root->state=0;//state记录就绪队列中的进程个数
root->next=NULL;//指向第一个进程
//创建几个进程,并插入就绪队列
_proc pr1=Creat("p1",2,1);
Insert(&pr1);
_proc pr2=Creat("p2",3,5);
Insert(&pr2);
_proc pr3=Creat("p3",1,3);
Insert(&pr3);
_proc pr4=Creat("p4",2,4);
Insert(&pr4);
_proc pr5=Creat("p5",4,2);
Insert(&pr5);
cout<<"调度序列:"<<endl;
while(root->state!=0)
{
OutPut();
Sort();
}
int main() {
Solve();
getchar();
getchar();
return 0;
}
五、运行结果。

相关主题