操作系统实验一可变分区存储管理(共7页).doc
《操作系统实验一可变分区存储管理(共7页).doc》由会员分享,可在线阅读,更多相关《操作系统实验一可变分区存储管理(共7页).doc(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验一 :可变分区存储管理(一)实验题目 (二)实验目的1加深对可变分区的存储管理的理解;2提高用C语言编制大型系统程序的能力,特别是掌握C语言编程的难点:指针和指针作为函数参数;3掌握用指针实现链表和在链表上的基本操作。前空闲区释放区后空闲区(a)前空闲区释放区后空闲区(b)前空闲区释放区后空闲区(c)前空闲区释放区后空闲区(d)图2-9释放区与前后空闲区相邻的情况(三)程序代码#include#include#include #define new(type) (type *)malloc(sizeof(type) typedef struct _map unsi
2、gned int size; char *address; struct _map *next; struct _map *prev; map;typedef map *pmap; typedef struct _mem unsigned int totalSize; char* space; pmap head; pmap cMap; mem;typedef mem *pmem; pmem createMem(unsigned int to_size) /创建内存区域 pmem newMem=new(mem); pmap newHead=new(map); newMem-totalSize=
3、to_size; newHead-size=to_size; newHead-address=newMem-space; newHead-next=newHead; newHead-prev=newHead; newMem-head=newHead; newMem-cMap=newHead; return newMem; void freeMem(pmem m) pmap map,cMap; pmap head=m-head; free(map-address); for(map=head;map-next!=head;) cMap=map; map=cMap-next; free(cMap)
4、; free(m); char* lmalloc(pmem cMem,unsigned int size) /分配函数if(size1000)printf(内存容量超出范围!n); /当需要分配的内存空间已经大于实际空间时出错else pmap p=cMem-cMap; char* rAddr; if(size=0) return NULL; while(p-sizenext=cMem-cMap) return NULL; p=p-next; rAddr=p-address; p-size-=size; p-address+=size; if(p-size=0) p-prev-next=p-n
5、ext; 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; return rAddr; void lfree(pmem m,unsigned int size,char* addr) /释放函数 pmap nextMap,prevMap,newMap; if(addrspace | addr=m-space+m-totalSize) fprintf(stderr,地址越界n); /释放空间时,大小输入出错
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 可变 分区 存储 管理
限制150内