[发明专利]在Linux上模拟实现Windows堆管理的方法有效
| 申请号: | 201310003729.X | 申请日: | 2013-01-06 |
| 公开(公告)号: | CN103077076A | 公开(公告)日: | 2013-05-01 |
| 发明(设计)人: | 李睿;杨南君;吕江花;马世龙 | 申请(专利权)人: | 北京航空航天大学 |
| 主分类号: | G06F9/46 | 分类号: | G06F9/46 |
| 代理公司: | 北京永创新实专利事务所 11121 | 代理人: | 周长琪 |
| 地址: | 100191*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | linux 模拟 实现 windows 管理 方法 | ||
技术领域
本发明属于应用软件跨平台迁移领域,具体是一种在Linux上模拟实现Windows堆管理的方法。
背景技术
应用程序的运行不能直接访问底层的系统资源,它们对系统资源的访问都必须遵循操作系统所规定的方式,由此可见操作系统所扮演的重要角色。不同的操作系统由于立足点的不同,因此在设计思想上有着本质的区别,从而导致其在设计架构以及最终实现上所呈现的差异性。这些差异性具体反映在其所规定的系统资源访问方式上。因此基于某种特定操作系统开发的应用程序往往只能在这种特定的操作系统上运行。然而如果能让应用程序摆脱对操作系统的依赖,不论从应用程序提供商还是用户来说,这都是非常有意义的。
目前已有的迁移技术大致分为两大类,一类是核内差异核内补,典型的例子是浙大网新提出的“龙井(Longene)”项目,其主要是通过将Linux内核扩充成一个既支持Linux应用也支持Windows应用的兼容内核,使得用户可以直接在Linux操作系统上运行Windows应用程序。对内核的修改并不适合商业化的Linux操作系统,理由是,Linux商业化过程中,为实现商业目的,或多或少对其中采用的Linux内核进行了修改,再次的改动很难避免与之前改动不发生冲突,亦或使得改动更为复杂,增加改动引入错误的风险,因此限制了它的适用范围;另一类是核内差异核外补,典型的例子是WINE项目,WINE通过WINE服务进程来虚拟Win32进程,而应用程序作为客户端进程,两者之间通过socket和pipe通道,连接相应的动态链接库Winelib,以协作运行。WINE项目实质上是通过操作指令的翻译/转换来弥补Windows和Linux之间的差异,然而两个操作系统在系统资源访问方式的实现上粒度是不一样的,因此操作指令的翻译/转换在很大范围内难以保持一致。这两种方式都有其一定局限性,需要尝试通过对机制的重新构建来解决应用程序跨平台迁移问题。
内存管理是应用程序跨平台迁移中极为重要的一部分,因为几乎每一个应用程序都要涉及到内存操作。在Windows中,内存管理强调了虚存管理和堆管理的两层结构,而在Linux中却并没有突出这一点。并且Linux中不能通过其堆管理的系统调用实现Windows的“堆的固定地址再分配”的功能。因此用Linux的现有机制不能完全实现Windows的内存管理机制。
发明内容
本发明要解决的技术问题是:如何在不修改Linux内核的情况下,在Linux上重新构建Windows的内存管理机制,实现虚存管理和堆管理。针对该问题,本发明提供了一种在Linux上模拟实现Windows堆管理的方法。
本发明提供的一种在Linux上模拟实现Windows堆管理的方法,具体步骤如下:
步骤一:应用程序初始化时,使用brk命令从Linux虚拟地址中开辟出一块大小为dwSize的连续空间,用作类Windows虚存管理,并记录该空间的起始地址,设置从起始地址开始每页的状态、每页的访问权限以及锁定状态;
步骤二:构建数据结构,用于将用户需求的Windows操作行为转化为Linux操作的表达形式;
步骤三:对于堆操作,判断堆的类型,若为不可增长堆,转入步骤四;若为可增长堆,转入步骤五;在Linux上,不可增长堆和可增长堆通过将内存块以链表连接方式来模拟实现;
步骤四:堆保留最大大小的空间,提交初始大小的空间进行分配。当初始大小的空间消耗完时,转入步骤六;
步骤五:堆提交初始大小的空间进行分配,当初始大小的空间消耗完时,转入步骤七;
步骤六:堆从保留的空间中继续提交一段页面来满足分配需求,直到所保留的空间不能满足分配需求为止;
步骤七:系统通过VirtualAlloc()另辟新的空间来满足分配需求,直到系统内存不能满足分配需求为止。
步骤四和步骤五中进行空间按分配时,在Linux上实现了堆的固定地址再分配,步骤是:
步骤11:获取指定的内存块的起始地址,标记该内存块为b1;
步骤12:判断内存块b1是否满足再分配所需空间的大小,若不满足,转入步骤13;否则,转入步骤15;
步骤13:在堆中寻找空闲块,当寻找到一个空闲块时,进行步骤14;
步骤14:判断寻找到的所有空闲块与内存块b1的大小之和是否满足再分配所需空间的大小,若不满足,转入步骤13,继续寻找下一个空闲块;若满足,转入步骤15;
步骤15:合并内存块b1与所有寻找到的空闲块;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310003729.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:灭菌装置及灭菌方法
- 下一篇:低滑动率渐变压力角齿轮及设计方法





