• 大小: 156KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签:

资源简介

操作系统课程设计 模拟设计动态分区存储管理的分配与回收

资源截图

代码片段和文件信息

#include
using namespace std;
enum Status{FREEBUSYOKERROR};
struct PST
{//partition specification table
int ID;//分区号
int  addr;//起始地址
int size;//分区长度
Status state;//状态
};
struct Node
{//双向链表结点
PST data;
Node *back;//前驱
Node *next;//后继
Node()
{
back=NULL;
next=NULL;
}
Node(int idint size)
{
data.ID=id;
data.size=size;
back=NULL;
next=NULL;
}
};
int area;//输入内存空间
Node *head*last;//表头指针和表尾指针
void Init(int area)
{
head=new Node();
last=new Node();
head->next=last;
head->data.ID=-1;
head->data.addr=-1;
head->data.size=0;
last->back=head;
last->data.addr=0;
last->data.ID=0;
last->data.size=area;
last->data.state=FREE;
}
Status FFA(int idint size)
{//First fit algorithm
Node *temp=new Node(idsize);
temp->data.state=BUSY;
Node *cur=head->next;
while(cur)
{
if(cur->data.state==FREE&&cur->data.size==size)
{//如果空闲块大小刚好与请求大小相等直接分配 
cur->data.ID=id;
cur->data.state=BUSY;
return OK;
break;
}
if(cur->data.state==FREE&&cur->data.size>size)
{//如果大于
temp->back=cur->back;
temp->next=cur;
cur->back->next=temp;
temp->data.addr=cur->data.addr;
cur->back=temp;
cur->data.addr=cur->data.addr+size;
cur->data.size=cur->data.size-size;
return OK;
break;
}
cur=cur->next;
}
return ERROR;

}
Status BFA(int idint size)
{//Best fit algorithm
Node *temp=new Node(idsize);
temp->data.state=BUSY;
int min;//记录符合满足请求的最小空闲块大小
Node *fit;//指向采用最佳适应算法的插入位置
Node *cur=head->next;
while(cur)
{//取得第一个可以分配的位置(不一定是最佳位置)
if(cur->data.state==FREE&&cur->data.size>=size)
{
fit=cur;
min=cur->data.size;
break;
}
cur=cur->next;
}
while(cur)
{
if(cur->data.state==FREE&&cur->data.size==size)
{//如果相等直接分配 
cur->data.state=BUSY;
cur->data.ID=id;
return OK;
break;
}
if(cur->data.state==FREE&&cur->data.size>size)
{//获取最佳位置
if(cur->data.size {
min=cur->data.size;
fit=cur;
}
}
cur=cur->next;
}
if(fit)
{//若最佳,插入
temp->back=fit->back;
temp->next=fit;
fit->back->next=temp;
temp->data.addr=fit->data.addr;
fit->back=temp;
fit->data.addr=fit->data.addr+size;
fit->data.size=fit->data.size-size;
return OK;
}
else
return ERROR;
}
Status WFA(int idint size)
{//worst fit algorithm
Node *temp=new Node(idsize);
temp->data.state=BUSY;
int max;//记录符合满足请求的最大空闲块大小
Node *fit;//指向采用最坏适应算法的插入位置
Node *cur=head->next;
while(cur)
{//取得第一个可以分配的位置(不一定是最佳位置)
if(cur->data.state==FREE&&cur->data.size>=size)
{
fit=cur;
max=cur->data.size;
break;
}
cur=cur->next;
}
while(cur)
{
if(cur->data.state==FREE&&cur->data.size>size)
{//获取最佳位置
if(cur->data.size>max)
{
max=cur->data.size;
fit=cur;
}
}
cur=cur->next;
}
if(fit)
{//若最佳,插入
temp->back=fit->back;
temp->next=fit;
fit->back->next=temp;
fit->back=temp;
temp->d

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     430080  2012-01-11 15:10  模拟设计动态分区存储管理的分配与回收11.doc

     文件       6797  2012-01-10 22:48  模拟设计动态分区存储管理的分配与回收.cpp

----------- ---------  ---------- -----  ----

               436877                    2


评论

共有 条评论