一种硬件错误的处理方法、处理器、控制器、电子设备及存储介质与流程

文档序号:23003245发布日期:2020-11-20 11:51阅读:132来源:国知局
一种硬件错误的处理方法、处理器、控制器、电子设备及存储介质与流程

本申请涉及计算机技术领域,具体而言,涉及一种硬件错误的处理方法、处理器、控制器、电子设备及存储介质。



背景技术:

mca(machinecheckarchitecture,机器检查体系)机制在目前现有的的cpu(centralprocessingunit,中央处理器)架构常常中用来对电子设备的硬件进行自检,并在发现硬件错误的时候发出中断或异常。操作系统收到中断或异常后,会对其进行响应,进行相应的修复、告警或其他策略等动作。通过mca机制,系统软件可以探测到硬件的错误,如系统总线错误、内存的ecc(errorcorrectingcode,错误检查和纠正)错误,奇偶校验错误,cache错误,tlb错误等。

具体的,mca机制定义了一组相关的msr(modelspecificregister,特殊模块寄存器),mca中定义的控制器在探测到硬件的错误发生时,就会发生错误的硬件的错误信息记录到对应的msr中,然后再发送中断给操作系统。操作系统根据中断会去轮询的读各msr中的信息,从而读取到发送错误的硬件的错误信息。但由于硬件的发生错误的类型很多,例如,处理器北桥上连接的硬件较多,所以北桥上发生的错误可能有几十个,而对应的msr也会有几十个,从而导致操作系统轮询的读取这些msr时,其负担很大。

为减轻操作系统的负担,目前可以采用extendmca的方式来进行处理,即先由硬件中断处理器中的固件,再由固件先行进行错误检测,整理错误信息,最后由固件中断通知操作系统,从而简化了操作系统的处理流程。

但针对这种方式,也由于msr的数量,导致固件轮询的读取这些msr时,其也需要耗费很长时间才能读取到对应的错误信息,导致错误的响应时间慢。



技术实现要素:

本申请实施例的目的在于提供一种硬件错误的处理方法、处理器、控制器、电子设备及存储介质,用以实现快速地进行错误响应。

第一方面,本申请实施例提供了一种硬件错误的处理方法,应用于电子设备中的控制器,所述控制器与所述电子设备中的被监测硬件以及内存连接,所述电子设备中部署有操作系统,所述方法包括:在监测到所述被监测硬件发生错误时,生成所述错误的错误信息;将所述错误信息写入到所述内存中预设的存储区域;向所述操作系统发送所述错误信息的中断通知,其中,所述中断通知用于指示所述操作系统到所述存储区域中读取所述错误信息。

在本申请实施例中,通过将错误信息写入内存中预设的存储区域,并中断告知操作系统读该存储区域,较于轮询msr的方式,读存储区域无需轮询且读取速率也更高,故能够快速地获取错误信息,从而实现快速地进行错误响应。

结合第一方面,在第一种可能的实现方式中,将所述错误信息写入到所述内存中预设的存储区域,包括:判断所述存储区域中剩余的存储空间是否大于等于所述错误信息写入需要占据的存储空间;若所述剩余的存储空间大于等于所述写入需要占据的存储空间,则将所述错误信息写入到所述剩余的存储空间。

在本申请实施例中,通过判断剩余的存储空间是否大于等于错误信息写入需要占据的存储空间,可以确保错误信息能够正确的写入,避免出错。

结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,判断所述存储区域中剩余的存储空间是否大于等于所述错误信息写入需要占据的存储空间,包括:访问所述存储区域,以获取所述存储区域中写头指针和写尾指针各自指向的位置;根据所述位置,确定出所述剩余的存储空间;判断所述剩余的存储空间是否大于等于所述需要占据的存储空间。

在本申请实施例中,由于存储区域中写头指针和写尾指针各自指向的位置能够反映出存储区域的存储情况,故控制器通过分析写头指针和写尾指针各自指向的位置能够快速准确的确定出剩余的存储空间的大小。

