一种获得传统操作系统动态更新时间点的方法技术方案

技术编号:6042346 阅读:252 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种获得传统操作系统动态更新时间点的方法。本发明专利技术提出的安全点监测模块M10用于发现可使用传统动态更新机制M20获取对操作系统内核M30安全进行动态更新的时机。该方法的内容为安全点监测模块M10,该模块内部包括初始化子模块M100、事件注入子模块M101、安全点生成子模块M102、系统服务接口子模块M103、安全点创建子模块M104。本发明专利技术可保证找到的动态更新点绝对安全,可以快速找到动态更新安全点,不会影响用户任务的正常运行。

Method for obtaining dynamic update time point of traditional operating system

The invention relates to a method for obtaining a dynamically updated time point of a conventional operating system. The security monitoring module M10 presented by the invention is used to discover the opportunity to dynamically update the security of the operating system kernel M30 using the traditional dynamic update mechanism M20. The method for content security monitoring module M10, the module includes initialization sub module, M100 module, M101 security event injection point generating sub module, M102 interface module, M103 service system security point to create sub module M104. The invention can ensure that the dynamic update point found is absolutely safe, and the dynamic update security point can be quickly found without affecting the normal operation of the user's task.

【技术实现步骤摘要】

本专利技术主要涉及到计算机操作系统软件领域,特指一种获得传统操作系统动态更 新时间点的方法。
技术介绍
操作系统动态更新是指在操作系统运行过程中动态修复操作系统内部缺陷,而无 需重启计算机即可实现修复生效。操作系统的动态更新技术可以有效提高系统的可用性。绝大多数缺陷修复都涉及到将当前内核的一部分功能实现体(以下称旧实现 体),替换成新的实现体(以下称新实现体)。功能替换一般通过为内核增加新实现体,并 将对于旧实现体的调用重定向到新实现体上来完成。在有任务正在执行旧实现体对应的代码时,将对于旧实现体的调用重定向到新实 现体上可能会造成有的任务执行旧实现体,而与此同时有的任务在执行新实现体的情形。 由于新旧实现体可能采取不同的方式对系统状态进行修改,两种实现体同时运行很可能会 造成系统状态被破坏。有的操作系统动态更新机制支持在有任务正在使用旧实现体的代码时就进行动 态更新。为了避免出现上述系统状态因两个新旧实现体同时运行而被破坏的问题,这类方 法会动态为新旧实现体创建各自的系统状态,并通过内存的写保护机制维护这两份系统状 态的一致性。这种方式的缺陷为1)需要同步的系统状态因具体的动态更新补丁而异,因 而需要具体的补丁手工编写相应的状态同步算法;2)由于采用了写保护机制,这种方式的 运行时开销相当大。有的操作系统动态更新机制支持进行新旧实现体执行现场的转换,在进行动态更 新时,若发现某任务正在执行旧实现体代码,系统可以动态将其转换为正在执行新实现体 代码。由于动态更新可能在任意时刻发生,需要设计一个支持将任意执行现场状态转换为 动态更新后对应现场状态的转换机制。这种转换机制的设计难度相当大。大多数的操作系统动态更新机制要求只有在内核处于新旧实现体替换不会影响 系统正常运行的时间窗口内(下文称作动态更新安全点)时才能实施动态更新。此类机制 一般将旧实现体代码处于静默状态视作内核处于动态更新安全点。代码处于静默状态的判 断标准为当前没有任何任务执行旧实现体代码。具体判断方法为扫描所有任务的内核栈, 查看其栈上是否包含旧实现体对应的虚地址段。若旧实现体对应的虚地址不在任何任务的 内核栈中出现,就认为当前旧实现体处于静默状态。当动态更新包含对多个功能实现体的替换时,上述更新时间点安全性检查的判断 方法可能会因为忽略了功能体执行的上下文而出现问题。比如假设某个动态更新要求同时 更新fimc_A和fimc_B两个功能,且某个任务会先后执行这两个功能,但在动态更新发生 时,该任务处于“已执行完成func_A,但未开始执行fimc_B”的状态。传统的安全点检查方 法认为可以进行动态更新,但这会造成更新的非原子性该任务执行了旧实现体的func_ Α,却执行了新实现体的func_B。若新版本fimc_B是上下文相关的,系统就会因为执行了旧版本的func_A之后执行新版本的func_B而出现错误。由于存在上述多个功能实现体之间的上下文相关性,当动态更新涉及到不止一个 功能实现体时,“旧实现体处于静默状态”并不一定意味着“系统处于动态更新安全点”。一 种简单的解决方法是要求更多的代码处于静默状态。具体的说,是要求整个内核代码都处 于静默状态。此时,不可能出现一次系统调用中既使用旧实现体,又使用新实现体,从而保 证了更新的原子性。K42就采用了这样的方法。在K42系统的动态更新实现中,当准备进行动态更新时,用户任务从用户态转到 内核态执行的请求会被阻塞,等已在内核态执行的任务退出内核态后,就进行动态更新。对 于传统操作系统而言,由于用户任务之间可能具有依赖关系(如某个已在内核的用户任务 可能等待另外一个用户任务唤醒),这种不加区分阻塞用户任务的方法会导致有些情况下 永远不能进行动态更新。另外,这种方法没有考虑某些内核任务永远不会从内核态退出的 情形。为了防止在内核中睡眠的任务阻碍整个内核进入静默状态,在有的操作系统动态 更新机制中,在实施动态更新时,所有正在使用内核的任务将被杀死。由于无法区分任务对 于用户的重要程度,此方法可能会导致对用户至关重要任务被杀死,从而影响系统持续为 用户提供服务的能力。在基于动态更新安全点的动态更新技术中,传统方法的缺点是1)反复检查当前 是否处于静默状态的方法可能延迟较大,且最终不一定能获得更新时机;2)当动态更新包 含对多个功能实现体的替换时,通过扫描所有任务的内核栈,查看其栈上是否包含旧实现 体对应的虚地址段的方法获得的更新时机可能会造成更新后状态的不一致;幻通过杀死 任务来获得更新时机的方法会影响用户应用运行。
技术实现思路
本专利技术要解决的问题在于为传统操作系统提供一种通用的动态更新安全点的获 取方法。为此本专利技术提出一种基于任务阻塞和唤醒机制的操作系统动态更新安全点获取 方法。该方法要求外部环境必须支持以下能力1)操作系统实时维护当前系统中存在 的用户态任务总数和内核态任务总数;2)操作系统应对外暴露某用户态任务是否会因内 核设计原因在未来解除操作系统对另外某些用户态任务的阻塞。当内核态任务可能会在非动态更新安全点被阻塞时,该方法要求外部环境必须具 有以下能力操作系统对外暴露各个内核态任务是否处于安全更新点的状态。在本专利技术中, 若某任务的当前状态可以不经专门的状态转换即可运行于动态更新后的系统,则认为该任 务处于安全更新点状态。当内核态任务可能会在非动态更新安全点被阻塞时,若操作系统具有如下能力, 该方法可以更快的找到可对操作系统实施动态更新的安全点1)操作系统对外暴露内核 态任务之间的同步通信关系;幻操作系统可对外暴露所有支持“中间状态恢复”的内核态 任务一个内核任务支持中间状态恢复,当且仅当该任务可在睡眠中被杀死,并支持重启后 继续进行被杀死时正在提供的服务。当动态更新工具支持如下能力时,该方法可以更快的发现可对操作系统实施动态 更新的安全点1)动态更新工具支持对某些被阻塞任务的执行现场进行转换,使得这些任 务可以在动态更新完成后继续正常运行。在本专利技术中,内核与操作系统含义相同。在决定进行动态更新后,该方法开始工作,其过程如下1)设定当前要进行动态更新;2)向所有用户任务注入用于防止其在内核中无限 期睡眠的异步事件。内核对该异步事件的处理方法应与用户任务所能接收到的普通异步事 件相似,但效果为导致用户任务重新请求当前被中断的内核服务;3)当发现用户任务task 请求系统服务时,若内核未被设计为task未来一定会解除内核对其它某任务的阻塞,则在 为其服务前将其阻塞,且该阻塞方法不可被异步事件唤醒;4)杀死所有(本专利技术自身所需 的任务除外)当前未处于安全更新点、支持中间状态恢复的内核任务;5)当运行优先权最 低的任务发现所有的用户任务(本专利技术自身所需任务除外)都因步骤3)规定的动作所阻 塞、且所有的内核任务(本专利技术自身所需任务除外)都处于安全更新点时,实施动态更新; 6)动态更新完成后,设定当前不处于动态更新状态;7)重启被杀死的内核任务,唤醒因步 骤3)被阻塞的所有任务。由于动态更新时必须保证所有的CPU都处于动态更新安全点,而多处理器核心有 时使得系统很难找到一个全局更新安全点。如即使运行在CPUO上的最低优先权任务发 现CPUl也正在运行同样的最低优先权任务,它也不能断定当前可安全本文档来自技高网
...

【技术保护点】
一种获得传统操作系统动态更新时间点的方法,该方法要求外部环境必须支持以下能力:1)操作系统实时维护当前系统中存在的用户态任务总数和内核态任务总数;2)操作系统应对外暴露某用户态任务是否会因内核设计原因在未来解除操作系统对另外某些用户态任务的阻塞,其特征在于在决定进行动态更新后,该方法开始工作,其过程如下:1)设定当前要进行动态更新;2)向所有用户任务注入用于防止其在内核中无限期睡眠的异步事件;3)当发现用户任务task请求系统服务时,若内核未被设计为task未来一定会解除内核对其它某任务的阻塞,则在为其服务前将其阻塞,且该阻塞方法不可被异步事件唤醒;4)杀死所有(本专利技术自身所需的任务除外)当前未处于安全更新点、支持中间状态恢复的内核任务;5)当运行优先权最低的任务发现所有的用户任务(本专利技术自身所需任务除外)都因步骤3)规定的动作所阻塞、且所有的内核任务(本专利技术自身所需任务除外)都处于安全更新点时,实施动态更新;6)动态更新完成后,设定当前不处于动态更新状态;7)重启被杀死的内核任务,唤醒因步骤3)被阻塞的所有任务。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘晓建廖湘科戴华东吴庆波任怡
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1