[发明专利]面向硬件不可恢复内存故障的内核代码软容错方法有效
申请号: | 201110341733.8 | 申请日: | 2011-11-03 |
公开(公告)号: | CN102508742A | 公开(公告)日: | 2012-06-20 |
发明(设计)人: | 秦莹;刘晓建;戴华东;吴庆波;孔金珠;颜跃进 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F11/14 | 分类号: | G06F11/14 |
代理公司: | 湖南兆弘专利事务所 43008 | 代理人: | 赵洪;谭武艺 |
地址: | 410073 湖南省长沙市砚瓦池正*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 面向 硬件 不可 恢复 内存 故障 内核 代码 容错 方法 | ||
技术领域
本发明涉及操作系统内核代码运行时的容错方法,具体涉及一种是通过软件来缓解硬件不可恢复内存故障对操作系统本身运行稳定性影响的容错方法。
背景技术
从1946年首台计算机出现至今,计算机系统一直采用存储指令的冯.诺依曼结构。在冯.诺依曼结构下,指令作为数据存储在内存中,处理器从内存中获取指令并逐条译码执行。进入后CMOS时代后,由于芯片中晶体管密度持续增加,芯片老化和放射性引发单粒子翻转(single event updates,SEU)等内存软故障(soft error)的情况日益增多,容易导致存储指令的内存出现故障,极可能引发严重的逻辑错误,给计算机用户带来灾难性后果。
为增加计算机系统中内存的可靠性,硬件设计者目前一般采用奇偶校验、ECC纠错、Chipkill技术来提高计算机系统对内存单位错、多位错的查错和纠错能力。但是,由于ECC较验和Chipkill技术对计算机性能的影响较大并且其技术实现代价昂贵,这些先进的硬件纠容错技术目前主要应用于高档服务器系统中;另一方面,即便是采用上述纠错方法,硬件内存故障仍然是无法完全避免的,目前大量商用计算机系统中硬件内存故障仍然是影响系统可靠运行的主要因素。
计算机系统中内存硬件纠错机制仍然无法避免的内存故障统称为“硬件不可恢复内存故障”。硬件不可恢复内存故障对计算机系统产生的影响表现为两类:一类为同步感知故障(一类故障),即可被同步感知到的机器异常(Exception)。例如,当内存出现奇偶校验错误时,会引发一个不可屏蔽中断(NMI,Non-Maskable Interrupt),将一个机器检测故障(MCE,Machine Check Error)报告给操作系统进行处理;另一类是异步感知故障,即异步的硬件不可见故障(二类故障)。例如,在奇偶校验等硬件纠错机制无法处理甚至无法感知到的内存故障发生时,由于硬件不具备发现内存故障的能力,因此不会报告异常,但是内存中的数据已经发生了改变,处理器会取得被修改后的指令执行,运行将会持续、直到产生可见的逻辑错误:如非法指令或是内存地址访问异常,此时计算机才会获得错误的提示。这种硬件故障引发的程序错误,因和果是异步的,因此隐蔽性很强。 操作系统内核代码是计算机系统中运行频度最高的代码之一,内核代码出现错误将会影响到整个系统的正常运行,由于硬件不可恢复的内存故障的存在,直接对操作系统内核代码运行产生影响,影响计算机系统的稳定性和可靠性。
发明内容
针对上述现有技术的缺点,本发明要解决的技术问题是提供一种能够缓解硬件不可恢复内存故障对操作系统带来的影响,提高操作系统运行的稳定性、增强内核模块可靠性、降低内存出错可能性以及对操作系统运行干扰的面向硬件不可恢复内存故障的内核代码软容错方法。
为了解决上述技术问题,本发明采用的技术方案为:一种面向硬件不可恢复内存故障的内核代码软容错方法,其实施步骤如下:
1)在操作系统将内核代码加载至物理内存时,将所述内核代码标记为主代码,为每个所述内核代码设置多份代码副本并将代码副本加载至物理内存中;
2)在操作系统运行时,如果内核代码所在的内存遇到内存异常则定位当前主代码的出错内核页,将出错内核页的代码与当前主代码对应的代码副本进行比较,如果确定为出错内核页的代码发生错误,则暂停计算机运行,修改所述出错内核页的内核代码页表,从当前主代码对应的代码副本中选择一份正常的代码副本代替当前主代码,然后继续运行计算机。
作为本发明上述技术方案的进一步改进:
所述步骤2)中定位当前主代码的出错内核页的具体步骤包括:首先检测内存异常类型,如果内存异常类型为同步感知故障,则直接根据异常错误信息包含的内存硬件地址信息定位出错内核页;如果内存异常类型为异步感知故障,则在当前执行栈中通过检查调用指令进行迭代栈回退定位出错内核页。
所述在当前执行栈中通过检查调用指令进行迭代栈回退定位出错内核页的具体步骤包括:
A)将迭代次数清零;
B)检查当前执行栈,如果当前执行栈中子例程的入口地址包括当前主代码的内存地址,则将所述内存地址处的主代码和相应的代码副本进行特征比较,如果匹配则定位出错内核页成功;如果均不匹配则检查栈历史中已执行的代码是否包含I/O指令或者写指令,如果存在I/O指令或者写指令则转入步骤D),如果不存在I/O指令或者写指令则转入步骤C);
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110341733.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种提高瓦楞原纸环压强度的方法
- 下一篇:梳齿式破碎机锤头