结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,将所述错误信息写入到所述剩余的存储空间,包括:将所述错误信息写入到所述剩余的存储空间中对应的地址位内,在所述剩余的存储空间中对应的一个地址位内写入所述错误信息的起始地址,以及在所述剩余的存储空间中对应的另一个地址位内写入所述错误信息的结束地址,其中,所述对应的一个地址位与所述错误信息的首位数据所在的地址位相邻,所述对应的另一个地址位与所述错误信息的末位数据所在的地址位相邻。

在本申请实施例中,由于写入存储空间的错误区域的格式是“错误信息的起始地址+错误信息的内容+错误信息的结束地址”,这样,操作系统通过这一格式便可以便捷的分辨出存储区域的各错误信息。

结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,将所述错误信息写入到所述内存中预设的存储区域之后,所述方法还包括:将所述写尾指针指向的位置更新到指向所述错误信息的结束地址所在的一个地址位处。

在本申请实施例中,通过将写尾指针指向的位置更新到指向错误信息的结束地址所在的一个地址位处,能够确保指针反映出的存储情况与存储区域中实际的存储情况匹配。

结合第一方面的第一种可能的实现方式,在第五种可能的实现方式中,若所述剩余的存储空间小于所述需要占据的存储空间,所述方法还包括:向所述操作系统发送所述被监测硬件的中断通知,其中,所述被监测硬件的中断通知用于指示所述操作系统生成所述错误信息;或者,将所述错误信息写入到所述存储区域中,以将所述存储区域中的历史错误信息覆盖。

在本申请实施例中,在剩余的存储空间小于错误信息写入需要占据的存储空间的情况下,控制器可以选择常规的处理方式,也可以选择覆盖的方式写入存储区域,其处理方式相对灵活,增强了其在实际中的适用性。

结合第一方面的第一种可能的实现方式,在第六种可能的实现方式中,访问所述存储区域,包括:根据由电子设备中的固件预先分配的所述存储区域的起始地址和结束地址,访问所述存储区域。

在本申请实施例中,固件通过分配起始地址和结束地址的方式能够快速地确定出存储区域。

结合第一方面的第六种可能的实现方式,在第七种可能的实现方式中,所述起始地址和所述结束地址均为所述内存中的物理地址。

在本申请实施例中,由于起始地址和结束地址均为内存中的物理地址,故控制器无需进行地址偏移而可以直接访问到该存储区域,实现了对存储区域快速直接地访问,进一步提高了效率。

结合第一方面,在第八种可能的实现方式中,所述控制器还与所述电子设备中对应的寄存器连接,在监测到所述被监测硬件发生错误之后,以及在生成所述错误信息之前,所述方法还包括:从所述寄存器中获取到错误信息需要写入到所述存储区域的错误的错误码,其中,需要写入到所述存储区域的错误的错误信息为基于错误的参数运算生成,不需要写入到所述存储区域的错误的错误信息即为错误的参数;确定所述被监测硬件的错误的错误码与从所述寄存器中获取到的错误码相同。

在本申请实施例中,由于在写入之前可以进行错误信息是否写入判断,故进一步提高了存储区域的利用效率。

结合第一方面,在第九种可能的实现方式中,所述错误信息存储在所述存储区域中写头指针指向的位置到写尾指针指向的位置所包含的区域;向所述操作系统发送所述错误信息的中断通知,包括:生成携带有所述写头指针和所述写尾指针各自指向的位置的所述中断通知,并将所述中断通知发送给所述操作系统。

在本申请实施例中,通过将写头指针和写尾指针各自指向位置携带在中断通知中,使得操作系统根据写头指针和写尾指针各自指向位置快速直接地定位到错误信息,从而快速直接地读取到该错误信息。

第二方面,本申请实施例提供了一种硬件错误的处理方法,应用于电子设备中的操作系统,所述操作系统与所述电子设备中的控制器连接,所述控制器还与所述电子设备中的被监测硬件以及内存连接,所述方法包括:接收到所述控制器基于写入错误信息到所述内存预设的存储区域而发送的中断通知,其中,所述错误信息为所述控制器基于监测到所述被监测硬件发生错误而生成;根据所述中断通知,从所述存储区域中读取出所述错误信息。

在本申请实施例中,通过将错误信息写入内存中预设的存储区域,并中断告知操作系统读该存储区域,较于操作系统轮询msr的方式,操作系统读存储区域无需轮询且读取速率也更高,故能够快速地获取错误信息,从而实现快速地进行错误响应。并且整个过程只进行了一次中断,较于中断两次的方式,使其占用处理器的资源也比较少。

结合第二方面,在第一种可能的实现方式中,所述错误信息存储在所述存储区域中写头指针指向的位置到写尾指针指向的位置所包含的区域,所述中断通知中携带有所述写头指针和所述写尾指针各自指向的位置;根据所述中断通知,从所述存储区域中读取出所述错误信息,包括:根据所述写头指针和所述写尾指针各自指向的位置,读取所述所包含的区域,以读取出所述错误信息。

在本申请实施例中,操作系统根据写头指针和写尾指针各自指向位置快速直接地定位到错误信息,从而快速直接地读取到该错误信息。

结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,读取出所述错误信息的步骤,包括:依次读取所述所包含的区域内每个地址位内的数据,从而读取出所述错误信息。

在本申请实施例中,通过以每个地址位为单位进行读取,可以避免读取的数据出现遗漏。

结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,在读取出所述错误信息之后,所述方法还包括:将所述存储区域中读指针指向的位置更新到指向所述操作系统当前读取到的一个地址位,以使所述控制器后续再访问所述存储区域时,根据所述读指针更新后指向的位置,将所述写头指针指向的位置也更新到指向所述操作系统当前读取到的一个地址位。

在本申请实施例中,通过更新读指针,使得控制器根据读指针更新后指向的位置对应更新写头指针指向的位置,以确保指针反映出的存储情况与存储区域中实际的存储情况匹配。

第三方面,本申请实施例提供了一种控制器,包括:错误监测电路、存储区域管理电路以及写内存控制电路;其中,所述错误监测电路与所述存储区域管理电路连接,以及用于与被监测硬件连接,用于在监测到所述被监测硬件发生错误时,指示所述存储区域管理电路;所述存储区域管理电路与所述写内存控制电路连接,用于根据接收到的所述指示,生成所述错误的错误信息,并判断所述错误信息是否能够写入到内存中预设的存储区域;若能够写入所述存储区域,将所述错误信息发送给所述写内存控制电路,由所述写内存控制电路则将所述错误信息写入到所述存储区域中,并在所述错误信息写入到所述存储区域中后,向操作系统发送所述错误信息的中断通知。

结合第三方面,在第一种可能的实现方式中,所述控制器还包括:与所述错误监测电路连接的寄存器,所述寄存器用于存储错误信息需要写入到所述存储区域的错误的错误码;其中,所述错误监测电路在监测到发生错误时,所述错误监测电路用于读取所述寄存器中的错误码,并判断所述被监测硬件的错误的错误码与所述寄存器中的错误码是否相同;若错误码相同,则指示所述存储区域管理电路生成所述错误信息。

第四方面,本申请实施例提供了一种处理器,包括:处理器核、与所述处理器核连接的内存控制器,所述内存控制器用于执行如第一方面或第一方面任一种可能的实现方式所述的硬件错误的处理方法。

第五方面,本申请实施例提供了一种电子设备,包括:内存、与所述内存连接的控制器;所述控制器用于执行如第一方面或第一方面任一种可能的实现方式所述的硬件错误的处理方法。

结合第五方面,在第一种可能的实现方式中,所述电子设备中部署有与所述控制器交互的操作系统,所述操作系统用于执行如第二方面或第二方面任一种可能的实现方式所述的硬件错误的处理方法。

第六方面,本申请实施例提供了一种非易失计算机可读存储介质,存储有程序代码,当所述程序代码被计算机运行时执行如第二方面或第二方面任一种可能的实现方式所述的硬件错误的处理方法。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本申请实施例提供的一种电子设备的结构框图;

图2为本申请实施例提供的一种控制器的第一结构框图;

图3为本申请实施例提供的一种控制器的第二结构框图;

图4为本申请实施例提供的一种硬件错误的处理方法的流程图;

图5为本申请实施例中存储区域的第一场景图;

图6为本申请实施例中存储区域的第二场景图;

图7为本申请实施例中存储区域的第三场景图;

图8为本申请实施例中存储区域的第四场景图;

图9为本申请实施例中存储区域的第五场景图;

图10为本申请实施例中存储区域的第六场景图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。

请参阅图1,本申请实施例提供了一种电子设备10,该电子设备10可以是终端也可以是服务器,其中,终端可以是手机、平板电脑、个人数字助理(personaldigitalassistant,pda)、销售终端(pointofsales,pos)等;而服务器可以是单个服务器,也可以是服务器组(服务器组可以是集中式的,也可以是分布式的)。

示例性的,电子设备10可以包括:内存11、与内存11连接的控制器12,以及与控制器12交互的操作系统13。

本实施例中,内存11可以是ddr(doubledatarate,双倍数据速率)、sdram(synchronousdynamicrandom-accessmemory,同步动态随机存取内存)和rdram(rambusdynamicrandomaccessmemory,总线式随机存取内存)等。为实现存储电子设备10上的被监测硬件或者其他设备上的被监测硬件发生错误的错误信息,内存11中预设有用于存储错误信息的存储区域。

本实施例中,控制器12可以是处理器、内存控制器或者还可以是dma(directmemoryaccess,直接存储器访问)控制器,其中,若采用内存控制器,其可以集成到处理器中,比如内存控制器作为处理器的一部分而与处理器中的处理核心连接,或者也可以是一个独立的芯片。控制器12在监测到被监测硬件发生错误时,可以生成该错误的错误信息,并将该错误信息写入到该存储区域。与此同时,控制器12还可以向操作系统13发送该错误信息的中断通知,以便操作系统13能够根据该中断通知的指示而到存储区域中读取该错误信息。

可以理解到,在被监测硬件发生错误之后,通过将错误信息写入内存11中预设的存储区域,使得操作系统13在读取时能够以更快的速度获取到错误信息。

具体的,控制器12的结构框图可以如图2所示,控制器12可以包括:错误监测电路121、存储区域管理电路122以及写内存控制电路123。

其中,错误监测电路121与被监测硬件以及存储区域管理电路123连接,以监测被监测硬件是否发送错误,并在监测到发生错误时,指示存储区域管理电路122。

存储区域管理电路122与写内存控制电路123连接,存储区域管理电路122在接收到错误监测电路121的指示时,用于生成错误信息,并判断错误信息是否能够写入到存储区域。如果可以写入到存储区域,存储区域管理电路122则将错误信息发送给写内存控制电路123,由写内存控制电路123则将错误信息写入到存储区域中。此外,在错误信息写入到存储区域中后,存储区域管理电路122则向操作系统发送该错误信息的中断通知。

而在更进一步的实施方式中,如图3所示,控制器12还可以包括:与错误监测电路121连接的寄存器124,该寄存器124中存储有错误信息需要写入到所述存储区域的错误的错误码。错误监测电路121在监测到发生错误时,错误监测电路121可以读取寄存器124中的错误码,以判断被监测硬件的错误的错误码与寄存器124中的错误码是否相同。若错误码相同,则指示存储区域管理电路122生成错误信息,若错误码不相同,则指示存储区域管理电路122以常规的方式中断操作系统,以便操作系统自己来生成错误信息。

下面通过方法实施例,对控制器12、操作系统13以及内存11三者配合如何实现错误信息的读写进行详细介绍。

请参阅图4,本申请实施例提供了一种硬件错误的处理方法,该方法可以由电子设备10中的控制器12以及操作系统13配合执行,该硬件错误的处理方法的主流程可以包括:

步骤s100:控制器在监测到被监测硬件发生错误时,生成错误的错误信息。

步骤s200:控制器将该错误信息写入到内存中预设的存储区域。

步骤s300:控制器向操作系统发送错误信息的中断通知。

步骤s400:操作系统接收到控制器发送的中断通知。

步骤s500:操作系统根据中断通知,则从内存预设的存储区域中读取出由控制器写入的该错误信息。

下面将结合具体的应用场景,对上述流程进行详细介绍。

控制器12可以与被监测硬件连接,以对被监测硬件的运行进行实时监测,其中,被监测硬件可以是输入输出系统、主板、内存11等常规的硬件。一旦监测到被监测硬件发生错误,控制器12可以通过与被监测硬件的交互,确定出该被监测硬件发生错误时的参数以及该错误的错误码,其中,错误码用于表示错误的类型,不同硬件的不同错误类型,其错误码也对应不同,比如对于系统总线错误,内存11的ecc错误,奇偶校验错误,cache错误,tlb错误等,其各自对应的错误码各不相同。

