实验四:分区式储器管理.doc
文本预览下载声明
实验五:分区式储器管理
一.实验目的
模拟实现一个简单的固定(或可变)分区存储管理系统,进一步加深对分区分配方案设计思想的理解。
二.实验属性
该实验为设计性实验。
三.实验仪器设备及器材
普通PC386以上微机
四.实验流程图
核心设计
//最优分配算法实现的动态分区
int distribute(int process_name, float need_length)
{
int i, k=-1; //k用于定位在空闲表中选择的未分配栏
float ads, len;
int count=0;
i=0;
//核心的查找条件,找到最优空闲区
while(i=m-1) //循环找到最佳的空闲分区
{
if(free_table[i].flag==1 need_length =free_table[i].length)
{
count++;
if(count==1||free_table[i].length free_table[k].length)
k=i;
}
i=i+1;
}
if(k!=-1)
{
if((free_table[k].length-need_length)=minsize) //整个分配
{
free_table[k].flag=0;
ads=free_table[k].address;
len=free_table[k].length;
}
else
{ //切割空闲区
ads=free_table[k].address;
len=need_length;
free_table[k].address+=need_length;
free_table[k].length-=need_length;
}
i=0;
实验截图
程序代码
#include iostream.h
#include iomanip.h
float minsize=5;
int count1=0;
int count2=0;
#define m 10
#define n 10
struct
{float address;
float length;
int flag;
}used_table[n];
struct
{float address;
float length;
int flag;
}free_table[m];
void initialize(void);
int distribute(int, float);
int recycle(int);
void show();
void initialize(void)
{
int a;
for(a=0; a=n-1; a++)
used_table[a].flag=0;
free_table[0].address=1000;
free_table[0].length=1024;
free_table[0].flag=1;
}
int distribute(int process_name, float need_length)
{
int i, k=-1;
float ads, len;
int count=0;
i=0;
while(i=m-1)
{
if(free_table[i].flag==1 need_length =free_table[i].length)
{
count++;
if(count==1||free_table[i].length free_table[k].length)
k=i;
}
i=i+1;
}
if(k!=-1)
{
if((free_table[k].length-need_length)=minsize)
{
free_table[k].flag=0;
ads=free_table[k].address;
len=free_table[k].length;
}
else
{
ads=free_table[k].address;
len=need_length;
free_table[k].address+=need_length;
free_table[k].length-=need_length;
}
i=0;
while(used_table[i].flag!=0)
{i=i+1;}
显示全部