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

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

实验1 处理器调度

一、实验内容

选择一个调度算法,实现处理器调度。

二、实验目的

在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。

三、实验题目

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

四、源程序

#include

#include

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<next->name<

--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<<"调度序列:"<

while(root->state!=0)

{

OutPut();

Sort();

}

int main() {

Solve();

getchar();

getchar();

return 0;

}

五、运行结果

相关文档
最新文档