📄 进程调度.cpp
字号:
#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>
#include <string.h>
const int MAXPCB=10;
struct pcb{
char name[20];
int status;
int time;
int AX,BX,CX,DX;
int PC;
int psw;
int next;
};
struct pready{
int head;
int tail;
};
int i,run,pfree=0,slot,flag=1,pcb_number,count=1;
pcb pcbarea[MAXPCB];
pready ready;
void pcb_create(char *name, int time)
{
if(pfree==0)
{
ready.head=-1;
ready.tail=-1;
}
if(pfree==-1) printf("Error!");
i=pfree;
pfree=pcbarea[pfree].next;
strcpy(pcbarea[i].name,name);
pcbarea[i].status=0;
pcbarea[i].time=time;
if(ready.head==-1||ready.tail==-1)
{
ready.head=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
else
{
pcbarea[ready.tail].next=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
}//进程创建原语
void process_switch()
{
flag=0;
if(ready.head!=-1)
{
i=ready.head;
ready.head=pcbarea[ready.head].next;
if(ready.head==-1) ready.tail=-1;
run=i;
}
pcbarea[run].status=1;
printf("\n第%d个时间片--进程%s运行中:\n",count,pcbarea[run].name);
for(i=int(float(pcbarea[run].AX)/pcbarea[run].time*100)+1;
i<=int(float(pcbarea[run].AX+slot)/pcbarea[run].time*100);
i++)
{
int m=0;
while(m<30000000) m++;
printf("%d%%完成",i);
printf("\b\b\b\b\b\b\b\b");
}
printf("%d%%完成\n",int(float(pcbarea[run].AX+slot)/pcbarea[run].time*100));
pcbarea[run].AX=pcbarea[run].AX+slot;
if(pcbarea[run].AX/pcbarea[run].time==1) pcbarea[run].psw=0;
if(pcbarea[run].psw)
{
pcbarea[run].status=0;
if(ready.tail!=-1)
{
pcbarea[ready.tail].next=run;
ready.tail=run;
pcbarea[ready.tail].next=-1;
}
}
for(i=0;i<pcb_number;i++)
if(pcbarea[i].psw==1) flag=1;
count++;
}//进程调度原语
void main()
{
for(i=0;i<MAXPCB-1;i++)
pcbarea[i].next=i+1;
pcbarea[MAXPCB-1].next=-1;//进程组织
for(i=0;i<MAXPCB;i++)
{
pcbarea[i].psw=1;
pcbarea[i].AX=0;
}
printf("\t\t________________________________\n");
printf("\t\t* *\n");
printf("\t\t* 进程调度模拟 *\n");
printf("\t\t* copyright by HanYue *\n");
printf("\t\t* 2006 *\n");
printf("\t\t*______________________________*\n\n");
int j;
int time;
char name[20];
printf("请输入需要创建的进程个数:");
scanf("%d",&pcb_number);
for(j=0;j<pcb_number;j++)
{
printf("\n输入第%d个进程相关信息\n",j+1);
printf("进程名:");
scanf("%s",name);
printf("任务时间:");
scanf("%d",&time);
pcb_create(name,time);
}//进程创建
printf("\n已创建进程信息如下:\n\n");
printf("\t\t\t进程名\t状态\t任务时间\n");
for(j=0;j<pcb_number;j++)
{
printf("\t\t\t%s\t",pcbarea[j].name);
if(pcbarea[j].status==0) printf("ready");
else printf("running");
printf("\t %d\n",pcbarea[j].time);
}
printf("\n输入时间片长度:");
scanf("%d",&slot);
printf("\n\n\n\t\t\t\t--------------\n");
printf("\t\t\t\t*进程调度模拟*\n");
printf("\t\t\t\t--------------\n");
while(flag)
process_switch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -