常见的进程调度算法,如先来先服务(FCFS)、短作业优先(SJF)、优先级调度、时间片轮转调度等。
进程调度是操作系统内核的核心功能之一,它负责决定哪个进程应该获得CPU的使用权。进程调度算法的选择直接影响到系统的性能,包括响应时间、吞吐量、公平性等方面。
进程控制块:
struct pcb{
char name[10];
char state;
int nice;
int ntime;
int rtime;
struct pcb* link;
}*ready=NULL,*p,*last=NULL;
typedef struct pcb PCB;
进程优先数排序函数:
char sort()
{
if(ready==NULL)
{
ready = p;
p->link=NULL;
last=p;
}
else
{
last->link=p;
last=p;
p->link=NULL;
}
}
输入各个进程参数,建立进程控制块并排序生成就绪队列:
char input()
{
int i,num;
printf(" 请输入被调度的进程数目:");
scanf("%d",&num);
for(i=0;i<num;i++)
{
printf(" ----进程号No.%d----",i);
p=getpch(PCB);
printf(" 输入进程名:");
scanf("%s",p->name);
printf(" 输入进程运行时间:");
scanf("%d",&p->ntime);
printf(" ");
p->rtime=0;
p->state='W';
p->link=NULL;
sort(); //调用sort()函数完成优先级排序
}
}
链表中节点个数的统计函数:
int space() /*链表中节点个数的统计函数*/
{
int l=0; PCB* pr=ready;
while(pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
进程显示函数,用于显示当前进程:
char disp(PCB* pr) /*进程显示函数,用于显示当前进程*/
{
printf(" qname state nice ndtime runtime ");
printf(" %s ",pr->name);
printf(" %c ",pr->state);
printf(" %d ",pr->nice);
printf(" %d ",pr->ntime);
printf(" %d ",pr->rtime);
}
进程查看函数:
char check() /*进程查看函数*/
{
PCB* pr;
printf(" *当前正在运行的进程是:%s",p->name); /*显示当前运行的进程名称*/
disp(p); //打印正在执行的进程信息
pr=ready;
if(pr!=NULL)
printf(" 当前就绪队列状态"); /*显示就绪队列的状态*/
else
printf(" *当前就绪队列状态为:空* ");
while(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
}
建立进程撤销函数(进程运行结束,撤销进程):
char destroy()
{
printf(" 进程[%s]已完成。 ",p->name);
free(p); //释放内存
}
调整进程运行时间及优先级:
char running()
{
(p->rtime)++;
if(p->rtime==p->ntime)
destroy();
else
{
(p->nice)--;
p->state='W';
sort();
}
}
主函数调用:
int main()
{
int len,h=0; //声明两个int类型的变量h用于记录轮询次数,len用于记录节点个数
char ch; //声明一个char类型的变量
input(); //调用input函数,用来输入各个进程参数,建立进程控制块并排序生成就绪队列
len=space(); //len用于记录节点个数
while((len!=0)&&(ready!=NULL)) //循环的方式调度进程
{
ch=getchar(); //暂停,按任意键继续,用于交互方便查看
h++; //记录轮询次数
printf(" The execute number is %d ",h); //打印显示第几次轮询
p=ready; //将优先级最大的进程设置未队首
ready=p->link; //更新就绪队列,队首指针指向下一个进程if(ready==NULL)
{
last=NULL;
}p->link=NULL; //队首link指向为空
p->state='R'; //队首状态为R
check(); //查看进程函数
running(); //调整进程优先级
printf(" 按任意键继续..."); //用于交互,提醒继续进程
}
printf(" 所有进程已经运行完成! "); //完成运行
return 0;
}
运行程序,输入进程:
进程调度:
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/do-docker-k8s/68111.html