CN113495799B - 一种内存故障处理方法及相关设备 - Google Patents

一种内存故障处理方法及相关设备 Download PDF

Info

Publication number
CN113495799B
CN113495799B CN202010206839.6A CN202010206839A CN113495799B CN 113495799 B CN113495799 B CN 113495799B CN 202010206839 A CN202010206839 A CN 202010206839A CN 113495799 B CN113495799 B CN 113495799B
Authority
CN
China
Prior art keywords
memory
address
fault
program
failure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010206839.6A
Other languages
English (en)
Other versions
CN113495799A (zh
Inventor
王强
刘伟
周玉斌
周凯
许仲杰
王先进
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010206839.6A priority Critical patent/CN113495799B/zh
Priority to PCT/CN2021/081309 priority patent/WO2021185279A1/zh
Publication of CN113495799A publication Critical patent/CN113495799A/zh
Application granted granted Critical
Publication of CN113495799B publication Critical patent/CN113495799B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Retry When Errors Occur (AREA)
  • Debugging And Monitoring (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明实施例公开了一种内存故障处理方法,所述方法应用于电子设备,所述电子设备包括处理器和第一存储器,所述第一存储器为易失性存储器,其特征在于,包括:若满足预设条件,则所述处理器运行内存故障处理程序;所述内存故障处理程序向所述第一存储器申请预设范围的第一存储地址;所述内存故障处理程序对所述第一存储地址进行故障检测;若所述第一存储地址包含故障地址,则所述内存故障处理程序占用第二存储地址,所述第二存储地址包括所述故障地址。采用本申请可以有效的隔离电子设备中的故障内存。

Description

一种内存故障处理方法及相关设备
技术领域
本发明涉及内存技术领域,尤其涉及一种内存故障处理方法及相关设备。
背景技术
内存是计算机的重要部件之一,它是外存与中央处理器(Central ProcessingUnit,CPU)沟通的桥梁,计算机中所有程序的运行均是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器或主存储器,其作用是用于暂时存放CPU中的运算数据,以及与外部存储器(如硬盘等)交换的数据,只要计算机在运行中,CPU就会将需要运算的数据调到内存中运算,当运算完成后,CPU再将结果传送出来。
随着计算机技术的快速发展,内存容量越来越大,即内存中的内存单元数量越来越多,一旦内存单元发生故障,则CPU将数据调到该内存单元中运算时,就会发生内存故障,无法实现数据运算,导致计算机故障;或者,若CPU从该内存单元中读取数据,也会发生内存故障,无法读取数据,导致计算机故障。
例如,内存单元可能会发生bit翻转(bitflip)错误。从原因来看,可能因为宇宙射线辐照、电磁波干扰、物理单元制造缺陷(譬如刻蚀的线路太宽、太窄、或者形貌过大、过小、金属键合问题)、损伤(譬如刻蚀的线路断开开路、错误地短路)、超规格使用(温度过低/过高、电源电压过低/过高)等因素;从现象看,bitflip常表现为1个bit翻转(0变成了1,或者1变成了0)、多个bit翻转、一个Page翻转、多个Page翻转等,错误可能是临时性的,也可能是永久性的。当内存中的数据发生错误时,处理器运行的指令和/或数据便发生错误,其所引起计算机系统故障,不仅会导致用户进程中断,还可能导致系统宕机、甚至系统不能启动,严重影响系统的可靠性、可使用性和可服务性(Reliability,Availability andServiceability,RAS)。具体如表1所示:
表1
数据错误范围 数据错误造成的影响 严重程度
应用程序指令 程序崩溃 中等
内核程序指令 系统宕机 严重
应用程序数据 程序崩溃+数据损坏 严重
内核程序数据 系统宕机+系统数据被改写风险(如果写回) 致命
用户数据 程序功能异常+用户数据被改写风险(如果写回) 致命
综上,若内存发生故障,可能会对系统带来严重甚至致命的影响,如何有效的避免和处理内存中的故障是亟待解决的问题。
发明内容
本发明实施例提供一种内存故障处理方法及相关设备,以解决内存中的故障问题。
第一方面,本发明实施例提供了一种内存故障处理方法,所述方法应用于电子设备,所述电子设备包括处理器和第一存储器,所述第一存储器为易失性存储器,所述方法可包括:若满足预设条件,则所述处理器运行内存故障处理程序;所述内存故障处理程序向所述第一存储器申请预设范围的第一存储地址;所述内存故障处理程序对所述第一存储地址进行故障检测;若所述第一存储地址包含故障地址,则所述内存故障处理程序占用第二存储地址,所述第二存储地址包括所述故障地址。
本发明实施例中,通过在满足预设条件下(如程序崩溃或系统宕机等)对电子设备中的内存(部分地址或全部地址)进行在线申请故障检测,当检测出内存中包含有故障地址后,则通过处理器所运行的内存故障处理程序占用对应的故障地址,使得系统中的其他程序或数据无法使用内存中有故障的地址,进而有效的避免了故障内存被系统误使用所带来的程序崩溃、系统宕机、数据损坏等风险,提升了电子设备运行的准确性和稳定性。
在一种可能的实现方式中,所述电子设备还包括第二存储器;所述方法还包括:将所述故障地址记录到所述第二存储器;释放所述第一存储地址;所述内存故障处理程序占用第二存储地址,包括:所述内存故障处理程序读取所述第二存储器中存储的所述故障地址,向所述第一存储器申请所述第二存储地址。可选的,当内存故障处理程序多次向第一存储器申请不同的第一存储地址后,且针对每一次申请的第一存储地址均进行故障检测之后,均将每一次检测的第一存储地址中的故障地址存储进所述第二存储其中,则所述第一存储器中所有地址均检测完毕之后,则统一将所述第二存储器中的所有故障地址进行统一申请。可选的,所述第二存储器为非易失性存储器;当内存故障处理程序重启之后,则所述内存故障处理程序读取所述第二存储器中存储的所述故障地址,重新向所述第一存储器申请所述第二存储地址。
本发明实施例中,还通过将检测到的故障地址记录到电子设备的第二存储器中,并在此次先将已经检测过的第一存储地址进行释放,此后再通过从上述第二存储器中读取记录的故障地址,从而对故障地址进行统一的申请占用,即达到了统一故障检测,之后再统一故障隔离的目的。可选的,该第二存储器可以为易失性存储器也可以为非易失性存储器,当其为易失性存储器时,则内存故障处理程序可以在系统未掉电阶段从其中读取故障地址并进行申请占用,当其为非易失性存储器时,则内存故障处理程序可以在系统掉电之后,仍然从其中读取故障地址并进行申请占用,可以理解的是也可以在多种存储中存储上述故障地址,以适用于内存故障处理程序在不同的场景需求下使用。
在一种可能的实现方式中,所述内存故障处理程序占用第二存储地址,包括:所述内存故障处理程序释放所述第一存储地址中除所述第二存储地址以外的存储地址。
本发明实施例中,由于所述内存故障处理程序向第一存储器申请了预设范围的第一存储地址,所以此时实际上内存故障处理程序已经占用了第一存储地址,所以当从第一存储地址中检测出故障之后,则可以通过保持占用故障地址,但释放掉部分或全部的无故障地址的方式来达到隔离故障内存的目的,也即是实现了即检测即隔离的效果。可选的,当电子设备所运行的系统断电重启后,则仍然可以通过将故障地址记录在相应存储器中的方式,在系统重启之后再次重新申请此前所记录的故障地址,从而达到无论是系统断电或不断电,都能及时的对故障内存进行隔离。
在一种可能的实现方式中,所述内存故障处理程序对所述第一存储地址进行故障检测,包括:所述内存故障处理程序向所述第一存储地址写入预设数据;所述内存故障处理程序从所述第一存储地址读出所述预设数据;若写入的预设数据与读出的预设数据不一致,则将所述第一存储地址中对应的地址判定为所述故障地址。
本发明实施例中,具体的故障检测手段可以通过向相应的地址写入指定的数据,然后从中读出所写入的数据进行对比,比较指定写入的数据与实际写入的数据是否相同,以此来判断存储地址中是否有故障地址。
在一种可能的实现方式中,所述预设条件包括:所述处理器运行的系统发生系统异常、系统启动、系统重启、系统空闲、所述第一存储器处于空闲状态、所述处理器接收运行所述内存故障处理程序的指令中的一个或多个。
本发明实施例中,触发执行本申请中的内存故障处理程序的条件可有有多种,包括当电子设备发生一些异常现象的条件下、或者当电子设备没有发生上述异常现象,但处于较利于进行故障检测的条件下,都可以触发执行故障处理程序中的内存故障检测,其目的是为了让电子设备高效、更稳定的运行,此处不一一列举。
在一种可能的实现方式中,所述故障地址包括多段不连续的故障地址;所述第二存储地址与所述故障地址相同;或者,所述第二存储地址包括一段连续的存储地址,且所述一段连续的存储地址包括所述多段不连续的故障地址;或者所述第二存储地址包括多段不连续的存储地址,且其中的每段存储地址包括所述多段不连续的故障地址中的至少一段故障地址。
本发明实施例中,对故障内存地址进行申请占用的方式有多种,可以精确申请占用,也可以按照一定的大小规格来申请。比如哪里有故障就申请哪里,或者以最小不允许小于64KB,最大不允许超过256MB的规格申请占用等等,以满足不同应用场景或者应用平台的需求。
在一种可能的实现方式中,所述内存故障处理程序被设置为最高优先级的应用程序。
本发明实施例中,由于内存故障处理程序有可能会被其他优先级更高的程序踢掉,比如内存故障处理程序被强制挂起,所申请占用的包含错误地址的内存地址被强制回收,此时则可以通过将内存故障处理程序设置为优先级最高级别,让内存故障处理程序持续占用故障内存,以避免其他应用申请使用,避免系统异常或故障。
在一种可能的实现方式中,所述内存故障处理程序被设置为从所述电子设备所运行的引导程序、操作系统或应用程序中启动。即所述内存故障处理程序被设置在所述电子设备所运行的引导程序、操作系统或应用程序的文件夹中,以使得该内存故障处理程序可以跟随对应的不同层级的文件在系统启动的不同时机进行运行。
第二方面,本发明实施例提供了一种电子设备,可包括:处理器和第一存储器,所述第一存储器为易失性存储器:其中,
所述处理器用于:
若满足预设条件,则运行内存故障处理程序;
通过所述内存故障处理程序向所述第一存储器申请预设范围的第一存储地址;
通过所述内存故障处理程序对所述第一存储地址进行故障检测;
若所述第一存储地址包含故障地址,则通过所述内存故障处理程序占用第二存储地址,所述第二存储地址包括所述故障地址。
在一种可能的实现方式中,所述电子设备还包括第二存储器;
所述处理器还用于:通过所述内存故障处理程序将所述故障地址记录到所述第二存储器;释放所述第一存储地址;
所述处理器,具体用于:
通过所述内存故障处理程序读取所述第二存储器中存储的所述故障地址,向所述第一存储器申请所述第二存储地址。
在一种可能的实现方式中,所述处理器,具体用于:
若所述第一存储地址包含故障地址,则通过所述内存故障处理程序释放所述第一存储地址中除所述第二存储地址以外的存储地址。
在一种可能的实现方式中,所述处理器,具体用于:
通过所述内存故障处理程序向所述第一存储地址写入预设数据;
通过所述内存故障处理程序从所述第一存储地址读出所述预设数据;
若写入的预设数据与读出的预设数据不一致,则通过所述内存故障处理程序将所述第一存储地址中对应的地址判定为所述故障地址。
在一种可能的实现方式中,所述预设条件包括:所述处理器运行的系统发生系统异常、系统启动、系统重启、系统空闲、所述第一存储器处于空闲状态、所述处理器接收运行所述内存故障处理程序的指令中的一个或多个。
在一种可能的实现方式中,所述故障地址包括多段不连续的故障地址;
所述第二存储地址与所述故障地址相同;或者,
所述第二存储地址包括一段连续的存储地址,且所述一段连续的存储地址包括所述多段不连续的故障地址;或者
所述第二存储地址包括多段不连续的存储地址,且其中的每段存储地址包括所述多段不连续的故障地址中的至少一段故障地址。
在一种可能的实现方式中,所述内存故障处理程序被设置为最高优先级的应用程序。
第三方面,本申请提供一种半导体芯片,可包括上述第二方面中的任意一种实现方式所涉及的处理器。
第四方面,本申请提供一种半导体芯片,可包括:上述第二方面中的任意一种实现方式所涉及的处理器、耦合于所述处理器的第一存储器,可选的还包括耦合于所述处理器的第二存储器。
第五方面,本申请提供一种片上系统SoC芯片,该SoC芯片包括上述第二方面中的任意一种实现方式所涉及的处理器,可选的,还包括耦合于所述多核处理器的内部存储器和外部存储器。该SoC芯片,可以由芯片构成,也可以包含芯片和其他分立器件。
第六方面,本申请提供了一种芯片系统,该芯片系统包括上述第二方面中的任意一种实现方式所涉及的处理器。在一种可能的设计中,所述芯片系统还包括存储器,所述存储器,用于保存所述多核处理器在运行过程中所必要或相关的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其它分立器件。
第七方面,本申请提供一种处理装置,该处理装置具有实现上述第一方面中的任意一种内存故障处理方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
第八方面,本申请提供一种终端,该终端包括处理器,该处理器包括上述第二方面中的任意一种实现方式所提供的电子设备。该终端还可以包括通信接口,用于该终端与其它设备或通信网络通信。
第九方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,该计算机程序被多核处理器执行时实现上述第一方面中任意一项所述的内存故障处理方法的流程。
第十方面,本发明实施例提供了一种计算机程序,该计算机程序包括指令,当该计算机程序被多核处理器执行时,使得多核处理器可以执行上述第一方面中任意一项所述的内存故障处理方法的流程。
附图说明
为了更清楚地说明本发明实施例或背景技术中的技术方案,下面将对本发明实施例或背景技术中所需要使用的附图进行说明。
图1是本发明实施例提供种一种内存故障处理装置的结构示意图。
图2为本发明实施例提供的一种电子设备的结构示意图。
图3A-图3F为本发明实施例提供的一些由系统自动触发检测的用户界面示意图。
图4A-图4F为本发明实施例提供的内存故障处理程序设置在不同层文件时,对应的启动时机及内存检测情况的示意图。
图5A为本发明实施例提供的一种内存故障检测方法示意图。
图5B为本发明实施例提供的另一种内存故障检测方法示意图。
图6为本发明实施例提供的一种内存故障检测隔离的流程示意图。
图7A为本发明实施例提供的一种故障内存隔离示意图。
图7B为本发明实施例提供的另一种故障内存隔离示意图。
图7C为本发明实施例提供的又一种故障内存隔离示意图。
图7D为本发明实施例提供的又一种故障内存隔离示意图。
图8A为本发明实施例提供的一种内存故障检测隔离的具体应用的流程示意图。
图8B为本发明实施例提供的另一种内存故障检测隔离的具体应用的流程示意图。
图9为本发明实施例提供的一种内存故障检测隔离方法的流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例进行描述。
本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
在本说明书中使用的术语“部件”、“模块”、“系统”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件、或执行中的软件。例如,部件可以是但不限于,在处理器上运行的进程、处理器、对象、可执行文件、执行线程、程序和/或计算机。通过图示,在计算设备上运行的应用和计算设备都可以是部件。一个或多个部件可驻留在进程和/或执行线程中,部件可位于一个计算机上和/或分布在2个或更多个计算机之间。此外,这些部件可从在上面存储有各种数据结构的各种计算机可读介质执行。部件可例如根据具有一个或多个数据分组(例如来自与本地系统、分布式系统和/或网络间的另一部件交互的二个部件的数据,例如通过信号与其它系统交互的互联网)的信号通过本地和/或远程进程来通信。
首先,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)错误纠正码(Error Correction Code,ECC),是一种能够实现“错误检查和纠正”的技术,ECC内存就是应用了这种技术的内存。
(2)封装后修复(Post Package Repair,PPR),就是封装后还可以修复,可以把损坏的部分行Row,用冗余的行代替。它分为软PPR和硬PPR。
(3)内存管理单元(MemoryManagementUnit,MMU),它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。MMU的主要作用:实现逻辑地址(VA)到物理地址(PA)的映射(可以因此实现方便的动态内存管理)。
(4)随机存取存储器(Random Access Memory,RAM),它相当于PC机上的移动存储,用来存储和保存数据的。它在任何时候都可以读写,RAM通常是作为操作系统或其他正在运行程序的临时存储介质(可称作系统内存)。
(5)通用闪存存储(Universal FLASH Storage,UFS)是一种设计用于数码相机、智能手机等消费电子产品使用的闪存存储规范。它的设计目标是发展一套统一的快闪存储卡格式,在提供高数据传输速度和稳定性的同时,也可以减少消费者对于市面上各种存储卡格式的混淆和不同存储卡转接器的使用。
(6)虚拟地址(VirtualAddress,VA),由程序产生的这些地址称为虚拟地址,他们构成了一个虚拟地址空间,在使用虚拟内存的情况下,虚拟地址不是被直接送到内存的总线上,而是被送到内存管理单元(MMU),MMU把虚拟地址映射为物理内存地址。虚拟地址空间按照固定大小划分称为页面的若干单元。在物理内存中对应的单元称为页框。页面和页框的大小通常是一样的。
(7)物理地址(PhysicalAddress,PA),CPU地址总线传来的地址,由硬件电路控制其具体含义。在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上。
(8)计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。指令集(Instruction set),就是CPU中用来计算和控制计算机系统的一套指令的集合,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效的工具之一。常见的指令集架构(Instruction Set Architecture,ISA)有复杂指令集运算(Complex Instruction Set Computing,CISC)和精简指令集运算(ReducedInstruction Set Computing,RISC),其中,CISC的典型代表是X86,RISC的典型代表是高级精简指令集机器(Advanced RISC Machine,ARM)架构和无内部互锁流水级的微处理器(Microprocessor without interlocked pipelined stages,MIPS)架构。
首先,为了便于理解本发明实施例,进一步分析并提出本申请所具体要解决的技术问题。目前针对内存的纠错方法主要包括以下两种常用的方案:
方案一,错误纠正码(ECC):
通常,内存中的每个内存单元是1个字节大小,而每个字节有8位。若某个内存单元的某一位存储出现翻转(bitflip),就会使该内存单元存储的相应数据发生改变而导致应用程序发生错误。ECC则是通过数据位和校验位来实现的。在内存中ECC能够容许错误,并可以将错误更正,使系统得以持续正常的操作,不致因错误而中断。由于ECC做在内存内部由硬件实现,因此ECC对业务运行没有影响,既不影响内存运行频率,不影响处理器(Host)的计算开销,不损失内存的容量。例如,汉明码(Hamming Code)是广泛用于内存和磁盘纠错的编码。汉明码利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以用来检测转移数据时发生的错误,还可以用来修正错误。
该方案一的缺点:
1、首先,ECC的纠错能力是有限的。当错误bit超过纠错能力时,ECC无法纠正错误,例如,汉明码只能发现和修正一位错误,对于两位或者两位以上的错误无法正确和发现;
2、其次,ECC的纠错需要额外的半导体资源,用于制造冗余位,导致器件成本高。
方案二,封装后修复(PPR):
封装后修复(PostPackageRepair,PPR)是一种“修复”问题行的方案。当已知内存芯片中的某一行出现缺陷时,可以通过PPR技术,对内存芯片进行编程,把这一行“替换”为另一个行。这些冗余的片上备份行,在内存晶片生产时就已经被制造出来,且内存内部有专门的电路可以实现这种重配置。
由于内存是半导体工程工艺量产品,存在不可消除的制造不良率,因此PPR技术通常在生产检测阶段使用。在产品生产时,如果检测出某行有问题时,可以在产线上通过编程命令,将错误的行屏蔽掉,用一个冗余行来替换错误行。即原先寻址到故障行的硬件,更改寻址目的地到冗余替换行,并将这种寻址记录在芯片内永久执行。这样一来,故障行就被完好的行所替换掉,故障也就被规避了。PPR技术不会损失内存的容量,且能够在已知不良行的前提下修复故障,且没有纠错bit数的约束。
该方案二的缺点:
(1)首先,PPR技术多应用在产线,不具备在线自我检错修复能力,需要外部检测到错误后再来调用PPR,因此其在出厂后用户日常使用中,难以使用。
(2)其次,PPR技术不能做到全芯片范围纠错,只能替换有限行,当故障行大于PPR冗余行资源总量时,那么即使检测到错误也无法纠正。
基于上述,采用上述内存内置ECC的技术具有成本高、功耗高、纠错能力有限的缺陷;而采用上述内存内置PPR的技术又具有使用不灵活、可纠错行数有限、用户日常使用中难纠错等问题。也即是,通过传统手段难以有效解决内存故障问题,如何有效地对内存的缺陷进行管理,是亟需解决的问题。综上所述,本申请实际要解决的技术问题包括,提供一种使用灵活、成本低、功耗小、纠错行数无限制的内存缺陷管理方案,以提升设备中内存的稳定性和用户体验。
基于上述,本发明实施例提供一种内存故障处理装置。请参见图1,图1是本发明实施例提供种一种内存故障处理装置的结构示意图,该多内存故障处理装置10可以位于任意一个电子设备中,如电脑、计算机、手机、平板电脑、智能穿戴设备、智能汽车等各类设备中。该内存故障处理装置10具体可以是芯片或芯片组或搭载有芯片或者芯片组的电路板。该芯片或芯片组或搭载有芯片或芯片组的电路板可在必要的软件驱动下工作。该内存故障处理装置10包括处理器101,以及耦合于该处理器101的第一存储器102和第二存储器103。其中,
处理器101:可运行操作系统或应用程序,以控制连接到处理器101的多个硬件或软件元件,并且可处理各种数据并执行操作。处理器101可将从其他元件(例如,第二存储器103)中的接收到的指令或数据加载到易失性存储器(如第一存储器102),并可将各种数据存储在非易失性存储器(如第二存储器103)中。处理器101可以包括一个或多个处理单元(也可称处理核),例如:处理器101可以包括中央处理单元(CPU)、应用处理单元(application processor,AP)、调制解调处理单元、图形处理单元(graphics processingunit,GPU)、图像信号处理单元(image signal processor,ISP)、视频编解码单元、数字信号处理单元(digital signal processor,DSP)、基带处理单元和神经网络处理单元(neural-network processing unit,NPU)等中的一个或多个。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个器件中。可选的,处理器101中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器101中的存储器为高速缓冲存储器(Cache)。所述Cache可以保存处理器101刚用过或循环使用的指令或数据。如果处理器101需要再次使用该指令或数据,可从所述Cache中直接调用。避免了重复存取,减少了处理器101的等待时间,因而提高了系统的效率。进一步地,处理器101还可被实现为片上系统(System onChip,SoC)。
第一存储器102,为掉电易失性存储器,断电时会丢失其上存储的内容。本申请中的第一存储器102是指可读可写的运行内存,在本申请中也可称为内存储器,简称内存(Memory)或主存储器。其作用是用于暂时存放处理器101中的运算数据,以及与第二存储器130或其他外部存储器交换数据,可作为操作系统或其他正在运行中的程序的临时数据的存储媒介。例如,运行于处理器101上的操作系统把需要运算的数据从第一存储器102调到处理器101中进行运算,当运算完成后处理器101再将结果传送出来。由于所有程序的运行都需要先加载到第一存储器102中,而后处理器101才可以加载运行,因此,第一存储器102的性能对处理器110的运算性能影响非常大,决定了装置10本身或装置10所在的电子设备是否能正常、稳定、高效的运行。
第一存储器120可以包括,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、同步动态随机存取存储器(SDRAM)等中的一种或多种。其中,DRAM又包括双倍速率同步动态随机存储器(Double Data RateSynchronous Dynamic Random Access Memory,DDR SDRAM)简称DDR、二代双倍速率同步动态随机存储器(DDR2)、三代双倍速率同步动态随机存储器(DDR3)和四代低功耗双倍数据率同步动态随机存储器(Low Power Double DataRate 4x,LPDDR4x)。
本申请中所涉及的内存故障处理方法是针对该第一存储器102进行的故障处理,由于当处理器101在执行指令或进行数据处理时,第一存储器102中必然会被占用一定空间,因此该部分已被占用的内存空间当前无法对其检测故障,而需要等到该部分内存空间被释放后,才可以进行检测,所以在本申请中,可以分开多次地对第一存储器102进行检测,从而达到故障全面检测的目的,后续实施例中将对此进行进一步说明,此处不作详述。
第二存储器103,为非易失性存储器,断电后其存储的内容不会丢失。本申请中的第二存储器103可包括用于存储系统信息和启动程序的只读存储器(ROM),以及用于存储程序和数据的可读可写的外部存储器(如Flash)。其作用是用于长期存储指令和数据。例如,系统信息包括Linux内核、Android操作系统等系统文件;程序可包括装置100出厂自带的系统内置应用程序(如应用市场、钱包应用、安全中心等)和用户后续下载安装应用程序(如社交应用、视频应用、移动支付应用、游戏应用等);数据可包括与系统运行相关的系统数据(如配置文件数据、日志文件数据、缓存数据等),以及在用户在使用过程中产生的数据(如指纹数据、聊天历史数据、照片视频数据等)。
第二存储器103可以包括,一次性可编程只读存储器(OTPROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、掩模型只读存储器、闪速只读存储器、通用闪存存储器(universal flash storage,UFS)、Flash闪存(例如,NAND闪存、NOR闪存等)、硬盘驱动器或固态驱动器(SSD)等中的一个或多个。
用于实现本申请中的任意一种内存故障处理方法的计算机程序(简称内存故障处理程序),可以存放在第二存储器103中的系统信息或引导程序所在的文件中,也可以存放在第二存储器103中的程序或数据所在的文件中,其存放的位置不同可能导致其启动的时机不同,后续实施例中将对此进行进一步说明,此处不作详述。
在上述内存故障处理装置10中,由于处理器101不能直接读写第二存储器103中的指令和数据,因此,处理器101在执行读(或加载)命令时,实际上是将存储在第二存储器103中的待读内容(包括指令和/或数据)先临时加载至第一存储器102中,然后再由处理器101从第一存储器102中读出;而在执行写(或存储)命令时,实际上是由处理器101先将待写内容(包括指令和/或数据)临时写入至第一存储器102中,然后再从第一存储器102存储至第二存储器103中。
综上,当存储在第二存储器103中的指令和数据被加载到第一存储器102中,且通过处理器101运行加载在第一存储器102中的指令时,从而执行内存故障处理装置10的各种功能应用以及数据处理。在本申请中,用于实现本申请中任意一种内存故障处理方法的计算机程序(简称内存故障处理程序,后续不再重复说明)可包括相关指令和相关数据,该相关指令和相关数据可以长期存储在第二存储器103中,当在满足内存故障处理执行条件或触发条件时,则将上述相关指令和相关数据从第二存储器103中加载至第一存储器102中,并由处理器101进行执行和处理,从而使得装置10或装置10所在的电子设备执行本申请中所涉及的任意一种所述的内存故障处理方法,进而实现内存故障处理功能。
可以理解的是,处理器101与第一存储器102和第二存储器103之间可以通过系统总线的方式相互通信,也可以通过其他连接方式进行通信,本发明实施例对此不作具体限定。本发明实施例示意的结构并不构成装置10的具体限定。在本申请另一些实施例中,装置10可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
进一步地,当上述内存故障处理装置10位于一个电子设备100,且该电子设备100为移动终端时,请参见图2,图2为本发明实施例提供的一种电子设备的结构示意图,该电子设备100还可以包括如下功能模块:
外部存储器接口104,可以用于连接外部存储卡,例如,TF(TransFLash)卡又称T-Flash卡、闪存驱动器、紧凑型闪存(CF)、安全数字卡(SD)、微型SD、迷你SD、极速卡(xD)、多媒体卡(MMC)、记忆棒等。外部存储卡通过外部存储器接口104被可操作地和/或物理地连接到电子设备100,以扩展电子设备100的存储能力。例如将音乐,视频等文件保存在外部存储卡中。
SIM卡接口105,用于连接SIM卡。SIM卡可以通过插入SIM卡接口105,或从SIM卡接口105拔出,实现和电子设备100的接触和分离。电子设备100可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口105可以支持Nano SIM卡,Micro SIM卡,SIM卡等。同一个SIM卡接口105可以同时插入多张卡。所述多张卡的类型可以相同,也可以不同。SIM卡接口105也可以兼容不同类型的SIM卡。SIM卡接口105也可以兼容外部存储卡。电子设备100通过SIM卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备100采用eSIM,即:嵌入式SIM卡。eSIM卡可以嵌在电子设备100中,不能和电子设备100分离。
显示屏106,用于显示文本、图像、频等。显示屏106包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode的,AMOLED),柔性发光二极管(flex light-emitting diode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dotlight emitting diodes,QLED)等。进一步地,显示屏260可包括触摸屏,并且可接收从电子笔或用户身体的一部分输入的触摸、手势、接近或悬停等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的正整数。
音频系统107,可以包括扬声器,受话器,麦克风,耳机接口等。电子设备100可以通过音频系统107以及处理器101中的AP等实现音频功能。例如通话、音乐播放、录音等。
摄像系统108,可以包括一个摄像头(camera)或者多个摄像头(例如,一个前置摄像头和一个后置摄像头,或者多个前置摄像头和多个后置摄像头),该摄像头还可以是一组摄像头模组。摄像头用于捕获静态图像或视频。电子设备100可以通过摄像头、处理器101中的ISP、视频编解码器、GPU和AP、以及显示屏106等实现拍摄功能。
传感器系统109,可以包括四合一(加速度计、角速度计、陀螺仪、指南针)运动传感器、压力传感器、温度传感器、光线传感器、接近光传感器、3D结构光传感器等。不同的传感器用于传感不同的信号,使得处理器101根据不同的传感信号进行运算处理,以实现电子设备100的不同功能。例如,四合一运动传感器可以用于确定电子设备100的运动姿态和方位信息等;光线传感器用于感知环境光亮度,电子设备100可以根据感知的环境光亮度自适应调节显示屏106的亮度,或者,也可用于拍摄系统108拍照时自动调节白平衡。
通信系统,电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块110,无线通信模块111,调制解调处理器以及基带处理器等实现。天线1和天线2用于发射和接收电磁波信号。移动通信模块110可以提供应用在电子设备100上的包括2G/3G/4G/5G等无线通信的解决方案。无线通信模块111可以提供应用在电子设备100上的包括无线局域网(wireless local area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。
电源管理模块(PMU)110,可管理电子设备100的电源。电源管理模块112接收电池113和/或充电管理模块114的输入,为处理器101、内部存储器102、外部存储器103、显示屏106、音频系统107、摄像系统108、传感器系统109、移动通信模块110和无线通信模块111等供电。充电管理模块114可采用有线和/或无线充电方法。无线充电方法可包括例如磁共振方法、磁感应方法、电磁方法等。电池113可包括再充电电池和/或太阳能电池等。
可以理解的是,本发明实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
下面结合图1示出的内存故障处理装置10以及图2所示出的电子设备100的结构,具体介绍本发明实施例提供的内存故障处理方法。在本发明实施例提供的内存故障处理方法中,当满足内存故障处理方法的执行条件时,处理器101将第二存储器103中存储的内存故障处理程序加载至第一存储器102即内存中,从而对内存(即本申请中的第一存储器102,后续不再重复说明)进行故障检测。然后,处理器101对检测出的内存故障进行隔离,从而使得第二存储器102中的故障内存不会再被其他指令或数据所使用,避免对装置10或包含装置10的电子设备(如电子设备100)在执行相应指令或处理相应数据时,造成更严重的错误,以保证系统的稳定性。
下面通过装置10或电子设备100中所运行的内存故障处理程序是如何从内存中检测出故障以及如何对故障内存进行处理两方面来具体说明本申请所提供的内存故障处理方法。
(一)如何从内存中检测出故障
在本发明实施例中,将从以下几点描述内存故障处理程序是如何从内存中检测出故障的:1、执行内存故障检测的触发条件;2、允许本申请中的内存故障处理程序启动检测的时机;3、内存故障处理程序具体针对哪些内存进行检测;4、具体进行内存故障检测的方法。其中
1、执行内存故障检测的触发条件:
根据由电子设备100所运行的系统判断当前是否满足内存故障处理条件从而自动触发执行内存故障处理程序,或者由用户自身判断从而手动触发执行本申请中的内存故障处理程序,将内存故障处理的触发条件分为自动模式和手动模式两类情况。
(1)自动模式:当用户在使用电子设备100的过程中,可能会发生一些异常现象,例如系统宕机、黑屏、闪屏、程序崩溃、数据损坏或被改写等,这些异常现象可能导致电子设备100的系统崩溃或者部分功能失效。当电子设备100发生上述异常现象的条件下、或者当电子设备100没有发生上述异常现象,但处于较利于进行故障检测的条件下,都可以触发执行故障处理程序中的内存故障检测。
请参见图3A-图3F,图3A-图3F为本发明实施例提供的一些由系统自动触发检测的用户界面示意图。其中,
用户界面31示例性的示出了触发条件为电子设备100自动重启或手动重启的情况,由于系统重启后的一段时间内,内存占用较少,若此时进行内存故障检测,则可以在一次检测内,利用更少的时间对更多的空闲内存(即当前未被申请使用的内存)进行检测。
用户界面32示例性的示出了触发条件为电子设备100黑屏的情况,例如当用户正通过电子设备100在玩切水果游戏,突然显示屏106出现黑屏现象,此时有可能是因为内存故障导致的,因此可以在此触发条件下进行内存故障检测,以排除由内存故障带来的影响。
用户界面33示例性的示出了触发条件为电子设备100闪屏的情况,例如,当用户正通过电子设备100在使用社交应用聊天时,突然显示屏106弹出弹框提示,进程被意外停止,因此可以在此触发条件下进行检测,以排除由内存故障带来的影响。
用户界面34示例性的示出了触发条件为电子设备100处于深夜空闲时段的情况,例如,当电子设备100的时间显示在凌晨2:00到凌晨3:00时,预测在此时间段内用户使用电子设备的概率较小,因此可以利用此时间段进行一次完整的检测和故障隔离,以保证用户在使用时的体验。
用户界面35示例性的示出了触发条件为电子设备100处于飞行模式的情况,例如,当电子设备100处于飞行模式时,预测用户接下来使用电子设备100的概率较小,因此可以利用此时间段进行一次完整的检测和故障隔离,以保证用户在使用时的体验。
用户界面36示例性的示出了触发条件为电子设备100处于内存空闲状态的情况,例如,当电子设备100处于较长时间无操作时,预测用户接下来操作电子设备100的概率较小,因此可以通过多次少量的检测方式对内存进行检测,以保证用户在使用时的体验。
可以理解的是,上述任意一种触发条件下,都可以给用户取消或者继续检测的选择权利,例如,用户界面34-用户界面36中,用户可以点击检测按钮继续,但若用户当前不想进行内存故障检测处理功能则可以点击取消按钮进行取消。
进一步地,请参见图3C,图3C为本发明实施例提供的一种用户进行存储管理设置的界面示意图,本申请中的内存故障处理方法可以作为电子设备100的系统设置功能,以便于用户进行相关功能的设置。在用户界面37中,用户通过点击设置按钮300,进入到系统设置功能用户界面38,并进一步点击选项301存储管理,从而进入具体的设置页面。请参见图3D,图3D为本发明实施例提供的一种用户开启或关闭自动内存检测按钮的界面示意图,用户可以通过用户界面39和用户界面310中的开关控件302,手动开启自动内存检测功能,“自动内存检测”功能开启(ON)后,提示信息304提示用户将允许系统在满足触发条件时进行内存故障检测及隔离;“自动内存检测”功能关闭(OFF)后,提示信息305将提示用户将不允许系统进行内存故障检测及隔离。也即是当开关控件301处于ON状态时,才允许在满足上述图3A-图3B中的任一触发条件时,可以执行本申请中的内存故障检测,当开关控件302处于OFF状态时,则即使满足上述图3A-图3B中的任一触发条件时也不进行本申请中的内存故障检测。具体情况用户可以根据自己的使用习惯或者需求进行设置,本发明实施例对此不作具体限定。
(2)手动模式:用户还可以根据自己意愿,例如用户在使用智能手机过程中,发现速度越来越慢,或者频繁出现异常,进而在任意时刻启用内存检测功能。请参见图3E,图3E为本发明实施例提供的一种用户启用一键内存检测的界面示意图。用户可以通过用户界面311和用户界面312中的命令控件303,一键开启内存检测功能,用户在点击命令控件303之前,提示信息306提示用户在“一键内存检测功能”开启后,将立即执行内存故障检测及隔离功能;用户点击命令控件303之后,提示信息307提示用户当前正在执行内存故障检测及隔离功能。例如,请参见图3E,图3E为本发明实施例提供的一些当前内存检测的界面示意图,用户界面313示出了当电子设备100开始进行内存检测后,以及用户界面314示出了内存检测完毕的界面,进一步地,用户界面315提示用户当前正在进行内存修复隔离,用户界面316提示用户内存隔离修复成功,并且提示用户故障内存的大约占比百分之二。关于内存隔离的具体方法见后续相关内容,此处不作详述。
可以理解的是,本申请中的内存故障检测的触发条件包括但不限于上述条件,例如,触发条件可以是以一定的时间周期性执行内存故障检测;也可以是在一定的时间段内,系统异常频率或程度达到预设的阈值,才触发执行内存故障检测;也可以是在电子设备100充电且待机时触发执行内存故障检测;还可以是上述各种触发条件的叠加或者组合触发执行内存故障检测。还可以理解的是,本申请中的内存检测与隔离也可以是分开进行的,例如,检测出内存故障之后,只上报故障结果给用户或者系统,待用户确认之后才进行隔离操作等。
2、允许本申请中的内存故障处理程序启动检测的时机
当满足内存故障检测的条件之后,具体执行内存故障处理程序中检测功能的时机,还取决于内存故障检测程序所处于的系统层。本申请中,内存故障处理程序的可执行时机可以是多种多样的,因为系统中不同的层对应的文件在系统启动过程中的执行时机是不一样的。例如,电子设备100上电后,有多重启动方式,以下以其中一种在ARM架构下引导方式为例进行说明:系统上电–>xloader->bootloader–>kernel->文件系统,如下表2所示:
表2
启动阶段1、电子设备100的系统上电之后,首先从片内Rom(OnChipROM)中执行指令,也即是执行固化在集成电路内部的源程序代码,或称为片上固化程序或固件frimware)。片上固化程序,通常会初始化硬件,判断boot mode和读取外部固件到片内ram。
启动阶段2、在系统上电且执行完OnChipROM中的片上固化程序之后,则开始执行用户程序Xloader,Xloader一般只做一些最核心的硬件初始化,比如CPU时钟、外部内存、flash和usb/SD/uart等的初始化工作,初始化完成之后xloader则引导uboot(例如为Fastboot)并加载Fastboot,然后把更深入的初始化交给Fastboot来执行。
启动阶段3、启动Fastboot,Fastboot在上述xloader的引导下,用于启动加载或下载linux kernel或linux kernelOS,具有初始化、交互操作、下载和引导linux的作用。
启动阶段4、运行Linux系统,在上述启动程序的准备下,可以将系统的软硬件环境配置到一个合适的状态,为运行Linux系统做好准备,而Linux系统则用于承载后续的Android系统。
启动阶段5、运行Android系统,当上述Linux运行之后则可以,启动并运行Android系统,而Android系统则用于承载后续的Android应用(APP)。
启动阶段6、当Android系统运行之后,则可以启动运行各类Android APP。
本申请中的内存故障处理程序,可以设置在上述任意一个启动内容对应的文件里,进而跟随对应的启动内容进行启动。即设置在不同启动内容对应的文件夹里,决定了本申请中的内存故障处理程序可以启动的时机或者可以启动的最早时机。例如,请参见图4A-图4E,图4A-图4F为本发明实施例提供的内存故障处理程序设置在不同层文件时,对应的启动时机及内存检测情况的示意图。
图4A例性的示出了本申请中的内存故障处理程序的执行触发条件为重启或开机,且该程序配置在片上固化程序对应的文件里,则可以在启动片内Rom阶段由处理器101执行本申请中的内存故障处理程序,此时由于从第二存储器103(如Flash)中加载至第一存储器102(如内存(Memory))中的内容包括(片上固化程序+内存故障隔离程序),即内存中被占用的内存较少,剩余的空闲内存较多,因此内存故障处理程序此次可申请检测的空闲内存较多。
图4B示例性的示出了本申请中的内存故障处理程序的执行触发条件为重启或开机,且该程序配置在加载程序对应的文件里,则可以在启动Xloader阶段由处理器101执行内存故障处理程序,此时由于从Flash中加载至内存(Memory)中的内容包括(片上固化程序+加载程序+内存故障隔离程序),即内存中被占用的内存较少,剩余的空闲内存较多,因此内存故障处理程序此次可申请检测的空闲内存较多。
图4C示例性的示出了本申请中的内存故障处理程序的执行触发条件为重启或开机,且将该程序配置在Boot程序对应的文件里,则可以在启动Fastboot阶段由处理器101执行本申请中的内存故障处理程序,此时由于从Flash中加载至内存(Memory)中的内容包括(片上固化程序+加载程序+Boot程序+内存故障隔离程序),即内存中被占用的内存较少,剩余的空闲内存较多,因此内存故障处理程序此次可申请检测的空闲内存较多。
图4D示例性的示出了本申请中的内存故障处理程序的执行触发条件为重启或开机,且将该程序配置在Linux系统对应的文件里,则可以在启动Linux系统阶段由处理器101执行本申请中的内存故障处理程序,此时由于从Flash中加载至内存(Memory)中的内容包括(片上固化程序+加载程序+Boot程序+Linux系统+内存故障隔离程序),即内存中被占用的内存相对较多,剩余的空闲内存进一步减少,因此内存故障处理程序此次可申请检测的空闲内存也进一步减少。
图4E示例性的示出了本申请中的内存故障处理程序的执行触发条件为重启或开机,且将该程序配置在Android系统对应的文件里,则可以在启动Android系统阶段由处理器101执行本申请中的内存故障处理程序,此时由于从Flash中加载至内存(Memory)中的内容包括(片上固化程序+加载程序+Boot程序+Linux系统+Android系统+内存故障隔离程序),即内存中被占用的内存相对较多,剩余的空闲内存进一步减少,因此内存故障处理程序此次可申请检测的空闲内存也进一步减少。
图4F示例性的示出了本申请中的内存故障处理程序的执行触发条件为系统启动后的某个条件(如深夜时段、空闲模式或者内存空闲等),且将该程序配置在加载到Android系统中的应用对应的文件里,则可以在启动Android应用阶段由处理器101执行本申请中的内存故障处理程序,此时由于从Flash中加载至内存(Memory)中的内容包括(片上固化程序+加载程序+Boot程序+Linux系统+Android系统+APP1+内存故障隔离程序),即内存中被占用的内存较多,剩余的空闲内存更进一步减少,因此内存故障处理程序此次可申请检测的空闲内存更进一步减少。
在本发明实施例中,内存故障处理程序可以存储在上述任意一个或多个启动内容对应的文件中,如此一来,电子设备100则可以根据需求在各个不同的时机被允许启动,此处不再一一列举。由于上述各个不同启动内容分别对应的程序或代码的大小,呈现逐渐增大的趋势(即功能越多对应的程序越多),因此在上述1、2、3、4、5或6的启动阶段中,本申请中的内存故障隔离程序启动的阶段越早,则其当前能申请到检测的内存的空间越大,因为系统中启动的内容越多,内存被占用的空间也就越多。因此,若在阶段1启动,则本申请中的故障隔离程序所能申请到的内存检测空间则大于阶段2、3、4、5或6阶段中所申请到的检测内存;若在阶段2启动,则本申请中的故障隔离程序所能申请到的内存检测空间则大于阶段3、4、5或特别阶段中所申请到的检测内存,以此类推,此处不再赘述。
需要说明的是,不同指令集架构下的系统引导启动方式不同,因此启动内容可能不同,对应地,本申请中的内存故障隔离程序,也可以设置在不同的启动内容对应的文件中,从而可以从不同的系统启动阶段进行执行。不同启动架构(或引导方式)下的启动流程不再一一赘述。相应地,相同指令集架构下的不同系统,可以采用相同的内存故障隔离程序,因为本发明实施例主要是基于软件层面的控制,因此较少涉及到物理层的控制,所以本申请中的内存故障处理程序的跨平台性以及适配性较好。
3、内存故障处理程序具体针对哪些内存进行检测
电子设备100的系统启上电动之后,所有正在运行的操作系统以及程序都会占用一定的内存空间。例如,用户点击打开某个程序时,即程序开始运行时,会首先向操作系统请求独占内存空间(一段在程序整个执行过程中都不释放的空间),操作系统会应答请求并分配一段逻辑上连续(其实是将零散的内存空间映射为一段连续的空间)的内存空间给该程序,此时程序得到该段空间的逻辑地址信息,根据地址将程序代码段和数据段装入内存,至此程序载入完成。而程序在运行中,当某一过程任务需要更大内存空间时,会再次向操作系统发出请求,操作系统会根据请求再次分配内存空间给该程序,当这一过程任务执行完毕后,该内存空间被释放。同时由于操作系统的存储保护,程序在运行过程中只能访问自己所申请的内存空间,不能访问其他程序的内存空间。当程序执行完毕或关闭程序后,该程序所占的所有内存空间都被释放。当用户再次打开程序后,重复上述的过程。
由于本申请是通过向空闲内存写入预定的数据,然后再读出该写入的数据是否和预定的数据一致的方式来检测内存是否有故障,因此,在本申请中是针对还未被系统或者程序申请的空闲内存。也正是由于该原因,可能导致在某个时间段,无法保证内存全部处于空闲状态(因为只要系统或程序在运行,则必然导致内存被占用),进而无法一次性检测完毕。但是,由于相同的程序或不同的程序,在不同时间运行,程序占用内存的位置也可能不同。每运行一次程序,程序都会重新向操作系统申请内存空间,这时操作系统会分配一段全新的内存空间给程序,故不同时间运行程序,程序在内存中的位置是不同的。所以,在本申请中,可以通过少量多次或者大量多次申请空闲内存的方式,在不同的时间段申请不同地址的内存进行检测,从而达到最终可以全面检测所有内存的目的。
例如,本申请中的内存故障处理程序可以从系统中当前未使用的空闲内存中,随机申请一段内存地址:程序申请并对这段内存地址进行检测,检测到的错误,记录在电子设备100第二存储器103或其它外部存储卡中。可选的,内存故障处理程序的检测功能,是一段一段地申请和检测内存中的地址,一段地址的大小可以依据实际情况调整,使得任意时刻本申请中的内存故障处理程序对系统内存的占用满足系统需求:比如,系统启动过程中,该内存故障处理程序可以大段大段地进行申请和检测,以实现检测速度优先;而当系统进入用户可用状态后,内存故障处理程序可以一小段一小段地申请和检测,以最小程度地影响用户程序的使用。又例如,内存故障处理程序每次扫描检测的内存大小可以不一样。举例来说,当系统启动过程中进行巡检时,巡检扫描的内存地址段大小可以更大,以便快速完成扫描,譬如每次扫描256MB;当系统运行起来后,每次扫描的内存地址段可以较小,以便对系统其它应用的可用内存影响尽可能小,譬如每次扫描64MB。
4、具体进行内存故障检测的方法
基于上述本申请中的内存故障处理程序所申请的空闲内存,以下提供本申请针对上述申请得到的空闲内存的具体检测方法。本发明实施例中,内存故障处理程序向空闲内存如内存中的目标地址段写入预定的数据,然后再读出该写入的数据,最后再和预定的数据进行比较,若一致,则表示内存的该目标地址段是无故障的,若不一致则明确不一致的地址页,从而将该地址页确定为故障内存。例如,可以使用且不限于例如DDRScreen算法、MemTester算法等。此处所说的“目标地址段”具体来说,可以是内存(Memory)的全部地址,也可以是某一段地址,也可以是某一些地址段的集合。也就是说,可以检测一部分地址,也可以检测全部的地址。例如可以采用DDRScreen算法(产线DDR故障检测算法),写入某个Pattern(例如0x00000000,0xFFFFFFFF,0x5A5A5A5A……)进行读写Pattern对比校验,如果某个地址的Pattern写入和读出的不一致则表示该地址存在故障。
请参见图5A,图5A为本发明实施例提供的一种内存故障检测方法示意图,在处理器101中执行的内存故障处理程序,向内存申请空闲内存,例如为图示的包括目标地址段的空闲内存,之后便向内存发起写入命令,例如将0xFFFFFFFF写入至目标地址段,内存根据该写入命令写入0xFFFFFFFF,但是实际情况中,该目标地址段中可能会存在故障(即内存单元可能会发生bit翻转(bitflip)错误),最终实际写入至目标地址段的数据为0xFFFFFF0F,内存故障程序通过对比确定写命令中所指示写入的数据与实际写入该目标地址段的数据不一样,因此判定该目标地址段发生了故障。进一步地,可以通过具体哪一位发生了错误从而判断该目标地址段中的某一位(bit)或者某几位(bits)发生了故障。请参见图5B,图5B为本发明实施例提供的另一种内存故障检测方法示意图,最终实际写入至目标地址段中的数据0xFFFFFFFF与写命令指示写入的数据一致,因此判断该目标地址段无故障。
(二)如何对故障内存进行处理
上述从内存故障处理程序是如何从内存中检测出故障的方面进行了说明,以下从检测出故障内存后是如何对故障内存进行处理的方面进行说明。在本发明实施例中,将从以下几点描述系统是如何对故障内存进行处理的:1、检测出故障后,故障内存的物理地址如何保存;2、具体如何对故障内存进行处理;3、内存隔离的多种方式。其中
1、检测出故障后,故障内存的物理地址如何保存
当本申请中的内存故障处理程序检测到内存(Memory)故障后,可能需要把故障(错误)的内存地址进行记录,便于对记录的地址进行隔离,比如,可以记录在非易失(NV)项当中。可选的,还可以记录在装置10或电子设备100的第二存储器103(如FLASH)、其它外部存储卡上或者处理器101(如SoC)内部的只读存储(ROM)区域等,即只要能够永久记录故障/错误的内存地址即可,本申请并不限制具体记录在何处。其中,NV指的是非易失性存储器(non-volatile memory),数据一旦写入NV,即使掉电也不会丢掉,下次重启仍然会保留原有记录。需要说明的是,也可以记录在易失性存储器如第一存储器102中进行临时存储,以便于在系统不掉电的情况下,可以从中读取故障的内存地址进行使用。
2、具体如何对故障内存进行处理
在本申请中,对故障内存处理的方式包括对故障内存进行申请并占用,从而达到故障内存的隔离效果,具体地,是通过处理器101(如SoC)对第一存储器102即内存中的故障地址进行申请且保持占用而不释放,形成其它程序无法使用此段故障地址的方式进行隔离,示例性地,可以包括如下两种隔离方式。
处理方式一:检测出故障内存后,对无故障内存进行释放,对有故障内存继续占用
本发明实施例中的内存故障处理程序执行后,当检测出没有故障(错误)的内存地址后,可以按照某种策略释放掉;当检测出有故障的内存地址后则不释放,即继续占用包含有此段有故障内存地址的一段地址。换句话说,就是仅释放可以释放的、没有问题的地址,而不释放有问题的地址,使得系统中的内存空间不至于因本申请中的内存故障处理程序的不断检测而不断被占用,并且,也实现了立即检测立即隔离(即在检测出内存故障后立即执行隔离)的效果。其中,具体的释放无故障内存的策略,可以是实时释放、或者检测完指定大小的内存后再进行释放、或者是按照某个固定检测时长进行释放等,本发明实施例对此不作具体限定。
进一步地,由于当装置10或电子设备100在断电后启动或重启之后,由于内存(Memory)的掉电易失性,因此任何暂存在内存中的程序或数据都会丢失(包括被本申请中内存故障处理程序),及本申请中的内存故障处理程序所占用的故障内存地址会被强行释放。所以在本发明实施例中,虽然上述内存故障处理方式已经通过不释放故障内存地址的方式达到了故障隔离的效果,但是,考虑到后续系统可能断电、重启等情况,导致本申请中的内存故障处理程序不能持续占用故障内存,因此,仍然需要将检测出的内存故障地址记录在存储器(如NV中),等到下次断电后开机或者系统重启等,则直接根据存储的故障内存地址执行隔离操作。
其中,本发明实施例中的内存故障处理程序占用内存地址,可通过软件的方式实现。举例来说,通过Phy_addr_mem_alloc()软件接口来取得指定地址的内存,即完成占用;程序释放内存地址,也可以通过软件的方式实现,举例来说,通过Phy_addr_mem_free()软件接口释放指定地址的内存。可以理解的是,对内存物理地址的申请和释放是由处理器101(如SoC)执行的软件系统来实现的,因此,在不同的软件系统上,可能会有不同的命名,此处所举的名字只是示例性说明。
如图6所示,图6为本发明实施例提供的一种内存故障检测隔离的流程示意图,当本申请中的内存故障处理程序在后台启动后,通过一些检测条件(具体可参见图3A-图3E中的相关条件,此处不再赘述)触发进行内存故障检测,然后通过一次申请或多次申请当前未被使用的内存,并对其进行检测(具体可参见图5A-图5B中的相关实施例,此处不再赘述),将故障内存地址进行记录(如记录在NV中),且释放无故障地址。当隔离条件触发,也即是电子设备100重启或者开机后,则先读取NV,假设记录有故障地址则立即按照某种隔离方式(具体可参见后续图7A-图7D中的相关隔离方式,此处不再赘述)向系统申请故障内存地址,从而达到无论是系统正常运行,还是系统重启之后,都可以保证故障内存地址始终被本申请中的内存故障处理程序所占用,进而达到良好的故障隔离效果。如此一来便可以进行立即隔离,提升了隔离效率。
需要说明的是,由于本申请中的内存故障处理程序在占用了故障内存地址之后并未有实际的读或写操作,只是申请占用了该内存空间让其他程序无法使用,因而不会产生额外功耗也不会消耗读写指令,从而有效的保证了装置10或电子设备100的整体性能。
处理方式二:检测出故障内存后,先对检测的内存统一释放,并将故障内存地址记录下来,后续再统一进行占用
本发明实施例中的内存故障处理程序在检测内存故障的过程中,先对所检测过的所有内存进行统一释放(可以是所有内存检测完毕再统一释放、也可以是检测完固定大小内存就统一释放、还可以是检测完固定时长就统一释放等等,此处不作具体限定)。也即是,此时无论是有故障的内存还是无故障的内存,只要是已经进行了内存故障检测的都先释放掉,并通过将故障内存地址进行记录的方式(例如存储至NV中),后续再在隔离阶段根据记录的故障内存地址对故障内存进行统一隔离(即进行统一的故障内存申请占用)。
例如,当所有内存检测完毕后或者指定大小的内存检测完毕后,处理器101(SOC)读取NV项获取所记录到的内存故障地址,并在内存分配/使用管理中不予分配/使用——即这个/这些内存地址和/或地址段被本申请所述的内存故障处理程序占用,如此一来,其它程序在申请使用时,就无法申请到被本申请中的内存故障处理程序所保留的地址内存,从而避免其它程序使用错误地址而导致发生的任何可能的错误。
在一种可能的实现方式中,本申请中的内存故障处理程序在启动后,可以以最高优先级无期限地持续执行隔离功能——即本申请中的内存故障处理程序长期占用故障内存地址,使其它程序使用内存时没法再申请本申请中的内存故障处理程序所占用的内存地址:本申请中的内存故障处理程序从NV项中读到故障/错误的地址,向系统申请使用记录在NV项中的故障/错误地址。
需要说明的是,在上述两种处理方式中,对内存进行的隔离均可以不限于一次就隔离所有的故障地址,和/或隔离一部分而不是全部故障地址。也即是可以根据电子设备100的当前的需求或者状况,进行一次隔离或者多次隔离。
3、内存隔离的多种方式
在一种可能的实现方式中,本申请中的内存故障处理程序可以按照多种不同的方式,申请占用故障内存。例如,可通过分段申请占用bit页(bit行)的方式,去申请和占用有故障的内存地址,其中,1bit页=1bit行,在内存中,一横行bit存储被称为一页,因此一页、也可称为一行,这是物理上的概念。具体可以包括但不限于以下各类方法:
如图7A所示,图7A为本发明实施例提供的一种故障内存隔离示意图,图7A中内存地址空间可包括多个bit行,其中每个bit行由多个bit位组成,即图中每一个方块可以表示1bit。在该隔离方式中,仅对故障(错误)地址进行占用而释放掉所有没有故障(错误)的地址,即哪里有错误就申请哪里,将无故障的内存空间尽可能地保留出来,从而同时保证内存的可用空间和性能。
或者,如图7B所示,图7B为本发明实施例提供的另一种故障内存隔离示意图,在该隔离方式中,设定一最大允许申请的范围,并且不允许超过这个地址,否则就要申请多段;和/或,设定一最小允许申请的地址范围,并且不允许小于这个地址,否则就要合并为一段。例如,通过对错误地址占用设置一定范围【Occupied_min,Occupied_max】,其中,占用的连续物理地址Occupied_min最小不允许小于64KB,Occupied_max最大不允许超过256MB。
或者,如图7C所示,图7C为本发明实施例提供的又一种故障内存隔离示意图,在该隔离方式中,从故障(错误)最低地址连续占用到故障(错误)地址最高地址。即从最小错误地址连续地申请到最大错误地址,中间的地址段全部申请下来。
或者,如图7D所示,图7D为本发明实施例提供的又一种故障内存隔离示意图,在该隔离方式中,可以按照固定的大小申请包含故障内存地址的地址段,即按指定大小申请占用包含错误的地址空间。
以下示例性示出本申请中的内存故障处理方法在其中一种应用场景下的实施例。如图8A所示,图8A为本发明实施例提供的一种内存故障检测隔离的具体应用的流程示意图。在该应用场景下,假设本申请中的内存故障管理程序的执行触发条件为系统异常启动,且该程序是设置在启动内容LinuxKernel对应的文件夹中(具体请参照图4D的相关说明,此处不再赘述),那么在该实施例一中,则可包括步骤80~88以及步骤810~811;而当没有满足程序触发条件(即系统异常启动),而只是进行系统正常的启动(如正常开机、重启),则可包括步骤80~81以及89~811。其中,
80、系统启动,即装置10或电子设备100所运行的系统启动。
81、判断系统是否是正常启动或者是异常启动。例如,正常启动是指用户正常通过开/关机键或通过重启按钮进行的启动;异常启动是指系统异常掉电(如异常关机或死机)后自动进行的启动。该判断过程可通过系统自身来判断,然后通知给本申请中的内存故障管理程序;也可由本申请中的内存故障管理程序的条件触发检测功能来进行,比如通过读取系统日志中的异常记录来进行判断,此处对该条件触发判断的执行主体不作具体限定。
82、当系统由于异常导致启动(或重启)、且启动到LinuxKernel时,那么此时以最高优先级启动本申请中的内存故障处理程序(即此时启动该程序中的检测和隔离功能),并开始执行检测和隔离的功能,首先,将系统中所有的内存地址(例如第一存储器中的所有地址)均标记为未检测。
83、进一步地,内存故障处理程序开始执行内存故障检测(巡检),向系统一段一段地申请内存(比如为第一存储地址)。例如,每次申请256MB,也可以是其他大小,还可以每次所申请的第一存储地址的大小不一样,此处不作限定。
84、通过内存故障处理程序对此次申请到的一段内存地址(第一存储地址)进行故障(错误)检测,检测其中是否有故障内存。例如,对上述申请到的256MB的内存地址进行故障检测。具体故障检测方法可参照上述图5A和图5B的相关说明,此处不再赘述。
85、如果内存故障处理程序检测到该段内存地址中存在故障地址,那么则将该部分故障内存的故障地址记录在第二存储器103(如NV项)中,且执行86。
86、针对该段内存地址中的故障地址进行释放,并且由于该段故障地址均已经被进行故障检测,因此将这些已被检测过故障地址标记为已检测。
87、并行地,检测到该段内存地址中的无故障地址时,则无需记录故障地址至NV项,而是只需要将此段已经被进行故障检测的无故障地址标记为已检测,并释放该段无故障地址。可以理解的是,上述86中释放故障地址以及87中释放无故障地址的操作可以是同时进行的,即针对整段第一存储地址进行释放操作。
88、内存故障处理程序判断当前系统中标记为未检测的所有内存地址是否全部检测完毕,判断依据则是通过判断当前系统中被标记为未检测的地址是否均已被标记为已检测,若否,则表示当前系统中的内存还未被检测完毕,此时,则需要返回执行83,即向系统申请内存中的下一段内存地址(也即是系统中当前被标记为未检测的内存地址中的部分或全部)并重复进行上述84~87的操作,最终,直到在82中被标记为未检测的所有内存地址均被标记为已检测为止。至此,系统中所有的内存已经全部检查完毕,也即是本申请中的内存故障处理程序对系统中的所有内存进行了相应的故障检测,以及将系统中所有内存的所有有错误的地址均记录在NV项中,并且将所有内存地址在标记为已检测之后均进行了释放。此时,则系统内存已经全部检测完毕,即判断结果为是,则需要进一步执行810;
810、当确定上述系统中的内存(即第一存储器的所有地址)都已经检查完毕之后,则可以执行从第二存储器(如NV项)中读取保存的内存故障地址的步骤。也即是,执行完88之后,本申请中的内存故障处理程序和正常启动到Linux Kernel时的行为一样,均需要从第二存储器NV项中读取内存故障地址记录,并进行申请。
811、如果有故障地址记录,内存故障处理程序就立即向系统申请这个物理地址的内存,例如,申请的故障地址大小范围最小16MB,最大不超过64MB。也即是对内存故障地址的申请占用,可以分多次进行申请也可以一次申请,具体申请的次数以及大小此处不作限定,只要是能将NV项中所有故障地址都申请占用即可。当所有记录的故障内存地址都被申请后,本申请中的内存故障处理程序仍然保持以最高优先级在系统内运行,永不退出,也永不释放所申请的故障地址。
89、当装置10或电子设备100正常启动到Linux Kernel时,根据预先的设置或配置,考虑到在此前可能已经经过相关的内存故障检测,此次只是由于用户的正常关机、开机或重启导致的此前被内存故障处理程序运行占用的故障内存地址,在系统掉电后被强制释放了,因此,只需要通过将此前已经记录在NV项中的故障地址再次申请,即可以完成对故障内存的隔离。所以在此种情况下,本申请中的内存故障处理程序启动后,只执行相关的内存故障处理(隔离)功能。继续执行上述810和811,具体请参照上述810和811相关描述,此处不再赘述。
在上述实施例一中,内存故障处理程序在系统正常启动/重启时,不进行内存的故障检测(巡检)动作,只进行内存的故障处理(隔离)动作;当且仅当系统异常启动时,才进行内存的故障巡检动作以及进行内存的故障隔离动作。本发明实施例一可有效检出及隔离内存(如DDR)错误,并通过对DDR错误行的隔离实现系统容错运行。
与现有方案一(ECC方案)相比,其可检测的错误不受错误bit数多少影响,即使一行有多个错误也能够有效检出;与现有方案二(PPR方案)相比,其可修复的错误行数更多,不受PPR替代资源的限制。同时本发明实施例一没有额外的成本增加,可以使用不支持ECC/PPR的内存颗粒,具有成本优势。本发明实施例一与硬件不绑定,不受特定硬件譬如DDR颗粒是否支持ECC/PPR的束缚,可以适用于各类产品。
以下示例性示出本申请中的内存故障处理方法在另一种应用场景下的实施例。如图8B所示,图8B为本发明实施例提供的另一种内存故障检测隔离的具体应用的流程示意图。在该应用场景下,假设本申请中的内存故障管理程序的执行触发条件为系统启动后该程序一直实时执行,那么在该实施例二中,可持续、并行的执行91~97和98~910。其中,
90、系统启动,即装置10或电子设备100所运行的系统启动。
91、当系统启动(无论正常启动或者是异常启动,只要是启动即可)后,则启动并实时运行本申请中的内存故障处理程序(具体启动时机可以参考图4A~图4F的相关说明,此处不再赘述),即开始持续不断的执行检测(步骤91~97)和隔离(98~910)的功能。首先,将系统中所有的内存地址(例如第一存储器中的所有地址)均标记为未检测。
92、进一步地,内存故障处理程序开始执行内存故障检测(巡检),向系统一段一段地申请内存(比如为第一存储地址)。例如,每次申请256MB,也可以是其他大小,还可以每次所申请的第一存储地址的大小不一样,此处不作限定。
93、通过内存故障处理程序对此次申请到的一段内存地址(第一存储地址)进行故障(错误)检测,检测其中是否有故障内存。例如,对上述申请到的256MB的内存地址进行故障检测。具体故障检测方法可参照上述图5A和图5B的相关说明,此处不再赘述。
94、如果内存故障处理程序检测到该段内存地址中存在故障地址,那么则将该部分故障内存的故障地址记录在第二存储器103(如NV项)中,且执行95。
95、针对该段内存地址中的故障地址继续保持占用,即不进行释放操作,并且由于该段故障地址均已经被进行故障检测,因此将这些已被检测过故障地址标记为已检测。
96、并行地,检测到的无故障地址部分,则无需记录故障地址至NV项,而是只需要将此段已经被进行故障检测的无故障地址标记为已检测,并释放该段无故障地址。
97、内存故障处理程序判断当前系统中标记为未检测的所有内存地址是否全部检测完毕,判断依据则是通过判断当前系统中被标记为未检测的地址是否均已被标记为已检测,若否,则表示当前系统中的内存还未被检测完毕,此时,则需要返回执行92,即向系统申请内存中的下一段内存地址(也即是系统中当前被标记为未检测的内存地址中的部分或全部)并重复进行上述92~96的操作,最终,直到在91中被标记为未检测的所有内存地址均被标记为已检测为止。至此,此轮系统中所有的内存已经全部检查完毕,也即是本申请中的内存故障处理程序对系统中的所有内存进行了一轮相应的故障检测,以及将系统中所有内存的所有有错误的地址均记录在NV项中,并且将所有内存地址中无错误的地址进行了释放而对所有错误的地址始终保持占用。此时,则此轮系统内存已经全部检测完毕,即判断结果为是,则需要进一步执行下一轮的操作,即重复循环执行91~96;
98、与91~97并行的,本申请中的内存故障处理程序在系统启动后,持续执行从存储器NV项中读取内存故障地址记录,并进行申请的功能。
99、判断故障地址是否已经被本申请中的内存故障处理程序所申请,若未申请,则执行910;若已申请则继续执行98的读取NV项的操作,如此循环往复。
910、如果有错误记录,内存故障处理程序就立即向系统申请这个物理地址的内存,例如,申请的故障地址大小范围最小16MB,最大不超过64MB。也即是对内存故障地址的申请占用,可以分多次进行申请也可以一次申请,具体申请的次数以及大小此处不作限定,只要是能将NV项中所有故障地址都申请占用即可。
需要说明的是,虽然在95中,未对有错误的内存地址进行释放而持续保持对有错误的内存地址的占用,从而实现了即检测即隔离的效果,但是为了避免错误的内存地址可能会被回收、或者可能未被即时检测出来而导致的错误仍然被其他程序使用的情况,可通过并行执行98~910让本申请中的内存故障处理程序更有效、更持续的占用故障内存。例如,该内存故障处理程序不是以最高优先级进行运行的,有可能会被其他优先级更高的程序踢掉,比如内存故障处理程序被强制挂起,所申请占用的包含故障地址的内存地址被强制回收,此时则可以通过实时执行步骤98~910让本申请中的内存故障处理程序持续占用故障内存,以避免其他应用申请使用,避免系统异常或故障。又例如,当系统刚启动之后,本申请中的内存故障处理程序还未来得及完成对所有的内存进行全面的故障检测,此时若通过执行98~910则可以及时的对系统启动之前所记录的故障地址进行申请占用,避免在此阶段故障内存地址被其他程序所申请使用,进一步提高了系统运行的准确性和稳定性。
本发明实施例二与上述图8A中的实施例相比较有以下几点不同(1)在系统启动后,本申请中的内存故障处理程序一直在进行巡检动作,每当巡检发现故障地址时,内存故障处理程序就将错误记录在NV项中;(2)在系统启动后,本申请中的内存故障处理程序一直在检查NV项内的故障地址是否被内存故障处理程序申请使用,如果没有申请,就向系统将它申请下来。(3)检测到有错误的地址,就不释放了;检测到没有有错误的地址,则会被释放。
本发明实施例二可有效检出及隔离内存(如DDR)错误,并通过对DDR错误行的隔离实现系统容错运行。与实施例一相比,本实施例将DDR巡检隔离的频率更高地触发,可以更及时地检出和隔离故障行。需要指出的是,这样的策略可能将影响充电时间、并在用户使用手机时可能发生巡检使一定程度上消耗一定的系统资源。
综上,本发明实施例二与实施例一相比,在系统运行中一直在进行检测,而不是仅在系统异常启动之后进行检测,从而可以实现对内存错误的提前隔离。而实施例一是在系统出现一些异常导致死机重启后再进行检查和隔离,目的性和针对性更强,效率跟高。
图9示出了本发明实施例提供的一种内存故障处理方法的总体流程,该方法应用于电子设备,该电子设备包括处理器和第一存储器,所述第一存储器为易失性存储器,其中,关于该电子设备的相关描述可以参见上述图1或图2中相关装置或设备的描述,此处不再赘述。该方法流程主要描述了电子设备侧的处理器的方法步骤,该方法可包括:
S101:若满足预设条件,则所述处理器运行内存故障处理程序。
S102:所述内存故障处理程序向所述第一存储器申请预设范围的第一存储地址。
S103:所述内存故障处理程序对所述第一存储地址进行故障检测。
S104:若所述第一存储地址包含故障地址,则所述内存故障处理程序占用第二存储地址,所述第二存储地址包括所述故障地址。
具体地,第一存储地址可以为电子设备中当前空闲的内存地址中的部分或全部,第二存储地址则为本申请中的内存故障处理程序最终实际占用的内存地址。其中,第二存储地址可以完全属于第一存储地址,也可以为与第一存储地址有交集的存储地址,本发明实施例不错具体限定,具体请参照上述图1-图8B中所述的发明实施例中的相关描述。
本发明实施例中,通过在满足预设条件下(如程序崩溃或系统宕机等)对电子设备中的内存(部分地址或全部地址)进行在线申请故障检测,当检测出内存中包含有故障地址后,则通过处理器所运行的内存故障处理程序占用对应的故障地址,使得系统中的其他程序或数据无法使用内存中有故障的地址,进而有效的避免了故障内存被系统误使用所带来的程序崩溃、系统宕机、数据损坏等风险,提升了电子设备运行的准确性和稳定性。
在一种可能的实现方式中,所述电子设备还包括第二存储器;所述方法还包括:将所述故障地址记录到所述第二存储器;释放所述第一存储地址;所述内存故障处理程序占用第二存储地址,包括:所述内存故障处理程序读取所述第二存储器中存储的所述故障地址,向所述第一存储器申请所述第二存储地址。其中,第二存储器可以为易失性存储器也可以为非易失性存储器。进一步地,当所述第二存储器为非易失性存储器;且系统断电或重启之后,则内存故障处理程序可以通过读取第二存储器中的故障地址进行申请占用,从而实现快速的故障内存隔离。可选的,当内存故障处理程序多次向第一存储器申请不同的第一存储地址后,且针对每一次申请的第一存储地址均进行故障检测之后,均将每一次检测的第一存储地址中的故障地址存储进所述第二存储其中,则所述第一存储器中所有地址均检测完毕之后,则统一将所述第二存储器中的所有故障地址进行统一申请。可选的,所述第二存储器为非易失性存储器;当内存故障处理程序重启之后,则所述内存故障处理程序读取所述第二存储器中存储的所述故障地址,重新向所述第一存储器申请所述第二存储地址。其中,关于本发明实施例,具体可以请参见图8A对应的实施例的描述,此处不再赘述。
本发明实施例中,还通过将检测到的故障地址记录到电子设备的第二存储器中,并在此次先将已经检测过的第一存储地址进行释放,此后再通过从上述第二存储器中读取记录的故障地址,从而对故障地址进行统一的申请占用,即达到了统一故障检测,之后再统一故障隔离的目的。可选的,该第二存储器可以为易失性存储器也可以为非易失性存储器,当其为易失性存储器时,则内存故障处理程序可以在系统未掉电阶段从其中读取故障地址并进行申请占用,当其为非易失性存储器时,则内存故障处理程序可以在系统掉电之后,仍然从其中读取故障地址并进行申请占用,可以理解的是也可以在多种存储中存储上述故障地址,以适用于内存故障处理程序在不同的场景需求下使用。
在一种可能的实现方式中,所述内存故障处理程序占用第二存储地址,包括:所述内存故障处理程序释放所述第一存储地址中除所述第二存储地址以外的存储地址。进一步地,所述方法还包括:将所述故障地址记录到第二存储器,所述第二存储器为非易失性存储器;当系统断电或重启之后,则内存故障处理程序可以通过读取第二存储器中的故障地址进行申请占用,从而实现进行快速的故障内存隔离。其中,关于本发明实施例,具体可以请参见图8B对应的实施例的描述,此处不再赘述。
本发明实施例中,由于所述内存故障处理程序向第一存储器申请了预设范围的第一存储地址,所以此时实际上内存故障处理程序已经占用了第一存储地址,所以当从第一存储地址中检测出故障之后,则可以通过保持占用故障地址,但释放掉部分或全部的无故障地址的方式来达到隔离故障内存的目的,也即是实现了即检测即隔离的效果。可选的,当电子设备所运行的系统断电重启后,则仍然可以通过将故障地址记录在相应存储器中的方式,在系统重启之后再次重新申请此前所记录的故障地址,从而达到无论是系统断电或不断电,都能及时的对故障内存进行隔离。
在一种可能的实现方式中,所述内存故障处理程序对所述第一存储地址进行故障检测,包括:所述内存故障处理程序向所述第一存储地址写入预设数据;所述内存故障处理程序从所述第一存储地址读出所述预设数据;若写入的预设数据与读出的预设数据不一致,则将所述第一存储地址中对应的地址判定为所述故障地址。其中,关于本发明实施例,具体可以请参见图5A和图5B对应的实施例的描述,此处不再赘述。本发明实施例中,具体的故障检测手段可以通过向相应的地址写入指定的数据,然后从中读出所写入的数据进行对比,比较指定写入的数据与实际写入的数据是否相同,以此来判断存储地址中是否有故障地址。
在一种可能的实现方式中,所述预设条件包括:所述处理器运行的系统发生系统异常、系统启动、系统重启、系统空闲、所述第一存储器处于空闲状态、所述处理器接收运行所述内存故障处理程序的指令中的一个或多个。其中,关于本发明实施例,具体可以请参见图3A-图3F对应的实施例的描述,此处不再赘述。本发明实施例中,触发执行本申请中的内存故障处理程序的条件可有有多种,包括当电子设备发生一些异常现象的条件下、或者当电子设备没有发生上述异常现象,但处于较利于进行故障检测的条件下,都可以触发执行故障处理程序中的内存故障检测,其目的是为了让电子设备高效、更稳定的运行,此处不一一列举。
在一种可能的实现方式中,所述故障地址包括多段不连续的故障地址;所述第二存储地址与所述故障地址相同;或者,所述第二存储地址包括一段连续的存储地址,且所述一段连续的存储地址包括所述多段不连续的故障地址;或者,所述第二存储地址包括多段不连续的存储地址,且其中的每段存储地址包括所述多段不连续的故障地址中的至少一段故障地址。其中,关于本发明实施例,具体可以请参见图7A-图7D对应的实施例的描述,此处不再赘述。本发明实施例中,对故障内存地址进行申请占用的方式有多种,可以精确申请占用,也可以按照一定的大小规格来申请。比如哪里有故障就申请哪里,或者以最小不允许小于64KB,最大不允许超过256MB的规格申请占用等等,以满足不同应用场景或者应用平台的需求。
在一种可能的实现方式中,所述内存故障处理程序被设置为最高优先级的应用程序。
本发明实施例中,由于内存故障处理程序有可能会被其他优先级更高的程序踢掉,比如内存故障处理程序被强制挂起,所申请占用的包含错误地址的内存地址被强制回收,此时则可以通过将内存故障处理程序设置为优先级最高级别,让内存故障处理程序持续占用故障内存,以避免其他应用申请使用,避免系统异常或故障。
在一种可能的实现方式中,所述内存故障处理程序被设置在所述电子设备所运行的引导程序、操作系统或应用程序的文件夹中,以使得该内存故障处理程序可以跟随对应的不同层级的文件在系统启动的不同时机进行运行。其中,关于本发明实施例,具体可以请参见图4A-图4F对应的实施例的描述,此处不再赘述。
需要说明的是,本发明实施例中所描述的内存故障处理方法的具体流程,可参见上述图1-图8B中所述的发明实施例中的相关描述,此处不再赘述。
本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质可存储有程序,该程序被多核处理器执行时包括上述方法实施例中记载的任意一种的部分或全部步骤。
本发明实施例还提供一种计算机程序,该计算机程序包括指令,当该计算机程序被多核处理器执行时,使得所述多核处理器可以执行任意一种多核处理器的处理方法的部分或全部步骤。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可能可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以为个人计算机、服务端或者网络设备等,具体可以是计算机设备中的处理器)执行本申请各个实施例上述方法的全部或部分步骤。其中,而前述的存储介质可包括:U盘、移动硬盘、磁碟、光盘、只读存储器(Read-OnlyMemory,缩写:ROM)或者随机存取存储器(RandomAccessMemory,缩写:RAM)等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (17)