可以理解到,控制器12通过与被监测硬件的交互确定出参数以及错误码为常规的现有技术,为避免累述,本实施例则不过多说明。

控制器12确定出发送错误时的参数后,作为一种方式,控制器12可以直接根据参数生成对应的错误信息。而作为另一种方式,控制器12可以先判断该错误信息是否需要生成,若需要,根据参数生成对应的错误信息;否则,控制器12采用传统的方式中断操作系统13,以使操作系统13自身生成错误信息。下面分别予以说明。

关于直接根据参数生成对应的错误信息的方式:

本实施例中,针对不同类型的错误,其错误信息生成的方式也有所不同。针对一些类型的错误,其参数已经反映出其发生错误的具体情况,故可以直接将参数作为错误信息;比如针对奇偶校验错误,由于发生奇偶校验错误时的参数已经可以反映出奇偶校验错误的具体情况,故可以将发生奇偶校验错误时的参数作为错误信息。而针对另一些类型的错误,其参数无法反映出其发生错误的具体情况,故需要对参数进行一些中间运算才能够得到可以反映出错误的具体情况的错误信息;比如,针对内存11的ecc错误,需要利用ecc错误的参数无法反映出错误是在内存11的rank、bank还是row,因此,控制器12需要利用参数中的系统地址计算出错误在rank、bank或者row中的地址,以确定出错误在内存11中的具体位置,而计算得到的该地址则为最终得到的错误信息。

关于先判断再生成对应的错误信息的方式:

本实施例中,控制器12自身的寄存器中预先存储有错误信息需要写入到存储区域的错误的错误码;其中,需要写入到所述存储区域的错误的错误信息为基于错误的参数运算生成,比如前述的内存11的ecc错误的错误信息则需要写入到存储区域中;不需要写入到存储区域的错误的错误信息即为错误的参数,比如前述的奇偶校验错误的错误信息则不需要写入存储区域。那么,在获取到被监测硬盘的错误的错误码时,控制器12便可以从寄存器中获取到错误信息需要写入到存储区域的错误的错误码,并判断被监测硬件的错误的错误码与从寄存器中获取到的错误码是否相同。若错误码相同,则生成对应的错误信息,并将错误信息写入到存储区域中;而若错误码不相同,控制器12则采用传统的方式中断操作系统13,即控制器12可以将被监测硬件发生的错误的参数以及错误码写入到mca定义的msr中,然后向操作系统13发送该被监测硬件常规的中断通知,使得操作系统13根据该中断通知去轮询读取msr,从而获取到该错误的参数以及错误码,并根据该错误的参数以及错误码生成对应的错误信息。

本实施例中,为便于控制器12将错误信息的写入,内存11中预设有用于存储错误信息的存储区域。

示例性的,该存储区域可以是一个环形缓存区,该存储区域可以由电子设备10的处理器中的固件来分配,即固件按预先设定的规则确定出该存储区域在内存11中的起始地址以及结束地址,且该起始地址和结束地址均为内存11中的物理地址,内存11中从起始地址到结束地址的这一段包含多个地址位的区域即为该存储区域。

此外,为便于确定该存储区域的读取情况以及存储情况,固件还可以在存储区域中设置用于表示存储区域的存储情况的写头指针和写尾指针,以及设置用于表示存储区域的读取情况的读指针;其中,写头指针指向的位置为存储区域中最先写入的数据所占据的一个地址位,写尾指针指向的位置为存储区域中最后写入的数据所占据的一个地址位,而读指针指向的位置则为存储区域中当前读取到的一个地址位。

可以理解到,由于存储区域刚刚分配,存储区域还没有数据存入,在设置该存储区域的写头指针、写尾指针以及读指针时,固件可以从存储区域的多个地址位中任选一个地址位,并设置写头指针、写尾指针以及读指针均指向该地址位。

最后,固件可以将该存储区域的起始地址与结束地址发送给控制器12,以便后续控制器12可以基于该起始地址与结束地址访问该存储区域。

