当前位置:网站首页 > 容器化与Kubernetes > 正文

进程控制块的作用及其初始化工作过程(进程控制块的初始化工作包括)



         常见的进程调度算法,如先来先服务(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;
}







 运行程序,输入进程:

进程调度:

到此这篇进程控制块的作用及其初始化工作过程(进程控制块的初始化工作包括)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 字符编码转化(字符集编码转换)2025-06-25 12:45:06
  • docker容器内核版本(docker 内核版本)2025-06-25 12:45:06
  • docker如何启动镜像(docker启动镜像容器图片)2025-06-25 12:45:06
  • kvm虚拟化技术原理(kvm虚拟化技术是什么)2025-06-25 12:45:06
  • cruise软件汉化(crsed汉化)2025-06-25 12:45:06
  • druid连接池配置文件(druid连接池两种初始化)2025-06-25 12:45:06
  • list转化为string(list转化为dataframe)2025-06-25 12:45:06
  • cruise汉化版(cruisin下载)2025-06-25 12:45:06
  • kubernetes证书过期(kubeadm证书过期)2025-06-25 12:45:06
  • 启动docker(启动docker容器)2025-06-25 12:45:06
  • 全屏图片