CN109976906A - 一种linux系统的内存分配管理方法 - Google Patents
一种linux系统的内存分配管理方法 Download PDFInfo
- Publication number
- CN109976906A CN109976906A CN201910174815.4A CN201910174815A CN109976906A CN 109976906 A CN109976906 A CN 109976906A CN 201910174815 A CN201910174815 A CN 201910174815A CN 109976906 A CN109976906 A CN 109976906A
- Authority
- CN
- China
- Prior art keywords
- memory
- subregion
- management method
- memory allocation
- kernel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000007726 management method Methods 0.000 title claims abstract description 28
- 238000000034 method Methods 0.000 claims abstract description 36
- 230000008569 process Effects 0.000 claims abstract description 23
- 230000007246 mechanism Effects 0.000 claims abstract description 7
- 238000000638 solvent extraction Methods 0.000 claims description 9
- 241000208340 Araliaceae Species 0.000 claims description 3
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 claims description 3
- 235000003140 Panax quinquefolius Nutrition 0.000 claims description 3
- 235000008434 ginseng Nutrition 0.000 claims description 3
- 230000005055 memory storage Effects 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种linux系统的内存分配管理方法,其通过对物理内存区进行抽象,形成若干抽象分区,并在抽象后通过mmap机制使用户进程可直接对物理内存分区进行管理。本发明提供的方案能够实现提供更灵活有效的内存管理方式。
Description
技术领域
本发明涉及软件系统技术,具体涉及软件系统中内存分配管理技术。
背景技术
现有的内存分配管理方法比较单一,物理内存全部由内核进行管理,用户进程使用内存需向内核申请。
内核的分段分页机制对物理内存的管理是比较有效的,但存在以下几个缺点:
1.用户进程在读写内存时,会频繁发生系统调用,而且还存在用户态和内核态数据的拷贝过程,导致内存读写效率低下。
2.内核对物理内存的管理细节对用户进程是屏蔽的,用户进程不知道当前访问的内存的物理地址是多少,用户进程也无法指定访问某段已知的物理地址,所以无法适用于某些应用场景,比如保留内存。
发明内容
针对现有内存分配管理技术所存在的问题,需要一种全新的内存分配管理方案。
为此,本发明的目的在于提供一种linux系统的内存分配管理方法,该方案实现让用户进程直接对物理内存分区进行管理,以对内存进行更灵活有效的管理。
为了达到上述目的,本发明提供的linux系统的内存分配管理方法,所述方法通过对物理内存区进行抽象,形成若干抽象分区,并在抽象后通过mmap机制使用户进程可直接对物理内存分区进行管理。
进一步的,在对物理内存进行抽象后,用户进程(user)可通过mmap机制将物理内存的抽象分区实例化,以注册为用户进程可直接管理的分区。
进一步的,所述方法通过bootloder对于物理内存区完成抽象,并传参给内核(kernel)和用户进程(user)。
进一步的,所述方法对物理内存区进行抽象,分为DMA区、Normal区、Kernel区、以及Reserve区,所述DMA分区和Normal分区用于实现系统堆栈;所述Kernel分区交由kernel管理;所述Reserve分区由bootloader、kernel、user共享,保留重启前的信息,但掉电丢失。
进一步的,所述Reserve分区管理方式采用向下顺序分配方式,当没有分配或已分配的方案不能满足应用时进行重新分配。
进一步的,所述管理方法还包括向下层提供内存区注册接口,所述下层为linux用户态的bsps,bsps调用内存区注册接口将抽象内存分区实例化。
进一步的,所述管理方法还包括向上层提供内存分配接口,所述上层为系统堆栈管理模块、保留内存模块等中上层应用模块,上层应用模块可以调用内存分配接口自由分配各分区的内存。
本发明提供的方案能够实现让用户进程直接对物理内存分区进行管理,规避了用户态到内核态数据的拷贝过程,提高了内存读写效率。
本发明提供的方案在实现用户进程直接对物理内存分区进行管理时,用户进程知道当前访问的内存的物理地址是多少,用户进程也可以指定访问某段已知的物理地址,所以可以实现某些特殊应用场景,比如保留内存。
本发明提供的方案在实现用户进程直接对物理内存分区进行管理时,经典的应用场景是保留内存,保留内存的特点是bootloader、kernel、user共享;保留重启前的信息,但掉电丢失。
附图说明
以下结合附图和具体实施方式来进一步说明本发明。
图1为本发明实例中对物理内存区进行抽象的示意图;
图2为本发明实例中保留内存内部结构示意图。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
本实例给出的内存分配管理方案,通过对物理内存区进行抽象,形成若干抽象分区,并在抽象后通过mmap机制使用户进程可直接对物理内存分区进行管理,从而实现提供更灵活有效的内存管理方式。
参见图1,据此原理,本实例首先对物理内存区进行抽象,分为DMA分区、Normal分区、Reserve分区和Kernel分区。
其中,DMA分区和Normal分区主要用于实现系统堆栈;
Kernel分区交由kernel管理;
Reserve分区bootloader、kernel、user共享。
对于Reserve分区,由于bootloader,kernel,user都可以直接访问Reserve内存分区对应的物理地址,所以此处为三者共享Reserve分区;同时,保留重启前的信息,例如kernel/user态保存一些运行时调试信息和系统日志到Reserve分区,bootloader从Reserve分区读取这些信息进行分析,但掉电丢失,主要用于实现break(断点)、rawlog(系统运行日志)和一些debug功能。
其中,user管理的Reserve分区是bootloader、kernel、user共享的,所以可以用来实现保留内存的功能。保留内存实现的基本功能是从Reserve分区为各个模块分配固定的保留内存,这部分内存为该模块私有的,用于实现break(断点)、rawlog(系统运行日志)和一些debug功能。
再者,由于保留内存分配后不会再释放,因此采用自顶向下的分配方式,以避免重复分配。当没有进行保留内存分配(即第一次启动)或已进行的分配方案不能满足应用(即分配方案版本不一致)时进行重新分配。
本实例中在实现对物理内存区抽象时,由bootloder完成并传参给kernel和user。本实例在由bootloder对物理内存区抽象的过程,即进行内存分区,bootloder进行内存分区具体可以由启动参数memparts来实现,也可以通过设备树来实现。
据此对物理内存进行抽象后,user可以通过mmap机制将物理内存的抽象分区实例化,如注册为user可直接管理的分区。
在此基础上,本实例还向下层提供内存区注册接口,这里的下层为linux用户态的bsps,即向bsps提供内存区注册接口,bsps调用该接口将抽象内存分区实例化。
再者,本实例还向上层提供内存分配接口,这里的上层为系统堆栈管理模块、保留内存模块等中上层应用模块,上层应用模块可以调用内存分配接口自由分配各分区的内存。通过这两个接口可以提供灵活的内存管理。
针对本实例给出的内存分配管理方案,以下举例说明一下其具体的实现过程。
参见图1,根据bootloder传递过来的内存抽象,将物理内存分区为DMA区、Normal区、Reserve区。
接着,向bsps提供内存区注册接口,bsps调用该接口将抽象内存分区实例化。
本步骤在具体实现时,主要包括如下两步骤:
1.定义分区类型:
GMEM_REGION_DMA;
GMEM_REGION_NORMAL;
GMEM_REGION_RESERVE。
2.根据分区类型实例化分区:
bsps调用内存区注册接口将DMA内存分区实例化;
bsps调用内存区注册接口将NORMAL内存分区实例化;
bsps调用内存区注册接口将RESERVE内存分区实例化。
接着,向应用程序提供各分区的分配接口,上层应用模块可以调用内存分配接口自由分配各分区的内存。
本步骤在具体实现时,主要包括如下两步骤:
1.定义可分配内存分区类型:
GMEM_ALLOC_DMA;
GMEM_ALLOC_NORMAL;
GMEM_ALLOC_RESERVE。
2.根据应用模块的功能进行内存分配:
保留内存功能模块调用内存分配接口将Reserve分区分配给本模块使用,并返回Reserve分区对应的程序地址空间的起始地址和大小。
接着,保留内存模块(如图2所示)。
定义保留内存数据结构:
revMem_s
{
init表示数据结构是否已经初始化;
phyMemUp是保留内存的顶部;
phyMemDown是保留内存的底部;
phyMemCurrent是保留内存的当前位置;
userMemOffset是保留内存的程序空间和物理空间的偏移;
reAlloc是保留内存的重新分配的标识;
header是保留内存的控制头指针(图2定义了其数据结构);
block是保留内存的内存块的控制头指针(图2定义了其数据结构);
lock是全局锁;
}revMem_t;
保留内存的管理可以抽象为对保留内存数据结构的管理,在使用保留内存之前要先初始化保留内存数据结构。具体步骤如下:
1.bsps调用内存区注册接口将Reserve内存分区实例化;
2.保留内存功能模块调用内存分配接口将Reserve分区分配给本模块使用,并返回Reserve分区对应的程序地址空间的起始地址和大小;
3.初始化保留内存数据结构;
4.根据保留内存的具体应用(break、rawlog、debug),以自顶向下的分配方式分配保留内存块。没有保留内存块由内存块的控制头进行管理。
最后需要说明的,上述本发明的方案为纯软件架构,可以透过程序代码布设于实体媒体,如硬盘、光盘片、或是任何电子装置(如智能型手机、计算机可读取的储存媒体),当机器加载程序代码且执行(如智能型手机加载且执行),机器成为用以实行本发明的装置。上述本发明的方法与装置亦可以程序代码型态透过一些传送媒体,如电缆、光纤、或是任何传输型态进行传送,当程序代码被机器(如智能型手机)接收、加载且执行,机器成为用以实行本发明的装置。
以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (7)
1.linux系统的内存分配管理方法,其特征在于,所述方法通过对物理内存区进行抽象,形成若干抽象分区,并在抽象后通过mmap机制使用户进程可直接对物理内存分区进行管理。
2.根据权利要求1所述的linux系统的内存分配管理方法,其特征在于,在对物理内存进行抽象后,用户进程可通过mmap机制将物理内存的抽象分区实例化,以注册为用户进程可直接管理的分区。
3.根据权利要求1所述的linux系统的内存分配管理方法,其特征在于,所述方法通过bootloder对于物理内存区完成抽象,并传参给内核和用户进程。
4.根据权利要求1所述的linux系统的内存分配管理方法,其特征在于,所述方法对物理内存区进行抽象,分为DMA区、Normal区、Kernel区、以及Reserve区,所述DMA分区和Normal分区用于实现系统堆栈;所述Kernel分区交由kernel管理;所述Reserve分区由bootloader、kernel、user共享,保留重启前的信息,且掉电丢失。
5.根据权利要求4所述的linux系统的内存分配管理方法,其特征在于,所述Reserve分区管理方式采用向下顺序分配方式,当没有分配或已分配的方案不能满足应用时进行重新分配。
6.根据权利要求1所述的linux系统的内存分配管理方法,其特征在于,所述管理方法还包括向下层提供内存区注册接口,所述下层为linux用户态的bsps,bsps调用内存区注册接口将抽象内存分区实例化。
7.根据权利要求1所述的linux系统的内存分配管理方法,其特征在于,所述管理方法还包括向上层提供内存分配接口,所述上层为系统中上层应用模块,上层应用模块可调用内存分配接口自由分配各分区的内存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910174815.4A CN109976906A (zh) | 2019-03-08 | 2019-03-08 | 一种linux系统的内存分配管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910174815.4A CN109976906A (zh) | 2019-03-08 | 2019-03-08 | 一种linux系统的内存分配管理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109976906A true CN109976906A (zh) | 2019-07-05 |
Family
ID=67078133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910174815.4A Pending CN109976906A (zh) | 2019-03-08 | 2019-03-08 | 一种linux系统的内存分配管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109976906A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102156675A (zh) * | 2010-02-12 | 2011-08-17 | 中兴通讯股份有限公司 | 一种内存分配方法及装置 |
CN103927240A (zh) * | 2014-05-06 | 2014-07-16 | 成都西加云杉科技有限公司 | 应对软件崩溃的信息转储方法和装置 |
CN105159742A (zh) * | 2015-07-06 | 2015-12-16 | 北京星网锐捷网络技术有限公司 | 一种虚拟机pci设备透传方法和系统 |
US9875115B2 (en) * | 2013-12-20 | 2018-01-23 | Microsoft Technology Licensing, Llc | Memory-preserving reboot |
-
2019
- 2019-03-08 CN CN201910174815.4A patent/CN109976906A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102156675A (zh) * | 2010-02-12 | 2011-08-17 | 中兴通讯股份有限公司 | 一种内存分配方法及装置 |
US9875115B2 (en) * | 2013-12-20 | 2018-01-23 | Microsoft Technology Licensing, Llc | Memory-preserving reboot |
CN103927240A (zh) * | 2014-05-06 | 2014-07-16 | 成都西加云杉科技有限公司 | 应对软件崩溃的信息转储方法和装置 |
CN105159742A (zh) * | 2015-07-06 | 2015-12-16 | 北京星网锐捷网络技术有限公司 | 一种虚拟机pci设备透传方法和系统 |
Non-Patent Citations (2)
Title |
---|
HELIANTHUS_LU: "linux内存管理中系统内存相关的参数说明(一)", 《HTTP://BLOG.CHINAUNIX.NET/UID-27177626-ID-4197018.HTML》 * |
存储之厨: "Linux内核中实现保留内存的方法", 《HTTPS://BLOG.51CTO.COM/XIAMACHAO/1765570》 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20170024131A1 (en) | Secure migratable architecture having improved performance features | |
WO2023000673A1 (zh) | 硬件加速器设备管理方法、装置及电子设备和存储介质 | |
CN102541619A (zh) | 虚拟机管理装置和方法 | |
CN112612523B (zh) | 一种嵌入式设备驱动系统及方法 | |
CN107368379B (zh) | 面向EVP的跨Guest OS进程间通信方法及系统 | |
CN109766199A (zh) | 一种机器人操作系统中的节点通信方法和装置 | |
CN113835685A (zh) | 一种基于拟态数据库的网络操作系统设计方法 | |
US20140244943A1 (en) | Affinity group access to global data | |
US10152278B2 (en) | Logical to physical sector size adapter | |
US20240143377A1 (en) | Overlay container storage driver for microservice workloads | |
US7058656B2 (en) | System and method of using extensions in a data structure without interfering with applications unaware of the extensions | |
US20060277221A1 (en) | Transactional file system with client partitioning | |
CN115618409A (zh) | 数据库云服务生成方法、装置、设备及可读存储介质 | |
CN108345452A (zh) | 一种线程管理方法及装置 | |
CN110287695A (zh) | 一种Java卡及其临时对象的管理方法 | |
CN109408226A (zh) | 数据处理方法、装置及终端设备 | |
CN106293510B (zh) | 一种面向多虚拟存储系统的数据共享方法及系统 | |
US7840772B2 (en) | Physical memory control using memory classes | |
CN111104162A (zh) | 一种新旧代码共同运行的kbroker分布式操作系统 | |
CN109976906A (zh) | 一种linux系统的内存分配管理方法 | |
WO2017142525A1 (en) | Allocating a zone of a shared memory region | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
CN114327769B (zh) | 一种操作系统事件记录方法、装置及计算机系统 | |
CN108932155A (zh) | 虚拟机存储管理方法、装置、电子设备及可读存储介质 | |
CN1430150A (zh) | 通信系统中分系统间的虚拟内存分配管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190705 |