📄 cpu调度c语言实现.txt
字号:
CPU的高调度。
实现1FCFS(先到先服务) 2SJF(最段作业优先调度)
3RR(轮转法) 4PSA(优先权调度)n);
5EXIT; 6时间的延迟;
7:屏幕的换色.
#include stdio.h
#include conio.h
#include string.h
struct JCSJ
{ char name[3]; 进程名称
int t; CPU区间
int k; 到达时间
int m; 优先权,数字小表示优先权高
struct JCSJ next;
};
struct JCSJ Creat(struct JCSJ phead);
int choose(void);
struct JCSJ SJF(struct JCSJ phead);
struct JCSJ RR(struct JCSJ phead);
struct JCSJ FCFS(struct JCSJ phead);
struct JCSJ PSA(struct JCSJ phead);
struct JCSJ head=NULL;
main( )
{
Creat(head);
getch( );
}
struct JCSJ Creat(struct JCSJ phead)
{
struct JCSJ ps,pt;
int n,i;
printf(请输入进程数n= );
scanf(%d,&n);
pt=(struct JCSJ )malloc(sizeof(struct JCSJ));
phead=pt;
ps=pt;
pt-next=NULL;
for(i=0;in-1;i++)
{
pt=(struct JCSJ )malloc(sizeof(struct JCSJ));
ps-next=pt;
ps=pt;
pt-next=NULL;
}
{
printf(***请输入进程的相关名称和数字***:n);
sleep(1);时间延迟一秒钟
printf(n);
printf(进程名称 CPU区间 到达时间 优先权n);
printf(nnn);
}
for(i=0,ps=phead;ps!=NULL;ps=ps-next,i++)
{
gotoxy(4,6+i);
scanf(%s,ps-name);
gotoxy(15,6+i);
scanf(%d,&(ps-t));
gotoxy(25,6+i);
scanf(%d,&(ps-k));
gotoxy(35,6+i);
scanf(%d,&(ps-m));
}
head=phead;
choose();
}
int choose(void)
{
int k;
do
{
printf(=================================================n);
printf( 1FCFS(先到先服务) 2SJF(最段作业优先调度)n);
printf( 3RR(轮转法) 4PSA(优先权调度)n);
printf( 5EXITn);
printf(=================================================n);
printf(请选择(1-5)=);
scanf(%d,&k);
}while(k1&&k4); k1时继续循环,表示输入有错,重新输入
switch(k)
{
case 1 FCFS(head);choose();break;
case 2 SJF(head); choose();break;
case 3 RR(head); choose();break;
case 4 PSA(head); choose();break;
case 5 break;
}
}
struct JCSJ SJF(struct JCSJ phead)
{
struct JCSJ p1,p2,ps;
int n,i;
char s[3];
for(p1=phead;p1!=NULL;p1=p1-next)
for(p2=phead;p2-next!=NULL;p2=p2-next)
{
if(p2-tp2-next-t)
{
n=p2-t;
p2-t=p2-next-t;
p2-next-t=n;
strcpy(s,p2-name);
strcpy(p2-name,p2-next-name);
strcpy(p2-next-name,s);
}
}
printf(=============================n);
printf(进程名称 CPU区间n);
for(ps=phead;ps!=NULL;ps=ps-next)
{
printf(n %s %dn,ps-name,ps-t);
for(i=1;i8;i++)
{
printf(.);
delay(40000)
}
printf(n);
textbackground(6);
}
sleep(5);
clrscr();
}
struct JCSJ RR(struct JCSJ phead)
{
int a,b,c,i;
struct JCSJ ps;
a=b=c=0;
printf(Please input TIMEa=);
scanf(%d,&a);
for(ps=phead;ps!=NULL;ps=ps-next)
b=b+(ps-t); 所有进程CPU区间总和
do
{
for(ps=phead;ps!=NULL;ps=ps-next)
if(ps-t!=0)
{
if(ps-t=a)
{
printf(n%s %dn,ps-name,ps-t);
for(i=1;i8;i++)
{
printf(.);
delay(40000);
}
printf(n);
}
else
{
printf(n%s %dn,ps-name,a);
for(i=1;i8;i++)
{
printf(.);
delay(40000);
}
printf(n)
}
ps-t=(ps-t)-a;
if(ps-t0)
ps-t=0;
c=c+a; 所有已用的时间片总和
}
}while(cb);
}
struct JCSJ FCFS(struct JCSJ phead)
{
struct JCSJ p1,p2,ps;
int n,i;
char s[3];
for(p1=phead;p1!=NULL;p1=p1-next)
for(p2=phead;p2-next!=NULL;p2=p2-next)
{
if(p2-kp2-next-k)
{
n=p2-k;
p2-k=p2-next-k;
p2-next-k=n;
strcpy(s,p2-name);
strcpy(p2-name,p2-next-name);
strcpy(p2-next-name,s);
}
}
head=phead;
printf(============================n);
printf(进程名称 到达时间n);
for(ps=phead;ps!=NULL;ps=ps-next)
{
printf(n %s %dn,ps-name,ps-k);
for(i=1;i8;i++)
{
printf(.);
delay(40000);
}
printf(n);
textbackground(4);
}
sleep(5);
clrscr();
}
struct JCSJ PSA(struct JCSJ phead)
{
struct JCSJ p1,p2,ps;
int n,i;
char s[3];
for(p1=phead;p1!=NULL;p1=p1-next)
for(p2=phead;p2-next!=NULL;p2=p2-next)
{
if(p2-mp2-next-m)
{
n=p2-m;
p2-m=p2-next-m;
p2-next-m=n;
strcpy(s,p2-name);
strcpy(p2-name,p2-next-name);
strcpy(p2-next-name,s);
}
}
printf(n);
printf(进程名称 优先权n);
for(ps=phead;ps!=NULL;ps=ps-next)
{
printf(n %s %dn,ps-name,ps-m);
for(i=1;i8;i++)
{
printf(.);
delay(40000)
}
printf(n);
textbackground(2);
}
sleep(5);
clrscr();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -