一种操作系统的内存管理方法及装置与流程

文档序号:11949821阅读:158来源:国知局
一种操作系统的内存管理方法及装置与流程

本发明涉及操作系统技术领域,特别是涉及一种操作系统的内存管理方法及装置。



背景技术:

一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。堆对象,其产生时刻和销毁时刻都要程序员精确定义,也就是说,程序员对堆对象的生命具有完全的控制权。应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。

内存溢出即用户在对其数据缓冲区操作时,超过了其缓冲区的边界;尤其是对缓冲区写操作时,缓冲区的溢出很可能导致程序的异常。

由于现有技术中,OS(操作系统)只负责提供内存,但并不负责内存的回收,以及内存使用过程中出现的泄漏/溢出等异常情况的检测,因此导致内存的利用率低,操作系统运行不稳定。



技术实现要素:

本发明的目的是提供一种操作系统的内存管理方法及装置,用于内存使用过程中出现的异常情况的检测,从而提高内存的利用率和操作系统运行的稳定性。

为解决上述技术问题,本发明提供一种操作系统的内存管理方法,包括:

接收用户的内存申请,计算所述内存申请所需的内存空间值;

检索内存链表中是否包含有与所述内存空间值匹配的独立内存块;如果有,则将对应的内存地址发送给所述用户,如果没有,则将整体内存块进行拆分,将对应的内存地址发送给所述用户,并将剩余的内存块插入至所述内存链表中;

周期性检测已分配给所述用户的fragment的运行状态以确定所述fragment是否出现内存异常情况。

优选地,所述周期性检测已分配给所述用户的fragment的运行状态以确定所述fragment是否出现内存异常情况具体包括:

周期性检测所述fragment中的头部计数块和尾部计数块的数值是否相同,如果是,则确定所述fragment没有出现内存异常情况,否则确定所述fragment出现内存溢出。

优选地,所述周期性检测已分配给所述用户的fragment的运行状态以确定所述fragment是否出现内存异常情况还包括:

周期性检测所述fragment的计时块的计时时间,如果所述计时时间为0且所述内存链表中不包含对应的内存块,则确定所述fragment出现内存泄露,否则确定所述fragment没有出现内存异常情况。

优选地,还包括:当检测到用户使用完毕后,将对应的fragment释放。

优选地,还包括:如果被释放的fragment中存在相邻关系的内存块,则将相邻的内存块进行合并。

一种操作系统的内存管理装置,包括:

计算单元,用于接收用户的内存申请,计算所述内存申请所需的内存空间值;

检索单元,用于检索内存链表中是否包含有与所述内存空间值匹配的独立内存块;如果有,则将对应的内存地址发送给所述用户,如果没有,则将整体内存块进行拆分,将对应的内存地址发送给所述用户,并将剩余的内存块插入至所述内存链表中;

检测单元,用于周期性检测已分配给所述用户的fragment的运行状态以确定所述fragment是否出现内存异常情况。

优选地,所述检测单元具体包括:

第一检测子单元,用于周期性检测所述fragment中的头部计数块和尾部计数块的数值是否相同,如果是,则确定所述fragment没有出现内存异常情况,否则确定所述fragment出现内存溢出。

优选地,所述检测单元还包括:

第二检测子单元,用于周期性检测所述fragment的计时块的计时时间,如果所述计时时间为0且所述内存链表中不包含对应的内存块,则确定所述fragment出现内存泄露,否则确定所述fragment没有出现内存异常情况。

优选地,还包括:释放单元,用于当检测到用户使用完毕后,将对应的fragment释放。

优选地,还包括:合并单元,用于如果被释放的fragment中存在相邻关系的内存块,则将相邻的内存块进行合并。

本发明所提供的操作系统的内存管理方法及装置,首先接收用户的内存申请,计算所述内存申请所需的内存空间值;然后将对应的内存地址发送给用户,通过这两个步骤实现内存的统一分配、管理和调度。最后周期性检测已分配给用户的fragment的运行状态以确定fragment是否出现内存异常情况,通过该步骤实现对fragment的监测。因此,通过本方法可以实现对操作系统的内存的管理,提高内存的利用率和操作系统运行的稳定性。

