教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 综合文档 >

操作系统实验四报告-主存空间分配和回收(含源码)(3)

来源:网络收集 时间:2026-05-23
导读: } return OK; } //分配主存 Status allocation(int a) { int request;//申请内存大小 printf(\请输入申请分配的主存大小(单位:KB):\ scanf(\ if(request printf(\分配大小不合适,请重试!\ return ERROR; } switch

}

return OK; }

//分配主存

Status allocation(int a) {

int request;//申请内存大小

printf(\请输入申请分配的主存大小(单位:KB):\ scanf(\ if(request<0 ||request==0) {

printf(\分配大小不合适,请重试!\ return ERROR; }

switch(a) {

case 1: //默认首次适应算法

if(First_fit(request)==OK) printf(\分配成功!****\ else printf(\内存不足,分配失败!****\ return OK; break;

case 2: //选择最佳适应算法

if(Best_fit(request)==OK) printf(\分配成功!****\ else printf(\内存不足,分配失败!****\ return OK; break; case 3: //选择最差适应算法

if(Worst_fit(request)==OK) printf(\分配成功!****\ else printf(\内存不足,分配失败!****\ return OK; break; } }

Status deal1(Node *p)//处理回收空间 {

Node *q=first;

for(;q!=NULL;q=q->next) {

if(q==p) { if(q->prior->data.state==0&&q->next->data.state!=0) {

11

q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0;

q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state==0) {

q->data.length+=q->next->data.length; q->next=q->next->next; q->next->next->prior=q; q->data.state=0;

q->data.num=flag; }

if(q->prior->data.state==0&&q->next->data.state==0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0;

q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state!=0) { q->data.state=0; } } }

return OK; }

Status deal2(Node *p)//处理回收空间 {

Node *q=first;

for(;q!=NULL;q=q->next) {

if(q==p) { if(q->prior->data.state==0&&q->next->data.state!=0) { q->prior->data.length+=q->data.length; q->prior->next=q->next;

12

q->next->prior=q->prior; q=p->prior; q->data.state=0;

q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state==0) {

q->data.state=0; }

if(q->prior->data.state==0&&q->next->data.state==0) { q->prior->data.length+=q->data.length; q->prior->next=q->next; q->next->prior=q->prior; q=q->prior; q->data.state=0;

q->data.num=flag-1; }

if(q->prior->data.state!=0&&q->next->data.state!=0) { q->data.state=0; } } }

return OK; }

//主存回收

Status recovery(int flag) {

Node *p=first;

for(;p!=NULL;p=p->next) {

if(p->data.num==flag) { if(p->prior==first) { if(p->next!=end)//当前P指向的下一个不是最后一个时 { if(p->next->data.state==0) //与后面的空闲块相连 {

p->data.length+=p->next->data.length; p->next->next->prior=p; p->next=p->next->next;

13

p->data.state=0; p->data.num=flag; } else p->data.state=0; } if(p->next==end)//当前P指向的下一个是最后一个时 {

p->data.state=0; } }//结束if(p->prior==block_first)的情况 else if(p->prior!=first) { if(p->next!=end) { deal1(p); } else { deal2(p); } }//结束if(p->prior!=block_first)的情况 }//结束if(p->data.num==flag)的情况 }

printf(\回收成功****\ return OK; }

//主函数 void main() {

int i; //操作选择标记 int a;//算法选择标记

printf(\ printf(\用以下三种方法实现主存空间的分配\\n\

printf(\首次适应算法\\t(2)最佳适应算法\\t(3)最差适应算法\\n\ printf(\ printf(\

printf(\请输入所使用的内存分配算法:\ scanf(\ while(a<1||a>3) {

printf(\输入错误,请重新输入所使用的内存分配算法:\\n\ scanf(\ }

14

switch(a) { case 1:printf(\使用首次适应算法:****\\n\ case 2:printf(\使用最佳适应算法:****\\n\ case 3:printf(\使用最坏适应算法:****\\n\ }

Initblock(); //开创空间表 while(1) {

show();

printf(\分配内存\\t2: 回收内存\\t0: 退出\\n\ printf(\请输入您的操作:\ scanf(\ if(i==1)

allocation(a); // 分配内存 else if(i==2) // 内存回收 {

printf(\请输入您要释放的分区号:\ scanf(\ recovery(flag); }

else if(i==0) { printf(\退出程序\\n\ break; //退出 }

else //输入操作有误 {

printf(\输入有误,请重试!\ continue; } } }

八、执行结果和结果分析

15

…… 此处隐藏:1283字,全部文档内容请下载后查看。喜欢就下载吧 ……
操作系统实验四报告-主存空间分配和回收(含源码)(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/403439.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)