操作系统实验源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "iostream.h"
typedefstructpcb
{
char name[10]; //进程名
char state; //状态w(就绪)r(运行)f(结束)
int id; //id号
int super; //优先级
intntime; //需运行的时间
intrtime; //已运行的时间
structpcb *next;
}*pcb1;
pcb1s,w;
voidinit(pcb1 &r)
{
r=NULL;
}
void print()
{
pcb1 p;
cout<<"您现在查看的是就绪队列的信息:" <<endl;
cout<<"进程号"<<"进程名"<<"优先级"<<"状态"<<"已运行时间"<<"需运行时间"<<endl;
for(p=s;p!=NULL;p=p->next)
{
cout<<p->id<<" "<<p->name<<" "<<p->super<<" "<<p->state<<" "<<p->rtime<<" "<<p->ntime<<endl; }
}
void print1()
{pcb1 p;
cout<<"您现在查看的是阻塞队列的信息";
cout<<"进程号"<<"进程名"<<"优先级"<<"状态(w,r,f)"<<"已运行时间"<<"需运行时间"<<endl;
for(p=w;p!=NULL;p=p->next)
{
cout<<p->id<<" "<<p->name<<" "<<p->super<<" "<<p->state<<" "<<p->rtime<<" "<<p->ntime<<endl; }
}
int empty(pcb1 &r)
{
if(r==NULL)
return 0;
else
return 1;
}
int check()
{
pcb1 p;
p=s;
if(p->rtime==p->ntime)
{
p->state='F';
cout<<"进程"<<p->id<<" 已经结束"<<endl;
return 0;
}
else
return 1;
}
void sort(pcb1 &r,pcb1 p) {
pcb1 p1,p2;
int in=0;
if(r==NULL)
{
r=p;
}
else
{
if(p->super>=r->super) {
p->next=r;
r=p;
}
else
{
p1=r;
p2=r->next;
if(p2==NULL)
{
r->next=p;
}
else
{
while(in==0&&p2!=NULL) {
if(p->super>=p2->super) {
p->next=p2;
p1->next=p;
in=1;
}
else
{
p1=p1->next;
p2=p2->next;
}
}
}
if(in==0)
p1->next=p;
}
}
void block()
{
if(empty(s))
{
if(s->next==NULL)
{
sort(w,s);
s=s->next;
}
else
{
pcb1 p1;
p1=s;
s=s->next;
p1->next=NULL;
sort(w,p1);
}
}
else
{
cout<<"现在就绪队列已经为空,再没有进程需要阻塞!"<<endl; } }
void wake()
{
if(empty(w))
{
pcb1 p1;
p1=w;
w=w->next;
p1->next=NULL;
sort(s,p1);
}
else
{
cout<<"阻塞队列已经为空,没有进程再需要唤醒!"<<endl; }
}
voidruning()
{
if(empty(s))
{
pcb1 p;
p=s;
if(check())
{
s=s->next;
p->rtime++;
p->super--;
p->next=NULL;
sort(s,p);
}
else
{
s=s->next;
}
}
else
{
cout<<"就绪队列已经为空!"<<endl; }
}
void input()
{
pcb1 p2;
p2=new pcb;
cout<<"请输入进程号、进程名、进程优先级、需要运行时间"<<endl; cin>>p2->id>>p2->name>>p2->super>>p2->ntime;
p2->rtime=0;
p2->state='W';
p2->rtime=0;
p2->next=NULL;
sort(s,p2);
}
void main()
{
charch;
init(s);
init(w);
cout<<"**************进程调度模拟程序开始**************"<<endl; cout<<"*** w->唤醒进程***"<<endl; cout<<"*** r->运行进程***"<<endl; cout<<"*** z->阻塞进程***"<<endl; cout<<"*** q->退出程序***"<<endl; cout<<"*** c->创建进程***"<<endl; cout<<"*** s->查看就绪进程***"<<endl;
cout<<"*** l->查看阻塞队列***"<<endl; cout<<"************************************************"<<endl; while(ch!='q')
{
cout<<"请选择功能(w,r,z,q,c,s,l):"<<endl;
cin>>ch;
switch(ch)
{
case 'c':input(); break;
case 'r':runing(); break;
case 's':print(); break;
case 'w':wake(); break;
case 'l':print1(); break;
case 'z':block(); break;
}
}
}。