一、 实验目的
通过本实验可以加深对有关进程控制块、进程队列的概念的进一步理解。
二、 实验内容和要求
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 }
总结:
使用优先级调度能更好的安排进程的先后顺序