VirtualBox源码分析
阅读VirtualBox源码的笔记
nina的blog
写代码的
展开
-
VMM实践:当虚拟化遇到虚拟机
文章目录1. 复现蓝屏:2. 哪里触发了double fault:3 .如何兼容:4 要注意的问题。N年前些的老文,转到CSDN博客2014年开始,组内做了个基于VT虚拟化的游戏安全模块,当时购买了bluepill的代码的使用权,在它基础上做二次开发,bluepill因为只是个实验产品,所以只开发了最简单的功能,很多扩展功能都没有做,其中就包括和VMware,VirtualBox之类虚拟机的兼...原创 2020-02-24 15:41:11 · 2569 阅读 · 4 评论 -
第一篇blog
打算写关于虚拟机实现(基于virtualbox源码)的一系列文章原创 2020-01-07 12:07:23 · 1150 阅读 · 4 评论 -
Virtualbox源码分析23 NEM(Hyper-V兼容)4 VMExit
Native execution manager (VMExit)文章目录Native execution manager (VMExit)23.1 EPT内存管理23.1.1分配内存23.1.2 Unmap内存23.1.3 修改内存属性和页面Map关系23.2 VMExit处理nemHCWinStopCpunemHCWinHandleMessagenemHCWinCopyStateFromX6...原创 2020-02-13 21:50:39 · 1136 阅读 · 0 评论 -
Virtualbox源码分析22 NEM(Hyper-V兼容)3 Emulation Thread
Native execution manager (Emulation Thread )文章目录Native execution manager (Emulation Thread )22.1. Emulation循环线程emR3NemExecutenemR3NativeRunGCR0的循环NEMR0RunGuestCodeemR3NemForcedActions22.2 从GuestOS里获...原创 2020-02-13 21:33:52 · 693 阅读 · 0 评论 -
Virtualbox源码分析21 NEM(Hyper-V兼容)2 Hyper-V初始化和VM创建销毁
Virtualbox源代码Native execution manager (Hyper-V兼容)原创 2020-02-09 22:26:16 · 3356 阅读 · 1 评论 -
Virtualbox源码分析20 NEM(Hyper-V兼容)1 Hyper-V架构和API介绍
Native execution manager (Hyper-V兼容)Windows April 2018 Update之后引入了一个新的运行模式:Hyper-V 模式, 当Hyper-V模式开启之后,windows会占用VT(抢占式),其他软件不能在操作系统上在开启VT功能,同时提供了一系列Hypervisor Platform APIs,其他软件可以调用这些API创建VMX Guest,后...原创 2020-02-09 16:42:34 · 2541 阅读 · 0 评论 -
Virtualbox源码分析19 Trap Monitor
TRPM - The Trap Monitor (陷阱监视器)负责管理和向虚拟机内发送中断。19.1 初始化API等TRPMCPU每个VCPU都一个的结构体TRPMCPU,保存了发送给当前VCPU的中断信息,当TRPMCPU里有active的中断信息的时候,进入GuestOS之前需要发送这个中断信息到GuestOS里typedef struct TRPMCPU{ //中断LVT ...原创 2020-02-08 09:23:24 · 522 阅读 · 0 评论 -
Virtualbox源码分析18 APIC虚拟化3 中断发送
18.1 利用APIC发送硬件中断到VCPU中中断处理一般分成3个阶段:发送中断(保存中断信息到APIC里),获取中断(从APIC里获取一个最高优先级的中断),处理中断(设置VMCS里异常相关内容)。下面分别看看这3个类型的函数Virtualbox在其他Manager发松中断到APIC的时候,会吧中断向量先保存到APICCPU变量里的PIB内存里,APICUpdatePendingInterr...原创 2020-02-07 15:50:00 · 869 阅读 · 1 评论 -
Virtualbox源码分析17 APIC虚拟化2.APIC设备模拟
17.1 APIC设备模拟VirtualBox里,把APIC作为一个R0的PNP设备来模拟:const PDMDEVREG g_DeviceAPIC ={ /* .u32Version = */ PDM_DEVREG_VERSION, /* .uReserved0 = */ 0, /* .szName = */ ...原创 2020-02-06 19:45:51 · 1050 阅读 · 0 评论 -
Virtualbox源码分析16 APIC虚拟化1 APIC概念和初始化
说明: APIC我其实也理解的不是特别明白,只是从网上找些资料和阅读源码理解,如果有错误,麻烦在下面评论里指出。虚拟化有个重要的功能: APIC虚拟化,本章重点介绍这个功能中断是什么一般来说,中断主要是由一些硬件设备产生的,表示这些硬件有一些重要的事件需要通知处理器,比如某些从外部设备请求的数据准备好了,需要通知处理器对其进行读取等。当然这里所谓的“一般来说”是指也可以通过软件的方式来触发中...原创 2020-02-06 14:44:10 · 2172 阅读 · 0 评论 -
Virtualbox源码分析8: VM manager
·Virtualbox源码分析8: VM managerVMM的代码里,处理VT-X虚拟化框架之外,还有各种Manager,从vmR3InitRing3()这个函数里,可以看到所有manager的初始化函数/** * Initializes all R3 components of the VM */static int vmR3InitRing3(PVM pVM, PUVM pUVM)...原创 2020-01-21 19:18:24 · 1944 阅读 · 2 评论 -
Virtualbox源码分析9 CPU manager1
Virtualbox源码分析9 CPU manager1接下来3篇文章,介绍CPU虚拟化管理部分: CPUM每个VM 都有一个或者多个VCPU,VCPU是VM运行的单位,类似于操作系统中的进程和线程的概念,VM是进程,VCPU是线程,一个host里可以有多个VM。每个VCPU都需要全局变量保存相关信息,比如VCPU进入/退出 GuestOS都需要保存相关上下文信息。第一篇介绍一些重要的结构体...原创 2020-01-26 16:22:56 · 1367 阅读 · 0 评论 -
Virtualbox源码分析10 CPU manager2:APIs
Virtualbox源码分析10 CPU manager2:APIs10.1 R3Init相关APIs(CPUM.cpp)CPUMR3Init 初始化CPUMVMMR3DECL(int) CPUMR3Init(PVM pVM){ //根据host CPU信息设置一些flag //获取host CPUID失败,直接返回 if (!ASMHasCpuId()) ...原创 2020-01-27 20:48:27 · 1010 阅读 · 0 评论 -
Virtualbox源码分析12 CPU manager4:MSR
上一章里介绍了CPUID的初始化和读取,这一章里,介绍模拟MSR寄存器的初始化和读写操作12.1 MSR Ranges 初始化g_apCpumDbEntries里定义了VMMR3\cpus目录下所有已知的CPU列表,这些.h文件里定义了每个CPU的所有MSR寄存器列表static CPUMDBENTRY const * const g_apCpumDbEntries[] ={ &...原创 2020-01-28 22:46:35 · 811 阅读 · 1 评论 -
Virtualbox源码分析11 CPU manager3:CPUID
这一章里,介绍模拟CPUID和CPU寄存器访问11.1 GuestOS CpuId/MSR初始化cpumR3InitCpuIdAndMsrs在CpumInit()函数里调用int cpumR3InitCpuIdAndMsrs(PVM pVM, PCCPUMMSRS pHostMsrs){ // 读取配置 CPUMCPUIDCONFIG Config; cpumR3CpuIdR...原创 2020-01-29 20:19:28 · 2110 阅读 · 0 评论 -
Virtualbox源码分析13 Emulation manager1
EM : Execution Monitor / Manager 负责运行VM、调度正确的执行类型((Raw-mode, Hardware Assisted, Recompiled orInterpreted),并保持CPU状态同步。EMR3ExecuteVM函数是虚拟机的“主循环”,而每个执行模式具有不同的内部循环(emR3RawExecute、emR3HmExecute和emR3RemEx...原创 2020-01-31 17:04:11 · 1367 阅读 · 1 评论 -
Virtualbox源码分析14 Emulation manager2
EM - Execution Monitor / Manager15.1 用模拟执行多条指令解决过频繁VMExit因为发生一次VMExit,CPU需要切换上下文消耗大量性能,为了提升性能,当CPU执行部分执行指令的时候,EM会检查发生VMExit的这个RIP是否曾经发生过VMExit,如果曾经发生过多次VMExit事件,则会从这条指令开始模拟执行最多cMaxInstructions条指令。可...原创 2020-02-01 17:38:49 · 919 阅读 · 1 评论 -
Virtualbox源码分析15 IEM: Instruction Decoding and Emulation manager
IEM - Instruction Decoding and Emulation managerIEM : 模拟执行管理模块负责模拟执行小段连续guest代码避免太多退出/虚拟化陷阱导致性能下降,同时也提供单条指令的模拟。15.1 模拟执行单条指令IEM定义了很多指令的模拟执行代码g_apfnOneByteMap(IEMAllInstructionsOneByte.cpp.h) :opco...原创 2020-02-03 17:40:36 · 1148 阅读 · 0 评论