当前位置:文档之家› 操作系统进程调度优先级算法C语言模拟

操作系统进程调度优先级算法C语言模拟

#include
#include
#include
typedef struct LNode
{
char name[3];
int pri;
int time;
int atime;
char state;
struct LNode *next;
}a;

void InitList(a *&L)
{
L=(a *)malloc(sizeof(a));
L->next=NULL;
}
int build(a *&L)
{
a *p=L;
a *q;
a *s;
int i=0;
int b=0;
int c=0;
char n[3];
printf("请输入进程名:\n");
for(i=0;i<3;i++)
scanf("%c",&n[i]);
printf("请输入进程优先级:\n");
scanf("%d",&b);
printf("请输入进程运行时间:\n");
scanf("%d",&c);
printf("\n");
s=(a *)malloc(sizeof(a));
for(i=0;i<3;i++)
s->name[i]=n[i];
s->atime=0;
s->pri=b;
s->state='R';
s->time=c;
printf("------------------------------------------------------------\n");
printf("新进程名\t优先级\t剩余时间\t已运行时间\t状态\t");
for(i=0;i<3;i++)
printf("%c",s->name[i]);
printf("\t");
printf("\t%d\t%d\t\t%d\t\t%c\n",s->pri,s->time,0,s->state);
printf("------------------------------------------------------------\n");
q=p->next;
if(q==NULL)
{s->next=p->next;
p->next=s;
}
else
{ loop: if(s->pripri)
{ if(q->next!=NULL)
{ p=q;
q=q->next;
goto loop;
}
else
{ s->next=q->next;
q->next=s;
}
}
else
{ s->next=q;
p->next=s;
}
}
}
void operate(a *&L,a *&M)
{
int i=0;
int j=0;
a *s=L->next;
a *p=L->next;
a *n;
a *v;
a *q=M;
if(L->next==NULL)
{ printf("无可运行进程\n");
printf("\n");
}
else
{
s->pri--;
s->time--;
s->atime++;
if(s->time==0)
{
v=(a *)malloc(sizeof(a));
v->state='E';
for(i=0;i<3;i++)
v->name[i]=s->name[i];
v->atime=s->atime;
L->next=s->next;
v->next=q->next;
q->next=v;
free(s);
}
else if(p->next!=NULL)
{ if(s->prinext->pri)
{ v=(a *)malloc(sizeof(a));
for(i=0;i<3;i++)
v->name[i]=s->name[i];
v->atime=s->atime;
v->pri=s->pri;
v->time=s->time;
v->state=s->state;
L->next=s->next;
free(s);
n=p->next;
loop: if(v->pripri)
{ if(n->next!=NULL)

{ p=n;
n=n->next;
goto loop;
}
else
{ v->next=n;
p->next=v;
}
}
else
{ v->next=n;
p->next=v;
}
}
}
}
}

void DispList(a *L)
{
int i=0;
a *p=L->next;
if(p!=NULL)
{
printf("------------------------------------------------------------\n");
printf("进程名称\t进程优先级\t剩余运行时间\t已运行时间\t状态\n");
while(p!=NULL)
{
for(i=0;i<3;i++)
printf("%c",p->name[i]);
printf("\t\t%d\t",p->pri);
printf("\t%d\t",p->time);
printf("\t%d\t\t",p->atime);
printf("%c",p->state);
printf("\n");
p=p->next;
}
printf("------------------------------------------------------------\n");
}
else
printf("无待运行进程\n\n");
}
void Display(a *L)
{ int i=0;
a *p=L->next;
if(p!=NULL)
{
printf("已完成进程:\n");
printf("------------------------------------------------------------\n");
printf("进程名称\t已运行时间\t状态\n");
while(p!=NULL)
{

for(i=0;i<3;i++)
printf("%c",p->name[i]);
printf("\t\t %d\t\t",p->atime);
printf("%c",p->state);
printf("\n");
p=p->next;
}
printf("------------------------------------------------------------\n");
}
}

int main()
{
int m=1;
a *L,*M;
InitList(L);
InitList(M);
while(m!=0)
{
printf("请选择操作的种类:\n1 创建进程 2 显示已有进程 3 运行进程 4 退出\n");
scanf("%d",&m);
printf("\n");
if(m==1)
{
build(L);
}
else if(m==2)
{

DispList(L);
Display(M);
}
else if(m==3)
{ operate(L,M);
}
else
m=0;
}
system("pause");
}

相关主题
文本预览
相关文档 最新文档