[发明专利]在Linux上模拟实现Windows堆管理的方法有效
| 申请号: | 201310003729.X | 申请日: | 2013-01-06 | 
| 公开(公告)号: | CN103077076A | 公开(公告)日: | 2013-05-01 | 
| 发明(设计)人: | 李睿;杨南君;吕江花;马世龙 | 申请(专利权)人: | 北京航空航天大学 | 
| 主分类号: | G06F9/46 | 分类号: | G06F9/46 | 
| 代理公司: | 北京永创新实专利事务所 11121 | 代理人: | 周长琪 | 
| 地址: | 100191*** | 国省代码: | 北京;11 | 
| 权利要求书: | 查看更多 | 说明书: | 查看更多 | 
| 摘要: | |||
| 搜索关键词: | linux 模拟 实现 windows 管理 方法 | ||
1.一种在Linux上模拟实现Windows堆管理的方法,其特征在于,包括如下步骤:
步骤一:应用程序初始化时,使用brk命令从Linux虚拟地址中开辟出一块大小为dwSize的连续空间,用作类Windows虚存管理,并记录该空间的起始地址,设置从起始地址开始每页的状态、每页的访问权限以及锁定状态;
步骤二:构建数据结构,将应用程序的Windows操作行为转化为Linux操作的表达形式;
步骤三:对于堆操作,判断堆的类型,若为不可增长堆,转入步骤四;若为可增长堆,转入步骤五;Linux上不可增长堆和可增长堆通过将内存块以链表连接方式来模拟实现;
步骤四:堆保留最大大小的空间,提交初始大小的空间进行分配,当初始大小的空间消耗完时,转入步骤六;
步骤五:堆提交初始大小的空间进行分配,当初始大小的空间消耗完时,转入步骤七;
步骤六:堆从保留的空间中继续提交一段页面来满足分配需求,直到所保留的空间不能满足分配需求为止;
步骤七:系统通过VirtualAlloc()另辟新的空间来满足分配需求,直到系统内存不能满足分配需求为止;
步骤四和步骤五中进行空间按分配时,在Linux上实现了堆的固定地址再分配,步骤是:
步骤11:获取指定的内存块的起始地址,标记该内存块为a1;
步骤12:判断内存块a1是否满足再分配所需空间的大小,若不满足,转入步骤13;否则,转入步骤15;
步骤13:在堆中寻找空闲块,当寻找到一个空闲块时,进行步骤14;
步骤14:判断寻找到的所有空闲块与内存块a1的大小之和是否满足再分配所需空间的大小,若不满足,转入步骤13,继续寻找下一个空闲块;若满足,转入步骤15;
步骤15:合并内存块a1与所有寻找到的空闲块;
步骤16:分割出用于再分配的内存块,所分割的内存块的起始地址为内存块a1的起始地址。
2.根据权利要求1所述的在Linux上模拟实现Windows堆管理的方法,其特征在于,所述的步骤二中构建的数据结构中,实现应用程序在Linux上的系统资源调用的关键数据结构中定义了如下内容:进程总虚拟页面数TOTAL_VIRTUAL_PAGES;用作类Windows虚存管理的页面数MAXIMUM_VIRTUAL_PAGES;系统页大小PageSize;类Windows虚存管理的起始地址Base;从起始地址Base开始每页的状态MemoryState[TOTAL_VIRTUAL_PAGES];从起始地址开始每页保留操作的信息AllocSize[TOTAL_VIRTUAL_PAGES];从起始地址开始每页的访问权限Protection[TOTAL_VIRTUAL_PAGES];从起始位置开始每页的锁定状态Locked[TOTAL_VIRTUAL_PAGES]。
3.根据权利要求1所述的在Linux上模拟实现Windows堆管理的方法,其特征在于,所述的步骤三中不可增长堆和可增长堆通过将内存块以链表连接方式来模拟实现,具体每个堆都具有一个堆头部,堆内每个内存块都具有一个内存块头部;
内存块头部的数据结构如下:
其中,struct_HEAP_BLOCK_HEAD表示为内存块头部的数据结构;DWORD表示双字节数据类型;char表示字符数据类型;*PreBlock表示指向前一个内存块的指针;*NextBlock表示指向下一个内存块的指针;Size1表示内存块可用大小;Free表示是否是空闲块;
堆头部的数据结构如下:
其中,struct_HEAP_HEAD表示堆头部的数据结构;*FirstBlock表示指向堆的第一个内存块的指针;Size2表示为堆保留的内存大小;MaximumSize表示堆的最大大小;Growable表示是可增长堆还是不可增长堆,Executable表示是否能在堆中运行代码;
此外,堆管理中还定义了堆的最大堆数目和当前堆数量:
#define MAXIMUM_HEAPS R
int HeapNum;
HANDLE HeapHandle[MAXIMUM_HEAPS];
其中,R表示整数;HANDLE表示句柄数据类型;MAXIMUM_HEAPS表示最大堆数目;HeapNum表示当前堆数量;HeapHandle[MAXIMUM_HEAPS]中记录每个堆的句柄。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310003729.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:灭菌装置及灭菌方法
 - 下一篇:低滑动率渐变压力角齿轮及设计方法
 





