本发明涉及计算机技术领域,特别涉及一种Linux系统应用程序内存管理方法及系统。
背景技术:
首先,随着大数据与云计算等相关技术的飞速发展,连接到互联网的设备数量不断增长,到2015年,已达到150亿之多。而数据中心的压力也随之增加,唯有采用新的技术才能进一步提升其效率和性能。
目前,计算机系统的计算结果和服务信息皆临时保存在内存中,这些数据在系统掉电后将丢失,甚至能引起整个系统的崩溃。因此如何可以有效避免用户数据在系统异常时出现数据丢失的重大损失,是本领域技术人员需要解决的技术问题。
技术实现要素:
本发明的目的是提供一种Linux系统应用程序内存管理方法及系统,能够将一些对用户重要的用户程序在NVDIMM上分配内存,从而充分保证在断电等异常情况发生时用户数据能够得到很好的保存。
为解决上述技术问题,本发明提供一种Linux系统应用程序内存管理方法,包括:
根据输入的NVDIMM内存分配请求,将所述NVDIMM内存分配请求对应的进程的状态标志位设置为NVDIMM内存分配,并获取所述进程的ID信息;
将所述ID信息发送到内核中;
所述内核根据所述ID信息,在NVDIMM内存中为所述进程分配内存。
可选的,根据输入的NVDIMM内存分配请求,将所述NVDIMM内存分配请求对应的进程的状态标志位设置为NVDIMM内存分配,包括:
接收输入的NVDIMM内存分配请求;
在链表中确定所述NVDIMM内存分配请求对应的进程;并将所述进程的状态标志位设置为NVDIMM内存分配。
可选的,获取所述进程的ID信息,包括:
遍历目录文件的状态标志位;
获取所述状态标志位设置为NVDIMM内存分配对应的进程的ID信息。
可选的,将所述ID信息发送到内核中,包括:
用户空间进程创建套接字,并利用所述套接字将所述ID信息发送到内核中。
可选的,所述内核根据所述ID信息,在NVDIMM内存中为所述进程分配内存,包括:
接收函数接收到所述ID信息,并判断所述ID信息对应的进程的状态标志位是否为NVDIMM内存分配;
若是,则从NVDIMM内存中为所述进程分配内存。
本发明还提供一种Linux系统应用程序内存管理系统,包括:应用程序的管理模块,用户和内核通信模块,内核处理模块;其中,
所述应用程序的管理模块,用于根据输入的NVDIMM内存分配请求,将所述NVDIMM内存分配请求对应的进程的状态标志位设置为NVDIMM内存分配,并获取所述进程的ID信息;
所述用户和内核通信模块,用于将所述ID信息发送到内核中;
所述内核处理模块,用于所述内核根据所述ID信息,在NVDIMM内存中为所述进程分配内存。
可选的,所述应用程序的管理模块,包括:
输入单元,用于接收输入的NVDIMM内存分配请求;
状态标志位设置单元,用于在链表中确定所述NVDIMM内存分配请求对应的进程;并将所述进程的状态标志位设置为NVDIMM内存分配。
可选的,所述应用程序的管理模块,包括:
遍历单元,用于遍历目录文件的状态标志位;
ID信息获取单元,用于获取所述状态标志位设置为NVDIMM内存分配对应的进程的ID信息。
可选的,所述用户和内核通信模块具体为用户空间进程创建套接字,并利用所述套接字将所述ID信息发送到内核中。
可选的,所述内核处理模块,包括:
接收单元,用于接收函数接收到所述ID信息;
判断单元,用于判断所述ID信息对应的进程的状态标志位是否为NVDIMM内存分配;
内存分配单元,用于若为NVDIMM内存分配,则从NVDIMM内存中为所述进程分配内存。
本发明所提供的一种Linux系统应用程序内存管理方法,包括:根据输入的NVDIMM内存分配请求,将所述NVDIMM内存分配请求对应的进程的状态标志位设置为NVDIMM内存分配,并获取所述进程的ID信息;将所述ID信息发送到内核中;所述内核根据所述ID信息,在NVDIMM内存中为所述进程分配内存;
可见,该方法使用户层和内核层实现通信,使用户可以将需要进行NVDIMM内存分配的进程告知内核,从而使内核实现对其NVDIMM内存分配;即充分利用NVDIMM能够在完全断电的时候依然能够保存完整内存数据的特点,将一些对用户重要的用户程序在NVDIMM上分配内存,从而充分保证在断电等异常情况发生时用户数据能够得到很好的保存;本发明还提供了一种Linux系统应用程序内存管理系统,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例所提供的Linux系统应用程序内存管理方法的流程图;
图2为本发明实施例所提供的应用程序的管理模块的流程示意图;
图3为本发明实施例所提供的内核层和用户层实时通信流程示意图;
图4为本发明实施例所提供的内核内存分配管理流程图示意图;
图5为本发明实施例所提供的Linux系统应用程序内存管理系统的结构框图。
具体实施方式
本发明的核心是提供一种Linux系统应用程序内存管理方法及系统,能够将一些对用户重要的用户程序在NVDIMM上分配内存,从而充分保证在断电等异常情况发生时用户数据能够得到很好的保存。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
NVDIMM是在一种集成了DRAM+非易失性内存芯片的内存条规格,能够在完全断电的时候依然保存完整内存数据NVDIMM作为一种新的器件类型,可以集成到标准的Intel x86服务器中,用来作为存储层次中的写cache。NVDIMM基于DRAM,写次数无限,极大的增强了系统的性能。使用NVDIMM允许Flash SSDs主要用于读数据,这就极大地延长了SSDs的寿命。如果数据中心集成了SSDs和NVDIMM,就会获得非常好的ROI性能。因此,本实施例利用NVDIMM解决系统异常掉电情况下,内存数据的保存工作,并且能够在系统恢复正常运行后继续之前的工作。具体请参考图1,图1为本发明实施例所提供的Linux系统应用程序内存管理方法的流程图;该方法可以包括:
S100、根据输入的NVDIMM内存分配请求,将所述NVDIMM内存分配请求对应的进程的状态标志位设置为NVDIMM内存分配,并获取所述进程的ID信息;
具体的,NVDIMM内存分配请求可以包含需要进行NVDIMM内存分配的进行(也即应用程序)的信息。本实施例中为了使内核能够知道哪些进程是需要分配NVDIMM内存的,因此可以为进程设置状态标志位。通过状态标志位的状态确定该进程是否需要进行NVDIMM内存分配。例如当状态标志位设置为1时,表示该进程需要NVDIMM内存分配;当状态标志位设置为0时,表示该进程不需要NVDIMM内存分配。当然本实施例对具状态标志位的具体设置形式并不进行限定,只需要可以区分是否需要进行NVDIMM内存分配即可。
通过对进程的状态标志位的判断可以确定哪些进程需要进行NVDIMM内存分配,进而可以将这些需要进行NVDIMM内存分配的进程通知给内核,以便于内核对其进行NVDIMM内存分配。一般情况下每一个进程都会有其唯一的标识。系统可以通过该标识确认该进程的身份。通常情况下都利用ID信息来表征进程身份。因此在确定需要进行NVDIMM内存分配的进程后,还需要获取该进程的ID信息,将该ID信息告知内核后,内核便可以根据该ID信息清楚的确定需要进行NVDIMM内存分配的进程。
进一步为了方便用户对其应用程序即进程的管理,可以通过链表来记录用户全部的进程信息,这样用户在需要进行NVDIMM内存分配操作时仅需要在链表中确定对应的进程,然后设置该进程的状态标志位即可。且基于linux系统的应用程序在/proc目录下有完整的描述,因此可以设计一个保存用户相关信息的链表结构,通过读取各进程目录下的stat文件,然后将相关信息写入到所设计的链表结构中,可对链表实施动态的查询、增加以及删除等操作,当用户程序(即应用程序也即进程)需要申请NVDIMM的内存分配时,可动态添加到连表当中并设置相应的状态标志位,然后通过内核和用户层消息通信模块通知到内核,实现内存分配。即优选的,根据输入的NVDIMM内存分配请求,将所述NVDIMM内存分配请求对应的进程的状态标志位设置为NVDIMM内存分配,包括:
接收输入的NVDIMM内存分配请求;
在链表中确定所述NVDIMM内存分配请求对应的进程;并将所述进程的状态标志位设置为NVDIMM内存分配。
在该链表结构下可以通过遍历的形式确定需要进行NVDIMM内存分配的进程。即可选的,获取所述进程的ID信息可以包括:
遍历目录文件的状态标志位;
获取所述状态标志位设置为NVDIMM内存分配对应的进程的ID信息。
具体的,上述具体过程请参考图2,通过读取/proc目录文件实现对应用程序的变量。该例子中可以通过文件的第一个字符是否为数字判定其是否需要进行NVDIMM内存分配。若不是数字则,不需要,若是则需要。当是数值时就需要获取该进程对应的进程信息(例如ID信息)。与内核建立通信并将ID数据传给内核。由内核处理该信息实现NVDIMM内存分配。进一步可以将需要进行NVDIMM内存分配的进程信息通过显示窗口显示给用户。
S110、将所述ID信息发送到内核中;
具体的,用户层(即用户态)和内核层(即内核态)进行通信实现ID信息的传递。该过程可以由用户和内核通信模块实现,该模块能够实现通信的原理可以参考图3。内核态规定通过netlink_kernel_create()创建套接字,并指明接收函数。用户态中用户空间进程创建套接字,并利用所述套接字将所述ID信息发送到内核中。内核态接收函数收到用户空间进程ID。从而实现用户空间与内核空间的通信。
S120、所述内核根据所述ID信息,在NVDIMM内存中为所述进程分配内存。
具体的,内核直接根据ID信息,在NVDIMM内存中为所述进程分配内存。
进一步为了提高需要进行NVDIMM内存分配进程确定的准确性。内核在进行NVDIMM内存分配时可以再次确定该进程是否为需要进行NVDIMM内存分配的内存。即优选的,所述内核根据所述ID信息,在NVDIMM内存中为所述进程分配内存可以包括:
接收函数接收到所述ID信息,并判断所述ID信息对应的进程的状态标志位是否为NVDIMM内存分配;
若是,则从NVDIMM内存中为所述进程分配内存。
具体的,在用户层数据发送到内核后,通过用户和内核建立通信,内核接收消息,然后将数据添加到内核相应的链表结构中,通过状态标志位判断,实现真正的申请NVDIMM内存处理。
举例说明该步骤,具体请参考图4,内核接收用户层数据如ID信息后,判断状态标志位flag是否为1,若是,则在NVDIMM内存中为所述进程分配内存;若否,则不在NVDIMM内存中为所述进程分配内存。进一步当确定flag为0时,可以向用户发送提示信息。以便用户再次确认是否出现状态标志位标记错误。避免误分配情况的发生。提高系统的准确性。
进一步,这里的需要进行NVDIMM内存分配的进程可以是用户更加关注的进程,例如管理信息资产的进程等,这样可以使自己的关键信息在系统发生异常时能够得到保存。比如银行数据库信息等。
以用户层某一程序要求分配NVDIMM内存为例,用户层首先查找管理,用户通知内核,内核实时动态分配处理这一结构的实现过程。
基于上述技术方案,本发明实施例提供的Linux系统应用程序内存管理方法,主要考虑NVDIMM内存非易失性的特点、用户进程信息存储在/proc目录下的特点以及内核和用户可实时建立通信的特点,采用基于用户层应用管理、内核与用户实时通信、内核实时处理数据分配内存的方法,对用户的关键应用实现在NVDIMM上的内存分配,从而实现数据的非易失性,可充分保证用户的数据安全。
下面对本发明实施例提供的Linux系统应用程序内存管理系统进行介绍,下文描述的Linux系统应用程序内存管理系统与上文描述的Linux系统应用程序内存管理方法可相互对应参照。
请参考图5,图5为本发明实施例所提供的Linux系统应用程序内存管理系统的结构框图;该系统可以包括:应用程序的管理模块100,用户和内核通信模块200,内核处理模块300;其中,
所述应用程序的管理模块100,用于根据输入的NVDIMM内存分配请求,将所述NVDIMM内存分配请求对应的进程的状态标志位设置为NVDIMM内存分配,并获取所述进程的ID信息;
所述用户和内核通信模块200,用于将所述ID信息发送到内核中;
所述内核处理模块300,用于所述内核根据所述ID信息,在NVDIMM内存中为所述进程分配内存。
具体的,用户和内核通信模块可以实现双向的全双工通信,内核层可以接收用户层发送来的消息,同样的,用户层也可以接收内核层发来的消息,当两者需要通信时可通过该模块完成。
其中,应用程序的管理模块也即应用程序的管理器可以位于管理前端可实时管理用户程序,可向内核发送消息,可接受来自内核的消息。用户和内核通信模块可让用户和内核层实时通信。内核处理模块可动态分配管理NVDIMM内存,综上可有效提高用户程序内存申请灵活性,提高数据安全性。
具体的,该系统在用户层实现所有应用程序的管理器,用以对各应用程序进行管理,可实时对这些程序进行增删查询等操作;在用户和内核通信模块,用以接收和传输用户和进程之间的数据。由内核处理模块实现对数据处理从而实现内存分配管理。
基于上述实施例,所述应用程序的管理模块100可以包括:
输入单元,用于接收输入的NVDIMM内存分配请求;
状态标志位设置单元,用于在链表中确定所述NVDIMM内存分配请求对应的进程;并将所述进程的状态标志位设置为NVDIMM内存分配。
基于上述实施例,所述应用程序的管理模块100可以包括:
遍历单元,用于遍历目录文件的状态标志位;
ID信息获取单元,用于获取所述状态标志位设置为NVDIMM内存分配对应的进程的ID信息。
基于上述实施例,所述用户和内核通信模块200具体为用户空间进程创建套接字,并利用所述套接字将所述ID信息发送到内核中。
基于上述实施例,所述内核处理模块300可以包括:
接收单元,用于接收函数接收到所述ID信息;
判断单元,用于判断所述ID信息对应的进程的状态标志位是否为NVDIMM内存分配;
内存分配单元,用于若为NVDIMM内存分配,则从NVDIMM内存中为所述进程分配内存。
基于上述技术方案,本发明实施例提供的Linux系统应用程序内存管理系统,该系统中应用程序的管理模块主要实现对所有进程进行遍历处理,可实时查询各应用层程序在内核中所处进程的状态,可动态实现删除和增加的功能,实现动态监视与管理。用户和内核通信模块主要实现内核层与用户层之netlink通信的特性,主要是指能随时接收用户层数据并及时处理。内核处理模块主要实现及时根据状态标识位置判断是否分配NVDIMM上的内存。该系统解决了现有技术中只能分配主存上的内存,无法实现动态分配NVDIMM上的内存,当系统发生异常如系统掉电后,用户数据发生丢失无法找回的风险的问题;对用户数据保障方面具有很高的技术价值。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的一种Linux系统应用程序内存管理方法及系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。