资源简介
操作系统课程设计 模拟设计动态分区存储管理的分配与回收
代码片段和文件信息
#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
- 上一篇:赋值语句的翻译程序
- 下一篇:xm
l文件加密和解密
相关资源
- 华中科技大学操作系统课程设计——
- 操作系统课程设计主要实现小型操作
- 操作系统课程设计源代码
- 华科操作系统课程设计报告
- 模拟段式存储管理的分配与回收操作
- 操作系统课程设计报告,基于30天自制
- 计算机操作系统课程设计
- 进程同步模拟设计--吃水果问题
- 操作系统课程设计之存储管理—动态
- 操作系统课程设计报告-多级反馈队列
- 操作系统课程设计 便于直接存取的索
- GEEK OS课程设计报告
- 华中科技大学操作系统课程设计——
- 操作系统课程设计之系统调用返回时
- 操作系统课程设计用C写的模拟页面置
- 操作系统课程设计-小型文件管理系统
- 模拟设计动态分区存储管理中地址转
- 广工操作系统课程设计文档+代码+可执
- 操作系统课程设计生产者与消费者
- 操作系统实验.rar
- 操作系统课程设计进程调度 存储管理
- 进程调度模拟设计--先来先服务、强占
- 微机课程设计射击的模拟设计
- 微机课程设计汽车尾灯的模拟设计
- 操作系统课程设计含报告和源代码,
- 沈阳大学操作系统课程设计
- 操作系统课程设计-消费者生产者问
- 可变式分区存储管理 实验报告和源代
- 广工最新2020操作系统课程设计
- 操作系统课程设计-简单字符设备和块
评论
共有 条评论