一种在虚拟机内部的驱动隔离系统与方法技术方案

技术编号:8347984 阅读:261 留言:0更新日期:2013-02-21 01:37
本发明专利技术公开了一种在虚拟机内部的驱动隔离系统与方法,涉及计算机容错技术,通过被隔离驱动程序的授权表,实现简单、有效、兼容已有操作系统和驱动程序架构的基于全虚拟化技术在虚拟机内部隔离驱动程序的系统,一种在虚拟机内部的驱动隔离系统包括运行于虚拟机用户态的驱动隔离加载模块、虚拟机内核态的内存信息监视模块以及虚拟机管理器内部的内存访问控制模块,所述虚拟机内核态的内存信息监视模块包括:包装函数库、隔离控制子模块以及消息通信子模块。

【技术实现步骤摘要】

本专利技术属于计算机科学领域,涉及计算机容错技术,特别涉及。
技术介绍
对于高可靠计算机系统来说,操作系统的可靠性显得至关重要,但是由于操作系统的高度复杂性,使得其可靠性仍然是一个至关重要却仍未解决的问题。通过可操作系统的可扩展机制,大量第三方开发的驱动程序可被加载进内核。同时传统操作系统的宏内核架构,使得驱动与内核将运行在相同的地址空间和特权级下,任何驱动程序的故障都可轻易的传递到内核其他部分,严重削弱了系统的可靠性。由于驱动程序所占内核代码量的比例巨大,且常常缺乏完善的测试,使得驱动程序故障成为操作系统崩溃的主要原因。相关研究表明,Linux操作系统中驱动程序的故障是内核其他部分故障的三到七倍,在Windows操作系统下也有类似的结论。近年来,虚拟机技术也被作为解决驱动程序可靠性问题的方法。传统方法是将驱动及其内核都隔离到独立的虚拟机实例中,利用虚拟机实例本身的隔离性来隔离驱动程序。然而,这种方法只是利用虚拟机替代整机来承受可能出现的系统崩溃,从而换取整机的可靠性提高,对于虚拟机中的驱动程序的可靠性并没有提高。如果虚拟机中的驱动程序发生故障则会造成虚拟机实例的故障或崩溃,从而造成虚拟机实例所提供的所有服务中断。另外,每个被隔离的驱动程序运行一个独立的客户机操作系统,同样也造成了较多的性能损失。
技术实现思路
针对上述缺陷或不足,本专利技术提供了通过被隔离驱动程序的授权表,实现简单、有效、兼容已有操作系统和驱动程序架构的。为达到上述目的,本专利技术提供的在虚拟机内部的驱动隔离系统包括运行于虚拟机用户态的驱动隔离加载模块、虚拟机内核态的内存信息监视模块以及虚拟机管理器内部的内存访问控制模块,其中,所述运行于虚拟机用户态的驱动隔离加载模块将驱动模块文件中监视未定义符号与内存信息监视模块中监视包装函数建立联系,使得驱动以隔离方式运行,并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;所述虚拟机内核态的内存信息监视模块包括包装函数库、隔离控制子模块以及消息通信子模块,其中,所述包装函数库为虚拟机内核中所监控的函数建立内核包装函数,并为虚拟机内核中驱动接口中的接口函数建立驱动包装函数,以使得被隔离驱动与内核和驱动包装函8数链接,并进入隔离运行模式;所述内核包装函数包括内存包装函数和注册包装函数,所述内存包装函数是指内核中内存管理函数的包装函数,所述注册包装函数是指内核中驱动注册函数的包装函数;所述隔离控制子模块接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;所述消息通信子模块向内存访问控制模块实时报告被隔离驱动所使用内存信息、可信任的虚拟机内核的地址范围、及发送建立被隔离驱动授权表的指令;所述消息通信子模块被所述包装函数库和所述隔离控制子模块调用;所述内存访问控制模块用于控制被隔离驱动程序写操作,包括授权表管理子模块、页面设置子模块以及缺页处理子模块,其中,所述授权表管理子模块接收所述内存信息监视模块发出的设置被隔离驱动授权表的指令后,设置被隔离驱动程序可写内存范围的授权表,并负责确认写操作地址是否在授权表中;所述页面设置子模块接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为只读另外,当缺页处理子模块允许写操作时,还接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表,在写操作结束后,重新将影子页表设置为只读;所述缺页处理子模块当被隔离驱动所在虚拟机内核出现写操作时,根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作。运行于虚拟机用户态的驱动隔离加载模块具体用于运行于虚拟机用户态的驱动隔离加载模块,将驱动模块文件中的内存管理函数的未定义符号和驱动注册函数的未定义符号替换为对应的所述内存包装函数和注册包装函数的符号及其符号名;调用虚拟机内核的原模块加载方式加载驱动程序模块,以使驱动程序模块中包装函数符号将自动链接到所述虚拟机内存信息监视模块中的所监控的包装函数,从而完成与内核包装函数建立联系;虚拟机内核的原模块加载方式会调用驱动模块的初始化函数,执行驱动注册,驱动会自动调用已经链接到注册包装函数的驱动注册函数,完成与驱动包装函数建立联系。所述隔离运行模式是指被隔离驱动程序使用的所有内存信息都被实时的捕获,并建立对应的授权表,实现驱动程序隔离运行模式具体包括驱动在加载时,执行驱动注册函数向内核的驱动接口注册驱动程序,将内核中驱动模块各个功能函数的地址赋予驱动接口中的接口函数指针,通过所述驱动隔离加载模块,驱动实际将执行驱动注册函数对应的包装函数,即注册包装函数,从而实现内核对驱动调用过程的监视;所述注册包装函数执行所述虚拟机内核中的原驱动注册函数,并执行驱动接口中接口函数指针的替换操作;所述接口函数指针的替换操作是指将接口函数指针赋值成驱动包装函数的地址,代替原驱动功能函数的地址;驱动程序加载后,驱动接口中的接口函数指针已被驱动包装函数所替换,当内核调用驱动函数时,将执行驱动包装函数,获得驱动所使用的被赋予内存信息和栈内存信息;驱动包装函数记录被赋予内存信息和栈内存信息,并将被赋予内存信息和栈内存信息注入到虚拟机管理器的授权表管理子模块,执行被隔离驱动中的原驱动函数;所述被赋予内存信息包括内核授权驱动操作的内核数据结构的内存起始地址及其大小;所述栈内存信息包括执行驱动程序的进程的栈的内存起始地址及其大小;驱动在运行过程中,调用内存管理函数来分配或释放内存,通过所述驱动隔离加载模块,驱动实际将执行内存管理函数对应的包装函数,即内存包装函数,实现向内核申请分配或释放内存;所述内存包装函数执行所述虚拟机内核中的原内存管理函数,并记录分配或释放的堆内存信息,并将堆内存信息注入到虚拟机管理器的授权表管理子模块;所述堆内存信息包括驱动程序向所述虚拟机内核申请分配或释放的内存起始地址及其大小。所述内存信息监视模块中的隔离控制子模块具体用于I)当接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息时,将执行以下操作向内存访问控制模块中的授权表管理子模块,发出建立被隔离驱动程序对应授权表的指令;当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的页面设置子模块,发出设置虚拟机管理器中影子页表为成只读模式的指令;当被隔离驱动是所述虚拟机中第一个被隔离的驱动时,向内存访问控制模块中的缺页处理子模块,注入所述被隔离驱动所在虚拟机的可信任内核空间的地址范围;2)当捕获驱动进入内核的消息,但没有接收到进入内核的驱动为被隔离驱动的消息时,将执行以下操作向内存访问控制模块中的缺页处本文档来自技高网...

