简单说一下自己对x86平台虚拟化的理解,intel有SDM手册,代码都是公开的,难度比较大,理解起来困难,网上有大量优秀博客讲解虚拟化,引用了大量手册和代码,还是很难看懂。个人觉得理解虚拟化不能一上来就看很详细的手册和代码,虚拟化有点绕,先闭上眼睛想想大的道理,掌握了大的道理,再看手册和代码加深理解,否则很容易迷失,对虚拟化的理解只流于表面。
X86体系结构和OS
要理解虚拟化一定要回顾x86体系结构和OS原理,其实这两门课上大学时就学过,当时理解的很肤浅,随着工作的时间越长,理解的越深刻。计算机运转起来飞快,控制的非常精细,表面上给人很多假象,功能越来越复杂,集成度越来越高,不需要掌握很一个细节,但要能简化出一个最简单模型,通过个模型去深入理解背后的原理,思考时要站在不同的角度看问题,CPU的角度,guest的角度,外设的角度,进程的角度,内核的角度,不同角度看问题能让软件逻辑走通。也要不断提出问题,然后试着查资料解答自己的问题,计算机已经复杂到让一个人已经不可能掌握了所有细节,但要形成自己的抽象,各方面逻辑能成环,能自圆其说,只知道一些概念最不可取。
CPU(一堆寄存器)/Cache/Timer
physical memory map, segment and page,MMU and TLB
pci and device,driver and interrupt
kernel space and user space,context and process scheduler
软件和硬件的边界?
对x86和OS回顾后,那么得问自己一个问题,让自己写一个hypervisor怎么实现?guest是不能动的,linux和windows已经编译好的,还是物理机上跑的那些OS,那么是不是得借鉴物理机,哪个厂商什么型号的主板?什么型号的CPU几个核多少G内存?先构造一套假想的硬件,芯片组是什么型号,连接关系什么样的,就想象出下面这张图,这样guest就可以自动识别出这套硬件。