• 实验二-模拟在CPU中的优先级调度


    一、        实验目的

    通过本实验可以加深对有关进程控制块、进程队列的概念的进一步理解。

    二、        实验内容和要求

         1.进程PCB的结构体定义

         2.定义结构体

         3.输入进程序列

         4.排序(按到位时间)

         5.输出进程运行的结果

    三、        实验代码及结果测试

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #define MAX 100
      4 /*定义进程结构体*/
      5 typedef struct pcb {
      6     char name[30];
      7     int priority ;
      8     int serveTime;
      9     int cpuTime;
     10     char state;
     11 } PCB;
     12 
     13 Input(PCB p[MAX],int n) {
     14     int i;
     15     for(i=0; i<n; i++) {
     16         printf("第%d个进程的名称:",i+1);
     17         scanf("%s",&p[i].name);
     18         printf("第%d个进程的优先数:",i+1);
     19         scanf("%d",&p[i].priority);
     20         printf("第%d个进程的服务时间:",i+1);
     21         scanf("%d",&p[i].serveTime);
     22         p[i].state='W';
     23         p[i].cpuTime=0;
     24         printf("
    ");
     25     }
     26 }
     27 
     28 Output(PCB p[MAX],int n) {
     29     int i;
     30     printf("进程名称	优先级数	服务时间	当前时间	进程状态
    ");
     31     for(i=0; i<n; i++) {
     32         printf(" %s	",p[i].name);
     33         printf("	%d	",p[i].priority);
     34         printf("	%d	",p[i].serveTime);
     35         printf("	%d	",p[i].cpuTime);
     36         printf("	%c	",p[i].state);
     37         printf("
    ");
     38     }
     39 }
     40 
     41 PrioritySort(PCB p[MAX],int n) {
     42     int m=0,i=0,j ;
     43     PCB temp;
     44     m = n;
     45     for(i = 1 ; i < n ; i++) {
     46         m = m - 1 ;
     47         for(j = 0 ; j < m ; j ++) {
     48             if(p[j].priority < p[j+1].priority) {
     49                 temp = p[j];
     50                 p[j] = p[j+1];
     51                 p[j+1] = temp ;
     52             }
     53         }
     54     }
     55 }
     56 
     57 Run(PCB p[MAX] , int n) {
     58     int i ,j ;
     59     int m=0;
     60     for(i = 0 ; i < n ; i ++) {
     61         m = p[i].serveTime+m;
     62     }
     63     for(i = 0 ; i < n ; i ++) {
     64         for(j = 0 ; j < m ; j ++) {
     65             printf("请按回车键继续运行......!
    ");
     66             getchar();
     67             p[i].priority--;
     68             p[i].cpuTime++;
     69             p[i].serveTime--;
     70             p[i].state='R';
     71             Output(p,n);
     72             if(p[i].serveTime!=0) {
     73                 p[i].state='R';
     74             } else {
     75                 p[i].state='F';
     76                 printf("********第%d个进程的运行完成!********
    ",i+1);
     77                 break;
     78             }
     79         }
     80     }
     81 }
     82 
     83 End(PCB p[MAX] , int n) {
     84     int i ,j ;
     85     for(i = 0 ; i < n ; i ++) {
     86         if(p[i].serveTime==0){
     87             p[i].state='F';
     88         }
     89     }
     90     Output(p,n);
     91     printf("********进程调度结束!********
    ",i+1);
     92 }
     93 
     94 main() {
     95     PCB p[MAX];
     96     int n,i;
     97     printf("
                *************进程调度算法(最高优先数调度算法)************
    
    ");
     98     printf("请输入进程数目:");
     99     scanf("%d",&n);
    100     printf("
    ");
    101     Input(p,n);
    102     PrioritySort(p,n);
    103     Output(p,n);
    104     getchar();
    105     Run(p,n);
    106     End(p,n); 
    107 }

    总结:

    使用优先级调度能更好的安排进程的先后顺序

  • 相关阅读:
    核主成分分析方法(KPCA)怎么理解?
    通过主成分分析方法进行降维
    线性回归分析中的假设检验
    机器学习中的逻辑回归方法
    关联分析中寻找频繁项集的FP-growth方法
    机器学习中的模型选择和特征选择的基本方法
    计算学习理论中泛化误差的研究
    《幸福的陷阱》读书笔记
    人生规划的逆向思维
    为什么相敬如宾是对的?
  • 原文地址:https://www.cnblogs.com/murasame/p/5472730.html
Copyright © 2020-2023  润新知