[发明专利]X86计算机虚拟化的物理中断处理方法无效
申请号: | 200910043829.9 | 申请日: | 2009-07-03 |
公开(公告)号: | CN101620547A | 公开(公告)日: | 2010-01-06 |
发明(设计)人: | 易晓东;刘晓建;张卫华;谭郁松;戴华东;吴庆波;孔金珠 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F9/455 | 分类号: | G06F9/455;G06F13/24 |
代理公司: | 国防科技大学专利服务中心 | 代理人: | 郭 敏 |
地址: | 410073湖*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | x86 计算机 虚拟 物理 中断 处理 方法 | ||
1.一种X86计算机虚拟化的物理中断处理方法,首先构建虚拟机系统,虚拟机系统由 三部分组成:最底层是X86计算机硬件与中断;中间层是虚拟机监控器;最上层是同时 运行的多个虚拟化操作系统,包括一个dom0即0号域操作系统,一个或多个domU即用 户域操作系统,虚拟机监控器由物理中断处理模块和虚拟中断处理模块、中央处理单元 CPU指令虚拟化模块、内存管理单元MMU虚拟化模块组成;其特征在于所述物理中断处理 模块由本地高级可编程中断控制器LAPIC初始化子模块、CPU运行模式配置子模块、dom0 LAPIC初始化监视子模块、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转第五步进入下一次循环。
2.如权利要求1所述的X86计算机虚拟化的物理中断处理方法,其特征在于探测X86 系统中是否配备LAPIC的方法是设置CPU的EAX寄存器为1,再执行CPUID这条CPU指令, 最后检查EDX寄存器的第9位是否为1,如果为1则LAPIC存在。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910043829.9/1.html,转载请声明来源钻瓜专利网。