1.一种内存故障处理方法,所述方法应用于电子设备,所述电子设备包括处理器和第一存储器,所述第一存储器为易失性存储器,其特征在于,所述方法包括:
若满足预设条件,则所述处理器运行内存故障处理程序;
所述内存故障处理程序向所述第一存储器申请预设范围的第一存储地址;所述预设范围为所述电子设备中当前空闲的内存地址中的部分或全部;
所述内存故障处理程序对所述第一存储地址进行故障检测;所述内存故障处理程序是一段一段地申请和检测所述第一存储器中的地址,当所述电子设备处于系统启动过程中,所申请和检测的所述第一存储地址的大小更大,当所述电子设备处于系统进入用户可用状态时,所申请和检测的所述第一存储地址的大小更小;
若所述第一存储地址包含故障地址,则所述内存故障处理程序占用第二存储地址,所述第二存储地址包括所述故障地址;
所述内存故障处理程序占用第二存储地址,包括:
所述内存故障处理程序释放所述第一存储地址中除所述第二存储地址以外的存储地址。
2.如权利要求1所述的方法,其特征在于,所述电子设备还包括第二存储器;
所述方法还包括:将所述故障地址记录到所述第二存储器;
释放所述第一存储地址;
所述内存故障处理程序占用第二存储地址,包括:
所述内存故障处理程序读取所述第二存储器中存储的所述故障地址,向所述第一存储器申请所述第二存储地址。
3.如权利要求1-2任意一项所述的方法,其特征在于,所述内存故障处理程序对所述第一存储地址进行故障检测,包括:
所述内存故障处理程序向所述第一存储地址写入预设数据;
所述内存故障处理程序从所述第一存储地址读出所述预设数据;
若写入的预设数据与读出的预设数据不一致,则将所述第一存储地址中对应的地址判定为所述故障地址。
4.如权利要求1-3任意一项所述的方法,其特征在于,所述预设条件包括:所述处理器运行的系统发生系统异常、系统启动、系统重启、系统空闲、所述第一存储器处于空闲状态、所述处理器接收运行所述内存故障处理程序的指令中的一个或多个。
5.如权利要求1-4任意一项所述的方法,其特征在于,所述故障地址包括多段不连续的故障地址;
所述第二存储地址与所述故障地址相同;或者,
所述第二存储地址包括一段连续的存储地址,且所述一段连续的存储地址包括所述多段不连续的故障地址;或者
所述第二存储地址包括多段不连续的存储地址,且其中的每段存储地址包括所述多段不连续的故障地址中的至少一段故障地址。
6.如权利要求1-5任意一项所述的方法,其特征在于,所述内存故障处理程序被设置为最高优先级的应用程序。
7.如权利要求1-6任意一项所述的方法,其特征在于,所述内存故障处理程序被设置为从所述电子设备所运行的引导程序、操作系统或应用程序中启动。
8.一种电子设备,其特征在于,包括:处理器和第一存储器,所述第一存储器为易失性存储器:其中,
所述处理器用于:
若满足预设条件,则运行内存故障处理程序;
通过所述内存故障处理程序向所述第一存储器申请预设范围的第一存储地址;所述预设范围为所述电子设备中当前空闲的内存地址中的部分或全部;所述内存故障处理程序是一段一段地申请和检测所述第一存储器中的地址,当所述电子设备处于系统启动过程中,所申请和检测的所述第一存储地址的大小更大,当所述电子设备处于系统进入用户可用状态时,所申请和检测的所述第一存储地址的大小更小;
通过所述内存故障处理程序对所述第一存储地址进行故障检测;
若所述第一存储地址包含故障地址,则通过所述内存故障处理程序占用第二存储地址,所述第二存储地址包括所述故障地址;
所述处理器,具体用于:
若所述第一存储地址包含故障地址,则通过所述内存故障处理程序释放所述第一存储地址中除所述第二存储地址以外的存储地址。
9.如权利要求8所述的电子设备,其特征在于,所述电子设备还包括第二存储器;
所述处理器还用于:通过所述内存故障处理程序将所述故障地址记录到所述第二存储器;释放所述第一存储地址;
所述处理器,具体用于:
通过所述内存故障处理程序读取所述第二存储器中存储的所述故障地址,向所述第一存储器申请所述第二存储地址。
10.如权利要求8-9任意一项所述的电子设备,其特征在于,所述处理器,具体用于:
通过所述内存故障处理程序向所述第一存储地址写入预设数据;
通过所述内存故障处理程序从所述第一存储地址读出所述预设数据;
若写入的预设数据与读出的预设数据不一致,则通过所述内存故障处理程序将所述第一存储地址中对应的地址判定为所述故障地址。
11.如权利要求8-10任意一项所述的电子设备,其特征在于,所述预设条件包括:所述处理器运行的系统发生系统异常、系统启动、系统重启、系统空闲、所述第一存储器处于空闲状态、所述处理器接收运行所述内存故障处理程序的指令中的一个或多个。
12.如权利要求8-11任意一项所述的电子设备,其特征在于,所述故障地址包括多段不连续的故障地址;
所述第二存储地址与所述故障地址相同;或者,
所述第二存储地址包括一段连续的存储地址,且所述一段连续的存储地址包括所述多段不连续的故障地址;或者
所述第二存储地址包括多段不连续的存储地址,且其中的每段存储地址包括所述多段不连续的故障地址中的至少一段故障地址。
13.如权利要求8-12任意一项所述的电子设备,其特征在于,所述内存故障处理程序被设置为最高优先级的应用程序。
14.如权利要求8-13任意一项所述的电子设备,其特征在于,所述内存故障处理程序被设置为从所述电子设备所运行的引导程序、操作系统或应用程序中启动。
15.一种芯片系统,其特征在于,所述芯片系统包括至少一个处理器,存储器和接口电路,所述存储器、所述接口电路和所述至少一个处理器通过线路互联,所述至少一个存储器中存储有指令;所述指令被所述处理器执行时,权利要求1-7中任意一项所述的方法得以实现。
16.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,该计算机程序被处理器执行时实现上述权利要求1-7任意一项所述的方法。
17.一种计算机程序,其特征在于,所述计算机程序包括指令,当所述计算机程序被计算机执行时,使得所述计算机执行如权利要求1-7中任意一项所述的方法。
CN202010206839.6A 2020-03-20 2020-03-20 一种内存故障处理方法及相关设备 Active CN113495799B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010206839.6A CN113495799B (zh) 2020-03-20 2020-03-20 一种内存故障处理方法及相关设备
PCT/CN2021/081309 WO2021185279A1 (zh) 2020-03-20 2021-03-17 一种内存故障处理方法及相关设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010206839.6A CN113495799B (zh) 2020-03-20 2020-03-20 一种内存故障处理方法及相关设备

