内存分配方法、装置及系统的制作方法

文档序号:6491107阅读:217来源:国知局
内存分配方法、装置及系统的制作方法
【专利摘要】本发明提供一种内存分配方法、装置及系统,其中内存分配方法包括,接收一个或多个处理模块分别发送的内存状态信息;根据内存状态信息,分别确定一个或多个处理模块各自的内存压力的数值;判断一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;若是,则向最小值对应的处理模块发送内存抢占消息,内存抢占消息中携带有需释放的内存大小;在从最小值对应的处理模块中抢占到内存资源之后,向最大值对应的处理模块发送内存分配消息,内存分配消息中携带有待分配的内存大小,能够有效地满足内存压力较大的处理模块的高内存需求,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
【专利说明】内存分配方法、装置及系统
【技术领域】
[0001]本发明涉及计算机技术,尤其涉及一种内存分配方法、装置及系统。
【背景技术】
[0002]随着计算机领域内数据量及数据处理需求的不断提升,负载对操作系统性能的要求越来越高,微内核、多内核已经成为了操作系统未来发展的一个趋势。多内核协同工作能够很好地实现对不同应用的隔离,提升系统的吞吐率,能够在一定程度上提高系统的性能。
[0003]图1为现有技术中一种多操作系统的架构图,如图1所示,该多操作系统结构包括全局共享内存(Global Memory)、多个中央处理器(Central Processing Unit,CPU)或中央处理器内核。分别运行在各CPU或内核上的操作系统共享该全局共享内存,各操作系统也被称为子系统。
[0004]当某个子系统的出现内存资源不足的情况时,可以向其他各子系统发送内存申请消息。其他各子系统在收到该内存申请消息之后,分别判断其自身的内存使用情况。拥有空闲内存资源的子系统会向申请内存的子系统发送回复消息,并在消息中携带其空闲内存的大小;没有空闲内存资源的子系统则会向申请内存的子系统发送拒绝消息。申请内存的子系统在收到其他各子系统的回复之后,从具有空闲内存资源的子系统中选择最符合条件的一个子系统,作为候选子系统。其中该条件可以包括空闲内存资源的大小是否满足要求;在计算机集群系统中,该条件还可以包括,各子系统所在的CPU或内核与申请内存资源子系统的CPU或内核之间的距离远近是否满足要求。申请内存资源的子系统通过与候选子系统之间进行通信,实现整个内存资源的申请过程。其中,上述内存为全局共享内存,各子系统中通过维护各自的物理内存列表的方式,对其可使用的内存资源进行表征。
[0005]但是,当申请内存资源的子系统对内存资源的需求较高,而其他子系统的空闲内存资源均达不到所需内存资源的大小时,该子系统的高内存需求无法得到满足,从而会使得整个多操作系统结构在满足高内存需求方面存在不足。

【发明内容】

[0006]本发明提供一种内存分配方法、装置及系统,用于满足整个多操作系统结构在满足高内存需求方面的需求。
[0007]本发明的第一个方面是提供一种内存分配方法,包括:
[0008]接收一个或多个处理模块分别发送的内存状态信息;
[0009]根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值;
[0010]判断所述一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;
[0011]若是,则向所述最小值对应的处理模块发送内存抢占消息,所述内存抢占消息中携带有需释放的内存大小,以供所述最小值对应的处理模块对所述需释放的内存大小对应的内存资源进行释放;
[0012]在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送内存分配消息,所述内存分配消息中携带有待分配的内存大小,以使所述最大值对应的处理模块在可用内存资源中增加了所述待分配的内存大小之后,内存压力的数值相应地减小。
[0013]结合第一个方面的内存分配方法,在第一种可能的实现方式中,单个处理模块的所述内存状态信息包括:所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;
[0014]相应地,所述根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值具体为:
[0015]根据所述一个或多个处理模块各自的内存分配时间间隔,确定内存分配时间间隔的平均值,所述内存分配时间间隔为所述单个处理模块最近一次物理页面总数发生变更的时间点与当前时间点之间的时间间隔;
[0016]所述单个处理模块的内存压力P为,P=a*C+i3*At ;其中,所述C为所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值,所述At为所述单个处理模块的内存分配时间间隔与所述内存分配时间间隔的平均值之间的比值,所述a和所述β为预设系数。
[0017]结合第一个方面的内存分配方法,在第二种可能的实现方式中,单个处理模块的所述内存状态信息包括最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个页面驻留时间中数值最小的页面驻留时间;
[0018]相应地,所述根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值具体为:
[0019]根据所述一个或多个处理模块各自的最小页面驻留时间,确定最小页面驻留时间的平均值;
[0020]所述单个处理模块的内存压力P为,所述单个处理模块的最小页面驻留时间与所述最小页面驻留时间的平均值之间的比值。
[0021]结合内存分配方法的第一个方面的第一种可能的实现方式或第二种可能的实现方式,在第三种可能的实现方式中,所述需释放的内存大小具体为:
[0022]所述一个或多个处理模块的内存压力的数值的平均值与所述内存压力的数值中最小值之差,与所述最小值对应的处理模块中内存资源的总数的乘积。
[0023]结合内存分配方法的第一个方面的第一种可能的实现方式或第二种可能的实现方式,在第四种可能的实现方式中,所述待分配的内存大小具体为:
[0024]所述内存压力的数值中最大值与所述一个或多个处理模块的内存压力的数值的平均值之差,与所述最大值对应的处理模块中内存资源的总数的乘积。
[0025]结合内存分配方法的第一个方面或第一个方面的第一至四种可能的实现方式,在第五种可能的实现方式中,所述接收一个或多个处理模块分别发送的内存状态信息具体为:[0026]分别按照所述一个或多个处理模块各自的心跳频率,接收所述一个或多个处理模块分别发送的内存状态信息。
[0027]本发明的第二个方面是提供一种内存分配方法,包括:
[0028]将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;
[0029]接收所述主控处理模块发送的内存抢占消息,所述内存抢占消息为所述主控处理模块在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于所述预设阈值之后,向所述最小值对应的处理模块发送的,所述内存抢占消息中携带有需释放的内存大小;
[0030]对所述需释放的内存大小对应的内存资源进行释放。
[0031]结合第二个方面的内存分配方法,在第一种可能的实现方式中,在所述接收所述主控处理模块发送的内存抢占消息之后,所述对所述需释放的内存大小对应的内存资源进行释放之前,所述方法还包括:
[0032]判断所述需释放的内存大小是否大于或等于空闲内存的大小;
[0033]若是,则采用模拟换页机制,从非空闲内存中抢占可被交换的内存,抢占的所述可被交换的内存的大小等于所述需释放的内存大小与所述空闲内存的大小之差;
[0034]相应地,所述对所述需释放的内存大小对应的内存资源进行释放具体为:
[0035]对所述空闲内存的大小和抢占的所述可被交换的内存的大小对应的内存资源进行释放。
[0036]结合第二个方面的内存分配方法,在第二种可能的实现方式中,所述内存状态信息包括:
[0037]在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者
[0038]最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0039]结合第二个方面的内存分配方法或第二个方面的第一种至第二种可能的实现方式中,在第三种可能的实现方式中,所述将内存状态信息发送给主控处理模块具体为:
[0040]按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0041]结合第二个方面的内存分配方法,在第四种可能的实现方式中,所述将内存状态信息发送给主控处理模块之后,所述方法还包括:
[0042]接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;
[0043]在可用内存资源中增加所述待分配的内存大小。
[0044]本发明的第三个方面是提供一种内存分配方法,包括:
[0045]将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;
[0046]接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;
[0047]在可用内存资源中增加所述待分配的内存大小。
[0048]结合第三个方面的内存分配方法,在第一种可能的实现方式中,所述内存状态信息包括:
[0049]在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者
[0050]最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0051]结合第三个方面的内存分配方法或第三个方面的第一种可能的实现方式,在第二种可能的实现方式中,所述将内存状态信息发送给主控处理模块具体为:
[0052]按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0053]本发明的第四个方面是提供一种主控处理模块,包括:
[0054]接收单元,用于接收一个或多个处理模块分别发送的内存状态信息;
[0055]处理单元,用于根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值;
[0056]判断单元,用于判断所述一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;
[0057]发送单元,用于在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值时,向所述最小值对应的处理模块发送内存抢占消息,所述内存抢占消息中携带有需释放的内存大小,以供所述最小值对应的处理模块对所述需释放的内存大小对应的内存资源进行释放;在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送内存分配消息,所述内存分配消息中携带有待分配的内存大小,以使所述最大值对应的处理模块在可用内存资源中增加了所述待分配的内存大小之后,内存压力的数值相应地减小。
[0058]结合第四个方面的主控处理模块,在第一种可能的实现方式中,所述接收单元接收到的单个处理模块的所述内存状态信息包括:所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;
[0059]相应地,所述处理单元具体用于,根据所述一个或多个处理模块各自的内存分配时间间隔,确定内存分配时间间隔的平均值,所述内存分配时间间隔为所述单个处理模块最近一次物理页面总数发生变更的时间点与当前时间点之间的时间间隔;所述单个处理模块的内存压力P为,P=a*C+i3*At ;其中,所述C为所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值,所述At为所述单个处理模块的内存分配时间间隔与所述内存分配时间间隔的平均值之间的比值,所述α和所述β为预设系数。
[0060]结合第四个方面的主控处理模块,在第二种可能的实现方式中,所述接收单元接收到的单个处理模块的所述内存状态信息包括最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个页面驻留时间中数值最小的页面驻留时间;
[0061]相应地,所述处理单元具体用于,根据所述一个或多个处理模块各自的最小页面驻留时间,确定最小页面驻留时间的平均值;所述单个处理模块的内存压力P为,所述单个处理模块的最小页面驻留时间与所述最小页面驻留时间的平均值之间的比值。
[0062]结合第四个方面的主控处理模块的第一种或第二种可能的实现方式,在第三种可能的实现方式中,所述需释放的内存大小具体为:
[0063]所述一个或多个处理模块的内存压力的数值的平均值与所述内存压力的数值中最小值之差,与所述最小值对应的处理模块中内存资源的总数的乘积。
[0064]结合第四个方面的主控处理模块的第一种或第二种可能的实现方式,在第四种可能的实现方式中,所述待分配的内存大小具体为:
[0065]所述内存压力的数值中最大值与所述一个或多个处理模块的内存压力的数值的平均值之差,与所述最大值对应的处理模块中内存资源的总数的乘积。
[0066]结合第四个方面的主控处理模块或第四个方面的第一种至第四种可能的实现方式,在第五种可能的实现方式中,所述接收单元具体用于:
[0067]分别按照所述一个或多个处理模块各自的心跳频率,接收所述一个或多个处理模块分别发送的内存状态信息。
[0068]本发明的第五个方面是提供一种处理模块,包括:
[0069]发送单元,用于将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;
[0070]接收单元,用于接收所述主控处理模块发送的内存抢占消息,所述内存抢占消息为所述主控处理模块在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于所述预设阈值之后,向所述最小值对应的处理模块发送的,所述内存抢占消息中携带有需释放的内存大小;
[0071]处理单元,用于对所述需释放的内存大小对应的内存资源进行释放。
[0072]结合第五个方面的处理模块,在第一种可能的实现方式中,所述处理模块还包括:
[0073]判断单元,用于所述接收单元接收所述主控处理模块发送的内存抢占消息之后,所述接收单元对所述需释放的内存大小对应的内存资源进行释放之前,判断所述需释放的内存大小是否大于或等于空闲内存的大小;
[0074]所述处理单元还用于,在所述判断单元判断出所述需释放的内存大小大于或等于所述空闲内存的大小时,采用模拟换页机制,从非空闲内存中抢占可被交换的内存,对所述空闲内存的大小和抢占的所述可被交换的内存的大小对应的内存资源进行释放,其中,抢占的所述可被交换的内存的大小等于所述需释放的内存大小与所述空闲内存的大小之差。[0075]结合第五个方面的处理模块,在第二种可能的实现方式中,所述内存状态信息包括:
[0076]在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者
[0077]最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0078]结合第五个方面的处理模块或第五个方面的第一种至第二种可能的实现方式,在第三种可能的实现方式中,所述发送单元具体用于:
[0079]按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0080]结合第五个方面的处理模块,在第四种可能的实现方式中,所述接收单元还用于:
[0081 ] 在所述发送单元将内存状态信息发送给主控处理模块之后,接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;
[0082]相应地,所述处理单元还用于,在可用内存资源中增加所述待分配的内存大小。
[0083]本发明的第六个方面是提供一种处理模块,包括:
[0084]发送单元,用于将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;
[0085]接收单元,用于接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;
[0086]处理单元,用于在可用内存资源中增加所述待分配的内存大小。
[0087]结合第六个方面的处理模块,在第一种可能的实现方式中,所述内存状态信息包括:
[0088]在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者
[0089]最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0090]结合第六个方面的处理模块或第六个方面的第一种可能的实现方式,在第二种可能的实现方式中,所述处理单元具体用于:
[0091]按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0092]本发明的第七个方面是提供一种中央处理器,包括上述第四个方面或第四个方面的第一种至第五种可能的实现方式中的主控处理模块。[0093]本发明的第八个方面是提供一种中央处理器,包括上述第五个方面或第五个方面的第一种至第四种可能的实现方式中的处理模块。
[0094]本发明的第九个方面是提供一种中央处理器,包括上述第六个方面或第六个方面的第一种或第二种可能的实现方式中的处理模块。
[0095]本发明第十个方面是提供一种计算机系统包括上述第七个方面中的中央处理器、第八个方面中的中央处理器,以及地九个方面中的中央处理器。
[0096]本发明提供的内存分配方法、装置及系统,在接收一个或多个处理模块分别发送的内存状态信息之后,分别确定一个或多个处理模块各自的内存压力的数值,并在判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值时,向最小值对应的处理模块发送内存抢占消息,在从最小值对应的处理模块中抢占到内存资源之后,向最大值对应的处理模块发送内存分配消息,使得最大值对应的处理模块在可用内存资源中增加了待分配的内存大小之后,内存压力的数值相应地减小。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0097]本发明实施例提供的内存分配方法、装置及系统,将内存状态信息发送给主控处理模块,用于供主控处理模块根据内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值,在主控处理模块判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值之后,接收主控处理模块发送的内存抢占消息,并根据内存抢占消息中携带有需释放的内存大小,对需释放的内存大小对应的内存资源进行释放。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0098]本发明实施例提供的内存分配方法、装置及系统,在判断出需释放的内存大小大于或等于空闲内存的大小之后,采用模拟换页机制,从非空闲内存中抢占可被交换的内存,所抢占的可被交换的内存的大小等于需释放的内存大小与空闲内存的大小之差,从而对空闲内存的大小和抢占的可被交换的内存的大小对应的内存资源进行释放,当多操作系统结构中的各处理模块的内存压力分布悬殊时,不仅能够从内存压力较小的处理模块的内存资源中抢占到空闲的内存,还能够从非空闲的内存中抢占可被交换的部分内存,从而能够尽量保证有足够的内存资源可以分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
【专利附图】

