资源简介
假设系统的可利用空间容量为2m个字,则系统开始运行时,整个内存区是一个大小为2m的空闲分区。在系统运行过程中,由于不断的划分,可能会形成若干个不连续的空闲分区,将这些空闲分区根据分区的大小进行分类,对于每一类具有相同大小的所有空闲分区,单独设立一个空闲分区双向链表。这样,不同大小的空闲分区形成了k(0≤k≤m)个空闲分区链表。
当需要为进程分配一个长度为n的存储空间时,首先计算一个i值,使2i-1<n≤2i,然后在空闲分区大小为2i的空闲分区链表中查找。若找到,即把该空闲分区分配给进程。否则,表明长度为2i的空闲分区已经耗尽,则在分区大小为2i+1的空闲分区链表中寻找。若存在2i+1的一个空闲
代码片段和文件信息
#include
#include
#include
int buddy[10]={2481632641282565121024}; //分区大小 2的k次幂
int free1[10]={0000000001}; //空闲分区的个数 初始内存大小1024
int use[100][2]={0}; //已分配分区表 最多为100个进程分配 记录已分配分区大小,内存地址
int free_addr[10][50]={0}; //空闲分区的首地址 [i][j]表示2的i次方大小的空闲分区的第j个分区的首地址
int maxsize=9; //最大空闲分区 初始为1024
int usenum=0; //进程数 初始为0
void menu(); // 多级菜单函数
void showMemory(); //输出内存占用情况
void showFreeMemory(); //输出空闲分区情况
void showUseMemory(); //输出已分配区情况
void allocBuddy(); //分配内存
void reclaimBuddy(); //回收内存
void menu()
{
printf(“ ******************* 欢迎使用伙伴系统模拟程序 **************\n“);
printf(“ *********************************************************************\n“);
printf(“ **************************
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-06-29 10:41 新建文件夹\
目录 0 2012-06-29 11:00 新建文件夹\伙伴系统\
文件 404480 2012-06-29 11:00 新建文件夹\伙伴系统.doc
文件 6924 2012-06-17 11:09 新建文件夹\伙伴系统\companionSystem.cpp
文件 3509 2012-06-17 11:09 新建文件夹\伙伴系统\companionSystem.dsp
文件 538 2012-06-17 11:11 新建文件夹\伙伴系统\companionSystem.dsw
文件 41984 2012-06-17 13:25 新建文件夹\伙伴系统\companionSystem.ncb
文件 48640 2012-06-17 13:25 新建文件夹\伙伴系统\companionSystem.opt
文件 1328 2012-06-17 11:09 新建文件夹\伙伴系统\companionSystem.plg
目录 0 2012-06-29 11:00 新建文件夹\伙伴系统\Debug\
文件 204867 2012-06-17 11:09 新建文件夹\伙伴系统\Debug\companionSystem.exe
文件 299124 2012-06-17 11:09 新建文件夹\伙伴系统\Debug\companionSystem.ilk
文件 18562 2012-06-17 11:09 新建文件夹\伙伴系统\Debug\companionSystem.obj
文件 222152 2012-06-17 11:09 新建文件夹\伙伴系统\Debug\companionSystem.pch
文件 525312 2012-06-17 11:09 新建文件夹\伙伴系统\Debug\companionSystem.pdb
文件 41984 2012-06-17 12:12 新建文件夹\伙伴系统\Debug\vc60.idb
文件 86016 2012-06-17 11:09 新建文件夹\伙伴系统\Debug\vc60.pdb
- 上一篇:动态分区分配算法实现代码+文档
- 下一篇:NIIT UML试题
评论
共有 条评论