zoukankan      html  css  js  c++  java
  • 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. 实验总结

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

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

       

  • 相关阅读:
    JeePlus:代码生成器
    JeePlus:API工具
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1023 税收与补贴问题
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
    Java实现 洛谷 P1328 生活大爆炸版石头剪刀布
  • 原文地址:https://www.cnblogs.com/guo2016/p/5462229.html
Copyright © 2011-2022 走看看