[发明专利]一种获得传统操作系统动态更新时间点的方法有效
申请号: | 201110030741.0 | 申请日: | 2011-01-28 |
公开(公告)号: | CN102073528A | 公开(公告)日: | 2011-05-25 |
发明(设计)人: | 刘晓建;廖湘科;戴华东;吴庆波;任怡 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 湖南省国防科学技术工业办公室专利中心 43102 | 代理人: | 冯青 |
地址: | 410073 *** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 获得 传统 操作系统 动态 更新 时间 方法 | ||
技术领域
本发明主要涉及到计算机操作系统软件领域,特指一种获得传统操作系统动态更新时间点的方法。
背景技术
操作系统动态更新是指在操作系统运行过程中动态修复操作系统内部缺陷,而无需重启计算机即可实现修复生效。操作系统的动态更新技术可以有效提高系统的可用性。
绝大多数缺陷修复都涉及到将当前内核的一部分功能实现体(以下称旧实现体),替换成新的实现体(以下称新实现体)。功能替换一般通过为内核增加新实现体,并将对于旧实现体的调用重定向到新实现体上来完成。
在有任务正在执行旧实现体对应的代码时,将对于旧实现体的调用重定向到新实现体上可能会造成有的任务执行旧实现体,而与此同时有的任务在执行新实现体的情形。由于新旧实现体可能采取不同的方式对系统状态进行修改,两种实现体同时运行很可能会造成系统状态被破坏。
有的操作系统动态更新机制支持在有任务正在使用旧实现体的代码时就进行动态更新。为了避免出现上述系统状态因两个新旧实现体同时运行而被破坏的问题,这类方法会动态为新旧实现体创建各自的系统状态,并通过内存的写保护机制维护这两份系统状态的一致性。这种方式的缺陷为:1)需要同步的系统状态因具体的动态更新补丁而异,因而需要具体的补丁手工编写相应的状态同步算法;2)由于采用了写保护机制,这种方式的运行时开销相当大。
有的操作系统动态更新机制支持进行新旧实现体执行现场的转换,在进行动态更新时,若发现某任务正在执行旧实现体代码,系统可以动态将其转换为正在执行新实现体代码。由于动态更新可能在任意时刻发生,需要设计一个支持将任意执行现场状态转换为动态更新后对应现场状态的转换机制。这种转换机制的设计难度相当大。
大多数的操作系统动态更新机制要求只有在内核处于新旧实现体替换不会影响系统正常运行的时间窗口内(下文称作动态更新安全点)时才能实施动态更新。此类机制一般将旧实现体代码处于静默状态视作内核处于动态更新安全点。代码处于静默状态的判断标准为:当前没有任何任务执行旧实现体代码。具体判断方法为扫描所有任务的内核栈,查看其栈上是否包含旧实现体对应的虚地址段。若旧实现体对应的虚地址不在任何任务的内核栈中出现,就认为当前旧实现体处于静默状态。
当动态更新包含对多个功能实现体的替换时,上述更新时间点安全性检查的判断方法可能会因为忽略了功能体执行的上下文而出现问题。比如假设某个动态更新要求同时更新func_A和func_B两个功能,且某个任务会先后执行这两个功能,但在动态更新发生时,该任务处于“已执行完成func_A,但未开始执行func_B”的状态。传统的安全点检查方法认为可以进行动态更新,但这会造成更新的非原子性:该任务执行了旧实现体的func_A,却执行了新实现体的func_B。若新版本func_B是上下文相关的,系统就会因为执行了旧版本的func_A之后执行新版本的func_B而出现错误。
由于存在上述多个功能实现体之间的上下文相关性,当动态更新涉及到不止一个功能实现体时,“旧实现体处于静默状态”并不一定意味着“系统处于动态更新安全点”。一种简单的解决方法是要求更多的代码处于静默状态。具体的说,是要求整个内核代码都处于静默状态。此时,不可能出现一次系统调用中既使用旧实现体,又使用新实现体,从而保证了更新的原子性。K42就采用了这样的方法。
在K42系统的动态更新实现中,当准备进行动态更新时,用户任务从用户态转到内核态执行的请求会被阻塞,等已在内核态执行的任务退出内核态后,就进行动态更新。对于传统操作系统而言,由于用户任务之间可能具有依赖关系(如某个已在内核的用户任务可能等待另外一个用户任务唤醒),这种不加区分阻塞用户任务的方法会导致有些情况下永远不能进行动态更新。另外,这种方法没有考虑某些内核任务永远不会从内核态退出的情形。
为了防止在内核中睡眠的任务阻碍整个内核进入静默状态,在有的操作系统动态更新机制中,在实施动态更新时,所有正在使用内核的任务将被杀死。由于无法区分任务对于用户的重要程度,此方法可能会导致对用户至关重要任务被杀死,从而影响系统持续为用户提供服务的能力。
在基于动态更新安全点的动态更新技术中,传统方法的缺点是:1)反复检查当前是否处于静默状态的方法可能延迟较大,且最终不一定能获得更新时机;2)当动态更新包含对多个功能实现体的替换时,通过扫描所有任务的内核栈,查看其栈上是否包含旧实现体对应的虚地址段的方法获得的更新时机可能会造成更新后状态的不一致;3)通过杀死任务来获得更新时机的方法会影响用户应用运行。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110030741.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:防断电的损耗平衡存储方法
- 下一篇:一种输入法词库的升级方法和装置