需要说明的是,在实际应用中,用户可以根据实际需求调整固件中的该规则,从而对应调整对起始地址以及结束地址分配,进而对应调整分配的环形缓存区大小,使得环形缓存区的大小能够满足实际需求。比如,若需要大一些的环形缓存区,则通过调整该规则,使得确定出的起始地址与结束地址之间的距离远一些;反之,若需要小一些的环形缓存区,则通过调整该规则,使得确定出的起始地址与结束地址之间的距离近一些。

下面通过一个假设来更具体的介绍本申请的技术方案。

如图5所示,假设:固件确定出的起始地址为aaxx,而结束地址为bbxx,且起始地址aaxx与结束地址bbxx之间相隔8个地址位,那么分配出的存储区域则为一个包含10个地址位的环形缓存区。在图5中,地址位为白色表示该地址位中没有存入数据,而地址位为灰色则表示该地址位中有存入数据,显然,在图6中,10个地址位均为白色表示刚刚分配的存储区域中没有存入任何数据,因此固件随机选择出第5个地址位,并设置写头指针、写尾指针以及读指针均指向该第5个地址位。最后,固件再将起始地址aaxx与结束地址bbxx均发送给控制器12,以便控制器12访问使用。

本实施例中,控制器12生成当前错误的错误信息后,由于存储区域可能还存储有其它的错误信息,故控制器12需要通过访问存储区域,以判断存储区域中剩余的存储空间是否大于等于该错误信息写入需要占据的存储空间。

作为实现通过访问判断存储区域中剩余的存储空间是否大于等于错误信息写入需要占据的存储空间的示例方式:

控制器12先利用固件预先发送给自己的起始地址和结束地址去访问存储区域,其中,由于该起始地址和结束地址均是内存11中的物理地址,故控制器12无需进行地址转换,直接利用该起始地址和结束地址快速直接地访问到该存储区域。而由于存储区域设置有用于表示存储区域的存储情况的写头指针和写尾指针,控制器12通过对存储区域的访问则可以获取到存储区域中写头指针和写尾指针各自指向的位置,并根据存储区域中写头指针和写尾指针各自指向的位置,确定出存储区域中剩余的存储空间。这样,控制器12便可以判断存储区域中剩余的存储空间是否大于等于错误信息写入需要占据的存储空间。

请参阅图5,继续说明前述假设:当a硬件发生错误a1后,控制器12可以生成该错误a1的错误信息为xxx,并确定出该错误信息xxx的内容本身需要占据3个地址位。而由于该错误信息xxx存入存储区域时,需要在存储区域中与该错误信息xxx首位数据所在的地址位相邻的一个地址位写入该错误信息xxx的起始地址,以及需要在存储区域中与该错误信息xxx末位数据所在的地址位相邻的一个地址位写入该错误信息xxx的结束地址,故该错误信息xxx写入需要占据的存储空间为在3个地址位的基础上加上该错误信息xxx的起始地址和结束地址共占据的2个地址位,共5个地址位。

进一步的,控制器12通过访问存储区域,获取到该存储区域中写头指针以及写尾指针均指向该第5个地址位。而基于该写头指针以及写尾指针均指向该第5个地址位,控制器12可以确定出该存储区域中剩余的存储空间为10个地址位。这样,通过将剩余的存储空间为10个地址位与错误信息xxx写入需要占据的存储空间为5地址位相比,控制器12确定该错误信息xxx可以写入到存储区域中。

回到本实施例中,若控制器12通过判断确定存储区域中剩余的存储空间大于等于错误信息写入需要占据的存储空间,控制器12则将错误信息写入到剩余的存储空间中,即控制器12将错误信息的内容本身写入到剩余的存储空间中对应的地址位内,并在剩余的存储空间中对应的一个地址位内写入错误信息的起始地址,以及在剩余的存储空间中对应的另一个地址位内写入错误信息的结束地址,其中,该对应的一个地址位与该错误信息的首位数据所在的地址位相邻,而该对应的另一个地址位与该错误信息的末位数据所在的地址位相邻。

可以理解到,若错误信息写入时存储区域中没有历史存入的其它错误信息,控制器12可以随机选择一个地址位作为本次写入开始,将该错误信息写入,或者,控制器12也可以将写头指针以及写尾指针共同均指向的一个地址位作为本次写入开始,将该错误信息写入。若错误信息写入时存储区域中有历史存入的其它错误信息,为实现对存储空间高效有序的利用,控制器12可以选择剩余的存储空间中与历史存入的其它错误信息相邻的一个地址位作为本次写入开始,将该错误信息写入。