Publications (2)

Publication Number Publication Date
CN113495799A CN113495799A (zh) 2021-10-12
CN113495799B true CN113495799B (zh) 2024-04-12

Family

ID=77770234

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010206839.6A Active CN113495799B (zh) 2020-03-20 2020-03-20 一种内存故障处理方法及相关设备

Country Status (2)

Country Link
CN (1) CN113495799B (zh)
WO (1) WO2021185279A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115904828A (zh) * 2021-09-30 2023-04-04 华为技术有限公司 一种内存检测方法及装置
CN114897150B (zh) * 2022-04-01 2023-04-07 中国科学技术大学苏州高等研究院 一种ai智能模组的可靠性设计方法
CN115658373B (zh) * 2022-12-14 2023-03-17 苏州浪潮智能科技有限公司 基于服务器的内存处理方法和装置、处理器及电子设备
CN116680208B (zh) * 2022-12-16 2024-05-28 荣耀终端有限公司 异常识别方法以及电子设备
CN117130541B (zh) * 2023-03-02 2024-06-04 荣耀终端有限公司 存储空间配置方法及相关设备
CN116701042B (zh) * 2023-07-27 2023-10-13 飞腾信息技术有限公司 一种内存数据保留方法、保留装置和相关设备
CN117290171B (zh) * 2023-11-27 2024-03-22 深圳市赛弥康电子科技有限公司 一种内存芯片测试设备及方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222025A (zh) * 2011-06-17 2011-10-19 华为数字技术有限公司 一种消除内存故障的方法及装置
CN103279406A (zh) * 2013-05-31 2013-09-04 华为技术有限公司 一种内存的隔离方法和装置
CN104391753A (zh) * 2014-12-16 2015-03-04 浪潮电子信息产业股份有限公司 一种服务器主板内存系统无故障运行方法
WO2016115661A1 (zh) * 2015-01-19 2016-07-28 华为技术有限公司 内存故障隔离方法和装置
CN105893166A (zh) * 2016-04-29 2016-08-24 浪潮电子信息产业股份有限公司 一种处理内存错误的方法及装置
CN106021014A (zh) * 2016-05-12 2016-10-12 浪潮电子信息产业股份有限公司 一种内存管理方法及装置
CN109753378A (zh) * 2019-01-02 2019-05-14 浪潮商用机器有限公司 一种内存故障的隔离方法、装置、系统及可读存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102222025A (zh) * 2011-06-17 2011-10-19 华为数字技术有限公司 一种消除内存故障的方法及装置
CN103279406A (zh) * 2013-05-31 2013-09-04 华为技术有限公司 一种内存的隔离方法和装置
CN104391753A (zh) * 2014-12-16 2015-03-04 浪潮电子信息产业股份有限公司 一种服务器主板内存系统无故障运行方法
WO2016115661A1 (zh) * 2015-01-19 2016-07-28 华为技术有限公司 内存故障隔离方法和装置
CN105893166A (zh) * 2016-04-29 2016-08-24 浪潮电子信息产业股份有限公司 一种处理内存错误的方法及装置
CN106021014A (zh) * 2016-05-12 2016-10-12 浪潮电子信息产业股份有限公司 一种内存管理方法及装置
CN109753378A (zh) * 2019-01-02 2019-05-14 浪潮商用机器有限公司 一种内存故障的隔离方法、装置、系统及可读存储介质

Also Published As

Publication number Publication date
CN113495799A (zh) 2021-10-12
WO2021185279A1 (zh) 2021-09-23

Similar Documents

Publication Publication Date Title
CN113495799B (zh) 一种内存故障处理方法及相关设备
TWI546818B (zh) 一種具有綠能資料持續模式的裝置驅動器
US8892831B2 (en) Memory subsystem hibernation
US9817600B2 (en) Configuration information backup in memory systems
US11036421B2 (en) Apparatus and method for retaining firmware in memory system
US20120284551A1 (en) Deep standby method and device for embedded system
US11314866B2 (en) System and method for runtime firmware verification, recovery, and repair in an information handling system
US8806285B2 (en) Dynamically allocatable memory error mitigation
US10860247B2 (en) Data writing method and storage controller
WO2015041698A1 (en) Event-triggered storage of data to non-volatile memory
TWI542991B (zh) 驅動輔助系統核對點設定技術
US20150199190A1 (en) System and method for updating firmware
TW201520895A (zh) Bios自動恢復系統及方法
KR20140079285A (ko) 전력 손실 중단 시나리오에서 이벤트 추적 정보의 구조
CN102073600B (zh) 数据备份方法、闪存控制器及闪存储存系统
US9063888B2 (en) Program code loading and accessing method, memory controller, and memory storage apparatus
US20130166893A1 (en) Auxiliary card initialization routine
EP3698251B1 (en) Error recovery in non-volatile storage partitions
TWI668569B (zh) 主機記憶體緩衝區配置方法、記憶體儲存裝置與記憶體控制電路單元
CN110058973B (zh) 数据储存装置的测试系统与数据储存装置的测试方法
US11614997B2 (en) Memory storage apparatus with protection of command data in a host buffer in response to a system abnormality
CN113094107B (zh) 数据保护方法、装置、设备及计算机存储介质
CN108984347A (zh) 一种基于Linux系统的嵌入式设备重启状态记录方法
US11593242B2 (en) Method of operating storage device for improving reliability, storage device performing the same and method of operating storage using the same
TWI738235B (zh) 用來進行恢復管理的方法以及記憶裝置及其控制器以及電子裝置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant