一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

地址管理方法和装置与流程

2021-10-20 00:14:00 来源:中国专利 TAG:电子设备 装置 地址 方法 管理


1.本技术属于电子设备领域,具体涉及一种地址管理方法和装置。


背景技术:

2.ram(random access memory,随机存取存储器)是很多电子设备必不可少的核心器件。在手机等移动设备中,ram的硬件问题一般会导致系统错误,轻则程序崩溃,严重的将导致整个系统crash(宕机)和用户数据丢失。
3.对于ram的硬件问题,传统的解决方案包括以下两种:
4.(1)ecc(error correcting code,错误检查和纠正)ram:通过ecc算法纠正ram中单bit(比特)跳变错误,但是,对于多bit跳变问题,该方法只能报错没有办法纠正,纠正能力有限,且需要单独的硬件检测单元,价格昂贵,一般用在服务器和大内存的重要设备中。
5.(2)hwpoison(一种检测程序)和memory(内存)隔离:如图1所示,hwpoison可以标记ram中存在故障的物理内存(这里为物理页page3),memory failure(内存故障)程序在检测到存在故障的page后,可以首先kill(杀死)使用该page3的进程a和进程b,以及删除page3的物理内存与虚拟内存之间的映射,最后,将page3加入到隔离空间。虽然该方法可以检测ram的多bit跳变问题,但是,该方法是在应用访问内存之前去检测是否存在故障的page,那么应用访问内存需要等待,因此,这种运行时检测的实时检测方法比较耗费性能,对于手机等嵌入式系统容易造成系统卡顿,该方法并不适用。
6.综上,现有的解决方案因检测能力有限、价格昂贵、耗性能等问题在手机等嵌入式的移动设备上不适用,那么当移动设备的ram存在多bit跳变或者某一块内存存在硬件问题时,将会导致移动设备循环崩溃,用户只能做换板或者更换设备的处理。


技术实现要素:

7.本技术实施例的目的是提供一种地址管理方法和装置,能够解决相关技术中当移动设备的ram存在多bit跳变或者某一块内存存在硬件问题时,所导致的移动设备循环崩溃,用户只能做换板或者更换设备的处理的问题。
8.第一方面,本技术实施例提供了一种地址管理方法,该方法包括:
9.在存在报错的第一虚拟地址的情况下,若所述第一虚拟地址属于虚拟地址的空洞空间,则确定所述第一虚拟地址发生报错前的第二虚拟地址,其中,所述第二虚拟地址为用户空间或内核空间中的虚拟地址;
10.将所述第二虚拟地址对应的目标物理内存区域进行隔离。
11.第二方面,本技术实施例提供了一种地址管理装置,该装置包括:
12.第一确定模块,用于在存在报错的第一虚拟地址的情况下,若所述第一虚拟地址属于虚拟地址的空洞空间,则确定所述第一虚拟地址发生报错前的第二虚拟地址,其中,所述第二虚拟地址为用户空间或内核空间中的虚拟地址;
13.隔离模块,用于将所述第二虚拟地址对应的目标物理内存区域进行隔离。
14.第三方面,本技术实施例提供了一种电子设备,该电子设备包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。
15.第四方面,本技术实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。
16.第五方面,本技术实施例提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现如第一方面所述的方法。
17.在本技术实施例中,在对象访问虚拟内存的第一虚拟地址而发生报错的情况下,则可以判断该报错的第一虚拟地址是否属于系统的虚拟内存的空洞空间,如果该第一虚拟地址属于空洞空间,则说明大概率是ram发生了硬件故障或者多bit的跳变,因为正常使用的有效虚拟地址并不是属于空洞空间中的虚拟地址。因此,可以识别该第一虚拟地址发生报错前的可能的原虚拟地址,即第二虚拟地址,未发生虚拟地址报错之前,用于用户的应用程序或内核代码访问内存的原虚拟地址必然是属于用户空间或内核空间的,因此,该第二虚拟地址是由第一虚拟地址而转换生成的属于用户空间或内核空间的虚拟地址。然后,将所述第二虚拟地址对应的目标物理内存区域进行隔离,从而可以避免ram中存在故障的目标物理内存区域因再次被访问而再次报错导致循环崩溃死机的情况,即便存在一块或多bit的物理内存故障,但是首次发现其故障时已经将该物理内存块隔离而无法再被访问使用,因此,不会影响物理内存的后续使用,用户也无需更换主板或更换设备;并且,在上述技术方案中,无需额外的硬件支持,可以降低成本;此外,该方法的触发是在检测到报错的虚拟地址的情况下执行的,而无需实时检测是否存在故障的物理内存,因此,对系统性能的损耗较低,不容易造成系统卡顿的问题,系统流畅性好。
附图说明
18.图1是传统技术中的一种地址管理方法的流程图;
19.图2是本技术一个实施例的地址管理方法的流程图;
20.图3是本技术又一个实施例的地址管理方法的流程图;
21.图4是本技术另一个实施例的地址管理方法的流程图;
22.图5是本技术一个实施例的地址管理装置的框图;
23.图6是本技术一个实施例的电子设备的硬件结构示意图;
24.图7是本技术另一个实施例的电子设备的硬件结构示意图。
具体实施方式
25.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本技术保护的范围。
26.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、

第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
27.在手机等移动设备中,ram和rom(read

only memory,只读存储器)的硬件问题一般会导致系统错误,轻则程序崩溃,严重的将导致整个系统crash(宕机)和用户数据丢失。因此,ram/rom等硬件问题亟待解决。在不同的系统和架构中,ram/rom有一定的检错校正和坏快管理等功能,能有效的减少数据损坏和丢失等问题。
28.(1)检错校正:对于硬件问题导致的数据损坏,可以通过一些算法可以纠错。
29.(2)坏快管理:硬件中一块单元电路因为短路等原因损坏,可以将这些坏快标记为不可用,然后统一管理。
30.对于rom,检错校正和坏快管理等功能都已经得到广泛应用,但对于ram的硬件问题,目前现有的解决方案比较少,其中,适用于ram的ecc方法,无法解决多bit跳变问题;而hwposion和memory隔离方法则较耗费性能,容易造成卡顿。
31.那么如果ram中一小块内存硬件出错或存在多bit的跳变将导致整机崩溃,考虑到移动设备的用户可以忍受偶尔一次的死机重启,但是发明人在实现本技术的过程中发现,发生错误的物理内存再次被使用,则再次会造成死机,从而导致循环高概率的死机,这将是用户所无法忍受的。为此,本技术提供了一种地址管理方法,该方法可以在ram硬件第一次出现问题报错后,通过软件方式识别出有问题内存的物理地址,并将报错的这块物理内存进行隔离,使得隔离后的该块物理内存系统不可访问,避免移动设备的高概率死机重启。该方法由软件实现,不需要硬件支持,也不需要实时检测,因此,对性能几乎没有损耗,不会造成系统卡顿的问题。
32.下面结合附图,通过具体的实施例及其应用场景对本技术实施例提供的地址管理方法进行详细地说明。
33.参照图1,示出了本技术一个实施例的地址管理方法的流程图,所述方法具体可以包括步骤101和步骤102:
34.步骤101,在存在报错的第一虚拟地址的情况下,若所述第一虚拟地址属于虚拟地址的空洞空间,则确定所述第一虚拟地址发生报错前的第二虚拟地址,其中,所述第二虚拟地址为用户空间或内核空间中的虚拟地址;
35.其中,本技术实施例的方法所面向的系统是64位及64位以上的操作系统,因为,在低于64位的操作系统的虚拟内存中不存在空洞空间,而在操作系统高于64位的情况下,系统的虚拟内存的空间不仅包括用户空间(user space)、内核空间(kernel space),还有部分空间没有被占用,属于冗余空间,这里称作空洞空间。其中,用户空间供用户的应用程序执行,内核空间供内核代码运行。
36.其中,空洞空间中的虚拟地址可以称作无效虚拟地址,而用户空间和内核空间中的虚拟地址可以称作有效虚拟地址。
37.那么,在对象访问虚拟内存的第一虚拟地址而发生报错的情况下,则可以判断该报错的第一虚拟地址是否属于系统的虚拟内存的空洞空间,如果该第一虚拟地址属于空洞空间,则说明大概率是ram发生了硬件故障或者多bit的跳变,因为正常使用的有效虚拟地址并不是属于空洞空间中的虚拟地址。因此,可以识别该第一虚拟地址发生报错前的可能
的原虚拟地址,即第二虚拟地址,未发生虚拟地址报错之前,用于用户的应用程序或内核代码访问内存的原虚拟地址必然是属于用户空间或内核空间的,因此,该第二虚拟地址是由第一虚拟地址而转换生成的属于用户空间或内核空间的虚拟地址。
38.可选地,在步骤101之前,根据本技术实施例的方法还可以包括:根据虚拟地址空间的系统配置信息,确定虚拟地址的用户空间的地址范围、内核空间的地址范围以及空洞空间的地址范围。
39.其中,移动设备在开机过程中,本技术实施例的方法可以检查系统的虚拟地址空间配置的是多少位,即虚拟内存的地址空间大小(或者说ram的硬件的寻址能力)。例如arm64(advanced risc machines,阿姆芯片,一种ram)的地址空间大小为64位。
40.需要说明的是,本技术实施例的方法所面向的系统至少为64位,因为低于64位的内存不存在冗余的地址空间,即空洞空间,本技术实施例的方法需要利用空洞空间来对报错的虚拟地址进行纠错;
41.此外,在嵌入式系统中ram的软件的寻址能力,可以通过读取config_arm64_va_bits(缩写vbit)得到,例如vbit=39,即39位。借助于上述两个配置信息可以确定虚拟内存的有效虚拟地址区间,这里用户空间和内核空间的虚拟地址就是有效虚拟地址区间,虚拟地址布局如下所示:
42.内核空间的虚拟地址范围kvaddr为:(2^64

2^39)~(2^64),对应于16进制,kvaddr为0xffffff8000000000~0xffffffffffffffff;
43.其中,前缀0x用于表示16进制。
44.其中,kvaddr的16进制地址范围的地址规范为:至少高6位均为f。
45.用户空间的虚拟地址范围uvaddr为:0~2^39,对应于16进制,uvaddr为0~0x8000000000;
46.其中,uvaddr的16进制最大地址8000000000一共10位,与kvaddr的16进制的16位地址相统一,则高位—10位“8”往上的前6位是0,因此,uvaddr的16进制的16位的地址范围的地址规范为至少前6位均为0。
47.当然,这里是64位操作系统,以及vbit=39,如果是更高位例如128位的操作系统,vbit的取值不是39,则kvaddr的16进制地址范围和uvaddr的16进制地址范围的地址规范可以不同于上述举例的至少前6位为f或0。
48.具体的,当虚拟地址的空间为m位,以及参数vbit,则16进制表示的有效虚拟地址的至少前x位为f或0,其中,函数关系为x=(m

vbit)/4,其中,x的取值为(m

vbit)/4的取整数的结果。其中,当m为128,vbit=39,则16进制表示的有效虚拟地址的至少前22位为0或f。
49.空洞空间的虚拟地址范围nvaddr为:2^39~(2^64

2^39),对应于16进制,nvaddr为0x8000000000~0xffffff8000000000。空洞空间中的虚拟地址不做使用,应用访问用户空间的虚拟内存,内核代码访问内核空间的虚拟内存,即所使用的虚拟地址不应该出现属于空洞空间的虚拟地址,如果出现,则说明该虚拟地址是从用户空间的虚拟地址,或内核空间的虚拟地址发生错误(例如跳变或硬件故障或一段内存损坏)而变成了属于空洞空间的虚拟地址。
50.此外,在确定上述三类空间的地址范围时,可以首先确定内核空间的地址范围和用户空间的地址范围,然后,64位的存储空间中剩余的空间即可以确定为空洞空间的地址
范围。
51.在本技术实施例中,可以根据虚拟地址空间的系统配置信息,来确定虚拟地址的用户空间的地址范围、内核空间的地址范围以及空洞空间的地址范围,从而便于基于各类空间的地址范围的格式和规范,来对报错的虚拟地址进行反推纠正,确定报错前可能正确的虚拟地址。
52.可选地,在确定所述第一虚拟地址发生报错前的第二虚拟地址时,可以根据所述用户空间的地址范围和所述内核空间的地址范围,确定所述第一虚拟地址发生报错前的第二虚拟地址。
53.其中,不论是虚拟内存的用户空间还是虚拟内存的内核空间,它们都有各自的虚拟地址的地址范围,并且,用户空间的地址范围,和内核空间的地址范围都是存在一定的规范的,例如64位操作系统,在config_arm64_va_bits的参数值为39bit的情况下,参照上述实施例的举例可以确定,kvaddr的16进制地址范围的地址规范为:至少前6位均为f;uvaddr的16进制的16位的地址范围的地址规范为至少前6位均为0。
54.那么根据这两种地址空间的地址范围的规范,可以确定报错的第一虚拟地址发生报错前的原虚拟地址。
55.例如,64位系统,config_arm64_va_bits=39,page size为4096byte;
56.其中,page size:页大小,一般设为4kb,是内存最小的管理单元;
57.page shift:page size=1<<page shift,这里page shift为12;
58.kvaddr为0xffffff8000000000~0xffffffffffffffff;
59.uvaddr为0~0x8000000000;
60.nvaddr为0x8000000000~0xffffff8000000000;
61.如图3所示,物理内存可以分为10页,物理内存与虚拟内存之间可以通过page进行映射,这里的虚拟内存示出了用户空间的虚拟内存和内核空间的虚拟内存。
62.示例1:上层应用访问虚拟地址0x0021000074121000报错,0x0021000074121000,经判断,该报错的虚拟地址属于上述三类空间中的nvaddr的地址范围:0x8000000000~0xffffff8000000000,因此,而该报错的虚拟地址的高6位除了“2”、“1”之外均为“0”,则说明该报错的虚拟地址可能是从用户空间的某个虚拟地址发生错误而形成的,因此,基于用户空间的虚拟地址范围的规范:高6位为0,则可以反推0x0021000074121000在发生报错前可能正确的虚拟地址(即原虚拟地址,上述第二虚拟地址)为0x0000000074121000。
63.第二虚拟地址之所以是可能正确的虚拟地址,因为,第一虚拟地址报错前的原虚拟地址也可能是16位的16进制的虚拟地址的前6位之外的bit发生跳变或错误,而得到上述0x0021000074121000。
64.示例2:内核层访问虚拟地址0xff21ff0074121000报错,0xff21ff0074121000属于空洞nvaddr:0x8000000000~0xffffff8000000000,则0xff21ff0074121000报错前的可能的原虚拟地址(即第二虚拟地址)是0xffffff0074121000。
65.在本技术实施例中,当访问第一虚拟地址报错时,如果该第一虚拟地址属于虚拟地址的空洞空间,则说明该第一虚拟地址报错前的原虚拟地址,即第二虚拟地址属于用户空间或内核空间,而为了确定第二虚拟地址,则可以根据用户空间和内核空间各自的虚拟地址的地址范围,以及第一虚拟地址的具体内容,来确定该第二虚拟地址可能属于用户空
间和内核空间的哪个空间,那么在确定了第二虚拟地址可能所属的地址空间之后,既可以确定该第一虚拟地址发生报错前的第二虚拟地址,本技术能够利用用户空间和内核空间各自的虚拟地址的地址范围,来反推确定发生报错的第一虚拟地址在报错前可能正确的第二虚拟地址,从而利于找到内存中出现故障的物理内存块进行隔离,避免该故障的内存块被重复访问,而发生机器循环高概率死机的问题。
66.步骤102,将所述第二虚拟地址对应的目标物理内存区域进行隔离。
67.其中,由于物理内存和虚拟内存之间存在映射关系,因此,可以利用虚拟内存的第二虚拟地址来基于该映射关系找到对应的目标物理地址,从而将该目标物理地址在物理内存中所指向的目标物理内存区域进行隔离。
68.示例地,如图3所示,可以确定第二虚拟地址(0x0000000074121000,和/或,0xffffff0074121000)对应的故障的物理内存,然后将故障的物理内存隔离。
69.可选地,在执行步骤102时,可以在物理内存的候选物理地址中存在与所述第二虚拟地址的情况下,将所述目标物理地址所指向的目标物理内存区域进行隔离,其中,所述目标物理地址为物理内存中与所述第二虚拟地址有映射关系的内存区域的物理地址。
70.其中,将物理内存的每个物理地址这里命名为每个候选物理地址,由于物理内存的物理地址与虚拟内存的虚拟地址之间是存在映射关系的,因此,如果反推得到的有效虚拟地址,即第二虚拟地址如果存在与之具有映射关系的目标物理地址,则说明所确定的第二虚拟地址是正确的第一虚拟地址发生报错前的原虚拟地址,因此,可以确定物理内存(即ram)中该目标物理地址所指向的目标物理内存区域存在硬件问题或存在多bit跳变,为了避免该目标物理内存区域再次被调用使用,导致移动设备循环关机,可以将该目标物理内存区域进行隔离。
71.在本技术实施例中,为了进一步确保对第一虚拟地址所确定有效虚拟地址,这里为第二虚拟地址,是第一虚拟地址发生报错前的准确的原虚拟地址,可以判断该第二虚拟地址是否存在与之存在映射关系的目标物理地址,来提升所确定的第二虚拟地址的准确性。其中,如果存在,则说明该第二虚拟地址是报错前准确的有效虚拟地址,为了避免该第二虚拟地址所指向的物理内存块再次被使用而发生报错循环死机,可以将物理内存中该目标物理地址所指向的目标物理内存块进行隔离,从而降低因ram硬件问题或多bit跳变所导致的设备循环死机的概率。
72.可选地,在将所述目标物理地址所指向的目标物理内存区域进行隔离时,可以通过步骤201、步骤202、步骤203来实现:
73.步骤201,将所述目标物理地址对应的目标物理页框保存至第一存储区域;
74.其中,物理页框的页框号(pfn)是物理页框的唯一标识;
75.物理地址paddr与pfn之间的关系为:pfn=paddr>>page shift;
76.page size=1<<page shift;
77.因此,ram的每个物理地址可以对应唯一的一个物理页框,也就是说,可以通过pfn来确定物理地址的具体信息,因此,本步骤可以借助于物理地址与物理页框之间的逻辑关系,来得到目标物理地址对应的目标物理页框,具体可以将目标物理页框的页框号保存至第一存储区域。
78.其中,该第一存储区域为rom中的存储区域,例如分区parta,这里将报错的物理内
存块的pfn保存到rom中,原因在于设备断电,rom中的数据不会丢失,从而确保通过读取rom中的第一存储区域来随时获取之前报错的物理内存块的pfn。
79.在一个示例中,第一存储区域是在rom中配置的一块固定大小的分区,例如可以保存max_addr个物理地址的pfn。
80.步骤202,在物理内存分配器初始化的过程中,确定所述第一存储区域中的每个所述目标物理页框所指向的每个所述目标物理地址,以及所述每个目标物理地址的目标页信息;
81.在一个示例中,在步骤201之后,本技术实施例的方法可以报错重启移动设备,那么本技术实施例的方法可以在移动设备重启开机后,在物理内存分配器初始化之前,从parta中读出报错的物理地址的pfn到ram中,例如ram的arry中,其中,arry可以是一个数组或链表;
82.然后,物理内存分配器初始化;
83.在物理内存分配器初始化的过程中,物理内存分配器可以遍历物理内存(即ram)的物理页框,并判断每个物理页框是否存在于arry中,如果是,则说明当前遍历的物理页框所指向的物理内存块是故障的,可以从物理内存分配器中获取该故障的物理内存块对应的当前遍历的物理页框,并获取该物理页框所指向的物理地址的page信息。
84.这里在检测到故障的物理内存块之后,将该故障的物理内存块的pfn保存到rom中,然后,在设备重启后,将rom中存储的pfn读出到ram中的arry中。本实施例在每次开机之后,都将之前隔离的内存从rom读入到ram中,原因在于ram关机掉电不能保存数据,而rom掉电也能保存数据,这样,通过上述方法检测到故障的物理内存块之后,及时地将该故障的物理内存块的pfn保存到rom中,即使移动设备断电,也能够保存该pfn,避免故障物理内存块再次被调用使用。
85.步骤203,将所述目标页信息从buddy系统中删除。
86.其中,当系统需要分配内存时,就可以从buddy系统中获取,那么为了避免将故障的内存块分配出去,则可以将检测到的故障的物理内存块的目标页信息从buddy系统中删除,从而避免故障内存块被分配出去,造成进程故障等问题。
87.此外,由于物理内存的pfn是固定的,但是,物理内存的page信息是动态分配的,即每次开机同一个pfn可能对应不同的page,因此,需要开机后,将pfn对应的page从buddy系统中删除;可选地,还可以将该故障的物理内存块的pfn对应的page写入隔离区域isolated_area。
88.其中,每次开机将该pfn所代表的物理地址的内存块从buddy系统中提取出来存储至隔离区域,可以防止该故障的内存块被再次访问。
89.结合上述示例1、示例2进行说明。
90.在得到报错前可能正确的虚拟地址后,可以利用虚拟地址与物理地址之间的映射,以及物理地址与pfn之间的逻辑关系,来所得到的报错前可能正确的虚拟地址的pfn。
91.例如,0x0000000074121000有映射到物理内存0x54641000,则将0x54641000对应的pfn(0x54641=0x54641000>>12)写入到rom的分区parta中并报错重启;那么在下次移动设备重启的时候,就可以读取rom中的ram硬件有问题的内存地址,即将分区parta中的地址信息pfn读取出来,并将这块有问题的内存地址从buddy系统中去掉,这里将pfn(0x54641)
对应的page从buddy系统提取出来加入到隔离区域,不再被系统使用。
92.再如,0xffffff0074121000有映射到物理内存0x78191450,则将0x78191450对应的pfn(0x78191=0x78191450>>12)写入到rom的分区parta中并报错重启;那么在下次移动设备重启的时候,就可以读取rom中的ram硬件有问题的内存地址,即将分区parta中的地址信息pfn读取出来,并将这块有问题的内存地址从buddy系统中去掉,这里将pfn(0x78191)对应的page从buddy系统提取出来加入到隔离区域,不再被系统使用。
93.可选地,在将故障的物理内存的page加入到隔离区域之后,检测系统还可以对加入隔离区域的page对应的内存块做测试,以确认ram是否存在有硬件问题。
94.需要说明的是,物理内存中存在许多的空洞,无效区域内核需要管理有效区域,只为或尽量只为有效区域中的页框建立page结构,即页信息,避免物理内存的浪费,其中,page信息可以理解为物理内存的指针。
95.在本技术实施例中,在将所述目标物理地址所指向的目标物理内存区域进行隔离时,可以通过将目标物理地址对应的目标物理页框保存到第一存储区域,由于每个物理地址的物理页框是唯一的,但是每次开机后物理地址的页信息是动态分配的,即每次开机同一个物理地址的页信息可能不同,因此,开机后,在物理内存分配器初始化的过程中,需要将第一存储区域中的目标物理页框所指向的目标物理地址所对应的目标页信息从buddy系统中删除,避免之前报错的物理内存块在内存分配器初始化阶段被初始化且保留在buddy系统中,而导致该故障的物理内存块被再次访问的问题。
96.在本技术实施例中,在对象访问虚拟内存的第一虚拟地址而发生报错的情况下,则可以判断该报错的第一虚拟地址是否属于系统的虚拟内存的空洞空间,如果该第一虚拟地址属于空洞空间,则说明大概率是ram发生了硬件故障或者多bit的跳变,因为正常使用的有效虚拟地址并不是属于空洞空间中的虚拟地址。因此,可以识别该第一虚拟地址发生报错前的可能的原虚拟地址,即第二虚拟地址,未发生虚拟地址报错之前,用于用户的应用程序或内核代码访问内存的原虚拟地址必然是属于用户空间或内核空间的,因此,该第二虚拟地址是由第一虚拟地址而转换生成的属于用户空间或内核空间的虚拟地址。然后,将所述第二虚拟地址对应的目标物理内存区域进行隔离,从而可以避免ram中存在故障的目标物理内存区域因再次被访问而再次报错导致循环崩溃死机的情况,即便存在一块或多bit的物理内存故障,但是首次发现其故障时已经将该物理内存块隔离而无法再被访问使用,因此,不会影响物理内存的后续使用,用户也无需更换主板或更换设备;并且,在上述技术方案中,无需额外的硬件支持,可以降低成本;此外,该方法的触发是在检测到报错的虚拟地址的情况下执行的,而无需实时检测是否存在故障的物理内存,因此,对系统性能的损耗较低,不容易造成系统卡顿的问题,系统流畅性好。
97.在一个实施例中,本技术还提供了一种地址管理方法,应用于手机,该方法的流程图如图4所示,该方法可以包括如下步骤:
98.可选地,步骤300(未示出),在手机的rom中配置一块固定大小的分区parta,假设能保存max_addr个物理地址,其中,具体保存的是ram中的发生故障的物理地址,该物理地址可以以pfn来表示并存储;
99.其中,该手机的操作系统可以是基于linux操作系统的安卓操作系统。
100.其中,rom可以是emmc(embedded multi media card,嵌入式多媒体存储卡)或,
ufs(universal flash storage,通用闪存存储器)。而ram可以是ddr(double data rate sdram,双倍速率同步动态随机存储器)。
101.可选地,步骤300之后执行步骤301(未示出),开机;
102.步骤302,从分区parta中读出保存的物理页框到arry中;
103.其中,在手机开机过程中,在物理内存分配器初始化之前,本技术实施例的方法可以将分区parta保存的内存的物理地址的pfn读出来到ram的arry中,其中,arry可以是数组或链表;
104.可选地,步骤302之后,执行步骤303(未示出),物理内存分配器开始初始化;
105.在步骤303之后,步骤304,循环获取ram的物理内存的所有pfn,并判断每个获取到的物理页框是否存在arry中;
106.步骤304之后,若是,则转至步骤305;
107.步骤305,从物理内存分配器中隔离该pfn所代表的内存块;
108.步骤306,将所述内存块的page信息加入到isolated_area;
109.在内存初始化阶段,本技术实施例的方法在开机后,就可以拿到ram的物理内存的所有pfn,从而循环遍历哪些pfn在arry中,若pfn在arry中,则将该pfn对应的page信息从buddy系统中提取到isolated_area存储;若该pfn不在arry中,则正常运行,直到发生虚拟地址的报错。
110.由于在arry数组或指针中保存故障的物理地址的pfn,因此,每次开机将该pfn所代表的物理地址的内存块从buddy系统中提取出来存储至隔离区域,防止该故障的内存块被再次访问。
111.在物理内存分配器初始化过程中,本技术循环获取ram的物理页框进行数组判断,原因在于物理内存分配器在初始化过程中需要对ram的每个物理页框的内存进行初始化,本技术则在遍历过程中进行判断。
112.可选地,步骤306之后,步骤307,利用检查程序对加入隔离区域的该pfn所代表的的物理内存做测试,确认ddr存在哪种内存问题。
113.步骤304之后,若否,则转至步骤308;
114.步骤308,判断物理内存分配器是否初始化了所有的内存;
115.其中,当判断某个物理页框不属于arry,则判断物理内存分配器是否初始化了ram的所有物理内存。
116.上述各个步骤在物理内存初始化的过程中执行,可以将通过本技术实施例的方法之前发现的存在故障的物理内存隔离起来;后续步骤,即步骤309及该步骤309之后的步骤,则是判断后续报错的物理地址是否需要隔离。
117.步骤308之后,若否,则转至执行上述步骤304,若是,则执行步骤309,开始初始化隔离功能,该隔离功能是本技术的检测标准;
118.步骤309,读取虚拟地址空间的系统配置信息;
119.其中,该系统配置信息可以包括系统位数,例如操作系统是64位系统;
120.其中,本步骤可以检查手机是否为64位或64位以上的系统,若是32位系统,则物理内存的虚拟地址已被用尽,不存在冗余的虚拟地址,无法采用本技术因此结束,本技术需要借用于冗余的虚拟地址,若是64位或64位以上的系统读取config_arm64_va_bits的参数
值,这里该参数的取值为39bit;
121.在步骤309中,在手机开机过程中可以检查系统的虚拟地址空间配置的是多少位,以及嵌入式系统中的配置参数config_arm64_va_bits,从而确定虚拟地址的空间布局;
122.步骤309之后,可以通过步骤310、步骤311、步骤312分别确定kvaddr的16进制的地址范围、uvaddr的16进制的地址范围、nvaddr的16进制的地址范围。
123.步骤310、步骤311、步骤312之后,则本发明实施例的隔离功能初始化完成,系统正常运行,然后可以转至执行步骤313;
124.步骤313,访问虚拟内存evaddr报错;
125.其中,手机开机后运行过程中,可以判断是否存在访问的虚拟内存evaddr发生报错的情况看,若发生访问虚拟内存报错的情况,则转至执行步骤314和步骤315;
126.步骤314,判断evaddr是否属于uvaddr;
127.步骤315,判断evaddr是否属于kvaddr;
128.此时检测报错的虚拟内存地址evaddr是否属于kvaddr或者uvaddr区间,步骤314之后,可选地,若是,则将用户空间进程crash;步骤315之后,若是,则将内核空间系统crash。
129.因为,当发生错误的虚拟内存在kvaddr或uvaddr的区间内,即正常区间内,则无法反推报错前的正确的虚拟地址,因为报错的虚拟地址本身在正确的虚拟地址的区间范围之内;
130.步骤314之后,若否,则转至步骤319;步骤315之后,若否,则同样转至步骤316;
131.步骤316,evaddr

