实验二-模拟在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("\n");
 25     }
 26 }
 27
 28 Output(PCB p[MAX],int n) {
 29     int i;
 30     printf("进程名称\t优先级数\t服务时间\t当前时间\t进程状态\n");
 31     for(i=0; i<n; i++) {
 32         printf(" %s\t",p[i].name);
 33         printf("\t%d\t",p[i].priority);
 34         printf("\t%d\t",p[i].serveTime);
 35         printf("\t%d\t",p[i].cpuTime);
 36         printf("\t%c\t",p[i].state);
 37         printf("\n");
 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("请按回车键继续运行......!\n");
 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个进程的运行完成!********\n",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("********进程调度结束!********\n",i+1);
 92 }
 93
 94 main() {
 95     PCB p[MAX];
 96     int n,i;
 97     printf("\n            *************进程调度算法(最高优先数调度算法)************\n\n");
 98     printf("请输入进程数目:");
 99     scanf("%d",&n);
100     printf("\n");
101     Input(p,n);
102     PrioritySort(p,n);
103     Output(p,n);
104     getchar();
105     Run(p,n);
106     End(p,n);
107 }

总结:

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

时间: 2024-07-30 05:15:57

实验二-模拟在CPU中的优先级调度的相关文章

实验二——模拟在CPU中的进程调度(初稿)

一.        实验目的 通过本实验可以加深对有关进程控制块.进程队列的概念的进一步理解. 二.        实验内容和要求 1.进程PCB的结构体定义 2.定义结构体 3.输入进程序列 4.排序(按到位时间) 5.输出进程运行的结果 三.        实验代码及结果测试 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define wait 0 5 #define run 1 6 #define max 100 7 8 type

实验二——模拟在CPU中的进程调度(改稿)

一.        实验目的 通过本实验可以加深对有关进程控制块.进程队列的概念的进一步理解. 二.        实验内容和要求 1.进程PCB的结构体定义 2.定义结构体 3.输入进程序列 4.排序(按到位时间) 5.输出进程运行的结果 三.        实验代码及结果测试 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define wait 0 5 #define run 1 6 #define max 1000 7 8 typ

【操作系统】实验二 模拟作业调度

一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 拓展内容: 每个作业的到达时间和所需运行时间随机数生产:

1111实验二 作业调度模拟实验

实验二.作业调度模拟实验 物联网工程 张怡 201306104149 一.实验目的  (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 1.至少用三种调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业. 3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高

实验二 作业调度模拟实验

实验二.作业调度模拟实验 13物联网  201306104148 李小娜 一. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二. 实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素. 作业调度算法: 1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间

操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)

实验二 进程调度 一.     实验目的 1.       理解进程运行的并发性. 2.       理解处理器的三级调度. 3.       掌握先来先服务的进程调度算法. 4.       掌握短进程优先的进程调度算法. 5.       掌握时间片轮转的进程调度算法. 二.     实验设备 1.     安装windows或者linux操作系统的PC机 2.     C程序编译环境 三.     实验内容 用c语言编程模拟实现至少一个操作系统的常见进程调度算法.常见的进程调度算法有先来先

实验二 作业调度

一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)        短作业优

【操作系统】实验二 作业调度模拟程序

实验二作业调度模拟程序 一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)        采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间最长的作业. 2)

实验二 作业调度模拟程序

实验二 作业调度模拟程序 一.        实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.        实验内容和要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素.      作业调度算法: 1)      采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度.总是首先调度在系统中等待时间