进程启动方法及内核、进程技术

技术编号:7447177 阅读:364 留言:0更新日期:2012-06-20 23:16
本发明专利技术公开了进程启动方法及内核、进程。方法包括:进程退出前,内核接收进程发来的携带文件句柄FD的保持连接请求,对于该请求携带的每个FD,内核增加该FD对应的文件对象的引用计数,并将该文件对象放入缓存中,将该缓存位置信息返回给进程,以使得进程将该缓存位置信息与该FD指向的通信连接标识信息的对应关系放入预设存储区中;进程启动时,内核接收进程发来的携带所述缓存位置信息的获取FD请求,从缓存中读取各文件对象,为各文件对象分配FD,将该FD返回给进程。本发明专利技术实现了进程升级或重启过程中通信连接不中断,且降低了处理复杂度。

【技术实现步骤摘要】

本专利技术涉及进程
,具体涉及进程启动方法及内核、进程
技术介绍
在使用Unix/Linux风格内核的操作系统上,大量系统服务以Daemon方式运行于用户态。进程升级而不是整机重启,可以提供更好的服务能力。进程之间以及进程、内核之间通过各种方式进行通信,如相同机器上的进程可以通过进程间通信(IPC,Inter process Communication)方式通信,不同机器上的进程可以通过传输控制协议(TCP,Transmission Control Protocol) /用户数据报协议(UDP, User Datagram Protocol)等机制通信,同时进程和内核之间可以通过netlink socket 通信。在Unix/Linux内核的充分提炼下,这些通信实体都被抽象为文件句柄(FD,File Descriptor)0在进程升级过程中,进程会被重启,而FD会被内核关闭。这样一方面通信对端会感知到连接中断,触发相应的处理;另一方面,通信对端的数据变化,本端无法及时感知,这就导致进程启动后,需要向对端请求一遍所有数据。以路由器上的边际网关协议(BGP,Border Gateway Protocol)进程升级为例,BGP 进程升级时,邻居会感知到连接中断,在没有使能平滑重启(GR,Graceful Restart)时,邻居会删除来源于本机的BGP路由。在使能GR时,邻居不会删除路由,但是BGP进程重启后, 所有邻居需要重新发送一遍BGP路由。上述升级过程的坏处在于,进程升级的影响太大,可能引发较大的动荡。在实际应用中,BGP可以通过使用不中断路由(NSR,Non-Stopping Routing)技术,来实现TCP连接不中断的进程升级,但是TCP NSR技术实现复杂,需要备份大量数据,对系统性能有一定影响。另外,NSR技术除了 TCP外,对于其它通信连接如UDP、IPC、netlink 等缺少相应的机制,无法做成通用机制。
技术实现思路
本专利技术提供进程启动方法及内核、进程,以在进程启动而连接不中断的前提下,降低复杂度。本专利技术的技术方案是这样实现的一种进程启动方法,该方法包括进程退出前,内核接收进程发来的携带文件句柄FD的保持连接请求,对于该请求携带的每个FD,内核增加该FD对应的文件对象的引用计数,并将该文件对象放入缓存中, 将该缓存位置信息返回给进程,以使得进程将该缓存位置信息与该FD指向的通信连接标识信息的对应关系放入预设存储区中;进程启动时,内核接收进程发来的携带所述缓存位置信息的获取FD请求,从缓存中读取各文件对象,为各文件对象分配FD,将该FD返回给进程。所述进程退出为老版本的进程退出;所述进程启动为新版本的进程启动。所述进程启动为原进程重启。所述内核将该文件对象放入缓存中包括内核为该FD分配一个索引,采用预设算法对该索引进行运算,根据运算结果选择一块缓存,将该FD对应的文件对象放入该缓存中;所述缓存位置信息为所述索引;所述内核从缓存中读取各文件对象包括对于进程发来的获取FD请求携带的每个索引,内核采用预设算法对该索引进行运算,根据运算结果选择一块缓存,从该缓存中读取文件对象。所述内核将该FD返回给进程之后进一步包括当进程启动成功后,内核接收进程发来的携带缓存位置信息的释放请求,从缓存中读取各文件对象,恢复各文件对象的引用计数,释放缓存。一种内核,包括连接保持处理模块进程退出前,接收进程发来的携带FD的保持连接请求,对于该请求携带的每个FD,增加该FD对应的文件对象的引用计数,并将该文件对象放入缓存中,将该缓存位置信息返回给进程,以使得进程将该缓存位置信息与该FD指向的通信连接标识信息的对应关系放入预设存储区中;句柄获取模块进程启动时,接收进程发来的携带各文件对象的缓存位置信息的获取FD请求,从缓存中读取各文件对象,为各文件对象分配FD,将该FD返回给进程。所述进程退出为老版本的进程退出;所述进程启动为新版本的进程启动。所述进程启动为原进程重启。所述连接保持处理模块进一步用于,对于保持连接请求携带每个FD,为该FD分配一个索引,采用预设算法对该索引进行运算,根据运算结果选择一块缓存,将该FD对应的文件对象放入该缓存中;所述句柄获取模块进一步用于,对于进程发来的获取FD请求携带的各索引时,对于每个索引,采用预设算法对该索引进行运算,根据运算结果选择一块缓存,从该缓存中读取文件对象。所述内核进一步包括释放处理模块进程启动成功后,接收进程发来的携带缓存位置信息的释放请求,从缓存中读取各文件对象,恢复各文件对象的引用计数,释放缓存。一种进程,包括进程退出处理模块在退出前,将需保持的各通信连接对应的FD发送给内核;接收内核发来的各通信连接对应的文件对象的缓存位置信息,将该缓存位置信息与通信连接标识信息的对应关系放入预设存储区中;进程启动处理模块在启动时,从预设存储区中读出各缓存位置信息与通信连接标识信息的对应关系,将各缓存位置信息发送给内核,以获取各通信连接的FD。与现有技术相比,本专利技术可以实现进程升级或重启过程中,通信连接不中断,同时过程简单,对系统性能没有影响,且适用于各种用FD表示的通信连接,通用性好。 附图说明图1为本专利技术实施例提供的进程升级方法流程图;图2-1为本专利技术应用示例中老进程退出前,进程和内核的状态示意图;图2-2为本专利技术应用示例中老进程退出后,进程和内核的状态示意图;图2-3为本专利技术应用示例中新进程启动时,进程和内核的状态示意图;图2-4为本专利技术应用示例中进程升级成功后,进程和内核的状态示意图;图3为本专利技术实施例提供内核的组成示意图。具体实施例方式下面结合附图及具体实施例对本专利技术再作进一步详细的说明。图1为本专利技术实施例提供的进程升级方法流程图,如图1所示,其具体步骤如下步骤100 预先在内核上增加三个系统调用接口 保持连接接口、获取句柄接口和释放接口。例如保持连接接口可以是int holdFd(int fd),获取句柄接口可以是int getFd(int key);释放接口可以是 int putFd(int key)。步骤101 老进程退出前,老进程调用保持连接接口,将需保持的各通信连接对应的FD发送给内核,对于每个FD,内核对该FD对应的文件对象的引用计数作增加操作,并为该FD分配一个唯一的索引,对该索引进行Hash运算,根据Hash运算结果将该文件对象放入对应的缓存中,将该索引返回给老进程,老进程将该索引与该FD指向的通信连接标识信息的对应关系放入预设文件中,老进程退出。内核对FD对应的文件对象的引用计数作增加操作,这样,当老进程关闭时,内核维护的该FD指向的通信连接会因为引用计数非0,而未真正关闭。步骤102 新进程启动,从预设文件中读出索引和通信连接标识信息的对应关系, 对于每个索引,调用获取句柄接口,将该索引发送给内核,内核对该索引进行Hash运算,根据Hash运算结果从对应缓存中读取文件对象,为该文件对象分配FD,将该FD返回给新进程。当进程升级失败时,进程会回退到老版本进程,此时,老版本进程可以采用步骤 102中与新进程相同的方式,向内核获取各个通信连接的FD。文件对象对进程来说是不可见的,通信连接对进程来说是可见的。步骤103 进程升级成功,进程对本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:魏巍
申请(专利权)人:杭州华三通信技术有限公司
类型:发明
国别省市:

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

1
相关领域技术