按优先数调度算法实现处理器调度的模拟设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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< --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; } 五、运行结果