[发明专利]一种Linux内核可热插拨内核模块运行时升级方法在审
| 申请号: | 201410248550.5 | 申请日: | 2014-06-06 | 
| 公开(公告)号: | CN103984585A | 公开(公告)日: | 2014-08-13 | 
| 发明(设计)人: | 任元 | 申请(专利权)人: | 浪潮电子信息产业股份有限公司 | 
| 主分类号: | G06F9/445 | 分类号: | G06F9/445 | 
| 代理公司: | 济南信达专利事务所有限公司 37100 | 代理人: | 姜明 | 
| 地址: | 250014 山东*** | 国省代码: | 山东;37 | 
| 权利要求书: | 查看更多 | 说明书: | 查看更多 | 
| 摘要: | |||
| 搜索关键词: | 一种 linux 内核 可热插拨 模块 运行 升级 方法 | ||
技术领域
本发明提供一种Linux内核可热插拨内核模块运行时升级方法,属于计算机操作系统领域。通过添加一个新的系统调用,实现更新一个正在使用中的内核动态装载的模块代码到新的版本。
背景技术
Linux内核可热插拨内核模块技术的出现极大的方便了Linux内核程序的开发,它使得人们在Linux上可以不重启系统的前提下,添加需要用到的内核模块程序,并在不需要时卸载它,也不用重启操作系统,一直以来,人们都认为,这已经非常方便各种应用程序及设备驱动的开发了。但是,近年来,各种高可靠性、高可持续性的服务要求对此特性越来越不满足:我的重要服务在任何状况下都尽可能不要中断业务,但在更新服务软件相关的内核模块时,服务程序不得不暂时停止,等相关的内核模块的新版本被装载进操作系统内核后,再重新启动服务程序提供服务,尽管维护者会尽可能在短时间内完成这些事务性的工作,但是,这个短暂的中断对于要求高可用性的服务仍然有着巨大的不良影响。
当然,也许有人会说:可以利用双机备份,等多种方式方法来解决这个问题,但是,越发复杂的服务器集群一类的架构不仅增加了大量的金钱浪费,而且也增加了出故障的更多可能,并且维护相关的费用也是无底洞!因此迫切需要出现一种能够以较低的成本,几乎完全不中断服务的方法去更新服务程序相关的内核模块技术。
发明内容
一种Linux内核可热插拨内核模块运行时升级方法。为实现这一目的,本发明的技术解决方案是:通过向Linux操作系统添加一个内核模块升级系统调用,提供更新指定的内核模块的能力。本方法在内核模块升级系统调用实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,在此过程中,此内核模块仍能正常使用,即不中断该内核模块提供的服务。
通过在操作系统中新添加的模块升级系统调用,同步地把指定的内核模块由当前版本,升级到一个新的版本,并且这个新的版本可以是比当前版本高或者低的。
当使用模块升级系统调用升级可热插拨内核模块时,以原模块及新模块全路径为参数,在升级内存中的运行着的该模块的同时升级文件系统中的原模块。
在升级正在运行中的内核模块的过程为:
a.模块升级系统调用把新版本的内核模块代码添加到正在运行着的内核映像内存中去;
b.检测旧版本的内核模块函数是否正在使用中,如果没有在使用中,则在它的开始处注入一个跳转指令,从而调用函数的在新版本内核中的实现;
c.如果在使用中,则暂时放弃替换该函数,并睡眠一小会,然后再次尝试b中的动作,重复数次,如果失败,则恢复原状;
在升级文件系统中的原模块的过程为:
a. 模块升级系统调用调用文件系统函数把新模块拷贝到原模块目录中,并命名一个新名字;
b. 模块升级系统调用调用文件系统函数删除原模块;
c. 模块升级系统调用调用文件系统函数把新模块重命名为原模块的名字,完成升级。
本发明的有益效果是:
本发明提供一种不中断服务的方法去更新服务程序相关的内核模块技术,在内核模块升级系统调用实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,在此过程中,此内核模块仍能正常使用,即不中断该内核模块提供的服务。实现了能够以较低的成本,几乎完全不中断服务的方法去更新服务程序相关的内核模块技术。
附图说明
图1 是Linux可热插拨内核模块运行时升级原理图;
图2 是Linux可热插拨内核模块运行时升级流程简图。
具体实施方式
下面按照说明书附图对本发明作详细说明:
本发明的技术解决方案是:通过向Linux操作系统添加一个内核模块升级系统调用,提供更新指定的内核模块的能力。本方法在内核模块升级系统调用实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,在此过程中,此内核模块仍能正常使用,即不中断该内核模块提供的服务。
如图1,内核模块升级系统调用,先把新内核模块代码添加到内核映像中去,然后在旧模块要升级的函数入口处,注入跳转指令(x86系统上jmp是跳转指令),跳转到新内核模块的对应于旧模块的函数升级后的新函数去执行新函数的代码,从而实现了旧模块中的代码更新为新模块中的代码。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浪潮电子信息产业股份有限公司,未经浪潮电子信息产业股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410248550.5/2.html,转载请声明来源钻瓜专利网。