附图说明

为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种操作系统的内存管理方法的流程图;

图2为本发明提供的一种操作系统的内存管理装置的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。

本发明的核心是提供一种操作系统的内存管理方法及装置。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

图1为本发明提供的一种操作系统的内存管理方法的流程图。如图1所示,包括:

S10:接收用户的内存申请,计算内存申请所需的内存空间值。

在具体实施中,当操作系统启动后,一次性能够得到很大的一块内存,将该内存初始化,初始化后,一部分内存块放在内存链表上,以等待用户的申请。在用户申请过程中,有专用的内存分配API,当接收到用户的内存申请后,计算该用户所需的内存空间值。可以理解的是,这里的用户可以为1个或者多个,每个用户之间是相互独立的,不影响其他用户的申请。

S11:检索内存链表中是否包含有与内存空间值匹配的独立内存块;如果有,则将对应的内存地址发送给用户,如果没有,则将整体内存块进行拆分,将对应的内存地址发送给用户,并将剩余的内存块插入至内存链表中。

当计算出用户所需的内存空间值后,首先是在内存链表上检索是否有匹配的内存块。本申请中,独立内存块指的是经过初始化后,放在内存链表中的内存块,只是为了与没有放在内存链表上的内存块加以区分。因此,放在内存链表上的内存块就是独立内存块,没有放在内存链表上的内存块就是整体内存块。

内存块的空间值按照大小分为很多种,本申请中的匹配的意思是一个内存块的空间值或者几个内存块的控制值能够大于用户所申请的内存空间值即可。利用用户申请的内存空间值为200bytes,而内存链表上有7个32bytes的内存块,那么这几个内存块就可以满足该用户的需求,则将这几个内存块对应的地址,即内存地址发送给用户。如果内存链表上的内存块的空间值小于用户申请的内存空间值,则需要将未放在内存链表上的内存块,即整体内存块进行拆分。将整体内存块拆分成两大部分,一部分将分配给用户,一部分则插入至内存链表中。

S12:周期性检测已分配给用户的fragment的运行状态以确定fragment是否出现内存异常情况。

通过步骤S10和S11的描述,一个用户分配到的内存块可能是一个内存块,也可能是多个内存块的组合,为了便于描述,本申请中只要是分配给用户的内存块统称为fragment(内存碎片)。因此,对于已分配内存块的用户都有一个fragment,而一个fragment包含一个或多个内存块,内存块的大小可以是相同的,也可以不相同。

本步骤中,周期性地检测每个fragment的运行状态,这里的周期可以为5分钟,可以理解的是,周期的长短可以根据实际情况设定,并不代表只有这一种实施方式。另外,可以通过audit线程来进行检测。通过对每个fragment的运行状态的检测得到每个fragment是否出现内存异常情况。在具体实施中,如果某个fragment出现内存异常情况可以进行提示等操作以便及时发现,及时处理,本实施例不再赘述。

本实施例提供的操作系统的内存管理方法,首先接收用户的内存申请,计算所述内存申请所需的内存空间值;然后将对应的内存地址发送给用户,通过这两个步骤实现内存的统一分配、管理和调度。最后周期性检测已分配给用户的fragment的运行状态以确定fragment是否出现内存异常情况,通过该步骤实现对fragment的监测。因此,通过本方法可以实现对操作系统的内存的管理,提高内存的利用率和操作系统运行的稳定性。

在上述实施例的基础上,步骤S12具体包括:

周期性检测fragment中的头部计数块和尾部计数块的数值是否相同,如果是,则确定fragment没有出现内存异常情况,否则确定fragment出现内存溢出。

在具体实施中,每个fragment中的头部计数块和尾部计数块用于对整个fragment计数,如果二者计数一致,则说明该fragment没有出现内存异常情况,如果不一致则确定fragment出现内存溢出。

需要说明的是,上述方法只能确定不同fragment之间的内存溢出,但并不能确定同一个fragment内部的数据溢出问题。

在上述实施例的基础上,步骤S12还包括:

周期性检测fragment的计时块的计时时间,如果计时时间为0且内存链表中不包含对应的内存块,则确定fragment出现内存泄露,否则确定fragment没有出现内存异常情况。

本方法中能够确定同一个fragment内部的数据溢出问题。

在上述实施例的基础上,还包括:

当检测到用户使用完毕后,将对应的fragment释放。

由于用户的使用时间不固定,每个用户也没有永久的使用权。因此,当用户使用完毕之后,如果不进行回收的话,则造成系统中的内存越来越少,严重时导致宕机。针对这一问题,本实施例在上述实施例的基础上,当检测到用户使用完毕之后,需要释放对应的fragment,使的fragment中的内存块能够重新回到内存链表中,以重新被其它用户所申请。

可以理解的是,为了方便检测和回收,可以事先为每个内存块添加控制信息,例如,该内存块的大小,使用时间为多久,起始位置等,从而对分配出去的每一块内存进行监测,方便内存块的调度与回收。

在上述实施例的基础上,还包括:

如果被释放的fragment中存在相邻关系的内存块,则将相邻的内存块进行合并。

在上述实施例中,如果用户使用完毕之后,对应的fragment会被释放,则该fragment中的各个内存块会重新存放在内存链表上。如果两个或者多个内存块为相邻的关系,则将相邻的内存块进行合并。通过该实施方式能够避免出现较多的碎片,易于管理。

图2为本发明提供的一种操作系统的内存管理装置的结构图。操作系统的内存管理装置包括:

计算单元10,用于接收用户的内存申请,计算内存申请所需的内存空间值;

检索单元11,用于检索内存链表中是否包含有与内存空间值匹配的独立内存块;如果有,则将对应的内存地址发送给用户,如果没有,则将整体内存块进行拆分,将对应的内存地址发送给用户,并将剩余的内存块插入至内存链表中;

检测单元12,用于周期性检测已分配给用户的fragment的运行状态以确定fragment是否出现内存异常情况。

本实施例提供的操作系统的内存管理装置,首先计算单元接收用户的内存申请,计算所述内存申请所需的内存空间值;然后检索单元将对应的内存地址发送给用户,通过这两个单元实现内存的统一分配、管理和调度。最后检测单元周期性检测已分配给用户的fragment的运行状态以确定fragment是否出现内存异常情况,通过该单元实现对fragment的监测。因此,通过本装置可以实现对操作系统的内存的管理,提高内存的利用率和操作系统运行的稳定性。

作为优选地,检测单元具体包括:

第一检测子单元,用于周期性检测fragment中的头部计数块和尾部计数块的数值是否相同,如果是,则确定fragment没有出现内存异常情况,否则确定fragment出现内存溢出。

作为优选地,检测单元还包括:

第二检测子单元,用于周期性检测fragment的计时块的计时时间,如果计时时间为0且内存链表中不包含对应的内存块,则确定fragment出现内存泄露,否则确定fragment没有出现内存异常情况。

作为优选地,还包括:

释放单元,用于当检测到用户使用完毕后,将对应的fragment释放。

作为优选地,还包括:

合并单元,用于如果被释放的fragment中存在相邻关系的内存块,则将相邻的内存块进行合并。

由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

为了让本领域技术人员更加理解本发明提供的方法及装置,以下给出具体说明。在具体实施中,内存块的模型为:

a.block count(计数块):每个fragment的头4个bytes和最后4个bytes为block count,用来标识该fragment包含多少个内存块;若这两个block count中的内容不一致,则可以确认该内存块中的数据已经被写坏,发生了内存溢出。

b.offset:用来表示payload的起始地址。

c.FBT:function back trace。

d.ctrlblk:与该fragment相关的管理数据。

具体结构如下:

e.payload:分配给用户的有效内存地址。

检测内存块overflow是在分配的fragment的末尾设置一个read-only内存区域,一旦发生overflow,则会触发SEGV,进而可以快速定位出问题。

以上对本发明所提供的操作系统的内存管理方法及装置进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1