计算机操作系统内存分配实验源代码_第1页
计算机操作系统内存分配实验源代码_第2页
计算机操作系统内存分配实验源代码_第3页
计算机操作系统内存分配实验源代码_第4页
计算机操作系统内存分配实验源代码_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#include#define OK 1/完成#define ERROR 0 / 出错typedef int Status;typedef struct free_table定义一个空闲区说明表结构int num; / 分区序号long address; /起始地址long length;/分区大小int state;/分区状态ElemType;typedef struct Node/ 线性表的双向链表存储结构ElemType data;struct Node *prior; / 前趋指针struct Node *next; /后继指针Node,*LinkList;LinkLi

2、st first; / 头结点LinkList end;/尾结点int flag;/记录要删除的分区序号Status Initblock()/ 开创带头结点的内存空间链表first=(LinkList)malloc(sizeof(Node);end=(LinkList)malloc(sizeof(Node);first-prior=NULL;first-next=end;end-prior=first;end-next=NULL;end-=1;end-=40;end-=600;end-=0;return OK;void sort()/ 分区序号重新排序Node *p=first-next,*q

3、;q=p-next;for(;p!=NULL;p=p-next)for(q=p-next;q;q=q-next)if(p-=q-q-+=1; /显示主存分配情况 void show() int flag=0;/ 用来记录分区序号Node *p=first;p-=0;p-=0;p-=40;p-=1;sort();printf(ntt 主存空间分配情况n);printf(*nn);printf(*nn);printf(分区序号t起始地址t分区大小t分区状态nn);while(p)printf(%dtt%dtt%d,p-,p-,p-;if(p-=0) printf(tt 空闲 nn); else p

4、rintf(tt 已分配 nn);p=p-next;printf(*nn);printf(*nn);/首次适应算法Status First_fit(int request)/为申请作业开辟新空间且初始化Node *p=first-next;LinkList temp=(LinkList)malloc(sizeof(Node);temp-=request;temp-=1;p-=1;while(p)if(p-=0)&(p-=request)/有大小恰好合适的空闲块p-=1;return OK;break;else if(p-=0) & (p-request)/有空闲块能满足需求且有剩余temp-p

5、rior=p-prior;temp-next=p;temp-=p-;temp-=p-;p-prior-next=temp;p-prior=temp;p-=temp-+temp-;p-=request;p-+=1;return OK;break;p=p-next;return ERROR;/最佳适应算法Status Best_fit(int request)int ch; /记录最小剩余空间Node *p=first;Node *q=NULL; / 记录最佳插入位置LinkList temp=(LinkList)malloc(sizeof(Node);temp-=request;temp-=1;

6、p-=1;while(p) / 初始化最小空间和最佳位置if(p-=0) & (p-=request) )if(q=NULL)q=p;ch=p-;else if(q- p-q=p;ch=p-;p=p-next;if(q=NULL) return ERROR;/ 没有找到空闲块else if(q-=request)q-=1;return OK;elsetemp-prior=q-prior;temp-next=q;temp-=q-;temp-=q-;q-prior-next=temp;q-prior=temp;q-+=request;q-=ch;q-+=1;return OK; return OK

7、;/最差适应算法Status Worst_fit(int request) int ch; /记录最大剩余空间Node *p=first-next;Node *q=NULL; / 记录最佳插入位置LinkList temp=(LinkList)malloc(sizeof(Node);temp-=request;temp-=1;p-=1;while(p) / 初始化最大空间和最佳位置if(p-=0 & (p-=request)(if(q=NULL) (q=p;ch=p-;) else if(q- (q=p;ch=p-;) p=p-next;)if(q=NULL) return ERROR;/ 没

8、有找到空闲块 else if(q-=request)(q-=1;return OK;)else(temp-prior=q-prior;temp-next=q;temp-=q-;temp-=q-;q-prior-next=temp;q-prior=temp;q-+=request;q-=ch;q-+=1;return OK;) return OK;)/分配主存Status allocation(int a)(int request;/申请内存大小printf(请输入申请分配的主存大小(单位:KB):); scanf(%d,&request);if(requestnext)if(q=p)if(q-

9、prior-=0&q-next-!=0)q-prior-+=q-;q-prior-next=q-next;q-next-prior=q-prior;q=q-prior;q-=0;q-=flag-1;if(q-prior-!=0&q-next-=0)q-+=q-next-;q-next=q-next-next;q-next-next-prior=q;q-=0;q-=flag;)if(q-prior-=0&q-next-=0)(q-prior-+=q-;q-prior-next=q-next;q-next-prior=q-prior;q=q-prior;q-=0;q-=flag-1;)if(q-p

10、rior-!=0&q-next-!=0)(q-=0;)return OK;)Status deal2(Node *p)/ 处理回收空间(Node *q=first;for(;q!=NULL;q=q-next)(if(q=p)(if(q-prior-=0&q-next-!=0)(q-prior-+=q-;q-prior-next=q-next;q-next-prior=q-prior;q=p-prior;q-=0;q-=flag-1;)if(q-prior-!=0&q-next-=0)(q-=0;)if(q-prior-=0&q-next-=0)q-prior-+=q-;q-prior-next

11、=q-next;q-next-prior=q-prior;q=q-prior;q-=0;q-=flag-1;)if(q-prior-!=0&q-next-!=0)(q-=0;)return OK;)/主存回收Status recovery(int flag)(Node *p=first;for(;p!=NULL;p=p-next)(if(p-=flag)(if(p-prior=first)(if(p-next!=end)/当前P指向的下一个不是最后一个时(if(p-next-=0)与后面的空闲块相连(p-+=p-next-;p-next-next-prior=p;p-next=p-next-n

12、ext;p-=0;p-=flag;)else p-=0;)if(p-next=end)/当前P指向的下一个是最后一个时(p-=0;)/ 结束 if(p-prior=block_first)的情况else if(p-prior!=first)if(p-next!=end)deal1(p);elsedeal2(p);/ 结束 if(p-prior!=block_first) 的情况/ 结束 if(p-=flag) 的情况printf(t* 回收成功*);return OK; /主函数 void main() int i;/操作选择标记int a;算法选择标记printf(*n);printf(*n

13、);printf(tt 用以下三种方法实现主存空间的分配n);printf(t(1)首次适应算法t(2)最佳适应算法t(3)最差适应算法n);printf(*n);printf(*n);printf(n);printf( 请输入所使用的内存分配算法:);scanf(%d,&a);while(a3)printf( 输入错误,请重新输入所使用的内存分配算法:n);scanf(%d,&a);switch(a)case 1:printf(nt*使用首次适应算法:*n);break;case 2:printf(nt*使用最佳适应算法:*n);break;case 3:printf(nt*使用最坏适应算法

14、:*n);break;Initblock(); / 开创空间表while(1)show(); printf(t1:分配内存t2:回收内存t0:退出n); printf(请输入您白操作:); scanf(%d,&i);if(i=1)allocation(a);/ 分配内存 else if(i=2)/ 内存回收printf(请输入您要释放的分区号:); scanf(%d,&flag);recovery(flag);else if(i=0) printf(n 退出程序 n); break; 退出else 输入操作有误printf(输入有误,请重试!); continue;八、执行结果和结果分析初始化

15、首次适应算法:请输入所使用的内存分配算法:1一*使用首次适应算法;*主存空间分配情况分区序号起始地址分区大小分区状态040已分配140630空 j对1己内存2=回收内存M:退出当作业1、2、31己内存2=回收内存M:退出已内存2;回收内存0:退出已内存2;回收内存0:退出里存空间分配情况配的王育大小单位*B。颔场酉即功LH*、- q工存空间分配情况分区序号起始地址分区大小分区状态a鞫4G已分配140138已分配217060已分配3230100已分配433U310空闲回收序号2里面的内存:分区序号起始地址分区大小分区状态4M已分配14M133已分配Z!/ba空闲32JU已分配4330310空闲分配作业4:分区序号起始地址分区大小分区状态0840已分配14团130已分配21701&0空闲433S28Q已分配55N国110空闲U ,分配内存 ,的藻格1不回收内存请分配的主存大小 单位;200*7S王存空间分配情况分区序号起始地址040170239339分区大小U ,分配内存 ,的藻格1不回收内存请分配的主存大小 回 信释 1:的翳E 你除出 艮11 I0回收序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论