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

进程控制块的作用及其初始化工作过程(进程控制块的初始化工作包括)p 常见的进程调度算法 如先来先服务 FCFS 短作业优先 SJF 优先级调度 时间片轮转调度等 p 进程调度是操作系统内核的核心功能之一 它负责决定哪个进程应该获得 CPU 的使用权 进程调度算法的选择直接影响到系统的性能 包括响应时间 吞吐量

大家好,我是讯享网,很高兴认识大家。



 <p>         常见的进程调度算法&#xff0c;如先来先服务&#xff08;FCFS&#xff09;、短作业优先&#xff08;SJF&#xff09;、优先级调度、时间片轮转调度等。</p> 

讯享网

        进程调度是操作系统内核的核心功能之一,它负责决定哪个进程应该获得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-&gt;link=NULL;
        last=p;
    }
    else
    {
        last-&gt;link=p;
        last=p;
        p-&gt;link=NULL;
    }
}

 输入各个进程参数,建立进程控制块并排序生成就绪队列:

char input()
{
    int i,num;
    printf(“ 请输入被调度的进程数目:”);
    scanf(“%d”,&num);
    for(i=0;i&lt;num;i++)
    {
        printf(“ —-进程号No.%d—-”,i);
        p=getpch(PCB);
        printf(“ 输入进程名:”);
        scanf(“%s”,p-&gt;name);
        printf(“ 输入进程运行时间:”);
        scanf(“%d”,&p-&gt;ntime);
        printf(“ ”);
        p-&gt;rtime=0;
        p-&gt;state=‘W’;
        p-&gt;link=NULL;
        sort(); //调用sort()函数完成优先级排序
    }
}

 链表中节点个数的统计函数:

int space()  /链表中节点个数的统计函数/
{
    int l=0; PCB* pr=ready;
    while(pr!=NULL)
    {
        l++;
        pr=pr-&gt;link;
    }
    return(l);
}

 进程显示函数,用于显示当前进程:

char disp(PCB* pr) /进程显示函数,用于显示当前进程/
{
     printf(“ qname state nice ndtime runtime ”);
        printf(“  %s ”,pr-&gt;name);
        printf(“ %c ”,pr-&gt;state);
        printf(“ %d ”,pr-&gt;nice);
        printf(“ %d ”,pr-&gt;ntime);
        printf(“ %d ”,pr-&gt;rtime);
}

进程查看函数:

char check() /进程查看函数/
{
    PCB* pr;
    printf(“ 当前正在运行的进程是:%s*”,p-&gt;name);  /显示当前运行的进程名称/
    disp(p);  //打印正在执行的进程信息
    pr=ready;
    if(pr!=NULL)
        printf(“ *当前就绪队列状态*”);  /显示就绪队列的状态/
    else
        printf(“ 当前就绪队列状态为:空 ”);
    while(pr!=NULL)
    {
        disp(pr);
        pr=pr-&gt;link;
    }


讯享网

建立进程撤销函数(进程运行结束,撤销进程):

char destroy()
{
        printf(“ 进程[%s]已完成。 ”,p-&gt;name);
        free(p);  //释放内存

调整进程运行时间及优先级:

char running()
{
    (p-&gt;rtime)++;
    if(p-&gt;rtime==p-&gt;ntime)
        destroy();
    else
    {
        (p-&gt;nice)–;
        p-&gt;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-&gt;link;  //更新就绪队列,队首指针指向下一个进程

        if(ready==NULL)
        {
            last=NULL;
        }

        p-&gt;link=NULL;   //队首link指向为空
        p-&gt;state=‘R’;   //队首状态为R
        check();        //查看进程函数
        running();      //调整进程优先级
        printf(“ 按任意键继续…”);      //用于交互,提醒继续进程
    }
    printf(“

所有进程已经运行完成! ”);    //完成运行
    return 0;
}

 运行程序,输入进程:

进程调度:

小讯
上一篇 2025-05-16 19:44
下一篇 2025-06-02 09:09

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/175091.html