【附图说明】
[0099]图1为现有技术中一种多操作系统的架构图;
[0100]图2为本发明提供的内存分配方法一实施例的流程图;[0101]图3为本发明提供的内存分配方法另一实施例的流程图;
[0102]图4为本发明提供的内存分配方法又一实施例的流程图;
[0103]图5为本发明提供的内存分配方法又一实施例的流程图;
[0104]图6a为本发明提供的多操作系统结构的硬件架构图;
[0105]图6b为本发明提供的多操作系统结构的软件架构图;
[0106]图7为本发明提供的主控处理模块一实施例的结构示意图;
[0107]图8为本发明提供的第一种处理模块一实施例的结构示意图
[0108]图9为本发明提供的第一种处理模块另一实施例的结构示意图;
[0109]图10为本发明提供的第二种处理模块一实施例的结构示意图;
[0110]图11为本发明提供的第一种中央处理器实施例的结构示意图;
[0111]图12为本发明提供的第二种中央处理器实施例的结构示意图;
[0112]图13为本发明提供的第三种中央处理器实施例的结构示意图;
[0113]图14为本发明提供的计算机系统实施例的结构示意图。
【具体实施方式】
[0114]多操作系统结构由多个CPU或多个CPU内核组成的,操作系统可以运行在CPU上或者CPU内核上。多操作系统结构中的每个CPU或CPU内核上各自独立运行着操作系统,各操作系统可以是异构的,也可以是同构的。各操作系统之间共享资源,协同工作。
[0115]多操作系统结构将不同的负载分配到不同的子系统上执行,既可以提高多操作系统的处理能力,也能够对不同操作系统上的应用实现兼容。与传统的基于计算机集群的多操作系统结构相比,目前的多操作系统结构的粒度已经有操作系统降低到操作系统内核。各操作系统内核独立处理负载,并共享整个多操作系统结构的资源,例如,输入输出端口(Input/Output, I/O)、内存资源等。
[0116]其中,在多个操作系统中有一个操作系统运行的是管理操作系统,在该管理操作系统上运行全局管理服务(Global Management Services, GMS),用于协调各个子系统的运行。以下各实施例中的全局内存管理服务为具体的对各个子系统的内存占用进行管理的功能部分。
[0117]全局内存管理服务对全局共享内存进行管理,各子系统通过物理内存列表等方式表征其所占用的部分内存资源,也就是说,各子系统并不实际配置有内存,而是根据需要使用全局共享内存中的部分内存资源。
[0118]以下实施例中所述的子系统即为运行在CPU或者CPU内核上的操作系统。图2所示实施例的执行主体为主控处理模块,主控处理模块即为运行管理操作系统和全局内存管理服务的处理模块。
[0119]图2为本发明提供的内存分配方法一实施例的流程图,如图2所示,该方法包括:
[0120]步骤101、接收一个或多个处理模块分别发送的内存状态信息。
[0121]步骤102、根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值。
[0122]多操作系统中包括多个处理模块,在多个处理模块中包括一个主控处理模块。包括主控处理模块在内的各处理模块上,分别运行各自的操作系统,各操作系统也可以被称为子系统。
[0123]包括主控处理模块在内的各处理模块均对其各自占用共享内存的状态信息进行收集,并将收集到的内存状态信息上报给主控处理模块。
[0124]需要说明的是,由于主控处理模块是运行全局内存管理服务的处理模块,而其同样可以作为本发明各实施例中参与内存分配的处理模块之一,因此,以下内容中所提及的处理模块可以包括主控处理模块。
[0125]主控处理模块在接收到各处理模块发送的内存状态信息之后,分别根据各处理模块各自的内存状态信息,计算出各处理模块的内存压力的数值。
[0126]具体的,内存状态信息可以通过如下两种指标体现,一种为发生缺页异常(PageFault)的物理页面的数量与物理页面总数的比值,另一种为内存中物理页面的驻留时间。可选的反映内存状态信息的指标并不仅限于此,能够体现处理模块对内存占用情况的指标均可以作为内存状态信息,上报给主控处理模块。由主控处理模块根据内存状态信息确定内存压力的数值。
[0127]一种可选的实施方式为,单个处理模块的所述内存状态信息可以包括:所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;
[0128]相应地,步骤102具体可以为:
[0129]根据所述一个或多个处理模块各自的内存分配时间间隔,确定内存分配时间间隔的平均值,所述内存分配时间间隔为所述单个处理模块最近一次物理页面总数发生变更的时间点与当前时间点之间的时间间隔。
[0130]所述单个处理模块的内存压力P为,P=a*C+i3*At ;其中,所述C为所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值,所述At为所述单个处理模块的内存分配时间间隔与所述内存分配时间间隔的平均值之间的比值,所述a和所述β为预设系数。
[0131]为了能够对各处理模块上子系统的内存压力进行量化,可以将缺页异常(PageFault)率和内存分配时间间隔作为影响因素,并以其线性组合作为衡量处理模块内存压力大小的指标。
[0132]对于每个处理模块而言,PageFault率为预设时间范围内,该处理模块发生PageFault的物理页面的数量与物理页面总数的比值。
[0133]物理页面总数与可用内存的大小是对应的,处理模块在被分配了一定大小的内存资源时,被分配的内存资源是以物理页面的形式体现的。当处理模块被重新分配了内存资源时,相应地,该处理模块的物理页面的总数也相应地发生了变化。处理模块可用的内存资源越多时,其物理页面的总数相应地越多。
[0134]该预设时间范围可以为处理模块向主控处理模块上报内存状态信息的周期对应的时间长度,也可以是小于该时间长度的其他时间长度。这样可以保证在该预设时间范围内处理模块的物理页面的总数是不变的。
[0135]将PageFault率作为衡量处理模块的内存压力的一个影响因素,是因为当某个处理模块上子系统的内存压力较大时,其对应的某个时间间隔内的PageFault率一般较高。
[0136]对于每个处理模块而言,内存分配时间间隔为当前时间戳减去该处理模块最近一次被分配内存资源的时间戳的时间长度,将该时间长度作为该处理模块的内存分配时间间隔。该内存分配时间间隔与上述预设时间范围无关。
[0137]将内存分配时间间隔作为衡量处理模块的内存压力的另一个影响因素,是因为当某个处理模块上子系统的内存压力较大时,其内存分配时间间隔一般较短。
[0138]因此,将PageFault率和内存分配时间间隔的线性组合作为衡量处理模块的内存压力的指标。其中,计算时PageFault率的权重较大,起主要作用;内存分配时间间隔的权重较小,起辅助作用。
[0139]具体的实现方式为,各处理模块分别根据其在预设时间范围内发生PageFault的物理页面的数量和物理页面总数计算出PageFault率。在计算出PageFault率之后,处理模块将该PageFault率发送给主控处理模块。其中,处理模块也可以将发生PageFault的物理页面的数量和PageFault率一并发送给主控处理模块。
[0140]主控处理模块在接收到处理模块发送的PageFault率之后,计算该处理模块的内存分配时间间隔。由于全局内存管理服务是运行在主控处理模块上的,因此主控处理模块可以获知对各处理模块进行内存分配的情况。相应地,主控处理模块在接收到哪个处理模块发送的PageFault率之后,随即相应地计算该处理模块的内存分配时间间隔。
[0141]当主控处理模块接收到全部各处理模块分别发送的PageFault率之后,计算各处理模块的内存分配时间间隔的平均值。进而分别计算每个处理模块的内存压力的数值P。
[0142]单个处理模块的内存压力P= a^C+β* At。C即为该处理模块的PageFault率,At即为该处理模块的内存分配时间间隔与内存分配时间间隔的平均值的比值,α和β为根据计算需要而预设的系数。
[0143]从而,主控处理`模块通过上述计算方法,可以计算出各处理模块的内存压力的数值。
[0144]另一种可选的实施方式为,单个处理模块的所述内存状态信息还可以包括:最小页面驻留时间。当物理页面已从内存中换出后,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间;当物理页面尚未从内存中换出时,所述页面驻留时间为物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个页面驻留时间中数值最小的页面驻留时间。
[0145]相应地,步骤102具体可以为:
[0146]根据所述一个或多个处理模块各自的最小页面驻留时间,确定最小页面驻留时间的平均值;
[0147]所述单个处理模块的内存压力P为,所述单个处理模块的最小页面驻留时间与所述最小页面驻留时间的平均值之间的比值。
[0148]为了能够对各处理模块上子系统的内存压力进行量化,可以将页面驻留时间作为影响因素,用于衡量处理模块内存压力的大小。
[0149]对于每个处理模块而言,该处理模块中的每个物理页面的页面驻留时间即为该页面在内存中驻留的时间。每个物理页面从全局共享硬盘中换入到全局共享内存中的时间点为换入时间点,从全局共享内存中换出到全局共享硬盘的时间点为换出时间点,换出时间点与换入时间点之间的间隔时间为该物理页面的页面驻留时间;如果某个物理页面已换入到全局共享内存中而尚未换出时,则当前时间点与该换入时间点之间的间隔时间为该物理页面的页面驻留时间。
[0150]每个处理模块包括一个或多个物理页面,在预设的时间范围内,每个物理页面分别有各自的驻留时间。在该预设时间范围内,将多个物理页面的多个页面驻留时间中数值最小的页面驻留时间,作为最小页面驻留时间。处理模块向主控处理模块发送内存状态信息时,可以将该处理模块在预设时间范围内的最小页面驻留时间携带在该内存状态信息中。
[0151]该预设时间范围可以为处理模块向主控处理模块上报内存状态信息的周期对应的时间长度,也可以是小于该时间长度的其他时间长度。
[0152]将最小页面驻留时间作为衡量处理模块内存压力的大小的影响因素,是因为当某个处理模块上子系统的内存压力较大时,该物理模块上的物理页面在内存中的驻留时间一般较短。
[0153]具体的实现方式为,各处理模块分别将其在预设时间范围内的最小页面驻留时间发送给主控处理模块;主控处理模块在接收到处理模块发送的最小页面驻留时间之后,计算各处理模块的最小页面驻留时间的平均值,分别将各处理模块的最小页面驻留时间除以各最小页面驻留时间的平均值。从而,每个处理|旲块的最小页面驻留时间与最小页面驻留时间的平均值的比值,即为该处理模块的内存压力的数值P。
[0154]步骤103、判断所述一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值。若是,则执行步骤104 ;若否,则执行步骤105。
[0155]主控处理模块在计算出各处理模块的内存压力的数值之后,判断各处理模块之间的内存压力是否均衡。判断的方法是,计算出的内存压力的数值中的最大值与最小值之差是否大于或等于预设阈值。如果最大值与最小值之差大于或等于预设阈值,则说明当前各处理模块之间的内存压力不均衡;如果最大值与最小值之差小于预设阈值,则说明当前各处理模块之间的内存压力处于均衡状态。其中,该预设阈值可以根据需要相应地进行设定。
[0156]步骤104、向所述最小值对应的处理模块发送内存抢占消息,所述内存抢占消息中携带有需释放的内存大小。
[0157]执行步骤104是为了供所述最小值对应的处理模块对所述需释放的内存大小对应的内存资源进行释放。执行步骤104之后,继续执行步骤106。
[0158]步骤105、不需要对内存进行分配。
[0159]在主控处理模块判断出当前各处理模块之间的内存压力不均衡时,可以申请从内存压力的数值中最小值对应的处理模块的内存资源中抢占一定的内存资源。具体的实现方式可以为,主控处理模块向该最小值对应的处理模块发送内存抢占消息,并且,在该内存抢占消息中携带有需要抢占的内存的大小,也就是说,需要该处理模块进行释放的内存资源的大小。
[0160]该最小值对应的处理模块在接收到内存抢占消息之后,根据内存抢占消息中携带的需要释放的内存资源的大小,相应地,将该内存大小对应的内存资源进行释放。从而,该处理模块可用的内存资源的内存大小为,原有可用的内存资源和该部分释放的内存资源的内存大小之差。
[0161]由于各处理模块使用的内存资源为全局共享内存,也就是说,内存资源并不是属于每个处理模块的,而是根据各处理模块的需求相应地分配给其使用。因此,处理模块对内存进行占用或者进行释放,体现为其物理内存列表的更新。
[0162]—种可选的实施方式为,处理模块的物理内存列表中标记为可用的内存资源,是该处理模块可以使用的内存资源;标记为不可用的内存资源,是该处理模块不可以使用的内存资源。相应地,该处理模块对内存资源进行占用,即为该处理模块将其物理内存列表中的该部分内存资源标记为可用;该处理模块对内存资源进行释放,即为该处理模块将其物理内存列表中的该部分内存资源标记为不可用。
[0163]在主控处理模块判断出当前各处理模块之间的内存压力处于均衡状态时,则不需要按照上述方法,从内存压力的数值中最小值对应的处理模块中抢占内存资源。
[0164]步骤106、向所述最大值对应的处理模块发送内存分配消息,所述内存分配消息中携带有待分配的内存大小。
[0165]执行步骤106是为了使所述最大值对应的处理模块在可用内存资源中增加了所述待分配的内存大小之后,内存压力的数值相应地减小。
[0166]执行步骤106具有是在从所述最小值对应的处理模块中抢占到内存资源之后进行的。
[0167]主控处理模块从内存压力的数值中最小值对应的处理模块中抢占到了内存资源之后,向内存压力的数值中最大值对应的处理模块分配内存资源。具体的实现方式为,主控处理模块向最大值对应的处理模块发送内存分配消息,并且,在该内存分配消息中携带有可分配的内存大小,也就是说,待向该处理模块进行分配的内存资源的大小。
[0168]该最大值对应的处理模块在接收到内存分配消息之后,根据内存分配消息中携带的待分配的内存资源的大小,相应地,将该内存大小对应的内存资源进行占用,也就是说,在其可用的内存资源中增加该部分待分配的内存资源的大小。从而,该处理模块可用的内存资源的内存大小为,原有可用的内存资源和该部分增加的内存资源的内存大小之和。
[0169]由于各处理模块使用的内存资源为全局共享内存,也就是说,内存资源并不是属于每个处理模块的,而是根据各处理模块的需求相应地分配给其使用。因此,处理模块对内存进行占用或者进行释放,体现为其物理内存列表的更新。
[0170]一种可选的实施方式为,处理模块的物理内存列表中标记为可用的内存资源,是该处理模块可以使用的内存资源;标记为不可用的内存资源,是该处理模块不可以使用的内存资源。相应地,该处理模块对内存资源进行占用,即为该处理模块将其物理内存列表中的该部分内存资源标记为可用;该处理模块对内存资源进行释放,即为该处理模块将其物理内存列表中的该部分内存资源标记为不可用。
[0171]主控处理模块从内存压力的数值中最小值对应的处理模块中抢占了内存资源之后,该最小值对应的处理模块中的内存压力将由于可用内存资源减少而增大;主控处理模块向内存压力的数值中最大值对应的处理模块分配了内存资源之后,该最大值对应的处理模块中的内存压力将由于可用内存资源增多而减小,从而达到对各处理模块的内存压力进行均衡化的效果。
[0172]本发明实施例提供的内存分配方法,在接收一个或多个处理模块分别发送的内存状态信息之后,分别确定一个或多个处理模块各自的内存压力的数值,并在判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值时,向最小值对应的处理模块发送内存抢占消息,在从最小值对应的处理模块中抢占到内存资源之后,向最大值对应的处理模块发送内存分配消息,使得最大值对应的处理模块在可用内存资源中增加了待分配的内存大小之后,内存压力的数值相应地减小。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0173]进一步地,在上述各实施例的基础上,所述需释放的内存大小具体为:
[0174]所述一个或多个处理模块的内存压力的数值的平均值与所述内存压力的数值中最小值之差,与所述最小值对应的处理模块中内存资源的总数的乘积。
[0175]在主控处理模块向内存压力的数值中最小值对应的处理器发送的内存抢占消息中携带有需释放的内存大小。该需释放的内存大小具体为,将该处理模块的内存压力提升到平均水平,所需要释放的内存的大小。
[0176]主控处理模块在计算出各处理模块的内存压力的数值之后,还需要计算出各处理模块的内存压力的平均值。利用该平均值减去该处理模块的内存压力的数值,所得差值即为该处理模块的内存压力与平均水平的差距;利用该差值乘以该处理模块中内存资源的总数,所得即为将该处理模块的内存压力提升到平均水平所需要释放的内存的大小。
[0177]其中,全局共享内存中的内存资源是通过物理内存块数体现的,每个物理内存块数对应的内存大小是相等的。处理模块对全局共享内存中的内存资源的占用就是对物理内存块的占用;对全局共享内存中的内存资源的释放就是对物理内存块的释放。
[0178]根据需要释放的内存的大小和每个物理内存块的大小,计算需要释放的物理内存块的数量,若计算结果不是整数,则可以采用向上取整的方法,获得最终需要释放的物理内存块的数量。
[0179]从而,根据上述计算方法可以得到该最小值对应的处理模块需要释放的物理内存块的多少,也就是需要释放的内存的大小。
[0180]进一步地,所述待分配的内存大小具体为:
[0181]所述内存压力的数值中最大值与所述一个或多个处理模块的内存压力的数值的平均值之差,与所述最大值对应的处理模块中内存资源的总数的乘积。
[0182]在主控处理模块向内存压力的数值中最大值对应的处理器发送的内存分配消息中携带有待分配的内存大小。该待分配的内存大小具体为,将该处理模块的内存压力降低到平均水平,所需要增加的内存的大小。
[0183]由于主控处理模块计算出了各处理模块的内存压力的数值的平均值,因此利用该处理模块的内存压力的数值减去该平均值,所得差值即为该处理模块的内存压力与平均水平的差距;利用该差值乘以该处理模块中内存资源的总数,所得即为将该处理模块的内存压力降低到平均水平所需要增加的内存的大小。
[0184]根据需要增加的内存的大小和每个物理内存块的大小,计算需要增加的物理内存块的数量,若计算结果不是整数,则可以采用向上取整的方法,获得最终需要增加的物理内存块的数量。
[0185]从而,根据上述计算方法可以得到该最小值对应的处理模块需要增加的物理内存块的多少,也就是需要增加的内存的大小。[0186]本发明实施例提供的内存分配方法,根据该处理模块的内存压力与内存压力的平均值之间的差距,确定需要从内存压力较小的处理模块中抢占的内存资源的大小,以及需要向内存压力较大的处理模块分配的内存资源的大小,能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0187]进一步地,在上述各实施例的基础上,步骤101具体可以为,分别按照所述一个或多个处理模块各自的心跳频率,接收所述一个或多个处理模块分别发送的内存状态信息。
[0188]上述预设时间范围可以为各处理模块的心跳周期。每个处理模块按照心跳频率,周期性地向主控处理模块发送心跳信息。主控处理模块接收到心跳信息之后,即可获知其可与发送该心跳信息的处理模块之间进行通信。
[0189]各处理模块可以根据心跳频率,在向主控处理模块发送心跳信息时,将当前结束的一个心跳周期内的内存状态信息发送给主控处理模块。主控处理模块接收到的各处理模块的心跳信息,可能存在一定的先后顺序。主控处理模块在接收到每个处理模块在发送心跳信息时发送的内存状态信息之后,即相应地对处理模块的内存压力进行计算,当接收到全部各处理模块的内存状态信息之后,即利用上述方法判断是否需要进行内存分配。
[0190]对于主控处理模块在单次内存分配的过程中接收到的心跳信息和内存状态信息,可以忽略不计,而是在每次内存分配结束之后,开始接收处理模块发送的内存状态信息,直至接收到全部各处理模块发送的各内存状态信息。
[0191]由于主控处理模块在每次进行内存分配之后,或者判断出不需要进行内存分配之后,都将继续收集各处理模块继续上报的内存状态信息,从而使得主控处理模块对各处理模块进行内存分配的过程是动态进行的。一旦判断出各处理模块的内存压力存在不均衡的情况时,可以及时地对内存资源的分配进行调整。
[0192]本发明实施例提供的内存分配方法,根据处理模块的心跳频率接收各处理模块在心跳周期内的内存状态信息,使得主控处理模块能够及时地对各处理模块的内存压力是否平衡进行判断,从而动态地对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0193]图3和图4所示实施例的执行主体为处理模块,该处理模块是在各处理模块中内存压力的数值为最小的处理模块,是被主控处理模块抢占内存资源的处理模块。
[0194]图3为本发明提供的内存分配方法另一实施例的流程图,如图3所示,该方法包括:
[0195]步骤201、将内存状态信息发送给主控处理模块。
[0196]执行步骤201是为了供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值。
[0197]步骤202、接收所述主控处理模块发送的内存抢占消息。
[0198]其中,所述内存抢占消息为所述主控处理模块在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于所述预设阈值之后,向所述最小值对应的处理模块发送的,所述内存抢占消息中携带有需释放的内存大小。
[0199]步骤203、对所述需释放的内存大小对应的内存资源进行释放。
[0200]具体的,本发明实施例中的处理模块被主控处理模块抢占内存资源的方法可以参见上述步骤101-106所述的实现方式,此处不再赘述。
[0201]本发明实施例提供的内存分配方法,将内存状态信息发送给主控处理模块,用于供主控处理模块根据内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值,在主控处理模块判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值之后,接收主控处理模块发送的内存抢占消息,并根据内存抢占消息中携带有需释放的内存大小,对需释放的内存大小对应的内存资源进行释放。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0202]图4为本发明提供的内存分配方法又一实施例的流程图,如图4所示,在上述实施例的基础上,在执行步骤202之后,执行步骤203之前,该方法还包括:
[0203]步骤204、判断所述需释放的内存大小是否大于或等于空闲内存的大小。若是,则执行步骤205 ;若否,则执行步骤206。
[0204]步骤205、采用模拟换页机制,从非空闲内存中抢占可被交换的内存。执行完步骤205之后,继续执行步骤207。其中,抢占的所述可被交换的内存的大小等于所述需释放的内存大小与所述空闲内存的大小之差。
[0205]步骤206、对所述需释放的内存大小对应的内存资源进行释放。
[0206]步骤207、对所述空闲内存的大小和抢占的所述可被交换的内存的大小对应的内存资源进行释放。
[0207]其中,步骤206和步骤207分别为步骤203在本实施例中的具体实现方式。
[0208]处理模块接收到主控处理模块发送的内存抢占信息之后,还可以进一步地判断内存抢占信息中的需释放的内存大小是否大于或等于其上空闲内存的大小。
[0209]若需释放的内存大小小于其上空闲内存的大小,则处理模块直接将需释放的内存大小对应的内存资源进行释放即可。
[0210]若需释放的内存大小大于或等于其上空闲内存的大小,则计算出需释放的内存大小与空闲内存的大小的差值,从非空闲的内存资源中对该差值对应的内存大小进行抢占。
[0211]处理模块中除了操作系统内核占用的内存以外,其他负载,或称程序,所占用的内存资源是可以被交换出来的。具体的实现方式为,利用模拟换页机制,将上述差值对应的内存大小中的负载从全局共享内存中交换到全局共享硬盘上,从而将该部分内存资源空闲出来,使得该部分内存资源被抢占。
[0212]由于处理模块中可以利用物理内存列表的方式表征其可用的内存资源。从而,当内存中的负载被交换到硬盘中之后,可以在物理内存列表中进行相应的标记,以表征该部分负载被交换到硬盘上的相应存储空间中。
[0213]处理模块将原有的空闲内存和该部分被抢占的内存资源进行释放。
[0214]本发明实施例提供的内存分配方法,在判断出需释放的内存大小大于或等于空闲内存的大小之后,采用模拟换页机制,从非空闲内存中抢占可被交换的内存,所抢占的可被交换的内存的大小等于需释放的内存大小与空闲内存的大小之差,从而对空闲内存的大小和抢占的可被交换的内存的大小对应的内存资源进行释放,当多操作系统结构中的各处理模块的内存压力分布悬殊时,不仅能够从内存压力较小的处理模块的内存资源中抢占到空闲的内存,还能够从非空闲的内存中抢占可被交换的部分内存,从而能够尽量保证有足够的内存资源可以分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0215]进一步地,在上述实施例的基础上,所述内存状态信息可以包括:
[0216]在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者
[0217]最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0218]具体的,本发明实施例中处理模块向主控处理模块发送的内存状态信息的具体形式可以参见上述步骤101-102中所述的具体内容,此处不再赘述。
[0219]进一步地,在上述各实施例的基础上,步骤201可以具体为,按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0220]每个处理模块可以按照心跳频率,周期性地向主控处理模块发送心跳信息。主控处理模块接收到心跳信息之后,即可获知其可与发送该心跳信息的处理模块之间进行通 ?目。
[0221]各处理模块可以根据心跳频率,在向主控处理模块发送心跳信息时,将当前结束的一个心跳周期内的内存状态信息发送给主控处理模块。主控处理模块接收到的各处理模块的心跳信息,可能存在一定的先后顺序。主控处理模块在接收到每个处理模块在发送心跳信息时发送的内存状态信息之后,即相应地对处理模块的内存压力进行计算,当接收到全部各处理模块的内存状态信息之后,即利用上述方法判断是否需要进行内存分配。
[0222]对于主控处理模块在单次内存分配的过程中接收到的心跳信息和内存状态信息,可以忽略不计,而是在每次内存分配接收之后,开始接收处理模块发送的内存状态信息,直至接收到全部各处理模块发送的各内存状态信息。
[0223]由于主控处理模块在每次进行内存分配之后,或者判断出不需要进行内存分配之后,都将继续收集各处理模块继续上报的内存状态信息,从而使得主控处理模块对各处理模块进行内存分配的过程是动态进行的。一旦判断出各处理模块的内存压力存在不均衡的情况时,可以及时地对内存资源的分配进行调整。
[0224]本发明实施例提供的内存分配方法,按照心跳频率向主控处理模块发送心跳周期内的内存状态信息,使得主控处理模块能够及时地对各处理模块的内存压力是否平衡进行判断,从而动态地对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0225]进一步地,在上述各实施例的基础上,在执行完步骤201之后,一种可选的实施方式为,接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;在可用内存资源中增加所述待分配的内存大小。
[0226]由于本发明实施例中的内存分配方法是动态进行的,因此可能在某个心跳周期内内存压力的数值为最小值的处理模块,在当前心跳周期内成为内存压力的数值为最大值的处理模块,因此在某个心跳周期内被抢占内存资源的处理模块,也有可能在当前的心跳周期内成为被主控处理模块分配内存资源的处理模块。
[0227]具体的,本发明实施例中的处理模块被主控处理模块分配内存资源的方法可以参见上述步骤101-106所述的实现方式,此处不再赘述。
[0228]本发明实施例提供的内存分配方法,接收主控处理模块在从最小值对应的处理模块中抢占到内存资源之后,发送的内存分配消息,该内存分配消息中携带有待分配的内存大小,从而在可用内存资源中增加待分配的内存大小。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0229]图5为本发明提供的内存分配方法又一实施例的流程图,如图5所示,该方法包括:
[0230]步骤301、将内存状态信息发送给主控处理模块。
[0231]执行步骤301是为了供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值。
[0232]步骤302、接收所述主控处理模块发送的内存分配消息。
[0233]其中,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小。
[0234]步骤303、在可用内存资源中增加所述待分配的内存大小。
[0235]具体的,本发明实施例中的处理模块被主控处理模块抢占内存资源的方法可以参见上述步骤101-106所述的实现方式,此处不再赘述。
[0236]本发明实施例提供的内存分配方法,将内存状态信息发送给主控处理模块,用于供主控处理模块根据内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值,在主控处理模块判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值之后,接收主控处理模块发送的内存抢占消息,并根据内存抢占消息中携带有需释放的内存大小,对需释放的内存大小对应的内存资源进行释放。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0237]进一步地,在上述实施例的基础上,所述内存状态信息包括:[0238]在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者
[0239]最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0240]具体的,本发明实施例中处理模块向主控处理模块发送的内存状态信息的具体形式可以参见上述步骤101-102中所述的具体内容,此处不再赘述。
[0241]进一步地,在上述各实施例的基础上,步骤301可以具体为,按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0242]每个处理模块可以按照心跳频率,周期性地向主控处理模块发送心跳信息。主控处理模块接收到心跳信息之后,即可获知其可与发送该心跳信息的处理模块之间进行通信。
[0243]各处理模块可以根据心跳频率,在向主控处理模块发送心跳信息时,将当前结束的一个心跳周期内的内存状态信息发送给主控处理模块。主控处理模块接收到的各处理模块的心跳信息,可能存在一定的先后顺序。主控处理模块在接收到每个处理模块在发送心跳信息时发送的内存状态信息之后,即相应地对处理模块的内存压力进行计算,当接收到全部各处理模块的内存状态信息之后,即利用上述方法判断是否需要进行内存分配。
[0244]对于主控处理模块在单次内存分配的过程中接收到的心跳信息和内存状态信息,可以忽略不计,而是在每次内存分配接收之后,开始接收处理模块发送的内存状态信息,直至接收到全部各处理模块发送的各内存状态信息。
[0245]由于主控处理模块在每次进行内存分配之后,或者判断出不需要进行内存分配之后,都将继续收集各处理模块继续上报的内存状态信息,从而使得主控处理模块对各处理模块进行内存分配的过程是动态进行的。一旦判断出各处理模块的内存压力存在不均衡的情况时,可以及时地对内存资源的分配进行调整。
[0246]本发明实施例提供的内存分配方法,按照心跳频率向主控处理模块发送心跳周期内的内存状态信息,使得主控处理模块能够及时地对各处理模块的内存压力是否平衡进行判断,从而动态地对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0247]图6a为本发明提供的多操作系统结构的硬件架构图,图6b为本发明提供的多操作系统结构的软件架构图。
[0248]在图6a所示的多操作系统结构的硬件架构中,共享内存阵列(Memory Array)由一个或多个内存阵列组成,多个CPU (CPU_1、CPU_2...CPU_N)或者内核(内核1、内核2...内核N)共享该一个或多个内存阵列,每个CPU或内核上都运行着独立的操作系统(0S_1、0S_2...0S_N),0S_1...0S_N是多操作系统结构中的各个子系统。其中,0S_1或称为操作系统I作为管理操作系统,其上运行着全局管理服务GMS,负责协调各个CPU或内核上子系统的运行。
[0249]在图6b所示的多操作系统结构的软件架构中,全局共享内存也可以称为内存池(Memory Pool),内存池可以由一个或者多个内存阵列通过高速外设互联标准(PICe)接口或者其他接口连接所组成;全局内存管理服务(Global Memory Management Service,GMMS)是运行在管理操作系统上的一个内存管理服务,属于全局管理服务中的部分功能,用于协调各个子系统的内存使用情况。各个子系统内部提供了多种功能,包括本地内存管理(Local Memory Management, LMM)、心跳机制(Heart Beat, HB)和内存使用状况收集功能(Memory Status Collectors,MSC)等。其中,实现LMM功能的模块是各子系统内部的内存管理模块;实现HB功能的模块是各子系统内部用于向管理操作系统发送心跳信息及其他信息的模块,利用心跳信息证明子系统尚在运行;实现MSC功能的模块是各子系统对其内部的内存使用情况进行统计的模块。
[0250]一种可选的内存分配方法的具体实现方式如下。
[0251]定义一个内存压力评价指标用来量化各个子系统的内存压力大小。在每个子系统的内存状态收集MSC模块用于收集该子系统的内存状态信息,并将对应的状态参数发送给全局内存管理服务。其中,各子系统发送给全局内存管理服务的状态参数可以为PageFault数或者页面驻留时间。
[0252]一种可行的实施方式为,各子系统的MSC模块中提供了一个变量用来统计子系统每次心跳间隔内的PageFault数。该变量在每次执行PageFault服务程序时自动加1,并在每次心跳之后自动清零。在每次心跳时,子系统将自身的PageFault数与物理页面数及其比值C发送给全局内存管理服务。
[0253]全局内存管理服务在得到全部子系统的状态参数之后,将各子系统的状态参数转换为各自的内存压力指标。具体的,全局内存管理服务收到该比值后,将当前时间戳减去该子系统的上一次内存分配时间戳,作为为该子系统的内存分配间隔,并计算该子系统的内存分配时间间隔与各子系统的平均内存分配时间间隔的比值At。全局内存管理服务将这两个因素组合成子系统的内存压力P,用于衡量该子系统的内存压力,其中,P= α ^C+β
`[0254]另一种可行的实施方式为,在每个子系统的MSC模块中,提供一个变量用于统计一段时间内页面在内存中驻留的最短时间。在每次PageFault服务程序中,系统计算当前换出页面的内存驻留时间,如果该驻留时间小于当前最小页面驻留时间则更新该变量。在心跳信息中,子系统将系统的最小页面驻留时间发送给全局内存管理服务。同时,在心跳信息发送后,子系统将该变量清零。页面驻留时间定义为某个页面的内容在内存中的停留时间。某个即将换出内存页面的内存驻留时间的计算方式为在PageFault服务程序中用当前时间戳减去该页面的换入时间。最小页面驻留时间为一段时间内页面驻留时间的最小值。
[0255]全局内存管理服务将一段时间内,最小页面驻留时间与各子系统的平均页面驻留时间的比值,作为衡量某个子系统的内存压力。
[0256]相应地,全局内存管理服务得到了所有子系统的内存压力指标,进而将根据这些压力指标来判断所有子系统的压力是否均衡,即判断最大压力与最小压力之差是否达到预设阈值。如果达到该预设阈值,则说明全局内存压力已经不均衡,需要启动内存压力均衡机制;如果未达到该预设阈值,则说明当前全局内存压力比较均衡,不需要启动内存压力均衡机制。该预设阈值可以通过人工的方式设置。
[0257]在判断出需要启动内存压力均衡机制之后,全局内存管理服务将采用从内存压力最低的系统中抢占一部分内存分配给内存压力较高的系统的方式来均衡全局内存压力。将内存压力最大的系统作为内存分配子系统,内存压力最小的系统作为被抢占子系统。
[0258]全局内存管理服务在确定了被抢占子系统和内存分配子系统之后,将计算抢占内存的大小。将抢占内存大小定义为,将被抢占子系统内存压力增加到所有子系统内存压力平均值做需要放弃的内存的最小块数,具体的计算方式为,(平均内存压力-被抢占子系统内存压力)*被抢占子系统的物理内存总块数。
[0259]全局内存管理服务将抢占内存大小封装在抢占消息中发送给被抢占子系统。被抢占子系统收到该消息后,首先确定自身内存被抢占的内存资源,把这些内存资源对应的存储空间的内容清空,从其物理内存列表中将该部分内存向全局内存管理服务进行释放。全局内存管理服务在收到释放内存信息之后,将启动向内存分配子系统分配内存机制。内存管理服务将计算所需分配内存的大小,将分配内存的大小定义为,使内存分配子系统的内存压力降低到平均内存压力所需要获取物理内存的最小块数,具体的计算方式为,(内存分配子系统的内存压力-平均内存压力)*被抢占子系统的物理内存总块数。
[0260]在计算出内存分配块数之后,全局内存管理服务可以判断从被抢占子系统抢占的内存块数,是否多于需要向内存分配子系统分配的内存块数。如果获得的内存块数多于需要分配的内存块数,则向内存分配子系统完全分配其所需要的内存块数,剩余的内存则作为空闲内存;如果获得的内存块数小于需要分配的内存块数,则将已获得的内存全部分配给内存分配子系统。
[0261]全局内存管理服务将分配内存的大小封装在内存分配消息中,发送给内存分配子系统。内存分配子系统收到该消息后,将对分配的内存进行登记,并更新机器状态。最终全局内存管理服务更新内存分配信息,完成内存压力均衡操作。
[0262]全局内存管理服务向内存分配子系统分配内存的具体方式为,全局内存管理服务在确定了需要向内存分配子系统分配的内存块数之后,将这些内存标记为不可用内存。之后,全局内存管理服务向内存分配子系统发送内存分配消息。在该消息中,全局内存管理服务将所分配的内存块的信息一并发送给内存分配子系统。内存分配子系统收到该内存分配消息之后,将内存分配消息中指示的内存加入物理内存列表中,将这些内存标记为不可用,并向全局内存管理服务发送确认消息。全局内存管理服务接收到该确认消息之后,将这部分内存由不可用状态变更为已分配状态,并向内存分配子系统发送分配确认信息。内存分配子系统收到该分配确认信息之后,将原先不可用的内存标记为可用状态,完成整个内存分配过程。
[0263]在实际通信过程中,可能出现以下异常情况,例如,全局内存管理服务未收到来自内存分配子系统的确认消息,和/或内存分配子系统未收到来自于全局内存管理服务的分配确认消息。
[0264]若全局内存管理服务长时间未收到来自内存分配子系统的确认消息,则向其发送消息询问,如果仍未收到其确认消息,则将原来标记为不可用内存标记为空闲内存,本次内存分配失败。
[0265]若内存分配子系统长时间未收到来自于全局内存管理服务的分配确认消息,则向其发消息询问,如果仍未收到其分配确认消息,则将原来标记为不可用的内存从物理内存列表中删除,本次内存分配失败。
[0266]全局内存管理服务从被抢占子系统中抢占内存的具体方式为,被抢占子系统接收到来自于全局内存管理服务的内存抢占消息后,被抢占子系统从内存抢占消息中获取需要抢占内存的块数,判断自身的物理内存列表中,空闲内存的块数是否满足需要释放的内存块数。当空闲内存满足释放需求时,被抢占子系统从空闲内存中取出需要释放内存,并将其标记为不可用内存;如果空闲内存不满足释放需求,被抢占子系统将所有空闲内存标记为不可用,并从其他物理内存中随机取出剩余所需内存,作为候选释放内存。其中,其他物理内存指的是除了运行子系统的内核的内存资源以外的其他内存资源。被抢占子系统采用模拟换页机制,将候选释放内存的内容交换到全局共享磁盘上,并将这些内存对应的页表项标示为其内容已交换到磁盘上进行存储,进而将这部分交换出来的内存在子系统的物理内存列表中标志为不可用。
[0267]被抢占子系统在将空闲内存和交换出来的内存对应的内存块中的内容清空之后,将所有准备释放的内存信息发送给全局内存管理服务,准备释放。全局内存管理服务在接收到来自于被抢占子系统的内存释放消息后,将对应的释放内存标记为不可用内存,并向被抢占子系统发送释放确认消息。被抢占子系统收到释放确认消息后,将所标记不可用内存从物理内存列表中删除,并向全局内存管理服务发送确认消息。全局内存管理服务收到该确认消息后,将标记为不可用的内存标记为可分配内存。
[0268]在实际通信过程中,可能出现以下异常情况,例如,被抢占子系统未收到来自全局内存管理服务的释放确认消息,和/或全局内存管理服务未收到来自于被抢占子系统的确认消息。
[0269]当被抢占子系统长时间未接收到来自全局内存管理服务的释放确认消息时,则向其发消息询问,如果仍未收到回复,则将不可用内存标记为可用,此次内存释放失败。
[0270]当全局内存管理服务长时间未接收到来自被抢占子系统的确认消息,则将标记为不可用内存回滚标记为已分配内存,此时内存释放失败。
[0271]本发明实施例提供的内存分配方法,使用全局内存管理服务根据各子系统的实际内存压力动态地对各子系统的内存进行调整,能够有针对性的满足内存需求较大的子系统的内存需求,每个子系统只需要在心跳过程中将其内部统计的相关信息发送给全局内存管理服务,并未增加过多的通信开销,由全局内存管理服务主动进行内存均衡的方式能够减少各子系统的运行压力,不仅能够提高各子系统的整体性能,还能提高整个多操作系统结构的性能。
[0272]此外,上述各实施例中所述的内存分配方法还可以应用到虚拟机领域。例如,在一个宿主系统中有多个虚拟机(client system)在执行,宿主系统为每个虚拟机都分配内存供其执行。我们也可以在宿主机中启动一个全局内存管理服务用于动态管理各个虚拟机的内存使用情况。内存管理服务能够收集各个客户操作系统的内存压力大小,并且在内存压力相差悬殊时能够从内存压力小的client OS中抢夺一部分内存给内存压力大的clientOS。
[0273]图7为本发明提供的主控处理模块一实施例的结构示意图,如图7所示,该主控处理模块包括,接收单元11、处理单元12、判断单元13和发送单元14。
[0274]其中,接收单元11,用于接收一个或多个处理模块分别发送的内存状态信息;处理单元12,用于根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值;判断单元13,用于判断所述一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;发送单元14,用于在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值时,向所述最小值对应的处理模块发送内存抢占消息,所述内存抢占消息中携带有需释放的内存大小,以供所述最小值对应的处理模块对所述需释放的内存大小对应的内存资源进行释放;
[0275]所述发送单元14还用于,在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送内存分配消息,所述内存分配消息中携带有待分配的内存大小,以使所述最大值对应的处理模块在可用内存资源中增加了所述待分配的内存大小之后,内存压力的数值相应地减小。
[0276]进一步地,在上述实施例的基础上,所述接收单元11接收到的单个处理模块的所述内存状态信息包括:所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;
[0277]相应地,所述处理单元12具体用于,根据所述一个或多个处理模块各自的内存分配时间间隔,确定内存分配时间间隔的平均值,所述内存分配时间间隔为所述单个处理模块最近一次物理页面总数发生变更的时间点与当前时间点之间的时间间隔;所述单个处理模块的内存压力P为,P= a *C+ β * Λ t ;其中,所述C为所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值,所述At为所述单个处理模块的内存分配时间间隔与所述内存分配时间间隔的平均值之间的比值,所述α和所述β为预设系数。
[0278]进一步地,在上述各实施例的基础上,所述接收单元11接收到的单个处理模块的所述内存状态信息包括最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个页面驻留时间中数值最小的页面驻留时间;
[0279]相应地,所述处理单元12具体用于,根据所述一个或多个处理模块各自的最小页面驻留时间,确定最小页面驻留时间的平均值;所述单个处理模块的内存压力P为,所述单个处理模块的最小页面驻留时间与所述最小页面驻留时间的平均值之间的比值。
[0280]本发明实施例提供的主控处理模块,在接收一个或多个处理模块分别发送的内存状态信息之后,分别确定一个或多个处理模块各自的内存压力的数值,并在判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值时,向最小值对应的处理模块发送内存抢占消息,在从最小值对应的处理模块中抢占到内存资源之后,向最大值对应的处理模块发送内存分配消息,使得最大值对应的处理模块在可用内存资源中增加了待分配的内存大小之后,内存压力的数值相应地减小。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0281]进一步地,在上述各实施例的基础上,所述需释放的内存大小具体为:
[0282]所述一个或多个处理模块的内存压力的数值的平均值与所述内存压力的数值中最小值之差,与所述最小值对应的处理模块中内存资源的总数的乘积。[0283]进一步地,在上述各实施例的基础上,所述待分配的内存大小具体为:
[0284]所述内存压力的数值中最大值与所述一个或多个处理模块的内存压力的数值的平均值之差,与所述最大值对应的处理模块中内存资源的总数的乘积。
[0285]本发明实施例提供的主控处理模块,根据该处理模块的内存压力与内存压力的平均值之间的差距,确定需要从内存压力较小的处理模块中抢占的内存资源的大小,以及需要向内存压力较大的处理模块分配的内存资源的大小,能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0286]进一步地,在上述各实施例的基础上,所述接收单元11具体用于:
[0287]分别按照所述一个或多个处理模块各自的心跳频率,接收所述一个或多个处理模块分别发送的内存状态信息。
[0288]本发明实施例提供的主控处理模块,根据处理模块的心跳频率接收各处理模块在心跳周期内的内存状态信息,使得主控处理模块能够及时地对各处理模块的内存压力是否平衡进行判断,从而动态地对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0289]图8为本发明提供的第一种处理模块一实施例的结构示意图,如图8所示,该处理模块包括发送单元21、接收单元22和处理单元23。
[0290]其中,发送单元21,用于将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;接收单元22,用于接收所述主控处理模块发送的内存抢占消息,所述内存抢占消息为所述主控处理模块在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于所述预设阈值之后,向所述最小值对应的处理模块发送的,所述内存抢占消息中携带有需释放的内存大小;处理单元23,用于对所述需释放的内存大小对应的内存资源进行释放。
[0291]本发明实施例提供的处理模块,将内存状态信息发送给主控处理模块,用于供主控处理模块根据内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值,在主控处理模块判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值之后,接收主控处理模块发送的内存抢占消息,并根据内存抢占消息中携带有需释放的内存大小,对需释放的内存大小对应的内存资源进行释放。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0292]图9为本发明提供的第一种处理模块另一实施例的结构示意图,如图9所示,该处理模块还包括判断单元24。
[0293]判断单元24,用于所述接收单元22接收所述主控处理模块发送的内存抢占消息之后,所述接收单元22对所述需释放的内存大小对应的内存资源进行释放之前,判断所述需释放的内存大小是否大于或等于空闲内存的大小;
[0294]所述处理单元23还用于,在所述判断单元24判断出所述需释放的内存大小大于或等于所述空闲内存的大小时,采用模拟换页机制,从非空闲内存中抢占可被交换的内存,对所述空闲内存的大小和抢占的所述可被交换的内存的大小对应的内存资源进行释放,其中,抢占的所述可被交换的内存的大小等于所述需释放的内存大小与所述空闲内存的大小之差。
[0295]本发明实施例提供的处理模块,在判断出需释放的内存大小大于或等于空闲内存的大小之后,采用模拟换页机制,从非空闲内存中抢占可被交换的内存,所抢占的可被交换的内存的大小等于需释放的内存大小与空闲内存的大小之差,从而对空闲内存的大小和抢占的可被交换的内存的大小对应的内存资源进行释放,当多操作系统结构中的各处理模块的内存压力分布悬殊时,不仅能够从内存压力较小的处理模块的内存资源中抢占到空闲的内存,还能够从非空闲的内存中抢占可被交换的部分内存,从而能够尽量保证有足够的内存资源可以分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0296]进一步地,在上述各实施例的基础上,所述内存状态信息包括,在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0297]进一步地,在上述各实施例的基础上,所述发送单元21具体用于,按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0298]本发明实施例提供的处理模块,按照心跳频率向主控处理模块发送心跳周期内的内存状态信息,使得主控处理模块能够及时地对各处理模块的内存压力是否平衡进行判断,从而动态地对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0299]进一步地,在上述各实施例的基础上,所述接收单元22还用于,在所述发送单元21将内存状态信息发送给主控处理模块之后,接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;
[0300]相应地,所述处理单元23还用于,在可用内存资源中增加所述待分配的内存大小。
[0301]本发明实施例提供的处理模块,接收主控处理模块在从最小值对应的处理模块中抢占到内存资源之后,发送的内存分配消息,该内存分配消息中携带有待分配的内存大小,从而在可用内存资源中增加待分配的内存大小。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0302]图10为本发明提供的第二种处理模块一实施例的结构示意图,如图10所示,该处理模块包括发送单元31、接收单元32和处理单元33。
[0303]其中,发送单元31,用于将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值;接收单元32,用于接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;处理单元33,用于在可用内存资源中增加所述待分配的内存大小。
[0304]本发明实施例提供的处理模块,将内存状态信息发送给主控处理模块,用于供主控处理模块根据内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值,在主控处理模块判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值之后,接收主控处理模块发送的内存抢占消息,并根据内存抢占消息中携带有需释放的内存大小,对需释放的内存大小对应的内存资源进行释放。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0305]进一步地,在上述实施例的基础上,所述内存状态信息包括,在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
[0306]进一步地,在上述各实施例的基础上,所述处理单元33具体用于,按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
[0307]本发明实施例提供的处理模块,按照心跳频率向主控处理模块发送心跳周期内的内存状态信息,使得主控处理模块能够及时地对各处理模块的内存压力是否平衡进行判断,从而动态地对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0308]图11为本发明提供的第一种中央处理器实施例的结构示意图,如图11所示,该中央处理器100包括如图7所示的主控处理模块I。
[0309]具体的,该主控处理模块进行内存分配的方法可以参见上述对应的方法实施例中所述的步骤,此处不再赘述。
[0310]图12为本发明提供的第二种中央处理器实施例的结构示意图,如图12所示,该中央处理器200包括如图8或图9所示的处理模块2。
[0311 ] 具体的,该处理模块进行内存分配的方法可以参见上述对应的方法实施例中所述的步骤,此处不再赘述。
[0312] 图13为本发明提供的第三种中央处理器实施例的结构示意图,如图13所示,该中央处理器300包括如图10所示的处理模块3。[0313]具体的,该处理模块进行内存分配的方法可以参见上述对应的方法实施例中所述的步骤,此处不再赘述。
[0314]图14为本发明提供的计算机系统实施例的结构示意图,如图14所示,该计算机系统包括上述中央处理器100、中央处理器200和中央处理器300。中央处理器100、中央处理器200和中央处理器300构成多操作系统结构。
[0315]本发明实施例提供的计算机系统,在接收一个或多个处理模块分别发送的内存状态信息之后,分别确定一个或多个处理模块各自的内存压力的数值,并在判断出一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值时,向最小值对应的处理模块发送内存抢占消息,在从最小值对应的处理模块中抢占到内存资源之后,向最大值对应的处理模块发送内存分配消息,使得最大值对应的处理模块在可用内存资源中增加了待分配的内存大小之后,内存压力的数值相应地减小。当多操作系统结构中的各处理模块的内存压力分布悬殊时,从内存压力较小的处理模块的内存资源中抢占一部分分配给内存压力较大的处理模块,能够有效地满足内存压力较大的处理模块的高内存需求,并且能够对各处理模块之间的内存压力进行均衡,有效地提高整个多操作系统结构中内存资源的利用率和系统性能。
[0316]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0317]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【权利要求】
1.一种内存分配方法,其特征在于,包括: 接收一个或多个处理模块分别发送的内存状态信息; 根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值; 判断所述一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值; 若是,则向所述最小值对应的处理模块发送内存抢占消息,所述内存抢占消息中携带有需释放的内存大小,以供所述最小值对应的处理模块对所述需释放的内存大小对应的内存资源进行释放; 在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送内存分配消息,所述内存分配消息中携带有待分配的内存大小,以使所述最大值对应的处理模块在可用内存资源中增加了所述待分配的内存大小之后,内存压力的数值相应地减小。
2.根据权利要求1所述的内存分配方法,其特征在于,单个处理模块的所述内存状态信息包括:所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值; 相应地,所述根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值具体为: 根据所述一个或多个处理模块各自的内存分配时间间隔,确定内存分配时间间隔的平均值,所述内存分配时间间隔为所述单个处理模块最近一次物理页面总数发生变更的时间点与当前时间点之间的时间间隔; 所述单个处理模块的内存压力P为,P= a *C+ β * Λ t ;其中,所述C为所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值,所述At为所述单个处理模块的内存分配时间间隔与所述内存分配时间间隔的平均值之间的比值,所述α和所述β为预设系数。
3.根据权利要求1所述的内存分配方法,其特征在于,单个处理模块的所述内存状态信息包括最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个页面驻留时间中数值最小的页面驻留时间; 相应地,所述根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值具体为: 根据所述一个或多个处理模块各自的最小页面驻留时间,确定最小页面驻留时间的平均值; 所述单个处理模块的内存压力P为,所述单个处理模块的最小页面驻留时间与所述最小页面驻留时间的平均值之间的比值。
4.根据权利要求2或3所述的内存分配方法,其特征在于,所述需释放的内存大小具体为: 所述一个或多个处理模块的内存压力的数值的平均值与所述内存压力的数值中最小值之差,与所述最小值对应的处理模块中内存资源的总数的乘积。
5.根据权利要求2或3所述的内存分配方法,其特征在于,所述待分配的内存大小具体为: 所述内存压力的数值中最大值与所述一个或多个处理模块的内存压力的数值的平均值之差,与所述最大值对应的处理模块中内存资源的总数的乘积。
6.根据权利要求1-5中任一所述的内存分配方法,其特征在于,所述接收一个或多个处理模块分别发送的内存状态信息具体为: 分别按照所述一个或多个处理模块各自的心跳频率,接收所述一个或多个处理模块分别发送的内存状态信息。
7.—种内存分配方法,其特征在于,包括: 将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值; 接收所述主控处理模块发送的内存抢占消息,所述内存抢占消息为所述主控处理模块在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于所述预设阈值之后,向所述最小值对应的处理模块发送的,所述内存抢占消息中携带有需释放的内存大小; 对所述需释放的内存大小对应的内存资源进行释放。
8.根据权利要求7所述的内存分配方法,其特征在于,在所述接收所述主控处理模块发送的内存抢占消息之后,所 述对所述需释放的内存大小对应的内存资源进行释放之前,所述方法还包括: 判断所述需释放的内存大小是否大于或等于空闲内存的大小; 若是,则采用模拟换页机制,从非空闲内存中抢占可被交换的内存,抢占的所述可被交换的内存的大小等于所述需释放的内存大小与所述空闲内存的大小之差; 相应地,所述对所述需释放的内存大小对应的内存资源进行释放具体为: 对所述空闲内存的大小和抢占的所述可被交换的内存的大小对应的内存资源进行释放。
9.根据权利要求7所述的内存分配方法,其特征在于,所述内存状态信息包括: 在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者 最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
10.根据权利要求7-9中任一所述的内存分配方法,其特征在于,所述将内存状态信息发送给主控处理模块具体为: 按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
11.根据权利要求7所述的内存分配方法,其特征在于,所述将内存状态信息发送给主控处理模块之后,所述方法还包括: 接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小; 在可用内存资源中增加所述待分配的内存大小。
12.—种内存分配方法,其特征在于,包括: 将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值; 接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小; 在可用内存资源中增加所述待分配的内存大小。
13.根据权利要求12所述的内存分配方法,其特征在于,所述内存状态信息包括: 在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者 最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时 间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
14.根据权利要求12或13所述的内存分配方法,其特征在于,所述将内存状态信息发送给主控处理模块具体为: 按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
15.—种主控处理模块,其特征在于,包括: 接收单元,用于接收一个或多个处理模块分别发送的内存状态信息; 处理单元,用于根据所述内存状态信息,分别确定所述一个或多个处理模块各自的内存压力的数值; 判断单元,用于判断所述一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值; 发送单元,用于在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于预设阈值时,向所述最小值对应的处理模块发送内存抢占消息,所述内存抢占消息中携带有需释放的内存大小,以供所述最小值对应的处理模块对所述需释放的内存大小对应的内存资源进行释放;在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送内存分配消息,所述内存分配消息中携带有待分配的内存大小,以使所述最大值对应的处理模块在可用内存资源中增加了所述待分配的内存大小之后,内存压力的数值相应地减小。
16.根据权利要求15所述的主控处理模块,其特征在于,所述接收单元接收到的单个处理模块的所述内存状态信息包括:所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值; 相应地,所述处理单元具体用于,根据所述一个或多个处理模块各自的内存分配时间间隔,确定内存分配时间间隔的平均值,所述内存分配时间间隔为所述单个处理模块最近一次物理页面总数发生变更的时间点与当前时间点之间的时间间隔;所述单个处理模块的内存压力P为,P= a *C+ β * Λ t ;其中,所述C为所述单个处理模块在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值,所述At为所述单个处理模块的内存分配时间间隔与所述内存分配时间间隔的平均值之间的比值,所述α和所述β为预设系数。
17.根据权利要求15所述的主控处理模块,其特征在于,所述接收单元接收到的单个处理模块的所述内存状态信息包括最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个页面驻留时间中数值最小的页面驻留时间; 相应地,所述处理单元具体用于,根据所述一个或多个处理模块各自的最小页面驻留时间,确定最小页面驻留时间的平均值;所述单个处理模块的内存压力P为,所述单个处理模块的最小页面驻留时间与所述最小页面驻留时间的平均值之间的比值。
18.根据权利要求16或17所述的主控处理模块,其特征在于,所述需释放的内存大小具体为: 所述一个或多个处理模块的内存压力的数值的平均值与所述内存压力的数值中最小值之差,与所述最小值对应的处理模块中内存资源的总数的乘积。
19.根据权利要求16或17所述的主控处理模块,其特征在于,所述待分配的内存大小具体为: 所述内存压力的数值中最大值与所述一个或多个处理模块的内存压力的数值的平均值之差,与所述最大值对应的处理模块中内存资源的总数的乘积。
20.根据权利要求15-19中任一所述的主控处理模块,其特征在于,所述接收单元具体用于: 分别按照所述一个或多个处理模块各自的心跳频率,接收所述一个或多个处理模块分别发送的内存状态信息。
21.一种处理模块,其特征在于,包括: 发送单元,用于将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值; 接收单元,用于接收所述主控处理模块发送的内存抢占消息,所述内存抢占消息为所述主控处理模块在判断出所述一个或多个处理模块的内存压力的数值中最大值与最小值之差大于或等于所述预设阈值之后,向所述最小值对应的处理模块发送的,所述内存抢占消息中携带有需释放的内存大小; 处理单元,用于对所述需释放的内存大小对应的内存资源进行释放。
22.根据权利要 求21所述的处理模块,其特征在于,所述处理模块还包括: 判断单元,用于所述接收单元接收所述主控处理模块发送的内存抢占消息之后,所述接收单元对所述需释放的内存大小对应的内存资源进行释放之前,判断所述需释放的内存大小是否大于或等于空闲内存的大小; 所述处理单元还用于,在所述判断单元判断出所述需释放的内存大小大于或等于所述空闲内存的大小时,采用模拟换页机制,从非空闲内存中抢占可被交换的内存,对所述空闲内存的大小和抢占的所述可被交换的内存的大小对应的内存资源进行释放,其中,抢占的所述可被交换的内存的大小等于所述需释放的内存大小与所述空闲内存的大小之差。
23.根据权利要求21所述的处理模块,其特征在于,所述内存状态信息包括: 在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者 最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
24.根据权利要求21-23中任一所述的处理模块,其特征在于,所述发送单元具体用于: 按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
25.根据权利要求21所述的处理模块,其特征在于,所述接收单元还用于: 在所述发送单元将内存状态信息发送给主控处理模块之后,接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小;相应地,所述处理单 元还用于,在可用内存资源中增加所述待分配的内存大小。
26.—种处理模块,其特征在于,包括: 发送单元,用于将内存状态信息发送给主控处理模块,以供所述主控处理模块根据所述内存状态信息,确定内存压力的数值,并判断分别确定的一个或多个处理模块的内存压力的数值中最大值与最小值之差是否大于或等于预设阈值; 接收单元,用于接收所述主控处理模块发送的内存分配消息,所述内存分配消息为所述主控处理模块在从所述最小值对应的处理模块中抢占到内存资源之后,向所述最大值对应的处理模块发送的,所述内存分配消息中携带有待分配的内存大小; 处理单元,用于在可用内存资源中增加所述待分配的内存大小。
27.根据权利要求26所述的处理模块,其特征在于,所述内存状态信息包括: 在预设时间范围内发生缺页异常的物理页面的数量与所述预设时间范围内的物理页面总数的比值;或者 最小页面驻留时间,所述页面驻留时间为物理页面换入内存的时间点与换出内存的时间点的间隔时间,或者物理页面换入内存的时间点与当前时间点的间隔时间,所述最小页面驻留时间为预设时间范围内一个或多个所述页面驻留时间中数值最小的页面驻留时间。
28.根据权利要求26或27所述的处理模块,其特征在于,所述处理单元具体用于: 按照预设的心跳频率,将心跳周期内的内存状态信息发送给所述主控处理模块。
29.—种中央处理器,其特征在于,包括如权利要求15-20中任一所述的主控处理模块。
30.一种中央处理器,其特征在于,包括如权利要求21-25中任一所述的处理模块。
31.一种中央处理器,其特征在于,包括如权利要求26-28中任一所述的处理模块。
32.—种计算机系统,其特征在于,包括如权利要求29所述的中央处理器、如权利要求30所述的中央处理器以及如权利要求31所述的中央处理器。
【文档编号】G06F12/02GK103810109SQ201210460181
【公开日】2014年5月21日 申请日期:2012年11月15日 优先权日:2012年11月15日
【发明者】谭崇康, 陆钢, 詹剑锋, 张立新 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1