进一步的,控制器12将错误信息写入后,控制器12可以将存储区域中写尾指针指向的位置更新到指向错误信息的结束地址所在的一个地址位,然后生成携带有写头指针和写尾指针各自指向的位置的中断通知,并将其发送给操作系统13,以指示操作系统13根据中断通知中写头指针和写尾指针各自指向的位置去读取存储区域中的该错误信息。

请参阅图5到图7,继续说明前述假设:首先基于前述说明可知,包含10个地址位的存储区域在存入错误信息xxx之前,还未存入过其他错误信息,故控制器12可以写头指针以及写尾指针共同均指向的第5个地址位作为本次写入开始,将该错误信息xxx写入,并将写尾指针更新到指向第9个地址位,从而获得图6所示的存储区域。最后,控制器12再生成携带写头指针指向第5个地址位以及写尾指针指向第9个地址位的中断通知,并将其发送到操作系统13。

之后,当b硬件发生错误b1后,控制器12可以生成该错误b1的错误信息为yyy,并确定出该错误信息yyy的内容本身需要占据3个地址位,并进一步确定出该错误信息yyy写入到存储区域中需要占据5个地址位。控制器12继续访问存储区域,若在操作系统13还未将上次写入的错误信息xxx读取出,则控制器12获取到写头指针指向第5个地址位以及写尾指针指向第9个地址位。这样,控制器12可以确定出存储区域中剩余的存储空间为第10个地址位到第4个地址位的这5个地址位。而通过将剩余的存储空间为5个地址位与错误信息yyy写入需要占据的存储空间为5地址位相比,控制器12确定该错误信息yyy也可以写入到存储区域中。进一步的,控制器12以与写尾指针相邻的第10个地址位作为本次写入开始,将该错误信息yyy写入,并将写尾指针更新到指向第4个地址位,从而获得图7所示的存储区域。最后,控制器12再生成携带写头指针指向第5个地址位以及写尾指针指向第4个地址位的中断通知,并将其发送到操作系统13。

回到本实施例中,若控制器12通过判断确定存储区域中剩余的存储空间小于错误信息写入需要占据的存储空间。作为一种方式,控制器12也采用传统的方式中断操作系统13,即控制器12可以将被监测硬件发生的错误的参数以及错误码写入到mca定义的msr中,然后向操作系统13发送该被监测硬件常规的中断通知,使得操作系统13根据该中断通知去轮询读取msr,从而获取到该错误的参数以及错误码,并根据该错误的参数以及错误码生成对应的错误信息。而作为另一种方式,控制器12也可以将错误信息写入到存储区域中,并将存储区域中预先存入的历史错误信息覆盖;比如,控制器12可以按照存入时间从先到后的顺序,依次选择出存储区域中的历史错误信息,直至选择出的历史错误信息在存储区域中占据的空间大于等于本次的错误信息写入需要占据的空间,然后,控制器12将本次的错误信息写入,以将选择出的这些历史错误信息覆盖。

请参阅图7和图8,继续说明前述假设:在b硬件发生错误b1之后,若c硬件发生错误c1,控制器12可以生成该错误c1的错误信息为zz,并确定出该错误信息zz的内容本身需要占据2个地址位,并进一步确定出该错误信息zz写入到存储区域中需要占据4个地址位。控制器12继续访问存储区域,若在操作系统13还未将上上次写入的错误信息xxx以及上次写入的错误信息yyy读取出,则控制器12获取到写头指针指向第5个地址位以及写尾指针指向第4个地址位。由于写头指针指向的位置与写尾指针指向的位置相邻,控制器12可以确定出存储区域被存满。若仍需要将错误信息zz写入,控制器12可以按照存入时间从先到后的顺序,先选择出存储区域中的错误信息xxx。由于错误信息xxx在存储区域中占据的空间为5个地址位,其大于错误信息yy写入需要占据的4个地址位,那么控制器12便将错误信息zz写入,以将选择出的错误信息xxx覆盖,并将写尾指针更新到指向第3个地址位,从而获得图8所示的存储区域。控制器12再生成携带写头指针指向第5个地址位以及写尾指针指向第3个地址位的中断通知,并将其发送到操作系统13。

