首页 理论教育 HelloChina内存管理机制总结

HelloChina内存管理机制总结

时间:2023-10-21 理论教育 版权反馈
【摘要】:作为面向智能领域的操作系统,Hello China实现了比较灵活的内存管理机制,把整个内存空间分成了几个区域,采取不同的算法对其进行管理:操作系统保留区域和操作系统核心代码加载区域,即内存的起始2MB内存空间。由于VirtualAlloc的局限,Hello China又实现了线程本地堆机制,应用程序(线程)可通过malloc和free等符合ANSI C函数库标准的接口,来灵活分配和释放这个区域的内存。VirtualAlloc通过调用页框管理器提供的服务,来分配物理内存。

HelloChina内存管理机制总结

内存管理机制是操作系统最复杂最核心的机制,对任何操作系统来说,内存管理机制的好坏,将直接影响操作系统的整体效率。作为面向智能领域的操作系统,Hello China实现了比较灵活的内存管理机制,把整个内存空间分成了几个区域,采取不同的算法对其进行管理:

(1)操作系统保留区域和操作系统核心代码加载区域,即内存的起始2MB内存空间(起始的1MB内存空间保留未用)。这2MB的内存空间不能分配,操作系统加载的时候自动占用。

(2)核心内存池,进一步又分为以4KB为单位进行分配的内存池和以任意尺寸进行分配的内存池。其中以4KB为单位分配的内存池,是供驱动程序、文件系统等需要大量内存作为缓冲的功能实体使用的。而以任意尺寸分配的内存池,则是操作系统核心使用的,用于分配尺寸大小变化很大的核心数据结构。这两个内存池通过统一的接口——KmemAlloc和KmemFree两个函数——进行操作。同时通过宏定义,可灵活调整核心内存池的起始地址和大小。

(3)分页内存池,除去上述(1)和(2)之外的内存区域。这个区域的内存,以CPU的页尺寸为大小(比如4KB)进行管理和分配,一个页框管理对象对所有处于这个范围的物理内存进行统一管理。这部分内存可供应用程序使用,也可以供操作系统加载应用程序使用。操作系统内核可通过调用页框管理对象提供的函数,来分配和释放这个范围内的内存(以页面为单位)。但应用程序不能直接调用页框管理器提供的服务,而只能调用VirtualAlloc来分配这个范围内的内存。由于VirtualAlloc的局限(只能分配尺寸为页面大小整数倍的内存),Hello China又实现了线程本地堆机制,应用程序(线程)可通过malloc和free等符合ANSI C函数库标准的接口,来灵活分配和释放这个区域的内存。(www.xing528.com)

(4)如果启用了虚拟内存功能,操作系统提供VirtualAlloc和VirtualFree等函数,来动态地在整个虚拟内存空间(对32位CPU来说,是4GB)范围内预留和释放内存区域。在预留和释放内存区域的时候,可以设置特定的标志位,控制VirtualAlloc等函数的行为。比如可以只预留虚拟内存空间而不分配实际的物理内存(设备驱动程序经常使用该功能),或者在预留虚拟内存空间时分配对应大小的物理内存,等等。VirtualAlloc通过调用页框管理器提供的服务,来分配物理内存。页索引对象实现了虚拟内存到物理内存的映射管理。

之所以按区域划分内存,并通过不同的机制来分别进行管理,是为了能够满足各种场景下的需要。当然,内存划分模式是由源代码中的宏定义来控制的,读者可以通过修改这些宏定义,来控制每个区域的大小和起始位置,甚至取消某个或几个区域。这样的实现方式,为用户提供了最大可能的灵活性。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