发明名称 X86计算机虚拟化的物理中断处理方法
摘要 本发明公开了一种X86计算机虚拟化的物理中断处理方法,目的是解决同时运行多个虚拟化操作系统的X86计算机中物理中断处理方法实现复杂、代码庞大和中断处理开销大等问题。技术方案是首先构建虚拟机系统,主要是修改物理中断处理模块,然后由由虚拟机系统对物理中断进行处理,包括构建接收和处理NMI所需要的软件环境,初始化IPI发送与接收所需的软件环境、对LAPIC进行基本初始化,分别对dom0操作系统、domU操作系统和虚拟机监控器进行配置,监测和处理dom0操作系统对LAPIC的初始化、设备中断、NMI、IPI这五个步骤。采用本发明能简化中断处理逻辑、缩减虚拟机监控器的代码量,减小中断处理的开销,增强整个计算机系统的稳定性,具有优秀的硬件适配性。
申请公布号 CN101620547B 申请公布日期 2012.05.30
申请号 CN200910043829.9 申请日期 2009.07.03
申请人 中国人民解放军国防科学技术大学 发明人 易晓东;刘晓建;张卫华;谭郁松;戴华东;吴庆波;孔金珠
分类号 G06F9/455(2006.01)I;G06F13/24(2006.01)I 主分类号 G06F9/455(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种X86计算机虚拟化的物理中断处理方法,首先构建虚拟机系统,虚拟机系统由三部分组成:最底层是X86计算机硬件与中断;中间层是虚拟机监控器;最上层是同时运行的多个虚拟化操作系统,包括一个dom0即0号域操作系统,一个或多个domU即用户域操作系统,虚拟机监控器由物理中断处理模块和虚拟中断处理模块、中央处理单元CPU指令虚拟化模块、内存管理单元MMU虚拟化模块组成;其特征在于所述物理中断处理模块由本地高级可编程中断控制器LAPIC初始化子模块、CPU运行模式配置子模块、dom0LAPIC初始化监视子模块、dom0设备中断接收辅助子模块、处理器间中断IPI发送与接收子模块、不可屏蔽中断NMI接收和处理子模块这六个子模块组成;CPU运行模式配置子模块配置CPU的运行模式并接收从CPU发来的设备中断信息,再调用dom0设备中断接收辅助子模块,在dom0设备中断接收辅助子模块的控制下,设备中断直接传递给dom0操作系统;所有的NMI都传递给NMI接收和处理子模块,该子模块接收NMI后进行判断,如果NMI是IPI消息导致的,则将该NMI传送给IPI发送与接收子模块,否则将NMI转发至dom0操作系统;LAPIC初始化子模块在X86计算机系统加电引导时对LAPIC进行部分初始化,在dom0LAPIC初始化监视子模块的监控下,dom0操作系统直接访问经初始化的LAPIC,当CPU指令虚拟化模块检测到dom0对LAPIC重新初始化时,CPU指令虚拟化模块通知dom0LAPIC初始化监视子模块,由dom0LAPIC初始化监视子模块调用LAPIC初始化子模块对LAPIC进行重配置;IPI发送与接收子模块直接访问LAPIC进行IPI消息的发送与接收;构建好虚拟机系统后,由虚拟机系统对物理中断进行处理,方法是:第一步,NMI接收和处理子模块构建接收和处理NMI所需要的软件环境:构建NMI中断的中断处理函数,将该中断处理函数的地址放入中断描述符表即IDT表的第2项中;第二步,IPI发送与接收子模块按如下方法初始化IPI发送与接收所需的软件环境:2.1选用不可屏蔽中断NMI的中断号2作为IPI的中断号;2.2为每个CPU都设置一个先进先出的队列结构作为IPI消息队列,同时为每个IPI消息队列设置一个消息队列锁;第三步,LAPIC初始化子模块对本地高级可编程中断控制器LAPIC进行基本初始化,方法如下:3.1探测X86系统中是否配备了LAPIC,如果系统中不存在LAPIC,则转第四步,否则执行3.2;3.2映射LAPIC的寄存器,为每个CPU的LAPIC的所有寄存器的物理地址区间映射相应的虚拟地址;3.3启用LAPIC,即向LAPIC的寄存器中写入数据;第四步,CPU运行模式配置子模块按如下方法分别配置dom0操作系统、domU操作系统和虚拟机监控器的运行模式:4.1对dom0操作系统,按如下方法配置CPU的运行模式:●配置dom0操作系统的运行模式为CPU的虚拟化模式;●配置dom0操作系统的中断触发模式为直接触发和处理模式,即当dom0操作系统运行时,到达的物理中断不通知物理中断处理模块,而直接在dom0操作系统中被触发和处理;●当dom0操作系统运行时,打开CPU的中断允许标志;4.2对domU操作系统,按如下方法配置CPU的运行模式:●配置domU操作系统的运行模式为CPU的虚拟化模式;●配置domU操作系统的中断触发模式为退出运行并通知物理中断处理模块这种模式,即当domU操作系统运行时,到达的物理中断将中断domU操作系统的运行,并马上通知物理中断处理模块;●当这些操作系统运行时,打开CPU的中断允许标志;4.3对虚拟机监控器,按如下方法配置CPU的运行模式:●配置虚拟机监控器的运行模式为CPU的普通模式;●在虚拟机监控器运行期间,始终关闭CPU的中断允许标志;第五步,当dom0LAPIC初始化监视子模块监测到dom0操作系统对LAPIC进行初始化操作时,转5.1;当dom0设备中断接收辅助子模块监测到设备中断到达时,转5.2;当NMI接收和处理子模块监测到不可屏蔽中断NMI到达时,转5.3;当IPI发送与接收子模块检测到虚拟机的其它模块或上层操作系统请求发送和接收处理器间中断IPI时,转5.4:5.1CPU指令虚拟化模块截获dom0操作系统读写型号相关寄存器MSR的指令rdmsr/wrmsr,并将结果交给dom0LAPIC初始化监视子模块,dom0LAPIC初始化监视子模块判断dom0操作系统是否访问编号为0x1B的MSR,如果是则判断LAPIC寄存器的内存映射地址是否被改变,如果改变则将新地址记录下来,并按3.2所示的方法重新映射LAPIC的寄存器;如果不改变则转第五步,进入下一次循环;5.2dom0设备中断接收辅助子模块分下列三种情况辅助dom0操作系统接收设备中断:●当设备中断到达时,如果CPU正在运行domU操作系统,则CPU中断domU操作系统的运行,并将设备中断到达情况通知dom0设备中断接收辅助子模块,dom0设备中断接收辅助子模块马上请求虚拟机监控器转入运行dom0操作系统,等到dom0操作系统开始运行时,设备中断将立即被触发并被dom0操作系统接收;●当设备中断到达时,如果CPU正在运行dom0操作系统,设备中断直接在dom0操作系统中被触发;●当设备中断到达时,如果CPU正在运行虚拟机监控器自身,到达的设备中断不会被触发;上述处理完毕后,转第五步进入下一次循环;5.3NMI接收和处理子模块接收和处理不可屏蔽中断NMI,方法是判断IPI发送与接收子模块是否正在发送IPI消息,如果正在发送IPI消息,则由IPI发送与接收子模块接收和处理IPI消息;否则,将NMI转发到dom0操作系统,dom0操作系统异步处理该NMI;上述两种情况处理完成后,都转第五步进入下一次循环;5.4如果IPI发送与接收子模块被请求发送IPI,转5.4.1;如果NMI接收和处理子模块接收到NMI后调用IPI发送与接收子模块,转5.4.2:5.4.1按下述方法向一个或多个目标CPU发送一个IPI消息:5.4.1.1获得目标CPU的消息队列锁,把IPI消息加入到该IPI消息的目标CPU的IPI消息队列中,再释放目标CPU的消息队列锁;5.4.1.2通过访问LAPIC的寄存器,向对称多处理SMP系统中的其它全部CPU发送该IPI消息,发送参数中设置的IPI中断号为NMI的中断号2;5.4.1.3转第五步进入下一次循环;5.4.2按下述方法接收和处理IPI消息:5.4.2.1先获得本CPU的消息队列锁,再判断消息队列是否为空,如果为空则释放本CPU的消息队列锁,转5.4.2.3;如果消息队列不为空,执行5.4.2.2;5.4.2.2从本CPU的IPI消息队列中取出一个IPI消息,释放本CPU的消息队列锁,调用IPI消息中包含的IPI接收和处理函数实现IPI通信,转5.4.2.1。5.4.2.3转第五步进入下一次循环。
地址 410073 湖南省长沙市砚瓦池正街47号