技术领域
[0001] 本
发明属于
数据处理领域,尤其涉及一种内存的隔离方法和装置。
背景技术
[0002] 内存是计算机运行的重要部件,当内存出现问题时,会造成计算机无法正常运行。因此内存出现问题时,需要对出现问题的内存进行隔离。
[0003]
现有技术提出了一种内存的隔离方法,包括:
[0004] 1、系统运行时或内存自检时,将内存错误记录在NvRAM中;
[0005] 2、
操作系统启动阶段读取,由操作系统读取NvRAM中的内存错误记录,并进行逻辑隔离;
[0006] 3、系统运行时如果检测到内存错误,操作系统首先进行逻辑隔离,然后将内存错误记录到NvRAM中。等到下次系统重启时,执行step2),保证系统运行时隔离还是有效的。
[0007] 但现有技术存在以下问题,包括:
[0008] 1、主流操作系统不支持,需要
修改操作系统
内核,兼容性不好。
[0009] 2、操作系统启动阶段,如果NvRAM记录的内存位于操作系统内核区域,则不能隔离。
[0010] 3、如果内存条更换,或者
位置更换,则NvRAM中的隔离记录失效或者出现错误。
[0011] 4、如果
服务器系统的
节点顺序(或编号)变化,或者重新分区,导致内存条的逻辑位置发生了变化,从而也导致之前的隔离记录失效或错误。
发明内容
[0012] 本发明
实施例的目的在于提供一种内存的隔离方法和装置,以解决现有技术需要修改操作系统内核,用于运行操作系统内核的内存无法隔离的问题。
[0013] 第一方面,本发明实施例提供了一种内存的隔离方法,所述方法包括:
[0014] 通过
基本输入输出系统BIOS对内存进行检测,并获取出现错误的内存的地址信息;
[0015] 将所述地址信息保存到非易失性内存
存储器NvRAM;
[0016] 读取所述NvRAM中保存的地址信息,并将所述地址信息对应的内存模
块标记为不可用。
[0017] 在第一方面的第一种可能的实施方式中,所述读取所述NvRAM中保存的地址信息,并将所述地址信息对应的内存模块标记为不可用,包括:
[0018] 如果使用内存交叉编址模式,则在BIOS完成物理地址映射之后,将所述地址信息对应的内存模块标记为不可用;或者,
[0019] 如果不使用内存交叉编址模式,则在BIOS进行物理地址映射之前,将所述地址信息对应的内存模块标记为不可用。
[0020] 在第一方面的第二种可能的实施方式中,在所述将所述地址信息保存到非易失性内存存储器NvRAM的步骤之后,读取所述NvRAM中保存的地址信息,将所述地址信息对应的内存模块标记为不可用的步骤之前,所述方法还包括:
[0021] 检测是否使用内存交叉编址模式。
[0022] 在第一方面的第三种可能的实施方式中,在所述将所述地址信息保存到非易失性内存存储器NvRAM的步骤之前,所述方法还包括:
[0023] 根据所述NvRAM的空间大小预设所述地址信息的存储数量。
[0024] 第二方面,本发明实施例提供了一种内存的隔离装置,所述装置包括:
[0025] 地址信息获取单元,用于通过基本输入输出系统BIOS对内存进行检测,并获取出现错误的内存的地址信息;
[0026] 保存单元,用于将所述地址信息获取单元获取的地址信息保存到非易失性内存存储器NvRAM;
[0027] 标记单元,用于读取所述保存单元保存的地址信息,并将所述地址信息对应的内存模块标记为不可用。
[0028] 在第二方面的第一种可能的实施方式中,所述标记单元,包括:
[0029] 内存交叉编址模式标记子单元,用于如果使用内存交叉编址模式,则在BIOS完成物理地址映射之后,将所述地址信息对应的内存模块标记为不可用;或者,
[0030] 非内存交叉编址模式标记子单元,用于如果不使用内存交叉编址模式,则在BIOS进行物理地址映射之前,将所述地址信息对应的内存模块标记为不可用。
[0031] 在第二方面的第二种可能的实施方式中,在所述保存单元保存之后,标记单元标记之前,所述装置还包括:
[0032] 内存交叉编址模式检测单元,用于检测是否使用内存交叉编址模式。
[0033] 在第二方面的第三种可能的实施方式中,在所述保存单元保存之前,所述装置还包括:
[0034] 预设单元,用于根据所述NvRAM的空间大小预设所述地址信息的存储数量。
[0035] 本发明实施例,使用BIOS对内存进行检测,获取出现错误的内存的地址信息,将该地址信息保存到NvRAM,读取所述NvRAM中保存的地址信息,将所述地址信息对应的内存模块标记为不可用,因为使用BIOS进行隔离处理,对操作系统没有要求,也不会对内存本身进行修改。
附图说明
[0036] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0037] 图1为本发明实施例提供的内存隔离方法的
流程图;
[0038] 图2为本发明实施例提供的内存隔离装置的结构图。
具体实施方式
[0039] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0040] 本发明实施例,使用BIOS对内存进行检测,获取出现错误的内存的地址信息,将该地址信息保存到NvRAM,读取所述NvRAM中保存的地址信息,将所述地址信息对应的内存模块标记为不可用,因为使用BIOS进行隔离处理,对操作系统没有要求,也不会对内存本身进行修改。
[0041] 为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
[0042] 实施例一
[0043] 如图1所示为本发明实施例提供的内存隔离方法的流程图,所述方法包括以下步骤:
[0044] 在步骤S101中,通过基本输入输出系统BIOS对内存进行检测,并获取出现错误的内存的地址信息。
[0045] 在本发明实施例中,基本输入输出系统(Basic Input Output System简称:BIOS)在开机过程中,对内存进行检测,可获取发生错误的内存的地址信息,所述地址
信号包括:记载内存在
计算机系统中的逻辑位置的设备地址信息(包括:节点号Node、内存条编号Card、内存芯片编号Module、Bank编号、行号Row、列号Column)和物理地址信息。所述内存的地址信息的方法使用现有技术在此不作赘述。
[0046] 在步骤S102中,将所述地址信息保存到非易失性内存存储器NvRAM。
[0047] 在本发明实施例中,在获取了出现错误的内存的地址信息之后,将该地址信息存储到NvRAM。
[0048] 在步骤S103中,读取所述NvRAM中保存的地址信息,并将所述地址信息对应的内存模块标记为不可用。
[0049] 在本发明实施例中,系统读取NvRAM中保存的地址信息,并将该地址信息对应的内存模块标记为不可用,系统在运行过程中则不会使用该段内存模块,即对出现错误的内存进行了隔离。需要指出的是,并不是由所述BIOS执行将地址信息对应的内存模块标记为不可用的动作。所述读取所述NvRAM中保存的地址信息,将所述地址信息对应的内存模块标记为不可用的步骤,具体为:
[0050] 1、如果使用内存交叉编址模式,则在BIOS完成物理地址映射之后,将所述地址信息对应的内存模块标记为不可用。
[0051] 在本发明实施例中,如果系统采用内存交叉编址模式,则:①、BIOS启动,并完成物理地址映射;②、逐条读取NvRAM中的地址信息;③、根据(Node,Card)信息,从内存条SPD信息中读取序列号;将读取的序列号,和当前记录的序列号比较;如果不相等,则说明内存条更换,或者
硬件分区有变化,需要更新地址信息。更新方法:遍历所有内存条,找到序列号和当前记录相等的内存条,将其(Node,Card)信息更新为当前记录,并将更新后的设备地址转换为物理地址,更新本条地址信息中的(Physical Address)字段;④、在物理地址空间中,将隔离记录中的(Physical Address,Length)表示的内存地址范围标识为不可用。
[0052] 2、如果不使用内存交叉编址模式,则在BIOS进行物理地址映射之前,将所述地址信息对应的内存模块标记为不可用。
[0053] 在本发明实施例中,如果系统没有采用内存交叉编址模式,则:①、逐条读取NvRAM中的地址信息;②、根据(Node,Card)信息,从内存条SPD信息中读取序列号;将读取的序列号和当前记录的序列号比较,如果不相等,则说明内存条更换,或者硬件分区有变化,需要更新隔离记录。更新方法:遍历所有内存条,找到序列号和当前记录相等的内存条,将其(Node,Card)更新当前记录,并将更新后的设备地址转换为物理地址,更新本条隔离记录中的(Physical Address)字段;③、将设备地址(Node,Card,Module,Bank,Device,Row,Column)中的最小可隔离单元标记为不可用;最小可隔离单元与具体设备相关,是具体规定的,一般是Bank或Rank;④、BIOS继续物理地址映射,这样得到的为连续的物理地址空间。
[0054] 本发明实施例,使用BIOS对内存进行检测,获取出现错误的内存的地址信息,将该地址信息保存到NvRAM,读取所述NvRAM中保存的地址信息,将所述地址信息对应的内存模块标记为不可用,因为使用BIOS进行隔离处理,对操作系统没有要求,也不会对内存本身进行修改。
[0055] 作为本发明的一个可选实施例,在所述将所述地址信息保存到非易失性内存存储器NvRAM的步骤之后,读取所述NvRAM中保存的地址信息,将所述地址信息对应的内存模块标记为不可用的步骤之前,所述方法还包括:
[0056] 检测是否使用内存交叉编址模式。
[0057] 作为本发明的另一个可选实施例,在所述将所述地址信息保存到非易失性内存存储器NvRAM的步骤之前,所述方法还包括:
[0058] 根据所述NvRAM的空间大小预设所述地址信息的存储数量。
[0059] 实施例二
[0060] 如图2所示为本发明实施例提供的内存隔离装置的结构图,为了便于说明,仅示出与本发明实施例相关的部分,包括:
[0061] 地址信息获取单元201,用于通过基本输入输出系统BIOS对内存进行检测,并获取出现错误的内存的地址信息。
[0062] 在本发明实施例中,地址信息获取单元201通过基本输入输出系统(Basic Input Output System简称:BIOS)在开机过程中,对内存进行检测,可获取发生错误的内存的地址信息,所述地址信号包括:记载内存在计算机系统中的逻辑位置的设备地址信息(包括:节点号Node、内存条编号Card、内存芯片编号Module、Bank编号、行号Row、列号Column)和物理地址信息。所述内存的地址信息的方法使用现有技术在此不作赘述。
[0063] 保存单元202,用于将所述地址信息获取单元201获取的地址信息保存到非易失性内存存储器NvRAM。
[0064] 在本发明实施例中,在获取了出现错误的内存的地址信息之后,保存单元202将该地址信息存储到NvRAM。
[0065] 标记单元203,用于读取所述保存单元202保存的地址信息,并将所述地址信息对应的内存模块标记为不可用。
[0066] 在本发明实施例中,标记单元203读取NvRAM中保存的地址信息,并将该地址信息对应的内存模块标记为不可用,系统在运行过程中则不会使用该段内存模块,即对出现错误的内存进行了隔离。需要指出的是,并不是由所述BIOS执行所述将所述地址信息对应的内存模块标记为不可用的动作。所述标记单元203,具体包括:
[0067] 内存交叉编址模式标记子单元2031,用于如果使用内存交叉编址模式,则在BIOS完成物理地址映射之后,将所述地址信息对应的内存模块标记为不可用。
[0068] 在本发明实施例中,如果系统采用内存交叉编址模式,则:①、BIOS启动,并完成物理地址映射;②、逐条读取NvRAM中的地址信息;③、根据(Node,Card)信息,从内存条SPD信息中读取序列号;将读取的序列号,和当前记录的序列号比较;如果不相等,则说明内存条更换,或者硬件分区有变化,需要更新地址信息。更新方法:遍历所有内存条,找到序列号和当前记录相等的内存条,将其(Node,Card)信息更新为当前记录,并将更新后的设备地址转换为物理地址,更新本条地址信息中的(Physical Address)字段;④、在物理地址空间中,将隔离记录中的(Physical Address,Length)表示的内存地址范围标识为不可用。
[0069] 非内存交叉编址模式标记子单元2032,用于如果不使用内存交叉编址模式,则在BIOS进行物理地址映射之前,将所述地址信息对应的内存模块标记为不可用。
[0070] 在本发明实施例中,如果系统没有采用内存交叉编址模式,则:①、逐条读取NvRAM中的地址信息;②、根据(Node,Card)信息,从内存条SPD信息中读取序列号;将读取的序列号和当前记录的序列号比较,如果不相等,则说明内存条更换,或者硬件分区有变化,需要更新隔离记录。更新方法:遍历所有内存条,找到序列号和当前记录相等的内存条,将其(Node,Card)更新当前记录,并将更新后的设备地址转换为物理地址,更新本条隔离记录中的(Physical Address)字段;③、将设备地址(Node,Card,Module,Bank,Device,Row,Column)中的最小可隔离单元标记为不可用;最小可隔离单元与具体设备相关,是具体规定的,一般是Bank或Rank;④、BIOS记性物理地址映射,这样得到的为连续的物理地址空间。
[0071] 本发明实施例,使用BIOS对内存进行检测,获取出现错误的内存的地址信息,将该地址信息保存到NvRAM,读取所述NvRAM中保存的地址信息,将所述地址信息对应的内存模块标记为不可用,因为使用BIOS进行隔离处理,对操作系统没有要求,也不会对内存本身进行修改。
[0072] 作为本发明的一个可选实施例,在所述保存单元202保存之后,标记单元203标记之前,所述装置还包括:
[0073] 内存交叉编址模式检测单元,用于检测是否使用内存交叉编址模式。
[0074] 作为本发明的另一个可选实施例,在所述保存单元202保存之前,所述装置还包括:
[0075] 预设单元,用于根据所述NvRAM的空间大小预设所述地址信息的存储数量。
[0076] 本领域普通技术人员可以理解为上述实施例所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
[0077] 本领域普通技术人员还可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以在存储于一计算机可读取存储介质中,所述的存储介质,包括ROM/RAM、磁盘、光盘等。
[0078] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。