【技术保护点】
一种在虚拟机内部的驱动隔离系统,其特征在于:包括运行于虚拟机用户态的驱动隔离加载模块、虚拟机内核态的内存信息监视模块以及虚拟机管理器内部的内存访问控制模块,其中,所述运行于虚拟机用户态的驱动隔离加载模块:将驱动模块文件中监视未定义符号与内存信息监视模块中监视包装函数建立联系,使得驱动以隔离方式运行,并向内存信息监视模块中的隔离控制子模块发出被隔离驱动程序提醒消息,以使得进入内核的驱动为被隔离驱动程序;所述监视未定义符号包括内存管理函数的未定义符号和驱动注册函数的未定义符号;所述虚拟机内核态的内存信息监视模块包括:包装函数库、隔离控制子模块以及消息通信子模块,其中,所述包装函数库:为虚拟机内核中所监控的函数建立内核包装函数,并为虚拟机内核中驱动接口中的接口函数建立驱动包装函数,以使得被隔离驱动与内核和驱动包装函数链接,并进入隔离运行模式;所述内核包装函数包括内存包装函数和注册包装函数,所述内存包装函数是指内核中内存管理函数的包装函数,所述注册包装函数是指内核中驱动注册函数的包装函数;所述隔离控制子模块:接收运行于虚拟机用户态的驱动隔离加载模块发出的被隔离驱动程序提醒消息,建立被隔离驱动程序的相关信息,并指示消息通信子模块向所述虚拟机管理器内部的内存访问控制模块发送设置被隔离驱动授权表的指令,同时,根据需要获取可信任的虚拟机内核的地址范围,注入到内存访问控制模块,并发出设置虚拟机管理器中影子页表的指令;所述可信任的虚拟机内核的地址范围包括虚拟机内核代码和未被隔离的驱动程序代码的内存起始地址及其大小;所述消息通信子模块:向内存访问控制模块实时报告被隔离驱动所使用内存信息、可信任的虚拟机内核的地址范围、及发送建立被隔离驱动授权表的指令;所述消息通信子模块被所述包装函数库和所述隔离控制子模块调用;所述内存访问控制模块:用于控制被隔离驱动程序写操作,包括:授权 表管理子模块、页面设置子模块以及缺页处理子模块,其中,所述授权表管理子模块:接收所述内存信息监视模块发出的设置被隔离驱动授权表的指令后,设置被隔离驱动程序可写内存范围的授权表,并负责确认写操作地址是否在授权表中;所述页面设置子模块:接收所述内存信息监视模块发出的设置虚拟机管理器中影子页表的指令,并根据所述被隔离驱动所在虚拟机的内核空间在虚拟机管理器中所对应的影子页表,将影子页表设置为只读另外,当缺页处理子模块允许写操作时,还接收所述缺页处理子模块发出的允许写操作段的指令,并设置写操作目标地址对应的影子页表,在写操作结束后,重新将影子页表设置为只读;所述缺页处理子模块:当被隔离驱动所在虚拟机内核出现写操作时,根据写操作指令的来源和被隔离驱动对应的授权表,判断和控制是否允许进行写操作。...

【技术特征摘要】

【专利技术属性】
技术研发人员:董小社郑豪张兴军王恩东辛龙张东陈宝可王强
申请(专利权)人:西安交通大学山东高效能服务器和存储研究院
类型:发明
国别省市:

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

1