可变分区分配与回收——采用最坏算法,操作系统课程设计(4)

2019-03-28 19:47

哈尔滨理工大学课程设计报告

printf(\找不到合适的内存分区,分配失败...\\n\ return 0; }

// 最佳适应算法

int bestFit(int taskId, int size) {

subAreaNode *tar = NULL; int tarSize = SIZE + 1; subAreaNode *p = subHead.nxt; while(p != NULL) { // 寻找最佳空闲区间

if(p->state == Free && p->size >= size && p->size < tarSize) { tar = p;

tarSize = p->size; } p = p->nxt; }

if(tar != NULL) {

// 找到要分配的空闲分区 if(tar->size - size <= MINSIZE) { // 整块分配 tar->state = Busy; tar->taskId = taskId; } else {

// 分配大小为size的区间

subAreaNode *node = (subAreaNode *)malloc(sizeof(subAreaNode)); node->addr = tar->addr + size;

哈尔滨理工大学课程设计报告

node->size = tar->size - size; node->state = Free; node->taskId = -1; // 修改分区链节点指针 node->pre = tar; node->nxt = tar->nxt; if(tar->nxt != NULL) { tar->nxt->pre = node; }

tar->nxt = node; // 分配空闲区间 tar->size = size; tar->state = Busy; tar->taskId = taskId; }

printf(\内存分配成功!\\n\ return 1; } else {

// 找不到合适的空闲分区

printf(\找不到合适的内存分区,分配失败...\\n\ return 0; } }

int worstFit(int taskId, int size) {

subAreaNode *tar = NULL; int tarSize;

哈尔滨理工大学课程设计报告

int mm=1;

subAreaNode *p = subHead.nxt; while(p != NULL&&mm==1) { // 寻找最佳空闲区间

if(p->state == Free && p->size >= size) { tar = p;

tarSize = p->size; mm=0; }

else

p = p->nxt;

}

p=subHead.nxt;

while(p != NULL)

{

// 寻找最大空闲区间

if(p->state == Free && p->size >= tarSize && p->size>=size) { tar = p;

tarSize = p->size;//遍历找到最大空闲区间

p=p->nxt;

} else

p = p->nxt;

}

if(tar != NULL) {

// 找到要分配的空闲分区 if(tar->size-size<= MINSIZE) {

哈尔滨理工大学课程设计报告

// 整块分配 tar->state = Busy; tar->taskId = taskId; } else {

// 分配大小为size的区间 subAreaNode*node=(subAreaNode*)malloc(sizeof(subAreaNode)); node->addr = tar->addr + size; node->size = tar->size - size; node->state = Free; node->taskId = -1; // 修改分区链节点指针 node->pre = tar; node->nxt = tar->nxt; if(tar->nxt != NULL) { tar->nxt->pre = node; }

tar->nxt = node; // 分配空闲区间 tar->size = size; tar->state = Busy; tar->taskId = taskId; }

printf(\内存分配成功!\\n\ return 1; } else {

// 找不到合适的空闲分区

哈尔滨理工大学课程设计报告

printf(\找不到合适的内存分区,分配失败...\\n\ return 0; } }

// 回收内存

int freeSubArea(int taskId) {

int flag = 0;

subAreaNode *p = subHead.nxt, *pp; while(p != NULL) {

if(p->state == Busy && p->taskId == taskId) { flag = 1;

if((p->pre != &subHead && p->pre->state == Free) && (p->nxt != NULL && p->nxt->state == Free)) { // 情况1:合并上下两个分区 // 先合并上区间 pp = p; p = p->pre; p->size += pp->size; p->nxt = pp->nxt; pp->nxt->pre = p; free(pp); // 后合并下区间 pp = p->nxt; p->size += pp->size; p->nxt = pp->nxt;


可变分区分配与回收——采用最坏算法,操作系统课程设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:司法考试《刑法》知识点:破坏社会主义市场经济秩序罪每日一练(2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: