专利名称:一种虚拟机系统输入/输出设备动态分配的方法及其设备的制作方法
技术领域:
本发明涉及一种虚拟机技术,特别涉及一种虚拟机系统输入/输出设备动态分配的方法及其设备。
背景技术:
目前,在服务器上同时运行多种操作系统的应用越来越广泛,在IBM、Sun和惠普公司推出的大型主机和Unix操作系统上,这已经成为标准的功能。不同的操作系统能够以最高的性能运行单独的任务,而各个任务之间彼此互不干扰。英特尔公司和AMD公司已将这一技术移植到x86架构计算机系统上,。Gartner公司的最新研究称,虚拟化将成为十年内PC遇到的最具杀伤力的技术。通过分离PC软硬件,允许多操作系统同时运行在同一桌面,PC虚拟化技术将使企业桌面发生革命。
虚拟化使平台能够在独立分区或“设备”中运行多种操作系统。一个物理计算系统可作为多个“虚拟”系统运行。用户可在各自分离的平台上进行单独的分区,从而降低了一个分区上的病毒可能感染其它分区甚至整个网络的风险。
图1为现有技术中虚拟机系统的结构图,该虚拟机系统包括ServiceOS(服务操作系统)系统、至少一个Guest OS(客户机操作系统)系统和一个Hypervisor(虚拟机监控器,也叫VMM)系统,其中Service OS系统包括Devicemodel(设备模型模块)、Control Panel(控制面板模块)和Native device driver(本地设备驱动模块),控制面板模块用于创建一个Guest OS,删除一个GuestOS,为Guest OS的配置文件中指定设备信息,每个Guest OS在被创建的同时都产生一个相应的配置文件和一个Device model,Device model(设备模型模块)根据配置文件设置与该Device model对应的Guest OS中设备的启用和禁用状态,Guest OS系统在启动时搜索硬件,通过Hypervisor从Device model(设备模型模块)中获得该Guest OS的设备配置信息,Device model(设备模型模块)位于Service OS上为相应的Guest OS提供完整的硬件平台信息,即提供虚拟的硬件平台,Guest OS看到的硬件设备全部是由设备模型虚拟出来的;Hypervisor(虚拟机监控器)为Guest OS访问设备模型模块提供通道,所有的Guest OS对硬件设备的访问,请求及各种操作,都是通过虚拟机监控器传递给设备模型模块的,设备模型模块再通过真正的硬件驱动与硬件交互,并把硬件的响应及操作结果通过虚拟机监视器再传递给Guest OS。这样,Guest OS就能正常访问真正的硬件设备。
虚拟系统实现的关键就是为各个操作系统提供“独立的、彼此分离的”硬件平台,由于PC上硬件的限制,这种技术主要还是由软件来实现。而现有技术的实现方式上只能是静态地分配硬件I/O设备,如果需要改变虚拟系统的I/O设备的配置状况,必须首先在控制面板模块中修改配置文件然后重新启动系统才能使配置生效。这样就限制了虚拟系统实现上对I/O设备的灵活分配。
发明内容
本发明的目的就是提供了一种在系统运行过程中动态地改变虚拟系统所拥有的I/O设备的方法,使虚拟系统在运行过程中可以动态地分配硬件资源,使得I/O设备在虚拟系统中的归属可以动态地改变,而不必重新启动系统。避免了资源改变后系统的重新启动。为此,本发明采用如下技术方案达到本发明的目的本发明提供一种虚拟机系统,包括服务操作系统、虚拟机监控器和至少一个客户机操作系统,其中服务操作系统包含设备模型模块,所述设备模型模块为客户机操作系统提供输入/输出设备访问平台,所述客户机操作系统是由所述服务操作系统利用虚拟技术产生的,每个客户机操作系统在服务操作系统中有对应的一个设备模型模块和一个记载设备配置信息的配置文件,客户机操作系统通过虚拟机监控器访问设备模型模块,所述设备模型模块能够动态控制客户机操作系统对输入/输出设备的访问。
所述设备模型模块还包括一个设备状态模块,所述设备状态模块能够动态反映输入/输出设备的禁用与启用。
当所述设备状态模块中对应于客户机操作系统发出访问请求的输入/输出设备状态为启用时,设备模型模块为客户机操作系统提供正常的设备访问。
当所述设备状态模块中对应于客户机操作系统发出访问请求的输入/输出设备状态为禁用时,设备模型模块为客户机操作系统返回一个出错信息。
所述服务操作系统包含一个控制模块,该控制模块能够动态改变设备状态模块中输入/输出设备的状态。
所述控制模块可以是服务操作系统中的控制面板。
所述控制模块包含一个动态分配设备命令程序。
所述动态分配设备命令程序能够同时修改配置文件和设备状态模块中输入/输出设备的状态。
所述客户机操作系统包括一个代理模块,用于根据设备修改的消息事件,执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息。
本发明还提供一种虚拟机系统输入/输出设备动态分配的方法,其中该虚拟机系统包括服务操作系统、虚拟机监控器和至少一个客户机操作系统,其中服务操作系统包含设备模型模块,所述设备模型模块为客户机操作系统提供输入/输出设备访问平台,客户机操作系统通过虚拟机监控器访问设备模型模块,所述方法包括,在设备模型模块中设置一个可以动态改变输入/输出设备状态的设备状态模块,当客户机操作系统发出访问设备请求时,设备模型模块首先判断该设备在设备状态模块中的状态,如果是启用,则为客户机操作系统提供正常的访问;如果是禁用,则给客户机操作系统返回一个出错信息。
在所述服务操作系统中的控制面板中增加一个动态分配设备命令,该命令能够随时改变设备状态模块中设备的状态。
所述动态分配设备命令同时对客户机操作系统的配置文件进行操作修改设备的启用与禁止状态。
在所述客户机操作系统中增加一个代理模块,当设备状态模块中的设备状态发生改变时,设备模型模块向代理模块发送该消息事件,代理模块根据该消息事件,执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息。
本发明是在现有的VMM基础框架以及现有的虚拟I/O设备实现基础上的改进,只不过在设备虚拟化的过程中,通过软件的方式使虚拟出来的设备根据配置信息对某个操作系统不可用,以此来控制操作系统对于I/O设备的访问权限。
下面将参考附图来描述本发明的优选实施方式,其中图1为现有技术中虚拟机系统的结构图;图2为本发明中虚拟机系统的结构图;图3为本发明中对设备分配的流程图;图4为本发明中Guest OS对设备的访问流程图;图5为本发明中外部设备中断处理的流程图;图6为本发明中Guest OS上设备状态与虚拟化硬件平台一致的处理流程。
具体实施例方式
下面结合附图对本发明做进一步的说明。
参照图2,本实施例中的虚拟机系统包括,一个服务操作系统(Service OS)系统、两个客户机操作系统(Guest OS)系统和一个虚拟机监控器(Hypervisor)系统,其中Service OS系统包括设备模型模块(Device model)、控制面板模块(Control Panel)和本地设备驱动模块(Native device driver),设备模型模块(Device model)还包括一个设备状态模块(Device state);控制面板模块用于创建和删除一个Guest OS,为对应于Guest OS的配置文件中指定设备配置信息,每个Guest OS在被创建的同时都产生一个相应的配置文件和一个Device model,配置文件中配置了所有硬件对相应Guest OS的启用和禁用状态;Device model根据配置文件虚拟所有的硬件信息,在设备状态模块中设置相应Guest OS中设备的启用和禁用状态,Guest OS系统在启动时搜索硬件,通过Hypervisor从设备模型模块中获得该Guest OS的设备配置信息,设备模型模块位于Service OS上为多个Guest OS提供完整的硬件平台信息,即提供所有虚拟的硬件平台,Guest OS看到的硬件设备全部是由设备模型虚拟出来的;虚拟机监控器(Hypervisor)为Guest OS访问设备模型模块提供通道,所有的Guest OS对硬件设备的访问,请求及各种操作,都是通过虚拟机监控器传递给设备模型模块的,设备模型模块再通过真正的硬件驱动与硬件交互,并把硬件的响应及操作结果通过虚拟机监视器再传递给Guest OS,Devicestate模块是为了实现记录设备的启用与禁止状态而增加的,每个I/O请求通过都由Device state模块来确认设备的状态,并根据设备状态决定请求是否通过;配置文件中在每个设备的描述中,有相应的字段表示设备的启用与禁止状态,在Device model启动时,由Device state模块读取配置文件中设备状态字段,设置设备的相应状态。本发明中在控制面板模块中包含有改变设备状态的动态分配设备命令程序,系统启动后,可以通过该命令程序直接改变配置文件中设备的状态以及Device state中设备的状态,这种命令的实现是本领域技术人员所公知的,这样在运行过程中,就可以通过Control Panel中的命令随时地改变设备的启用与禁止状态来动态地分配设备给Guest OS。
下面参照图3中描述的流程图对设备分配流程进行详细的说明,开机首先启动基本输入输出系统BIOS,然后启动虚拟机监控器,接着启动服务操作系统,在启动客户机操作系统的过程中,首先由设备模型模块提供完全的硬件平台信息,并根据配置文件中对设备的禁用和启动状况在虚拟的设备模型中标记该设备对相应客户机操作系统是否可用;客户机操作系统从设备模型模块获取硬件平台信息,客户机操作系统启动完成后,需要分配设备就调用控制面板模块中的动态分配设备命令,如果在命令中添加一个设备,则在对应客户机操作系统的设备状态模块中启用该设备,同时在相应的配置文件改变设备的状态为启用;如果在命令中删除一个设备,则在对应客户机操作系统(Guest OS)的设备状态模块(Device state)中禁止该设备,同时在相应的配置文件中改变设备的状态为禁用。
参考图4,详细描述Guest OS对设备的访问流程,首先Guest OS需要对设备访问时发送一个访问请求,Hypervisor截获该请求,并把该请求传送给相应的Device model,Device model判断Device state模块中该设备是否禁用,如果是禁用,Device model对于该请求返回出错信息,Guest OS则不能对该设备进行操作;如果不是禁用,Device model对于该请求产生一个回应,GuestOS对该设备操作正常。
图5中给出了外部设备中断处理的流程图,外部设备中断信号产生后,首先由Hypervisor获得该外部设备中断信号信息,并把该信息通过事件机制传递给服务操作系统,服务操作系统找到相应的中断向量对应的中断处理程序(如本地驱动模块中的驱动程序),进行外部设备中断的处理,如把数据读入到队列或buffer(缓冲存储器)中,Device model每隔一段时间会主动访问这些队列或buffer,如果对列或buffer中有数据,相应的Device model读取这些数据,Device model获得该信息后,判断Device state中相应的设备是否禁用,如果该设备禁用,对相应的Guest OS屏蔽该中断,Device model丢弃这些数据;如果该设备不禁用,则产生中断信息并传递给Hypervisor,Hypervisor将该消息传递给相应的Guest OS,由Guest OS中相应的驱动处理该中断。
图6中给出了Guest OS上设备状态与虚拟化硬件平台一致的处理流程,其中在Guest OS上增加了一个Agent(代理)模块,该模块执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息的功能。具体流程如下,当控制面板模块将与Guest OS对应的Device model中的Devicestate中的设备状态做了修改时,Device model发送该消息事件到Hypervisor,Hypervisor将该消息事件发送到Agent,Agent获得该消息事件后判断是否有设备被禁止,如果是设备被禁止,则Agent执行撤销注册函数,并保存操作系统对该设备配置的初始化信息,Guest OS中的设备状态显示禁用或该设备消失;如果是设备被启用,则Agent执行注册函数,并恢复操作系统对该设备配置的初始化信息,Guest OS中的设备状态显示正常。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种虚拟机系统,包括服务操作系统、虚拟机监控器和至少一个客户机操作系统,其中服务操作系统包含设备模型模块,所述设备模型模块为客户机操作系统提供输入/输出设备访问平台,所述客户机操作系统是由所述服务操作系统利用虚拟技术产生的,每个客户机操作系统在服务操作系统中有对应的一个设备模型模块和一个记载设备配置信息的配置文件,客户机操作系统通过虚拟机监控器访问设备模型模块,其特征在于,所述设备模型模块能够动态控制客户机操作系统对输入/输出设备的访问。
2.根据权利要求1所述的虚拟机系统,其特征在于,所述设备模型模块还包括一个设备状态模块,所述设备状态模块能够动态反映设备模型中的输入/输出设备对客户机操作系统的禁用与启用。
3.根据权利要求2所述的虚拟机系统,其特征在于,当所述设备状态模块中对应于客户机操作系统发出访问请求的输入/输出设备状态为启用时,设备模型模块为客户机操作系统提供正常的设备访问。
4.根据权利要求2所述的虚拟机系统,当所述设备状态模块中对应于客户机操作系统发出访问请求的输入/输出设备状态为禁用时,设备模型模块为客户机操作系统返回一个出错信息。
5.根据权利要求2至4中任一项的所述虚拟机系统,其特征在于,所述服务操作系统包含一个控制模块,该控制模块能够动态改变设备状态模块中输入/输出设备的状态。
6.根据权利要求5所述的虚拟机系统,其特征在于,所述控制模块包含一个动态分配设备命令程序。
7.根据权利要求6所述的虚拟机系统,其特征在于,所述动态分配设备命令程序能够同时修改配置文件和设备状态模块中输入/输出设备的状态。
8.根据权利要求1至4中任一项的所述虚拟机系统,其特征在于,所述客户机操作系统包括一个代理模块,用于根据设备状态修改的消息事件,执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息。
9.根据权利要求5所述的虚拟机系统,其特征在于,所述客户机操作系统包括一个代理模块,用于根据设备状态修改的消息事件,执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息。
10.根据权利要求6所述的虚拟机系统,其特征在于,所述客户机操作系统包括一个代理模块,用于根据设备状态修改的消息事件,执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息。
11.根据权利要求7所述的虚拟机系统,其特征在于,所述客户机操作系统包括一个代理模块,用于根据设备状态修改的消息事件,执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息。
12.一种虚拟机系统输入/输出设备动态分配的方法,其中该虚拟机系统包括服务操作系统、虚拟机监控器和至少一个客户机操作系统,其中服务操作系统包含设备模型模块,所述设备模型模块为客户机操作系统提供输入/输出设备访问平台,客户机操作系统通过虚拟机监控器访问设备模型模块,其特征在于,所述方法包括,在设备模型模块中设置一个可以动态改变客户机系统输入/输出设备状态的设备状态模块,当客户机操作系统发出访问设备请求时,设备模型模块首先判断该设备在设备状态模块中的状态,如果是启用,则为客户机操作系统提供正常的访问;如果是禁用,则给客户机操作系统返回一个出错信息。
13.根据权利要求12的所述虚拟机系统输入/输出设备动态分配的方法,其特征在于,在服务操作系统中的控制面板中增加一个动态分配设备命令,该命令能够随时改变设备状态模块中设备的状态。
14.根据权利要求13的所述虚拟机系统输入/输出设备动态分配的方法,其特征在于,所述动态分配设备命令同时对客户机操作系统的配置文件进行操作,修改对应设备的启用/禁用状态。
15.根据权利要求12至13中任一项的虚拟机系统输入/输出设备动态分配的方法,其特征在于,在所述客户机操作系统中增加一个代理模块,当设备状态模块中的设备状态发生改变时,设备模型模块向代理模块发送该消息事件,代理模块根据该消息事件,执行注册或撤销注册函数并相应的恢复或保存操作系统对该设备配置的初始化信息。
全文摘要
本发明涉及一种虚拟机系统输入/输出设备动态分配的方法及其设备,所述虚拟机系统包括服务操作系统、虚拟机监控器和至少一个客户机操作系统,其中服务操作系统包含设备模型模块,所述设备模型模块为客户机操作系统提供输入/输出设备访问平台,客户机操作系统通过虚拟机监控器访问设备模型模块,在所述设备模型模块中增加一个动态反映设备状态的设备状态模块,通过服务操作系统中的控制面板动态改变设备状态模块中的设备状态,能够动态控制客户机操作系统对输入/输出设备的访问,在客户机操作系统中增加一个代理模块,根据上述设备状态的改变随时改变客户机操作系统中的设备状态。
文档编号G06F9/46GK1936845SQ20051010306
公开日2007年3月28日 申请日期2005年9月19日 优先权日2005年9月19日
发明者刘春梅, 刘建成, 宋春雨 申请人:联想(北京)有限公司