内核更新方法和装置、计算机设备与流程

文档序号:11635176阅读:186来源:国知局
内核更新方法和装置、计算机设备与流程
本发明实施例涉及计算机领域,尤其涉及内核更新方法和装置、计算机设备。
背景技术
:操作系统(英文:operatingsystem,os)的内核(英文:kernel)分为基础内核(英文:basekernel)和可加载内核模块(英文:loadablekernelmodule,lkm)。可加载内核模块提供至少一个驱动。在需要使用该可加载内核模块的驱动时,在内存中暂时加载实现该可加载内核模块的文件,运行该文件来实现该驱动,运行该文件同时也实现了该可加载内核模块包括的其它驱动。由于实现该可加载内核模块中所有驱动的计算机指令和数据是存储在同一文件中的,现有技术更新可加载内核模块的实现方式为:将旧的可加载内核模块整体卸载,再在内存中加载新的可加载内核模块的文件。在更新可加载内核模块时,即使该可加载内核模块中的某个驱动正在为业务应用提供驱动服务,仍断开该可加载内核模块与业务应用的通信连接,使得该业务应用不能继续向该可加载内核模块发送该驱动服务的业务请求,导致该驱动服务终止。技术实现要素:有鉴于此,本申请提供了一种内核更新方法和装置、计算机设备,避免在更新可加载内核模块时终止为业务应用提供的驱动服务。第一方面,本申请提供一种内核更新方法,该内核更新方法用于更新内核中的可加载内核模块。所述可加载内核模块包括接口模块和第一驱动逻辑模块,所述接口模块包括至少一个驱动中每个驱动的至少一个接口,所述第一驱动逻辑模块包括所述至少一个驱动中每个驱动的至少一个驱动逻辑。本申请在第一接口映射表记录所述接口模块中的每个接口与所述接口对应的驱动逻辑。这样,所述接口模块可以根据该第一接口映射表将接收的业务应用的业务请求转发至接收所述业务请求的接口对应的第一驱动逻辑,所述第一驱动逻辑模块对所述业务请求执行所述第一驱动逻辑,所述第一驱动逻辑是指所述第一驱动逻辑模块中为所述业务应用提供驱动服务的驱动逻辑。当更新所述可加载内核模块时,计算机设备执行所述内核更新方法中的以下步骤:首先计算机设备将所述第一接口映射表置为无效,无效的所述第一接口映射表使得所述接口模块停止根据所述第一接口映射表将新的业务请求发送至所述第一驱动逻辑,所述新的业务请求是指所述接口模块在所述第一接口映射表被置为无效后接收的所述业务应用的业务请求;然后计算机设备将所述可加载内核模块中的所述第一驱动逻辑模块替换为第二驱动逻辑模块,所述第二驱动逻辑模块为更新的驱动逻辑模块,所述第二驱动逻辑模块包括能够为所述业务应用提供驱动服务的第二驱动逻辑;最后计算机设备在第二接口映射表中记录所述接口模块中的每个接口以及所述接口对应的所述第二驱动逻辑模块中的驱动逻辑。更新所述可加载内核模块之后,所述接口模块可以根据所述第二接口映射表将所述新的业务请求发送至所述第二驱动逻辑模块的第二驱动逻辑。本发明实施例提供的内核更新方法,在替换驱动逻辑模块的期间,业务应用与接口模块的通信连接不中断,待完成替换驱动逻辑模块之后,业务应用可以基于该通信连接继续向接口模块发送业务请求,驱动逻辑模块响应该业务请求,从而恢复对业务应用提供的驱动服务。可见,相对于现有技术在更新可加载内核模块时需要终止为业务应用提供的驱动服务,本发明实施例在更新可加载内核模块时,仅暂停为业务应用提供驱动服务,由于该内核更新方法更新可加载内核模块所需的时间短,可以节省恢复该驱动服务的时间成本,提高恢复该驱动服务的效率;综合上述,该内核更新方法能够在用户未感知的情况下,实现该可加载内核模块的更新。一种可能设计,所述可加载内核模块还包括数据模块;所述数据模块记录所述第一驱动逻辑在被替换为所述第二驱动模块之前为所述业务应用提供驱动服务的状态。当计算机设备将所述可加载内核模块中的所述第一驱动逻辑模块替换为第二驱动逻辑模块后,所述第二驱动逻辑模块基于所述数据模块记录的所述状态对所述新的业务请求执行所述第二驱动逻辑。所述第二驱动模块基于第一驱动模块在被替换前的状态,对所述新的业务请求执行所述第二驱动逻辑来继续为所述业务应用提供驱动服务,保证了提供驱动服务的连续性,同时实现在用户未感知的情况下完成该可加载内核模块的更新。一种可能设计,在内核更新方法中,如果所述数据模块记录的所述状态为第一版本的数据,则计算机设备将所述数据模块中的所述第一版本的数据更新为所述第二驱动逻辑模块支持的第二版本的数据;第一版本与第二版本可以是指不同格式,或者可以是指排列数据的不同排列方式。更新所述状态的版本,使得所述第二驱动逻辑模块能够识别所述数据模块记录的所述状态,并基于所述状态对所述新的业务请求执行所述第二驱动逻辑。一种可能设计,在内核更新方法中,如果所述数据模块记录的所述状态为第一格式的数据,而所述第二驱动逻辑模块支持第二格式,则计算机设备将所述第一格式的数据更新为所述第二格式的数据;这样,所述第二驱动逻辑模块可以能够识别所述数据模块记录的所述状态,并基于所述状态对所述新的业务请求执行所述第二驱动逻辑。一种可能设计,在内核更新方法中,计算机设备接收指示更新可加载内核模块的内核更新指令,在替换所述第一驱动逻辑模块之前确定所述第一驱动逻辑模块是否成功执行旧的业务请求,所述旧的业务请求为在接收到所述内核更新指令时被所述第一驱动逻辑模块执行所述第一驱动逻辑的任一业务请求。待所述第一驱动逻辑模块成功执行旧的业务请求之后,计算机设备再将所述第一接口映射表置为无效;这样可以保证为业务应用提供驱动服务的连续性。一种可能设计,算机设备将所述第一接口映射表置为无效的一种具体实现是:计算机设备为该第一接口映射表设置无效标识,该无效标识指示该接口模块该第一接口映射表是无效的;对该接口模块而言,不会使用无效的该第一接口映射表进行业务请求的转发。由于设置无效标识所需的时间成本和损耗资源的成本是相对较小的,因此通过设置无效标识将所述第一接口映射表置为无效是高效的。一种可能设计,计算机设备将所述第一接口映射表置为无效的一种具体实现是:删除所述第一接口映射表中记录的所述第一驱动逻辑模块包括的所有驱动逻辑。这样,计算机设备可以将删除所述第一驱动逻辑模块包括的所有驱动逻辑的所述第一接口映射表作为第二接口映射表,并在该第二接口映射表中记录与该接口模块中的接口对应的该第二驱动逻辑模块的驱动逻辑,相对于使用新表生成该第二接口映射表,减少了在生成该第二接口映射表时需要记录的数据,提高了记录效率。一种可能设计,计算机设备将所述第一驱动逻辑模块替换为所述第二驱动逻辑模块一种具体实现是:卸载所述可加载内核模块中的所述第一驱动逻辑模块;在所述可加载内核模块中加载所述第二驱动逻辑模块。卸载该第一驱动逻辑模块,可以完整释放该第一驱动逻辑模块所占用的资源(例如内存资源),然后再分配合适资源来加载该第二驱动逻辑模块,可以实现资源的有效利用。第二方面,本申请提供一种内核更新装置,包括执行第一方面或第一方面的任意可能设计提供的内核更新方法的功能模块;第二方面对功能模块的划分不做限定,可以按照内核更新方法的流程步骤对应划分功能模块,也可以按照具体实现需要划分功能模块。第三方面,本申请提供一种计算机设备,该计算机设备包括处理器和存储器。该存储器存储计算机指令;该处理器执行该存储器存储的计算机指令,使得该计算机设备执行上述第一方面或者第一方面的各种可能设计提供的内核更新方法,或者使得该计算机设备实现第二方面中的内核更新装置。第四方面,提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机指令,当计算机设备的处理器执行该计算机指令时,该计算机设备执行上述第一方面或者第一方面的各种可能设计提供的内核更新方法,或者该计算机设备部署第二方面中的内核更新装置。第五方面,提供一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器可以从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令使得计算机设备实施上述第一方面或者第一方面的各种可能设计提供的内核更新方法,或者该计算机设备部署第二方面中的内核更新装置。附图说明图1为本发明实施例提供的计算机设备100的一种硬件结构示意图;图2为本发明实施例提供的内核的一种功能划分示意图;图3为本发明实施例提供的响应业务请求来提供驱动服务的一种流程示意图;图4为本发明实施例提供的内核更新方法的一种流程示意图;图5为更新“scsidriver”的一种状态变化示意图;图6为更新“scsidriver”的一种流程示意图;图7为本发明实施例提供的内核更新装置700的一种逻辑结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例提供的技术方案进行描述。计算机设备实施例参见图1,计算机设备100包括处理器101、内存102、通信接口103、总线104和存储器105。存储器105存储计算机指令和数据;例如,存储器105存储操作系统(英文:operatingsystem,os)相关的计算机指令和数据。存储器105可以是以下的任一种或任一种组合:只读存储器(英文:read-onlymemory,rom)、非易失性存储器(英文:non-volatilememory,nvm)、固态硬盘(英文:solidstatedrives,ssd)、机械硬盘、磁盘、磁盘阵列等存储介质。处理器101,可以是以下的任一种:中央处理器(英文:centralprocessingunit,cpu)、arm处理器、现场可编程门阵列(英文:field-programmablegatearray,fpga)、专用处理器等具有计算处理能力的器件。内存(英文:memory)102,用于缓存处理器101运行的计算机指令和处理器101处理的数据;例如,内存102用于缓存处理器101从存储器105加载的计算机指令和数据;再例如,内存102用于缓存处理器101的临时处理结果(属于计算机指令或者数据两种中的一种)。内存102可以包括易失性存储器和/或nvm。例如,内存102可以是以下的任一种或任一种组合:随机存取存储器(英文:randomaccessmemory,ram)、同步动态随机存储器(英文:synchronousdynamicrandomaccessmemory,sdram)、双倍速率同步动态随机存储器(英文:doubledataratesynchronousdynamicrandomaccessmemory,ddrsdram)和nvm。通信接口103用于计算机设备100与其他设备(例如其它计算机设备或者移动终端)进行数据交互。通信接口103可以是以下的任一种或任一种组合:网络接口(例如以太网接口)、无线网卡等具有网络接入功能的器件。总线104包括内存总线,还可以包括以下的任一种或任一种组合:工业标准体系结构(英文:industrystandardarchitecture,isa)总线、外设组件互连标准(英文:peripheralcomponentinterconnect,pci)总线、扩展工业标准结构(英文:extendedindustrystandardarchitecture,eisa)总线等用于数据传输的器件。图1用一条粗线表示总线104。处理器101、内存102、通信接口103和存储器105均通过总线104连接。这样,处理器101可以通过总线104访问内存102和存储器105,以及通过总线104利用通信接口103与其他设备(例如其它计算机设备或者移动终端)进行数据交互。在本发明实施例中,处理器101执行存储器105存储的计算机指令,使得计算机设备100执行下面方法实施例提供的各方法(例如内核更新方法),或者使得计算机设备100实现装置实施例提供的装置(例如内核更新装置)。下面介绍下操作系统的内核参见图2,操作系统(os)的内核(英文:kernel)分为基础内核(英文:basekernel)和可加载内核模块。基础内核是内核的核心部分。因此,该基础内核的文件是必须加载的部分。具体地,在每次启动os时,加载该基础内核的文件到内存中,通过运行该基础内核的文件实现该基础内核的功能。可加载内核模块是内核的可选部分,可加载内核模块提供至少一个驱动。应知,该可加载内核模块中所有驱动是同时被加载或被卸载的。现有技术在需要使用该可加载内核模块的驱动时,可以在内存中临时加载实现该可加载内核模块的文件,运行该文件来实现该驱动;后续在不需要使用该驱动时,可以卸载整个该可加载内核模块,包括释放实现该可加载内核模块所占用的资源,例如删除内存中的该文件来释放内存资源。因此,该可加载内核模块用于在该基础内核的基础上提供更多的驱动,实现功能扩展;和/或,该可加载内核模块用于对该基础内核中的驱动进行升级。可加载内核模块,在不同操作系统中具有不同名称。举例说明,在类unix系统(英文:unix-likesystems,un*x或*nix)或者microsoftwindows中,对于不同版本的操作系统,该可加载内核模块可能被称为不同的名称。例如在linux操作系统中,该可加载内核模块仍被称为可加载内核模块(英文:loadablekernelmodule,lkm);例如在freebsd中,该可加载内核模块被称为内核可加载模块(英文:kernelloadablemodule,kld);例如在macos中,该可加载内核模块被称为内核扩展(英文:kernelextension,kext);例如在aix操作系统中,该可加载内核模块被称为内核扩展模块(英文:kernelextensionmodule);例如在windowsnt中,该可加载内核模块被称为内核模式驱动(英文:kernel-modedriver);例如在vxworks操作中,该可加载内核模块被称为可下载内核模块(英文:downloadablekernelmodule,dkm);另外,在其它的一些操作系统中,该可加载内核模块可以被称为内核可加载模块(英文:kernelloadablemodules,klm),或者可以直接被简称为内核模块(英文:kernelmodules,kmod),应知,此处的kmod不包含内核中的基础内核。可加载内核模块的划分参见图2,本发明实施例提供的可加载内核模块包括接口模块和驱动逻辑模块。因此在部署可加载内核模块时,操作系统需要分别加载用于实现该接口模块的文件和用于实现该驱动逻辑模块的文件。本发明实施例通过该接口模块和该驱动逻辑模块实现该可加载内核模块提供的驱动。具体地,该可加载内核模块提供的驱动被分为该驱动的接口和该驱动的驱动逻辑,其中,该驱动的接口部署在该接口模块中,该驱动的驱动逻辑部署在该驱动逻辑模块中。驱动逻辑是指为业务应用提供驱动服务的模块。具体地,可加载内核模块提供至少一个驱动;每个驱动具有至少一个接口和至少一个驱动逻辑,该驱动的接口与该驱动的驱动逻辑一一对应。可加载内核模块提供的每个驱动的接口都部署在接口模块,可加载内核模块提供的每个驱动的驱动逻辑都部署在驱动逻辑模块。接口模块通过接口接收业务应用的业务请求,以及根据接口映射表将该业务请求转发至驱动逻辑模块中对应的驱动逻辑。本发明实施例根据驱动的接口与该驱动的驱动逻辑之间的对应关系,在接口映射表中记录接口模块中的每个接口,以及记录与该接口模块中的每个接口对应的驱动逻辑;即在该接口映射表中记录该接口模块中的所有接口与驱动逻辑模块中的所有驱动逻辑的对应关系。这样,该接口模块可以根据接收业务请求的接口在该接口映射表中找出该接口对应的驱动逻辑,并将该业务请求转发至该驱动逻辑。应知,相对于现有技术,该接口映射表是本发明实施例新增的,新增该接口映射表的目的是为了接口模块将接收的业务请求正确地转发至驱动逻辑。另外,本发明实施例可以通过该接口映射表控制是否将接口模块接收的业务请求向驱动逻辑转发,从而实现是否暂停为业务应用提供驱动服务的控制。本发明实施例在接口映射表中记录接口模块中的每个接口,以及记录与该接口模块中的每个接口对应的驱动逻辑包括记录该接口模块的接口与该驱动逻辑模块中的驱动逻辑的标识之间的对应关系。该一个驱动逻辑的标识用于唯一确定该驱动逻辑模块包括的一个驱动逻辑。例如,驱动逻辑的标识可以是驱动逻辑的接口。这样,在根据该接口映射表确定驱动逻辑的接口后,可以向该驱动逻辑的接口转发业务请求,从而将该业务请求发送至该驱动逻辑。可选地,该接口映射表记录的该接口模块中的接口与该驱动逻辑模块中的驱动逻辑的接口之间的映射关系是一一映射关系。以表1为例的接口映射表中,接口模块中的4个接口(“socket”、“send”、“recv”、“close”)分别映射的4个驱动逻辑的接口依次为“main_socket”、“main_send”、“main_recv”、“main_close”;该4个驱动逻辑依次具有的功能分别为“通过套接字建立业务应用与驱动的通信连接”、“驱动基于该通信连接向业务应用发送数据”、“驱动基于该通信连接接收业务应用的数据”、“关闭通过套接字建立的该通信连接”。接口模块中的接口驱动逻辑的接口socketmain_socketsendmain_sendrecvmain_recvclosemain_close表1本发明实施例中,接口映射表可以部署在接口模块上,或者独立部署,或者部署在其它模块上;但接口模块均可以访问到该接口映射表。驱动逻辑模块执行驱动逻辑来提供驱动服务。每个驱动具有至少一个驱动逻辑,不同驱动逻辑实现不同功能,因此不同驱动逻辑提供不同驱动服务。该驱动逻辑可以用程序(由计算机指令和数据构成)实现,该程序记录在文件(用于实现驱动逻辑模块的文件)中;驱动逻辑模块执行该驱动逻辑,包括将该文件加载到内存中、以及执行该文件中的程序来实现该驱动逻辑对应的功能,应知,如果该文件已在内存中,则执行该驱动逻辑可以省去加载该文件到内存的步骤。每个驱动逻辑具有接口,每个驱动逻辑的接口在接口模块中具有对应的接口,例如表1。应知,当业务应用期望某个驱动逻辑提供驱动服务时,需要向接口模块中的接口(与该个驱动逻辑的接口对应)发送该驱动逻辑对应的业务请求;这样,该接口模块根据接口映射表才能将从该接口接收的业务请求正确转发至该驱动逻辑的接口,从而驱动逻辑模块才能通过该驱动逻辑的接口接收到该业务请求,以及对该业务请求执行该驱动逻辑。应知,该可加载内核模块提供的所有驱动是同时被加载或被卸载的。本发明实施例在需要使用该可加载内核模块的驱动时,在内存中加载实现该接口模块的文件和加载实现该驱动逻辑模块的文件,运行加载的文件来实现该驱动;后续在不需要使用驱动逻辑模块中的所有驱动时,卸载该接口模块和该驱动逻辑模块,包括释放该接口模块和该驱动逻辑模块分别占用的资源,例如删除内存中实现该接口模块的文件和实现该驱动逻辑模块的文件来释放内存资源。本发明实施例更新可加载内核模块的主要工作是更新驱动逻辑模块。举例说明,卸载旧的驱动逻辑模块(可以称为第一驱动逻辑模块),包括删除内存中实现该旧的驱动逻辑模块的文件;在内存中加载新的驱动逻辑模块(可以称为第二驱动逻辑模块)的文件,从而实现驱动逻辑模块的更新。可见,发明实施例在更新驱动逻辑模块的过程中可以不用卸载接口模块,这与现有技术需要替换整个可加载内核模块不同。可选地,参见图2,该可加载内核模块还可能包括数据模块。数据模块,用于存储在卸载第一驱动逻辑模块之前该第一驱动逻辑模块为业务应用提供驱动服务的状态。这样,在加载第二驱动逻辑模块之后,该第二驱动逻辑模块可以根据该状态继续为业务应用提供驱动服务。具体地,业务应用持续向第一驱动逻辑模块发送业务请求;第一驱动逻辑模块对在卸载第一驱动逻辑模块之前的最后一个业务请求执行驱动逻辑之后,在该数据模块存储该第一驱动逻辑模块为所述业务应用提供驱动服务的状态。如果第一驱动逻辑模块包括的多个驱动的驱动逻辑分别为业务应用提供驱动服务,则需要在该数据模块存储该多个驱动的驱动逻辑中每个驱动逻辑为业务应用提供驱动服务的状态。通常,不同驱动的驱动逻辑为业务应用提供驱动服务的状态通常不同,以表2为例。参见表2,网络驱动的驱动逻辑为业务应用提供驱动服务的状态包括:网络驱动使用的文件句柄(例如套接字句柄)、网络驱动的通信对端(例如远程服务器)的网络之间互连的协议(英文:internetprotocol,ip)地址和通信对端的端口号。参见表2,文件系统驱动的驱动逻辑为业务应用提供驱动服务的状态包括:文件系统驱动挂载文件系统的挂载点。参见表2,硬件驱动的驱动逻辑为业务应用提供驱动服务的状态包括:硬件驱动所驱动的硬件的配置参数、硬件驱动所驱动的硬件的寄存器状态。参见表2,块存储驱动的驱动逻辑为业务应用提供驱动服务的状态包括块存储驱动使用的虚拟磁盘的编号,还可以包括块存储驱动所驱动的虚拟块设备的容量大小。表2可选地,在卸载第一驱动逻辑模块之前没有第一驱动逻辑模块为业务应用提供驱动服务的状态,则不需要数据模块来存储该状态;因此可加载内核模块可以不包括该数据模块,这样可以节省该数据模块所需的内存资源。可选地,如果加载第二驱动逻辑模块不需要第一驱动逻辑模块为业务应用提供驱动服务的状态,则可以不需要数据模块来存储该状态;因此可加载内核模块可以不包括该数据模块,这样可以节省该数据模块所需的内存资源。方法实施例正常响应业务请求来提供驱动服务的方法流程基于可加载内核模块包括接口模块和驱动逻辑模块,可加载内核模块响应业务请求来提供驱动服务的响应流程如图3所示。步骤s311,接口模块接收业务应用发送的业务请求。步骤s312,接口模块向驱动逻辑模块转发该业务请求。本发明实施例中,业务应用向可加载内核模块中的驱动发送业务请求,具体是向该驱动在接口模块中的接口发送该业务请求。应知,每个业务应用可以使用至少一个驱动。当该业务应用期望使用某个驱动时,向该接口模块中该个驱动的接口发送业务请求。举例,业务应用在期望使用网络驱动时,向网络驱动在接口模块中的接口发送携带有待传输的数据的网络输入/输出(英文:input/output,i/o)请求,该网络i/o请求为一种类型的业务请求;该业务应用在期望向文件系统写数据时,向文件系统驱动在接口模块中的接口发送携带有待写入的数据的写请求,该写请求为一种类型的业务请求。应知,多个业务应用可以使用同一驱动。期望使用某个驱动的多个业务应用,均可以向该驱动发送至少一个业务请求。举例,不同业务应用期望通过网络传输数据时,可以分别向该网络驱动在接口模块中的接口发送携带有待传输的数据的网络i/o请求。后续,接口模块将接收的所有该网络i/o请求依次转发至网络驱动在驱动逻辑模块中的驱动逻辑;驱动逻辑模块针对所有该网络i/o请求分别执行一次该驱动逻辑来实现将所有该网络i/o请求携带的数据分别向网络发送。应知,可能存在一个或多个驱动,该驱动只供单个业务应用使用。当该业务应用期望使用该驱动时,可以向该驱动在接口模块中的接口发送业务请求。接口模块接收到业务应用的多个业务请求,可以不缓存而直接向该驱动在驱动逻辑模块中的驱动逻辑转发该多个业务请求,也可以先缓存该多个业务请求再向该驱动逻辑转发缓存的该个业务请求。可选地,接口模块在缓存某个驱动的多个业务请求时,根据接收每个业务请求的时间将该多个业务请求按照时间先后顺序进行排序;后续,接口模块将排序后的该多个业务请求依次向驱动逻辑模块中该驱动的驱动逻辑转发。举例,接口模块将访问同一驱动的多个业务请求按照时间先后顺序进行排序后,逐个向驱动逻辑模块中该驱动的驱动逻辑发送该业务请求。具体地,待响应完已向该驱动逻辑发送的最新一个业务请求后,才将在已排序的该多个业务请求中该个业务请求的下一个业务请求向该驱动逻辑发送。本发明实施例中,接口模块是根据接口映射表向驱动逻辑模块转发业务请求。具体地,接口模块根据接收业务请求的接口,在该接口映射表中查找到与该接口映射的驱动逻辑的接口,向该驱动逻辑的接口转发该业务请求;这样,驱动逻辑模块通过该驱动逻辑的接口接收到该业务请求,以便对该业务请求执行该驱动逻辑。步骤s313,驱动逻辑模块响应接口模块在步骤s312转发的该业务请求。接口模块向驱动在该驱动逻辑模块中的驱动逻辑转发该业务请求后,驱动逻辑模块响应该业务请求,包括对该业务请求执行该驱动逻辑来提供驱动服务。例如,驱动逻辑模块执行网络驱动在驱动逻辑模块中用于响应网络i/o请求的驱动逻辑,该驱动逻辑用于将该网络i/o请求携带的数据向网络发送。又例如,驱动逻辑模块执行文件系统驱动在驱动逻辑模块中用于响应写请求的驱动逻辑,该驱动逻辑用于将该写请求携带的数据写入文件系统。可选地,接口模块的动作(包括执行步骤s311和步骤s312)和驱动逻辑模块的动作(包括执行步骤s313),均是计算机设备100中的处理器101执行计算机指令实现。更新可加载内核模块的方法流程参见图4,本发明实施例提供一种内核更新方法,该内核更新方法在更新可加载内核模块时主要是更新驱动逻辑模块。为体现驱动逻辑模块在更新前后的区别,在描述内核更新方法时,旧的驱动逻辑模块被称为第一驱动逻辑模块,更新的驱动逻辑模块被称为第二驱动逻辑模块。该内核更新方法由计算机设备100实现。具体地,计算机设备100中的处理器101执行计算机指令(可以存储在存储器105和/或内存102中)来实现该内核更新方法中的各个步骤。该内核更新方法的可选步骤,计算机设备100在接收到内核更新指令时,计算机设备100确定该第一驱动逻辑模块成功执行旧的业务请求后再执行步骤s411,例如计算机设备100的接口模块确定该第一驱动逻辑模块成功执行该旧的业务请求后再执行步骤s411。其中,该内核更新指令指示更新该可加载内核模块。该旧的业务请求为该计算机设备100在接收到该内核更新指令时正在被该第一驱动逻辑模块执行驱动逻辑的任一业务请求。具体地,业务应用使用驱动(通过系统调用)并向该驱动的接口发送该旧的业务请求时,会在该业务应用的上下文的堆栈中记录该驱动的接口。后续,该第一驱动逻辑模块在对该旧的业务请求执行驱动逻辑的过程中,如果需要向该业务应用反馈数据,则首先向该接口模块发送该数据;该接口模块接收该第一驱动逻辑模块向业务应用反馈的数据,并根据该第一接口映射表确定该驱动逻辑在接口模块中对应的接口,再根据该业务应用的上下文的堆栈向调用该接口的业务应用转发该数据。本发明实施例中,该接口模块在接收到该第一驱动逻辑模块执行最后一个该旧的业务请求反馈的数据时,确定该第一驱动逻辑模块成功执行该旧的业务请求。等待该第一驱动逻辑模块成功执行该旧的业务请求后再执行步骤s411,可以保证业务应用的该旧的业务请求均能得到响应,保证业务应用的业务的正确性,提高了业务应用的安全性。该内核更新方法的可选步骤,计算机设备100在接收到内核更新指令时,计算机设备100可以直接执行步骤s411,例如计算机设备100可以指示该接口模块直接执行步骤s411。计算机设备100不用等待该第一驱动逻辑模块成功执行该旧的业务请求而直接执行步骤s411,这样可以提高更新可加载内核模块的效率。一种应用场景,若不需要关心在该可加载内核模块更新前为该业务应用提供驱动服务的情况,则计算机设备100在接收到内核更新指令时可以指示该接口模块直接执行步骤s411。下面介绍内核更新方法的主要流程步骤(步骤s411、步骤s412和步骤s413)。步骤s411,将第一接口映射表置为无效。该第一接口映射表为用于向该第一驱动逻辑模块转发业务请求的接口映射表;在该第一接口映射表中记录有接口模块中的每个接口,以及记录该第一驱动逻辑模块中与该接口模块中的每个接口对应的驱动逻辑;即在该第一接口映射表中记录该接口模块中的所有接口与该第一驱动逻辑模块中的所有驱动逻辑之间的对应关系,并且该对应关系和旧的驱动(旧的可加载内核模块提供的驱动)的接口与该旧的驱动的驱动逻辑之间的对应关系是相同的对应关系。计算机设备100上部署有该接口模块和该第一驱动模块。计算机设备100执行步骤s411将该第一接口映射表置为无效。可选地,计算机设备100指示该接口模块将该第一接口映射表置为无效,或者,计算机设备100通过该第一驱动逻辑模块指示该接口模块将该第一接口映射表置为无效;从而该接口模块根据计算机设备100的指示将该第一接口映射表置为无效。计算机设备100将所述第一接口映射表置为无效的实现方式,本发明实施例不做限定,可以采用现有技术提供的实现方式,或者采用如下三种实现方式。第一种实现方式,计算机设备100(具体可以是该接口模块)为该第一接口映射表设置无效标识,该无效标识指示该接口模块该第一接口映射表是无效的;对该接口模块而言,不会使用无效的该第一接口映射表进行业务请求的转发。第二种实现方式,计算机设备100(具体可以是该接口模块)为该第一接口映射表中的驱动逻辑(具体可以是驱动逻辑的接口)设置无效标识,该无效标识指示该接口模块根据该第一接口映射表查找到的驱动逻辑(具体可以是驱动逻辑的接口)是无效的;对该接口模块而言,不会根据该第一接口映射表向无效的驱动逻辑(具体可以是驱动逻辑的接口)转发业务请求。第三种实现方式,计算机设备100(具体可以是该接口模块)删除该第一接口映射表中记录的该第一驱动逻辑模块包括的所有驱动逻辑(具体可以是驱动逻辑的接口)。这样,该接口模块根据该第一接口映射表查找不到驱动逻辑,具体可以是查找不到该第一驱动逻辑模块包括的所有驱动逻辑的接口。这样,未包含驱动逻辑(具体可以是驱动逻辑的接口)的该第一接口映射表,是无效的。在计算机设备100将第一接口映射表被置为无效后,接口模块停止根据该第一接口映射表向该第一驱动逻辑模块转发新的业务请求;其中,该新的业务请求是指该接口模块在该第一接口映射表被置为无效后从业务应用接收的任一业务请求。这样,该第一驱动逻辑模块不会接收到该新的业务请求,也不用于响应该新的业务请求,暂停对业务应用提供驱动服务。可选地,如果计算机设备100为接口模块在内存中分配有存储空间,则接口模块可以在第一接口映射表被置为无效后继续接收业务应用的该新的业务请求,并使用该存储空间缓存该新的业务请求。具体地,接口模块在该第一接口映射表被置为无效后,可以继续基于该可加载内核模块与业务应用的通信连接接收业务应用的该新的业务请求;接口模块将该新的业务请求缓存,但不向第一驱动逻辑模块转发该新的业务请求,暂时中断为该业务应用提供驱动服务;后续再响应新的业务请求,恢复为该业务应用提供驱动服务。进一步可选地,由于该存储空间是有限的,所以在接口模块缓存该新的业务请求的同时,计算机设备100指示该业务应用停止向该接口模块继续发送该新的业务请求。可选地,如果计算机设备100未为接口模块在内存中分配存储空间,该接口模块对从业务应用接收的业务请求只能直接向驱动逻辑模块转发,则计算机设备100在步骤s411将第一接口映射表置为无效之前,指示该业务应用停止向该接口模块发送任一该新的业务请求。这样可以避免丢失在执行步骤s411时该接口模块接收的该新的业务请求。本发明实施例中,计算机设备100指示该业务应用停止向该接口模块发送该新的业务请求的一种实现方式,如果业务应用直接向该接口模块发送新的业务请求,则计算机设备100(具体可以是计算机设备100中部署的接口模块)通知该业务应用停止向该接口模块发送该新的业务请求。进一步可选地,如果业务应用向该接口模块发送新的业务请求需要其它模块中转,计算机设备100(具体可以是计算机设备100中部署的接口模块)通知其它模块暂停向该接口模块转发业务应用的新的业务请求。步骤s412,将第一驱动逻辑模块替换为第二驱动逻辑模块。该第二驱动逻辑模块包括能够为业务应用提供驱动服务的驱动逻辑,该驱动逻辑为更新的驱动(更新的可加载内核模块提供的驱动)的驱动逻辑。应知,该第二驱动逻辑模块包括更新的驱动(更新的可加载内核模块提供的驱动)的驱动逻辑,而该第一驱动逻辑模块包括旧的驱动(旧的可加载内核模块提供的驱动)的驱动逻辑。通常,该更新的驱动的驱动逻辑与该旧的驱动的驱动逻辑可以部分或者全部不同,例如可以提供不同功能。计算机设备100将第一驱动逻辑模块替换为第二驱动逻辑模块的实现方式,本发明实施例不做限定,可以采用现有技术提供的实现方式,或者采用如下两种实现方式。第一种实现方式,计算机设备100不卸载可加载内核模块中的第一驱动逻辑模块,直接将该第一驱动逻辑模块替换为该第二驱动逻辑模块,例如利用该第一驱动逻辑模块所占用的内存资源加载第二驱动逻辑模块。这样可以保证替换效率,加快使用第二驱动逻辑模块响应新的业务请求的时间,从而减少恢复驱动服务的时间。第二种实现方式,计算机设备100卸载该可加载内核模块中的该第一驱动逻辑模块,再在该可加载内核模块中加载该第二驱动逻辑模块。卸载该第一驱动逻辑模块,可以释放该第一驱动逻辑模块所占用的资源(例如内存资源),然后再分配资源来加载该第二驱动逻辑模块,可以实现资源的有效利用。相对于第一种实现方式,第二种实现方式可以保证该第二驱动逻辑模块后续运行的稳定,例如不会访问到该第一驱动逻辑模块在内存中残留的数据或指令而导致第二驱动逻辑模块运行异常。本发明实施例中,为同一个业务应用提供驱动服务的更新的驱动(更新的可加载内核模块提供的驱动)的接口和旧的驱动(旧的可加载内核模块提供的驱动)的接口是相同的接口;因此在步骤s412(将第一驱动逻辑模块替换为第二驱动逻辑模块)的前后,接口模块中记录的接口是不变的。并且,接口模块中的接口对应的第一驱动逻辑模块中的驱动逻辑,与该接口对应的第二驱动逻辑模块中的驱动逻辑,均为同一业务应用提供驱动服务。步骤s413,在第二接口映射表中记录所述接口模块中的每个接口,以及所述接口对应的所述第二驱动逻辑模块中的驱动逻辑。该第二接口映射表为用于向该第二驱动逻辑模块转发业务请求的接口映射表;在该第二接口映射表中记录有接口模块中的每个接口,以及记录有该第二驱动逻辑模块中与该接口模块中的每个接口对应的驱动逻辑;即在该第二接口映射表中记录该接口模块中的所有接口与该第二驱动逻辑模块中的所有驱动逻辑之间的对应关系,并且该对应关系和更新的驱动(更新的可加载内核模块提供的驱动)的接口与该更新的驱动的驱动逻辑之间的对应关系是相同的对应关系。该第二接口映射表可以是不同于该第一接口映射表的新表。因此,第一接口映射表与第二接口映射表可以同时存在。如果后续再将第二驱动逻辑模块替换为第一驱动逻辑模块,计算机设备100可以将有效的第二接口映射表置为无效,而将无效的第一接口映射表置为有效;从而接口模块可以根据有效的第一接口映射表将业务请求发送至第一驱动逻辑模块。这样,可以实现在驱动逻辑模块更替时,使用更替后的驱动逻辑模块所对应的接口映射表高效地恢复驱动服务。该第二接口映射表可以是被置为无效后的该第一接口映射表。因为在第一接口映射表和第二接口映射表记录有相同的接口(即接口模块包括的所有接口),计算机设备100在更新第二接口映射表记录的对应关系(更新为该接口模块包括的所有接口与该第二驱动逻辑模块包括的所有驱动逻辑之间的对应关系)时,只需要更新该第二驱动逻辑模块包括的所有驱动逻辑,减少了需要记录的数据,提高了记录效率。一种实现举例,计算机设备100将删除该第一驱动逻辑模块包括的所有驱动逻辑(具体可以是驱动逻辑的接口)后的该第一接口映射表作为第二接口映射表,再在该第二接口映射表中建立该接口模块包括的所有接口与该第二驱动逻辑模块包括的所有驱动逻辑(具体可以是驱动逻辑的接口)之间的对应关系。可选地,在第二接口映射表记录该接口模块包括的所有接口与该第二驱动逻辑模块包括的所有驱动逻辑之间的对应关系之后,将第二接口映射表置为有效,以便接口模块根据有效的第二接口映射表将新的业务请求发送至第二驱动逻辑模块。在本发明实施例中,如果在替换第一驱动逻辑为第二驱动逻辑之前,计算机设备100指示该业务应用停止了向该接口模块发送新的业务请求,则在步骤s412替换第一驱动逻辑模块为第二驱动逻辑模块之后,或者在该第二接口映射表中记录接口模块包括的所有接口与第二驱动逻辑模块包括的所有驱动逻辑之间的对应关系之后,计算机设备100指示该业务应用恢复向该接口模块发送新的业务请求。如果接口模块缓存有新的业务请求,先将缓存的该新的业务请求向第二驱动逻辑模块转发,再转发在业务应用恢复向该接口模块发送新的业务请求之后从业务应用接收的新的业务请求。接口模块根据第二接口映射表向第二驱动逻辑模块转发新的业务请求的一种实现方式,该接口模块根据接收该新的业务请求的接口,在该第二接口映射表查找该接口对应的驱动逻辑的接口,将该新的业务请求向该驱动逻辑的接口发送。从而,该第二驱动逻辑模块对该新的业务请求执行该驱动逻辑,恢复对业务应用提供驱动服务。可选地,计算机设备100在该数据模块记录有该第一驱动逻辑模块在被替换前为所述业务应用提供驱动服务的状态,即该第一驱动逻辑模块在被替换前响应最后一个该业务请求后所处的状态。在替换该第一驱动逻辑模块为第二驱动逻辑模块之后,该第二驱动逻辑模块基于该状态对该新的业务请求执行驱动逻辑。应知,如果存在以下两种情况,待计算机设备100更新该状态之后,该第二驱动逻辑模块才可以基于该状态响应该新的业务请求。第一种情况,如果存在用于该第二驱动逻辑模块的与该状态相关的新数据,该新数据不用于第一驱动逻辑模块,则计算机设备100将该新数据添加到该数据模块中存储的该状态中。第二种情况,如果所述数据模块记录的所述状态为第一版本的数据,则计算机设备100将所述数据模块中的所述第一版本的数据更新为所述第二驱动逻辑模块支持的第二版本的数据。其中,第一版本与第二版本为不同版本,例如第一版本与第二版本是指不同格式,或者第一版本与第二版本分别排列数据的方式不同。举例说明,所述数据模块记录的所述状态为第一格式的数据。在所述第二驱动逻辑模块基于所述数据模块记录的所述状态对所述新的业务请求执行所述第二驱动逻辑之前,计算机设备100将所述数据模块中的所述第一格式的数据更新为所述第二驱动逻辑模块支持的第二格式的数据。第一格式与第二格式是指不同格式,例如第一格式与第二格式分别采用不同二进制编码表示同一数据。可见,现有技术需要卸载整个可加载内核模块,会终止为业务应用提供的驱动服务,以及释放该可加载内核模块与该业务应用的通信连接所占用的资源;待加载新的可加载内核模块后,业务应用再建立与新的可加载内核模块的通信连接,再基于该通信连接重新为该业务应用提供驱动服务。本发明实施例提供的内核更新方法,在替换驱动逻辑模块的期间,业务应用与接口模块的通信连接不中断,待完成替换驱动逻辑模块之后,业务应用可以基于该通信连接继续向接口模块发送业务请求,驱动逻辑模块响应该业务请求,从而恢复对业务应用提供的驱动服务;可见,本发明实施例在更新可加载内核模块时,仅暂停为业务应用提供驱动服务,由于该内核更新方法更新可加载内核模块所需的时间短,可以节省恢复该驱动服务的时间成本,提高恢复该驱动服务的效率;综合上述,该内核更新方法能够在用户未感知的情况下,实现该可加载内核模块的更新。使用内核更新方法更新可加载内核模块的一种实现举例图5提供了块存储业务的应用场景。在图5所示的应用场景中,linux内核在图5中示意为“linuxkernel”。本举例中,该“linuxkernel”的可加载内核模块只包括一个驱动,该驱动为块存储驱动,该块存储驱动在图5中示意为“scsidriver”。可加载内核模块的接口模块、驱动逻辑模块和数据模块,在图5中依次示意为“scsi-if”模块、“scsidriverlogic”模块、“scsi-data”模块。其中,“scsi-if”模块部署“scsidriver”的接口,“scsidriverlogic”模块部署“scsidriver”的驱动逻辑,“scsi-data”模块用于存储“scsidriverlogic”模块为“虚拟机1”(部署业务应用)和“虚拟机2”(部署业务应用)分别提供驱动服务的状态。在图5中,旧的“scsidriverlogic”模块示意为“scsidriverlogic(old)”模块,更新的“scsidriverlogic”模块示意为“scsidriverlogic(new)”模块。本应用场景中,块存储服务器(英文:blockstoragesever)创建虚拟磁盘,并通知“scsidriver”该虚拟磁盘的容量、该虚拟磁盘的编号、该虚拟磁盘的数量。“scsidriver”将状态数据(该虚拟磁盘的容量、该虚拟磁盘的编号、该虚拟磁盘的数量)记录到“scsi-data”模块中。本应用场景中,“scsidriver”基于该虚拟磁盘,通过“linuxkernel”的基本内核提供的块设备管理功能(在linux内核中也称为block-dev功能)创建两个虚拟块设备;这两个虚拟块设备在图5中分别示意为“/dev/sda”和“/dev/sdb”。本应用场景中,业务应用分别部署在两个虚拟机(英文:virtualmachine,vm)中,这两个虚拟机在图5中分别示意为“虚拟机1”和“虚拟机2”,并且“/dev/sda”和“/dev/sdb”分别供“虚拟机1”和“虚拟机2”使用;应知,上述两个虚拟机可以替换为进程或线程,即业务应用也可以部署在进程或线程中,“/dev/sda”和“/dev/sdb”供业务应用的进程或业务应用的线程使用。本应用场景中,对“/dev/sda”或“/dev/sdb”的访问,实际上是对该虚拟磁盘的访问。具体地,“虚拟机1”和“虚拟机2”需要访问数据时各自向“/dev/sda”和“/dev/sdb”发送访问请求,该访问请求可以是读请求或写请求,该读请求指示读数据,该写请求指示写数据。提供设备管理功能的设备管理模块(在图5中示意为“block-dev”模块),接收向“/dev/sda”发送的访问请求和接收向“/dev/sdb”发送的访问请求;“block-dev”模块将接收的访问请求转换为小型计算机系统接口(英文:smallcomputersysteminterface,scsi)命令字,其中,根据该访问请求转换得到的scsi命令字记录有虚拟磁盘的编号、命令字操作模式、数据位置等信息;“block-dev”将转换得到的scsi命令字发送至“scsidriver”的“scsi-if”模块。“scsi-if”模块根据第三接口映射表将从“block-dev”模块接收的scsi命令字转发至“scsidriver”的“scsidriverlogic”模块;该第三映射表是指适用于本应用场景中的接口映射表,记录“scsidriver”在“scsi-if”模块的接口与“scsidriver”在“scsidriverlogic”模块中的驱动逻辑之间的对应关系。“scsidriverlogic”模块将scsi命令字转化为网络请求,并根据块存储服务器的ip地址通过网络(如图5所示)将该网络请求发送至块存储服务器。举例说明,“scsi-if”模块的第三接口映射表见表3。表3中,3个接口(“scsi-dispatch-func”、“scsi_disk_add”、“scsi_disk_rmv”)依次对应3个驱动逻辑的接口(“scsi_main_dispatch_func”、“scsi_main_disk_add”、“scsi_main_disk_rmv”);其中,“scsi_main_dispatch_func”为将scsi命令字转换为网络请求的驱动逻辑的接口,“scsi_main_disk_add”为添加虚拟磁盘的驱动逻辑的接口,“scsi_main_disk_rmv”为卸载虚拟磁盘的驱动逻辑的接口。接口驱动逻辑的接口scsi-dispatch-funcscsi_main_dispatch_funcscsi_disk_addscsi_main_disk_addscsi_disk_rmvscsi_main_disk_rmv表3“scsi-if”模块根据第三接口映射表将scsi命令字向“scsi_main_dispatch_func”这个接口转发,“scsidriverlogic”模块对该scsi命令字执行的驱动逻辑为:将该scsi命令字转换为网络请求,该网络请求包括虚拟磁盘的编号和数据位置等信息。块存储服务器接收到该网络请求后,根据虚拟磁盘的编号确定虚拟磁盘,并根据该数据位置在该虚拟磁盘访问数据,例如从数据位置读取数据,或者向该数据位置写入数据。图3所示的内核更新方法应用到图5所示的应用场景中的具体流程如图6所示。步骤601,“upd-control”模块向“scsidriverlogic(old)”模块发送升级通知。“upd-control”模块,部署在计算机设备100中,用于控制可加载内核模块的升级流程,“upd-control”模块未在图5中示意出。本实施例中,“upd-control”模块接收到内核更新指令时向“scsidriverlogic(old)”模块发送升级通知。步骤602,“scsidriverlogic(old)”模块通知“scsi–if”模块注销“scsidriverlogic(old)”模块。具体地,“scsidriverlogic(old)”模块通知“scsi–if”模块将第三接口映射表置为无效,“scsi–if”模块将该第三接口映射表置为无效的具体实现参见上述对计算机设备100将第一接口映射表置为无效的细节描述,例如“scsi–if”模块可以为第三接口映射表(例如表3)设置无效标识,或者为该第三接口映射表(例如表3)中记录的该“scsidriverlogic(old)”模块包括的驱动逻辑的接口设置无效标识,或者删除该第三接口映射表(例如表3)中记录的该“scsidriverlogic(old)”模块包括的所有驱动逻辑的接口。“scsidriverlogic(old)”模块将第三接口映射表置为无效,实现在“scsidriverlogic(old)”模块注销“scsidriverlogic(old)”模块。步骤603,“scsi–if”模块阻塞访问请求。具体地,“虚拟机1”和“虚拟机2”分别通过“/dev/sda”和“/dev/sdb”向“block-dev”模块发送访问请求。“scsi–if”模块调用“block-dev”模块提供的阻塞功能,该阻塞功能暂停“block-dev”模块继续向“scsi–if”模块发送由该访问请求转换来的scsi命令字。可选地,如果在内存中为“block-dev”模块分配了存储空间,“block-dev”模块可以继续接收“虚拟机1”的访问请求和“虚拟机2”的访问请求,在该存储空间缓存该访问请求,或者将接收的访问请求继续转换为scsi命令字,缓存转换得到的scsi命令字。可选地,计算机设备100还可以通过操作系统将“虚拟机1”和“虚拟机2”置为阻塞状态。这样,被设置阻塞状态的“虚拟机1”和“虚拟机2”均停止通过“/dev/sda”和“/dev/sdb”向“block-dev”模块发送访问请求;从源头(“虚拟机1”和“虚拟机2”)停止访问请求的发送。如果为“block-dev”模块分配了用于缓存访问请求或者scsi命令字的存储空间,节省“block-dev”模块该存储空间,以及避免因该存储空间不足而导致访问请求或者scsi命令字的丢失。可选地,如果未在内存中为“block-dev”模块分配了存储空间,则对于每次从“虚拟机1”和“虚拟机2”接收的访问请求,“block-dev”模块均将该访问请求均转换为scsi命令字,并直接向“scsi–if”模块发送该scsi命令字;因此在未为“block-dev”模块分配存储空间的情况下,计算机设备100必须通过操作系统将“虚拟机1”和“虚拟机2”置为阻塞状态。可选地,“scsi–if”模块等待步骤603阻塞访问请求之后,才通知“scsidriverlogic(old)”模块已完成“scsidriverlogic(old)”模块的注销,使得“scsidriverlogic(old)”模块在接收到完成注销的通知后执行步骤604。步骤604,“scsidriverlogic(old)”模块将虚拟磁盘的编号存储至“scsi-data”模块。本应用场景中,虚拟磁盘的编号为“scsidriverlogic(old)”模块在被更新前为“虚拟机1”和“虚拟机2”提供驱动服务的状态。“scsi-data”模块可以为内存中的部分存储空间。“scsidriverlogic(old)”模块将虚拟磁盘的编号存储至“scsi-data”模块的同时,记录虚拟磁盘的编号的版本号。步骤605,“upd-control”模块卸载“scsidriverlogic(old)”模块。“upd-control”卸载“scsidriverlogic(old)”模块的具体卸载方式参见上述卸载第一驱动逻辑模块的相关描述。图5(a)示意了卸载“scsidriverlogic(old)”模块之前的“scsidriver”,图5(b)示意了卸载“scsidriverlogic(old)”模块之后的“scsidriver”。步骤606,“upd-control”模块加载“scsidriverlogic(new)”模块。“upd-control”加载“scsidriverlogic(new)”模块的具体加载方式参见上述加载第二驱动逻辑模块的相关描述。图5(c)示意了加载“scsidriverlogic(new)”模块之后的“scsidriver”。“scsidriverlogic(new)”模块被加载后,检查自己支持的状态的版本与“scsi-data”模块记录的虚拟磁盘的编号的版本是否不同,举例说明,版本不同可以是指所述状态的格式不同;如果版本不同,“scsidriverlogic(new)”模块执行步骤607;如果版本相同,“scsidriverlogic(new)”模块直接执行步骤608,即跳过执行步骤607。步骤607,“scsidriverlogic(new)”模块升级“scsi-data”模块记录的虚拟磁盘的编号。具体地,将“scsi-data”模块记录的虚拟磁盘的编号更新至“scsidriverlogic(new)”模块支持的版本的虚拟磁盘的编号。步骤608,“scsidriverlogic(new)”模块通知“scsi–if”模块注册“scsidriverlogic(new)”模块。具体地,“scsidriverlogic(new)”模块将“scsidriverlogic(new)”模块包括的驱动逻辑的接口发送至“scsi–if”模块,“scsi–if”模块使用“scsidriverlogic(new)”模块包括驱动逻辑的接口一一对应地更新第三接口映射表中“scsidriverlogic(old)”模块包括驱动逻辑的接口。可选地,“scsidriverlogic(new)”模块将“scsidriverlogic(new)”模块包括的驱动逻辑的接口以固定格式发送给“scsi–if”模块;“scsi–if”模块根据该固定格式,一一对应地使用“scsidriverlogic(new)”模块包括的驱动逻辑的接口在第三接口映射表中更新“scsidriverlogic(old)”模块包括驱动逻辑的接口。步骤609,“scsi–if”模块取消对访问请求的阻塞。具体地,步骤609执行与步骤603相反的动作,例如“scsi–if”模块调用“block-dev”模块提供的恢复功能,该恢复功能取消了“scsi–if”模块在步骤603中调用的阻塞功能,使得“block-dev”模块继续向“scsi–if”模块发送由该访问请求转换来的scsi命令字。可选地,如果在卸载“scsidriverlogic(old)”模块之前,计算机设备100先前通过操作系统将“虚拟机1”和“虚拟机2”置为阻塞状态,则在加载“scsidriverlogic(new)”模块之后,通过操作系统取消“虚拟机1”和“虚拟机2”的阻塞状态,使得“虚拟机1”和“虚拟机2”可以通过“/dev/sda”和“/dev/sdb”向“block-dev”模块发送访问请求。“scsi–if”模块执行步骤609之后,可以通知“scsidriverlogic(new)”模块已取消对访问请求的阻塞。从而“scsidriverlogic(new)”模块执行步骤610。步骤610,“scsidriverlogic(new)”模块通知“upd-control”模块加载成功。加载“scsidriverlogic(new)”模块后,“block-dev”模块将在步骤603阻塞的访问请求转换为scsi命令字,并向“scsi–if”模块发送该scsi命令字;“scsi–if”模块根据更新的第三接口映射表将该scsi命令字转发至“scsidriverlogic(new)”模块的接口;“scsidriverlogic(new)”模块使用自己的与scsi命令字对应的驱动逻辑将接收的scsi命令字转换为网络请求,该网络请求包括版本更新后的虚拟磁盘的编号;“scsidriverlogic(new)”模块将该网络请求发送至块存储服务器。装置实施例本装置实施例提供一种内核更新装置,该内核更新装置部署在计算机设备100上。该内核更新装置包括用于执行上述方法实施例提供的内核更新方法的功能模块;本装置实施例对该功能模块的划分不做限定,可以按照内核更新方法的流程步骤对应划分功能模块,也可以按照具体实现需要划分功能模块。图7示例性地提供一种对该内核更新装置700的功能划分。在本示例中,所述可加载内核模块包括接口模块和第一驱动逻辑模块,所述接口模块包括至少一个驱动中每个驱动的至少一个接口,所述第一驱动逻辑模块包括所述至少一个驱动中每个驱动的至少一个驱动逻辑;对所述可加载内核模块、驱动、接口模块、第一驱动逻辑模块、接口和驱动逻辑的细节描述,参见方法实施例中的相关描述。第一接口映射表用于记录所述接口模块中的每个接口与所述接口对应的所述第一驱动逻辑模块的驱动逻辑。对所述第一接口映射表的细节描述,参见方法实施例中的相关描述。在更新所述可加载内核模块之前,接口模块根据第一接口映射表将接收的业务应用的业务请求转发至接收所述业务请求的接口对应的第一驱动逻辑,所述第一驱动逻辑模块对所述业务请求执行所述第一驱动逻辑,所述第一驱动逻辑是指所述第一驱动逻辑模块中为所述业务应用提供驱动服务的驱动逻辑;当更新所述可加载内核模块时,参见图7,所述内核更新装置700包括:设置单元701,用于将所述第一接口映射表置为无效,无效的所述第一接口映射表使得所述接口模块停止根据所述第一接口映射表将所述第一接口映射表被置为无效后接收的所述业务应用的新的业务请求发送至所述第一驱动逻辑;替换单元702,用于将所述可加载内核模块中的所述第一驱动逻辑模块替换为第二驱动逻辑模块,所述第二驱动逻辑模块为更新的驱动逻辑模块;所述第二驱动逻辑模块包括能够为所述业务应用提供驱动服务的第二驱动逻辑;因此,所述第二驱动逻辑是指所述第二驱动逻辑模块中为所述业务应用提供驱动服务的驱动逻辑;记录单元703,用于在第二接口映射表中记录所述接口模块中的每个接口以及所述接口对应的所述第二驱动逻辑模块中的驱动逻辑,以便所述接口模块根据所述第二接口映射表将所述新的业务请求发送至所述第二驱动逻辑模块的第二驱动逻辑。可选地,所述可加载内核模块还包括数据模块,所述数据模块用于记录所述第一驱动逻辑在被替换前为所述业务应用提供驱动服务的状态;对所述数据模块和所述状态的细节描述,参见方法实施例中的相关描述。所述第二驱动逻辑模块基于所述数据模块记录的所述状态对所述新的业务请求执行所述第二驱动逻辑。可选地,所述数据模块记录的所述状态为第一格式的数据;参见图7,所述内核更新装置700还包括:更新模块704,用于在所述第二驱动逻辑模块基于所述数据模块记录的所述状态对所述新的业务请求执行所述第二驱动逻辑之前,将所述第一格式的数据更新为所述第二驱动逻辑模块支持的第二格式的数据。可选地,参见图7,所述内核更新装置700还包括:确定单元705,用于在所述设置单元701将所述第一接口映射表置为无效之前,接收内核更新指令,所述内核更新指令指示更新所述可加载内核模块;用于确定所述第一驱动逻辑模块成功执行旧的业务请求,所述旧的业务请求为在接收到所述内核更新指令时被所述第一驱动逻辑模块执行所述第一驱动逻辑的任一业务请求。可选地,所述设置单元701具体用于:删除所述第一接口映射表中记录的所述第一驱动逻辑模块包括的所有驱动逻辑。可选地,所述替换单元702,用于:卸载所述可加载内核模块中的所述第一驱动逻辑模块,在所述可加载内核模块中加载所述第二驱动逻辑模块。可选地,设置单元701和记录单元703均可以集成到接口模块,设置单元701的功能和记录单元703的功能均可以由该接口模块实现。以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1