zoukankan      html  css  js  c++  java
  • 操作系统实验三

    /*
    Name: procNQue.c 进程调度模拟实验源码 存储结构链表

    Description:
    实现一个有 N级队列的多级反馈队列调度算法。

    */
    #include "stdio.h"
    #include <stdlib.h>
    #include <conio.h>
    #define getpch(type) (type*)malloc(sizeof(type))
    #define N 3
    struct pcb { /* 定义进程控制块PCB */
    char name[10];
    char status;
    int prio;
    int ntime;
    int rtime;
    struct pcb* link;
    }*ready=NULL,*p;

    typedef struct pcb PCB;


    sort() /* 进程进行优先级排列函数*/
    {
    PCB *first, *second;
    int insert=0;
    if((ready==NULL)||((p->prio)>(ready->prio))) /*优先级最大者,插入队首*/
    {
    p->link=ready;
    ready=p;
    }
    else /* 进程比较优先级,插入适当的位置中*/
    {
    first=ready;
    second=first->link;
    while(second!=NULL)
    {
    if((p->prio)>(second->prio)) /*若插入进程比当前进程优先数大,*/
    { /*插入到当前进程前面*/
    p->link=second;
    first->link=p;
    second=NULL;
    insert=1;
    }
    else /* 插入进程优先数最低,则插入到队尾*/
    {
    first=first->link;
    second=second->link;
    }
    }
    if(insert==0) first->link=p;
    }
    }

    input() /* 建立进程控制块函数*/
    {
    int i,num;
    /*clrscr(); */ /*清屏*/
    printf(" 请输入进程数?");
    scanf("%d",&num);
    for(i=0;i<num;i++)
    {
    printf(" 进程号No.%d: ",i);
    p=getpch(PCB); /*宏(type*)malloc(sizeof(type)) */
    printf(" 输入进程名:");
    scanf("%s",p->name);
    /*printf(" 输入进程优先数:");
    scanf("%d",&p->prio); */
    p->prio=N;
    printf(" 输入进程运行时间:");
    scanf("%d",&p->ntime);
    printf(" ");
    p->rtime=0;p->status='r';
    p->link=NULL;
    sort(); /* 调用sort函数*/
    }

    }


    int space()
    {
    int l=0; PCB* pr=ready;
    while(pr!=NULL)
    {
    l++;
    pr=pr->link;
    }
    return(l);
    }


    disp(PCB * pr) /*单个进程显示函数*/
    {

    printf("|%s ",pr->name);
    printf("|%c ",pr->status);
    printf("|%d ",pr->prio);
    printf("|%d ",pr->ntime);
    printf("|%d ",pr->rtime);
    printf(" ");
    }

    void printbyprio(int prio)
    {
    PCB* pr;
    pr=ready;
    printf(" ****当前第%d级队列(优先数为%d)的就绪进程有: ",(N+1)-prio,prio); /*显示就绪队列状态*/
    printf(" qname status prio ndtime runtime ");
    while(pr!=NULL)
    {
    if (pr->prio==prio) disp(pr);
    pr=pr->link;
    }
    }

    check() /* 显示所有进程状态函数 */
    {
    PCB* pr;
    int i;
    printf(" /\/\/\/\当前正在运行的进程是:%s",p->name); /*显示当前运行进程*/
    printf(" qname status prio ndtime runtime ");
    disp(p);

    printf(" 当前就绪队列状态为: "); /*显示就绪队列状态*/
    for(i=N;i>=1;i--)
    printbyprio(i);
    /*
    while(pr!=NULL)
    {
    disp(pr);
    pr=pr->link;
    }
    */
    }


    destroy() /*进程撤消函数(进程运行结束,撤消进程)*/
    {
    printf(" 进程 [%s] 已完成. ",p->name);
    free(p);
    }


    running() /* 运行函数。判断是否完成,完成则撤销,否则置就绪状态并插入就绪队列*/
    {
    int slice,i;
    slice=1;
    for(i=1;i<((N+1)-p->prio);i++)
    slice=slice*2;

    for(i=1;i<=slice;i++)
    {
    (p->rtime)++;
    if (p->rtime==p->ntime)
    break;

    }
    if(p->rtime==p->ntime)
    destroy(); /* 调用destroy函数*/
    else
    {
    if(p->prio>1) (p->prio)--;
    p->status='r';
    sort(); /*调用sort函数*/
    }
    }
    void cteatpdisp()
    /*显示(运行过程中)增加新进程后,所有就绪队列中的进程*/
    {

    int i;

    printf(" 当增加新进程后,所有就绪队列中的进程(此时无运行进程): "); /*显示就绪队列状态*/
    for(i=N;i>=1;i--)
    printbyprio(i);
    }
    void creatp()
    {
    char temp;
    printf(" Creat one more process?type Y (yes)");
    scanf("%c",&temp);
    if (temp=='y'||temp=='Y')
    {
    input();
    cteatpdisp();
    }

    }

    main() /*主函数*/
    {
    int len,h=0;
    char ch;
    input();
    len=space();
    while((len!=0)&&(ready!=NULL))
    {
    ch=getchar();
    /*getchar();*/
    h++;
    printf(" The execute number:%d ",h);
    p=ready;
    ready=p->link;
    p->link=NULL;
    p->status='R';
    check();
    running();
    creatp();
    printf(" 按任一键继续......");
    ch=getchar();
    }
    printf(" 进程已经完成. ");
    ch=getchar();
    ch=getchar();
    }

    实验结果如下:

  • 相关阅读:
    AUC ROC PR曲线
    L1,L2范数和正则化 到lasso ridge regression
    目标函数和损失函数
    logistic回归和线性回归
    [转]如何处理不均衡数据?
    将Maven项目打包成可执行 jar文件(引用第三方jar)
    Postgresql VACUUM COPY等
    linux安装xgboost
    java社区推荐
    rabbitmq-java api
  • 原文地址:https://www.cnblogs.com/zhangguojing/p/5487693.html
Copyright © 2011-2022 走看看