进程的优先调度算法的c语言实现

来源:互联网 发布:有特效的编程软件 编辑:程序博客网 时间:2024/06/06 01:07

在进程中实现优先级算法可以使用最小堆排列来实现。

一般在优先级调度算法中要实现的操作

1.从后备作业队列中选择一个优先级最高的作业将他们调入内存,分配必要的资源。此处的优先级越高关键字越小

2.创建进程并且放入到后备作业队列中

3,。改变一个进程的优先级重新排列后备作业队列的顺序

此处的c语言实现仅仅使用一个数组代表关键字,

若再真实的操作系统中,真可以使用结构体数组来代替示例中的简单数组。

 

struct Process{int key;int* pointer;//指向进程的入口代码//更多的其他信息}process


 

#include<stdio.h>#define HEAP_SIZE 5//定义堆的大小,记住此时的大小不包含堆数组的0号元素,0号元素储存的是 堆的大小;//================Min_heapify==================/*此函数的作用是使以i为根的堆成为最小堆; */ void Min_heapify(int *array,int i){     int heap_size=array[0];     int l=0;     int r=0;     int least=0;     //此处不使用递归节约时间;      while(i>0){             l=2*i;             r=2*i+1;             if(l<=heap_size&&array[l]<array[i])                      least=l;             else                      least=i;             if(r<=heap_size&&array[r]<array[least])                      least=r;             if(least!=i){                      int temp;                      temp=array[i];                      array[i]=array[least];                      array[least]=temp;}             i/=2;             }                    }//=================Build_min_heap===============/*此函数是建立以数组array的最小堆; */ void Build_min_heap(int* array){     int heap_size=array[0];     for(int i=(heap_size/2);i>0;i--)             Min_heapify(array,i);}//============= Heap_extract_min=============/*此函数是返回最小堆的最小的关键字 */int Heap_extract_min(int*array){     int min;     int heap_size=array[0];     if(heap_size<1)            printf("heap underflow\n");     min=array[1];     array[1]=array[heap_size];     array[0]-=1;     Min_heapify(array,1);     return min;          }//=========== Heap_prior_increase===============/*此函数的作用是增加堆中某个元素的优先值,优先级高的关键字小; */void Heap_prior_increase(int*array,int i,int key){     if(key>array[i]&&key<0){            printf("the prior you want to increse cann't be relize\n");            return ;}     array[i]=key;     while(i>1&&array[i/2]>array[i]){            int temp;            temp=array[i];            array[i]=array[i/2];            array[i/2]=temp;            i/=2;}                 }//=========== Min_heap_insert=====================/*此函数的作用是插入元素; */void Min_heap_insert(int*array,int key){     int heap_size;     array[0]+=1;     heap_size=array[0];     array[heap_size]=-2;     Heap_prior_increase(array,heap_size,key);          }int main(){    printf("\n          ^_^welcome to wuhan university^_^\n\n");      int test;     int heap_array[HEAP_SIZE+1]={3,2,1,4,-1,-1};//此处的第一个元素是堆的大小;     Build_min_heap(heap_array);    Heap_prior_increase(heap_array,3,3);    printf("\nheap_array:");     for(int i=0;i<6;i++)            printf("     %d     ",heap_array[i]);    Min_heap_insert(heap_array,6);    printf("\nheap_array:");    for(int i=0;i<6;i++)            printf("     %d     ",heap_array[i]);    Min_heap_insert(heap_array,2);    printf("\nheap_array:");    for(int i=0;i<6;i++)            printf("     %d     ",heap_array[i]);    test=Heap_extract_min(heap_array);    printf("\nHeap_extract_min=%d    \n",test) ;    printf("\n          ^_^welcome to wuhan university^_^\n\n");      getchar();        }


 

 

   

原创粉丝点击