• Process 2(完成版)


    实验二、进程调度模拟程序2.0实验

    专业 网络工程一班 姓名 郭丽红 学号 20140611303

    一、        实验目的

     

         用高级语言完成一个进程调度程序,以加深对进程的概念及进程调度算法的理解

    二、        实验内容和要求

    三、                实验要求

    1.2.1例题:设计一个有 N个进程并发执行的进程调度模拟程序。

    进程调度算法:采用最高优先级优先的调度算法(即把处理机分配给优先级最高的进程)和先来先服务(若优先级相同)算法。

    (1).  每个进程有一个进程控制块(PCB)表示。进程控制块包含如下信息:进程名、优先级、到达时间、需要运行时间、已用CPU时间、进程状态等等。

    (2).  进程的优先级及需要的运行时间可以事先人为地指定,进程的运行时间以时间片为单位进行计算。

    (3).  每个进程的状态可以是就绪 r(ready)、运行R(Running)、或完成F(Finished)三种状态之一。

    (4).  就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。

    (5).  如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待调度。

    (6).  每进行一次调度程序都打印一次运行进程、就绪队列中各个进程的 PCB,以便进行检查。   

    (7).  重复以上过程,直到所要进程都完成为止。

    四、        实验方法、步骤及结果测试

     #include<stdio.h>

    #define N 10

    typedef struct process   //进程结构

    {

       char name;

       int arrive;

       int prio;

       int needTime;

       char state;

      

    }Process;

    Process a[N];

    void input(Process a[],int n){                //输入函数

        int i;

       for(i=0;i<n;i++)

       {

              printf("请输入%d个进程的进程名:",i+1);

              scanf("%c",&a[i].name);

              printf("请输入%d个进程的优先级:",i+1);

            scanf("%d",&a[i].prio);

            printf("请输入%d个进程的到达时间:",i+1);

            scanf("%d",&a[i].arrive);

              printf("请输入%d个进程的需要时间:",i+1);

              scanf("%d",&a[i].needTime);

              a[i].state='r';

            getchar();

              printf(" ");

       }

    }

    void sort(Process a[],int n)               //排序算法

    {

       int i,j;

       Process temp;

       for(i=0;i<n;i++)

          for(j=i;j<n;j++)

          {

                 if(a[j].prio>a[i].prio) //按进程优先级排序

                 {

                        temp=a[j];

                        a[j]=a[i];

                        a[i]=temp;

                 }

                 if(a[j].prio==a[i].prio)  //如果优先级相同,按先来先服务原则排序

                 {

                        if(a[j].arrive<a[i].arrive)

                        {

                   temp=a[j];

                        a[j]=a[i];

                        a[i]=temp;

                        }

                 }

          }

    }

    void output(Process a[],int n)           

    {

       int i;

       printf("进程排序结果: ");

        printf("******************************** ");

       printf("进程名 优先级 到达 需要 ");

       for(i=0;i<n;i++)

            printf("%c %d %d %d %c ",a[i].name,a[i].prio,a[i].arrive,a[i].needTime,a[i].state);

        printf("******************************** ");

    }

    void running(Process a[],int n)

    {

       int i;

        for(i=0;i<n;i++)

       {

          while(a[i].needTime!=0)

          {

                printf("按任意键继续。。。。。 ");

                fflush(stdin);

                getchar();

             a[i].needTime=a[i].needTime-1;

                a[i].prio=a[i].prio-1;

                if(a[i].needTime==0)

                {

                       a[i].state='f';

                }

              printf("现在执行的进程信息: ");

             printf("进程名 优先级 需要 ");

             printf("%c %d %d %c ",a[i].name,a[i].prio,a[i].needTime,a[i].state);

             printf("******************************** ");

                sort(a,n);

                output(a,n);

          }

       }

    }

    main()

    {

       int n;

       printf("你想输入多少个进程:");

       scanf("%d",&n);

       getchar();

       input(a,n);

       sort(a,n);

       running(a,n);

    }

    1. 实验总结

          能脚基本的模拟出进程的简单操作。

          不能解决的问题在老师和同学们的帮助下基本能解决问题。

       

  • 相关阅读:
    ZwQuerySystemInformation的用法
    将十进制整型数转成 2~36(不包含10) 进制数
    简化版C语言文法 130
    Python基础综合练习 130
    编译原理 130
    词法分析 130
    熟悉常用的Linux操作 130
    129有确定性的有穷自动机 130
    实验一.词法分析实验 130
    1.大 数据概述 130
  • 原文地址:https://www.cnblogs.com/guo2016/p/5462229.html
Copyright © 2020-2023  润新知