操作系统实验一可变分区存储管理(含代码)

操作系统实验一可变分区存储管理(含代码)

ID:19726334

大小:83.50 KB

页数:7页

时间:2018-10-05

操作系统实验一可变分区存储管理(含代码)_第1页
操作系统实验一可变分区存储管理(含代码)_第2页
操作系统实验一可变分区存储管理(含代码)_第3页
操作系统实验一可变分区存储管理(含代码)_第4页
操作系统实验一可变分区存储管理(含代码)_第5页
资源描述:

《操作系统实验一可变分区存储管理(含代码)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实验一:可变分区存储管理(一)  实验题目(二) 实验目的1.加深对可变分区的存储管理的理解;2.提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数;3.掌握用指针实现链表和在链表上的基本操作。前空闲区释放区后空闲区(a)前空闲区释放区后空闲区(b)前空闲区释放区后空闲区(c)前空闲区释放区后空闲区(d)图2-9释放区与前后空闲区相邻的情况(三)程序代码#include#include#include#definenew(type)(type*)malloc(si

2、zeof(type))typedefstruct_map{unsignedintsize;char*address;struct_map*next;struct_map*prev;}map;typedefmap*pmap;typedefstruct_mem{unsignedinttotalSize;char*space;pmaphead;pmapcMap;}mem;typedefmem*pmem;pmemcreateMem(unsignedintto_size)//创建内存区域{pmemnewMem=new(mem);pmapnewHead=new(map

3、);newMem->totalSize=to_size;newHead->size=to_size;newHead->address=newMem->space;newHead->next=newHead;newHead->prev=newHead;newMem->head=newHead;newMem->cMap=newHead;returnnewMem;}voidfreeMem(pmemm){pmapmap,cMap;pmaphead=m->head;free(map->address);for(map=head;map->next!=head;){c

4、Map=map;map=cMap->next;free(cMap);}free(m);}char*lmalloc(pmemcMem,unsignedintsize)//分配函数{if(size>1000){printf("内存容量超出范围!");//当需要分配的内存空间已经大于实际空间时出错}else{pmapp=cMem->cMap;char*rAddr;if(size==0)returnNULL;while(p->sizenext==cMem->cMap)returnNULL;p=p->next;}rAddr=p->add

5、ress;p->size-=size;p->address+=size;if(p->size==0){p->prev->next=p->next;p->next->prev=p->prev;cMem->cMap=p->next;if(cMem->head==p)cMem->head=p->next;if(p->next!=cMem->head)free(p);}else{cMem->cMap=p;}returnrAddr;}}voidlfree(pmemm,unsignedintsize,char*addr)//释放函数{pmapnextMap,prevM

6、ap,newMap;if(addrspace

7、

8、addr>=m->space+m->totalSize){fprintf(stderr,"地址越界");//释放空间时,大小输入出错return;}nextMap=m->head;while(nextMap->addressnext;if(nextMap==m->head)break;}prevMap=nextMap->prev;if(nextMap!=m->head&&prevMap->address+prevMap->size==addr)//第

9、一种情况{prevMap->size+=size;if(addr+size==nextMap->address)//第二种情况{prevMap->size+=nextMap->size;prevMap->next=nextMap->next;prevMap->next->prev=prevMap;if(nextMap==m->cMap){m->cMap=prevMap;}free(nextMap);nextMap=NULL;}}else{if(addr+size==nextMap->address)//第三种情况{nextMap->address-=siz

10、e;nextMap->size+=size;}else//第四种情

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。