进程的优先调度算法的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(); }
- 进程的优先调度算法的c语言实现
- C语言模拟最高优先数优先进程调度算法
- 短进程优先的调度算法详解
- 短进程优先的调度算法详解
- 短进程优先算法C语言实现
- 进程调度实验(最高优先数优先算法)的java实现
- 按优先数调度算法实现处理器调度的程序
- 进程调度算法模拟,用动态优先数及时间片轮转法实现进程调度_Java语言模拟实现
- 时间片轮转调度算法的C语言模拟实现
- 三种进程调度算法的实现
- 进程的调度算法
- 进程的调度算法
- 进程的调度算法
- 进程的调度算法
- 进程的调度算法
- 进程的调度算法
- 深度优先遍历与广度优先遍历算法的C语言实现
- 先来先服务和高响应比优先调度算法C语言实现
- linuxBSPmini2440中断管理
- struts2学习笔记之拦截器(Interceptor)
- WPF中Style的使用
- WPF中TreeView的使用
- linuxMACHINE_START-MACHINE_END
- 进程的优先调度算法的c语言实现
- 使用XFire开发Web Service客户端完整入门教程
- avi decompressor
- 什么是抽象
- 11g Release 2 Rolling Upgrade using Transient Logical Standby database
- 大学随想1
- 2011-10-10 0:07:18
- C# 中,ListView的自定义显示,可用于显示不同的颜色和字体等
- 2011-10-10 0:22:22