>vaddr

>paddr;
132.其中,如果evaddr不属于kvaddr或者uvaddr区间,属于nvaddr,则可以将将错误的虚拟地址evaddr转换为有效虚拟地址vaddr,然后,检测vaddr是否有映射到物理地址paddr,若没有映射物理地址padd,则退出,因为上层访问的虚拟地址,通过映射可以转换为物理地址,没有映射,则说明虚拟地址不仅仅前6位发生了跳变,后面8位也有突变,因此,找不到映射的物理地址;若vaddr有映射到物理地址paddr,则可以获取该paddr;
133.步骤317,判断paddr对应的pfn是否已经加入到分区parta中;
134.可选地,步骤317之后,若是,则说明该pfn是故障的物理地址的pfn,转回执行将用户空间进程crash或将内核空间系统crash的步骤,其中,如果报错的虚拟地址是用户进程访问的,则将用户空间进程crash,如果报错的虚拟地址是内核代码访问的,则将内核空间系统crash。
135.步骤317之后,若否,则执行步骤318,判断是否num_addr<max_addr;
136.其中,num_addr是分区parta中已经存储的物理页框的个数,如果num_addr<max_addr,则说明分区parta中还有可用空间;
137.步骤318之后,若是,则执行步骤319,将paddr对应的物理页框的页框号添加到分区parta,以及num_addr 1。
138.可选地,步骤318之后,若否,则将用户空间进程crash或将内核空间系统crash;
139.其中,若num_addr>=max_addr,,则说明分区parta中没有可用空间,则类似的,也是转回执行将用户空间进程crash或将内核空间系统crash的步骤,其中,如果报错的虚拟地址是用户进程访问的,则将用户空间进程crash,如果报错的虚拟地址是内核代码访问
的,则将内核空间系统crash;
140.步骤319之后,可以报错重启手机,从而转至执行步骤302。
141.需要说明的是,本实施例中的各参数或变量(例如kvaddr、max_addr等)所表示的意义与上述图1至图3实施例中所描述的相同命名的参数或变量的意义相同,因此,不再一一赘述。
142.对于系统中访问虚拟内存报错的触发原因可以包括oob/uaf/等软件问题;并发导致的内存访问错误;cpu/dram硬件问题导致;本技术上述实施例的方法可以解决上述各种触发原因所导致的虚拟内存报错所导致的循环报错和循环死机的问题。此外,armv9架构引入了mte功能检测用户层和kernel层oob/uaf等软件问题导致的内存错误,那么本技术实施例的方法可以结合kcsan检测内核层并发问题。那么结合mte/kcsan等检测技术,虚拟内存访问错误基本可以认为是硬件问题导致,这样可以增加该功能识别有问题的物理内存的概率。对于ram的本身质量缺陷,则可以导致固定的物理地址报错,因此,将该物理地址的pfn保存起来,可以在检测其是否有故障时,确保可靠性,不会存在报错时该物理地址存在故障,检测是该物理地址故障消失的情况。
143.借助于上述方法的技术方案,本技术实施例的方法可以ram硬件第一次出问题的时候就把报错的这块物理内存隔离,避免用户的手机循环高概率死机重启。
144.需要说明的是,本技术实施例提供的地址管理方法,执行主体可以为地址管理装置,或者该地址管理装置中的用于执行地址管理方法的控制模块。本技术实施例中以地址管理装置执行地址管理方法为例,说明本技术实施例提供的地址管理装置。
145.参照图5,示出了本技术一个实施例的地址管理装置的框图。该地址管理装置包括:
146.第一确定模块401,用于在存在报错的第一虚拟地址的情况下,若所述第一虚拟地址属于虚拟地址的空洞空间,则确定所述第一虚拟地址发生报错前的第二虚拟地址,其中,所述第二虚拟地址为用户空间或内核空间中的虚拟地址;
147.隔离模块402,用于将所述第二虚拟地址对应的目标物理内存区域进行隔离。
148.可选地,所述装置还包括:
149.第二确定模块,用于根据虚拟地址空间的系统配置信息,确定虚拟地址的用户空间的地址范围、内核空间的地址范围以及空洞空间的地址范围。
150.可选地,所述第一确定模块401包括:
151.第一确定子模块,用于根据所述用户空间的地址范围和所述内核空间的地址范围,确定所述第一虚拟地址发生报错前的第二虚拟地址。
152.可选地,所述隔离模块402,还用于在物理内存的候选物理地址中存在目标物理地址的情况下,将所述目标物理地址所指向的目标物理内存区域进行隔离,其中,所述目标物理地址为物理内存中与所述第二虚拟地址有映射关系的内存区域的物理地址。
153.可选地,所述隔离模块402包括:
154.保存子模块,用于将所述目标物理地址对应的目标物理页框保存至第一存储区域;
155.第二确定子模块,用于在物理内存分配器初始化的过程中,确定所述第一存储区域中的每个所述目标物理页框所指向的每个所述目标物理地址,以及所述每个目标物理地
址的目标页信息;
156.删除子模块,用于将所述目标页信息从buddy系统中删除。
157.在本技术实施例中,在对象访问虚拟内存的第一虚拟地址而发生报错的情况下,则可以判断该报错的第一虚拟地址是否属于系统的虚拟内存的空洞空间,如果该第一虚拟地址属于空洞空间,则说明大概率是ram发生了硬件故障或者多bit的跳变,因为正常使用的有效虚拟地址并不是属于空洞空间中的虚拟地址。因此,可以识别该第一虚拟地址发生报错前的可能的原虚拟地址,即第二虚拟地址,未发生虚拟地址报错之前,用于用户的应用程序或内核代码访问内存的原虚拟地址必然是属于用户空间或内核空间的,因此,该第二虚拟地址是由第一虚拟地址而转换生成的属于用户空间或内核空间的虚拟地址。然后,将所述第二虚拟地址对应的目标物理内存区域进行隔离,从而可以避免ram中存在故障的目标物理内存区域因再次被访问而再次报错导致循环崩溃死机的情况,即便存在一块或多bit的物理内存故障,但是首次发现其故障时已经将该物理内存块隔离而无法再被访问使用,因此,不会影响物理内存的后续使用,用户也无需更换主板或更换设备;并且,在上述技术方案中,无需额外的硬件支持,可以降低成本;此外,该方法的触发是在检测到报错的虚拟地址的情况下执行的,而无需实时检测是否存在故障的物理内存,因此,对系统性能的损耗较低,不容易造成系统卡顿的问题,系统流畅性好。
158.本技术实施例中的地址管理装置可以是装置,也可以是终端中的部件、集成电路、或芯片。该装置可以是移动电子设备,也可以为非移动电子设备。示例性的,移动电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、可穿戴设备、超级移动个人计算机(ultra

mobile personal computer,umpc)、上网本或者个人数字助理(personal digital assistant,pda)等,本技术实施例不作具体限定。
159.本技术实施例中的地址管理装置可以为具有操作系统的装置。该操作系统可以为安卓(android)操作系统,可以为ios操作系统,还可以为其他可能的操作系统,本技术实施例不作具体限定。
160.本技术实施例提供的地址管理装置能够实现上述方法实施例实现的各个过程,为避免重复,这里不再赘述。
161.可选地,如图6所示,本技术实施例还提供一种电子设备2000,包括处理器2002,存储器2001,存储在存储器2001上并可在所述处理器2002上运行的程序或指令,该程序或指令被处理器2002执行时实现上述地址管理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
162.需要注意的是,本技术实施例中的电子设备包括上述所述的移动电子设备和非移动电子设备。
163.图7为实现本技术实施例的一种电子设备的硬件结构示意图。
164.该电子设备1000包括但不限于:射频单元1001、网络模块1002、音频输出单元1003、输入单元1004、传感器1005、显示单元1006、用户输入单元1007、接口单元1008、存储器1009、以及处理器1010等部件。
165.本领域技术人员可以理解,电子设备1000还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器1010逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。图7中示出的电子设备结构并不构成对电子设备的
限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。
166.其中,处理器1010,在存在报错的第一虚拟地址的情况下,若所述第一虚拟地址属于虚拟地址的空洞空间,则确定所述第一虚拟地址发生报错前的第二虚拟地址,其中,所述第二虚拟地址为用户空间或内核空间中的虚拟地址;将所述第二虚拟地址对应的目标物理内存区域进行隔离。
167.在本技术实施例中,在对象访问虚拟内存的第一虚拟地址而发生报错的情况下,则可以判断该报错的第一虚拟地址是否属于系统的虚拟内存的空洞空间,如果该第一虚拟地址属于空洞空间,则说明大概率是ram发生了硬件故障或者多bit的跳变,因为正常使用的有效虚拟地址并不是属于空洞空间中的虚拟地址。因此,可以识别该第一虚拟地址发生报错前的可能的原虚拟地址,即第二虚拟地址,未发生虚拟地址报错之前,用于用户的应用程序或内核代码访问内存的原虚拟地址必然是属于用户空间或内核空间的,因此,该第二虚拟地址是由第一虚拟地址而转换生成的属于用户空间或内核空间的虚拟地址。然后,将所述第二虚拟地址对应的目标物理内存区域进行隔离,从而可以避免ram中存在故障的目标物理内存区域因再次被访问而再次报错导致循环崩溃死机的情况,即便存在一块或多bit的物理内存故障,但是首次发现其故障时已经将该物理内存块隔离而无法再被访问使用,因此,不会影响物理内存的后续使用,用户也无需更换主板或更换设备;并且,在上述技术方案中,无需额外的硬件支持,可以降低成本;此外,该方法的触发是在检测到报错的虚拟地址的情况下执行的,而无需实时检测是否存在故障的物理内存,因此,对系统性能的损耗较低,不容易造成系统卡顿的问题,系统流畅性好。
168.可选地,处理器1010,还用于根据虚拟地址空间的系统配置信息,确定虚拟地址的用户空间的地址范围、内核空间的地址范围以及空洞空间的地址范围。
169.本技术实施例中,可以根据虚拟地址空间的系统配置信息,来确定虚拟地址的用户空间的地址范围、内核空间的地址范围以及空洞空间的地址范围,从而便于基于各类空间的地址范围的格式和规范,来对报错的虚拟地址进行反推纠正,确定报错前可能正确的虚拟地址。
170.可选地,处理器1010,还用于根据所述用户空间的地址范围和所述内核空间的地址范围,确定所述第一虚拟地址发生报错前的第二虚拟地址。
171.本技术实施例中,当访问第一虚拟地址报错时,如果该第一虚拟地址属于虚拟地址的空洞空间,则说明该第一虚拟地址报错前的原虚拟地址,即第二虚拟地址属于用户空间或内核空间,而为了确定第二虚拟地址,则可以根据用户空间和内核空间各自的虚拟地址的地址范围,以及第一虚拟地址的具体内容,来确定该第二虚拟地址可能属于用户空间和内核空间的哪个空间,那么在确定了第二虚拟地址可能所属的地址空间之后,既可以确定该第一虚拟地址发生报错前的第二虚拟地址,本技术能够利用用户空间和内核空间各自的虚拟地址的地址范围,来反推确定发生报错的第一虚拟地址在报错前可能正确的第二虚拟地址,从而利于找到内存中出现故障的物理内存块进行隔离,避免该故障的内存块被重复访问,而发生机器循环高概率死机的问题。
172.可选地,处理器1010,还用于在物理内存的候选物理地址中存在目标物理地址的情况下,将所述目标物理地址所指向的目标物理内存区域进行隔离,其中,所述目标物理地
址为物理内存中与所述第二虚拟地址有映射关系的内存区域的物理地址。
173.本技术实施例中,为了进一步确保对第一虚拟地址所确定有效虚拟地址,这里为第二虚拟地址,是第一虚拟地址发生报错前的准确的原虚拟地址,可以判断该第二虚拟地址是否存在与之存在映射关系的目标物理地址,来提升所确定的第二虚拟地址的准确性。其中,如果存在,则说明该第二虚拟地址是报错前准确的有效虚拟地址,为了避免该第二虚拟地址所指向的物理内存块再次被使用而发生报错循环死机,可以将物理内存中该目标物理地址所指向的目标物理内存块进行隔离,从而降低因ram硬件问题或多bit跳变所导致的设备循环死机的概率。
174.可选地,处理器1010,还用于将所述目标物理地址对应的目标物理页框保存至第一存储区域;在物理内存分配器初始化的过程中,确定所述第一存储区域中的每个所述目标物理页框所指向的每个所述目标物理地址,以及所述每个目标物理地址的目标页信息;将所述目标页信息从buddy系统中删除。
175.本技术实施例中,在将所述目标物理地址所指向的目标物理内存区域进行隔离时,可以通过将目标物理地址对应的目标物理页框保存到第一存储区域,由于每个物理地址的物理页框是唯一的,但是每次开机后物理地址的页信息是动态分配的,即每次开机同一个物理地址的页信息可能不同,因此,开机后,在物理内存分配器初始化的过程中,需要将第一存储区域中的目标物理页框所指向的目标物理地址所对应的目标页信息从buddy系统中删除,避免之前报错的物理内存块在内存分配器初始化阶段被初始化且保留在buddy系统中,而导致该故障的物理内存块被再次访问的问题。
176.应理解的是,本技术实施例中,输入单元1004可以包括图形处理器(graphics processing unit,gpu)10041和麦克风10042,图形处理器10041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。显示单元1006可包括显示面板10061,可以采用液晶显示器、有机发光二极管等形式来配置显示面板10061。用户输入单元1007包括触控面板10071以及其他输入设备10072。触控面板10071,也称为触摸屏。触控面板10071可包括触摸检测装置和触摸控制器两个部分。其他输入设备10072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。存储器1009可用于存储软件程序以及各种数据,包括但不限于应用程序和操作系统。处理器1010可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1010中。
177.本技术实施例还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述地址管理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
178.其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等。
179.本技术实施例另提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现上述地址管理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
180.应理解,本技术实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。
181.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本技术实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
182.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
183.上面结合附图对本技术的实施例进行了描述,但是本技术并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本技术的启示下,在不脱离本技术宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本技术的保护之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