对于操作系统13来说,用户可以根据实际的应用需求,设置操作系统13对接收的由控制器12发送的中断通知的处理策略;比如,处理策略可以是指示操作系统13每接收到一次中断通知时,则实时基于该中断通知去读取相应的错误信息;又比如,处理策略还可以是指示操作系统13在每个周期的设定时间点判断是否有接收到控制器12发送的中断通知,并在确定有接收到中断通知后,基于最新接收到的中断通知去读取相应的错误信息。

进一步的,操作系统13在处理中断通知时,操作系统13通过对中断通知的解析,其可以获取到中断通知中携带的写头指针和写尾指针各自指向的位置。而基于写头指针和写尾指针各自指向的位置,操作系统13便可确定出错误信息存储在存储区域中写头指针指向的位置到写尾指针指向的位置所包含的区域,并根据写头指针和写尾指针各自指向的位置去读取该区域内的每个地址位内的数据,从而读取出错误信息。

可以理解到,由于存储区域中写头指针指向的位置到写尾指针指向的位置所包含的区域内存11入的可能不止一个错误信息,但由于每个错误信息写入的存储区域的格式都为“错误信息的起始地址+错误信息的内容+错误信息的结束地址”操作系统13在读取该区域时,便可以基于存储区域的格式区分出自身读取出的各错误信息。

此外,操作系统13还将存储区域中读指针指向的位置更新到指向操作系统13当前读取到的一个地址位。这样,控制器12后续再访问存储区域时,控制器12便可以根据读指针更新后指向的位置,将写头指针指向的位置也更新到指向操作系统13当前读取到的一个地址位,从而实现对指针的同步更新,避免出错。

也可以理解到的是,操作系统13对读指针指向位置的更新可以是操作系统13每读取出一个地址位内的数据时,便将读指针指向的位置更新到其当前读取出数据的一个地址位;或者,也可以是操作系统13每读取出一个错误信息时,便将读指针指向的位置更新到其当前读取出的错误信息的结束地址所对应的一个地址位;或者,也可以是操作系统13本次读取出所有的错误信息时,将读指针指向的位置更新到其最后读取出的错误信息的结束地址所对应的一个地址位。

请参阅图8到图10,继续说明前述假设:若操作系统13采用周期性的处理方式,在当前周期的设定时间点时,操作系统13通过判断确定自身接收到控制器12依次发送的3个中断通知,并处理最后一次接收到的中断通知,即处理携带写头指针指向第5个地址位以及写尾指针指向第3个地址位的中断通知。基于头指针指向第5个地址位以及写尾指针指向第3个地址位,操作系统13可以读取头指针指向的第5个地址位到写尾指针指向的第3个地址位所包含的9个地址位的区域。通过依次读取出这9个地址位中每一个地址位中包含的数据,操作系统13可以先读取出错误信息yyy,再读取出错误信息zz。并且,若采用以错误信息为单位进行读指针的更新,那么操作系统13在读取出错误信息yyy时,操作系统13可以将读指针更新到指向第9个地址位,从而获得图9所示的存储区域;而操作系统13在读取出错误信息zz时,操作系统13可以将读指针更新到指向第3个地址位,从而获得图10所示的存储区域。而后续控制器12再访问存储区域时,便将写头指针也更新到指向第3个地址位,这样写头指针指向的位置再次与写尾指针指向的位置重合,从而表示存储区域未存储有错误信息。

本申请一些实施例还提供了一种计算机可执行的非易失的程序代码的计算机可读储存介质,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该计算机可读存储介质上存储有程序代码,该程序代码被计算机运行时执行上述任一实施方式的硬件错误的处理方法的步骤。

本申请实施例所提供的硬件错误的处理方法的程序代码产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。

综上所述,通过将错误信息写入内存中预设的存储区域,并中断告知操作系统读该存储区域,其操作系统较于轮询msr的方式,操作系统读存储区域无需轮询且读取速率也更高,故能够快速地获取错误信息,从而实现快速地进行错误响应。

在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。

以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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