X

曜彤.手记

随记,关于互联网技术、产品与创业

吉 ICP 备10004938号

《虚拟机系统与进程的通用平台》基础概述


这本书读起来比较学术,所以看心情挑着读读。(翻译质量奇差)

Chapter 1:虚拟机导论

  1. (Page:16)指令集(I386 \ X86-64 \ PowerPC)一般会作为中间接口。CPU 设计师和编译器工程师分别按照这个 ISA 中的指令集来设计硬件芯片和软件的高级语言编译器。另外的标准化接口还有操作系统调用。而多种接口规范的存在,也导致了软件的可移植性降低
  2. (Page:16)形式上,虚拟化是构建一个将虚拟客户系统映射到真实主机系统的同态。通常,两者的细节是相同的。
  3. (Page:19)计算机系统体系结构,如下图。2 和 3 分别是系统调用接口与 lic \ libcxx 等库中提供的接口;7 和 8 分别为用户指令集操作系统指令集。ISA 是划分软件和硬件两个层面的分界线。ABI 由 3(系统调用 ABI,比如 X86_64 下不能使用 rcx 传参,相对于 ISA 的调用约定可能会有些许不同)和 7(ISA 调用约定,cdecl \ System-V-AMD64 ABI 等)组成;API(源代码级别)由 2 和 7(个人理解是指单纯的指令调用)组成。

C ABI 规定内容(其中一部分内容由 Calling-Convention 决定):

C++ ABI 包括 C ABI,除此之外还有:

  1. (Page:21)进程级虚拟机:能够支持一个独立进程,虚拟机负责仿真用户级指令和系统调用(比如 Wine);系统级虚拟机:提供完整的系统环境,使其可以支持操作系统及其潜在的许多用户进程,它使得客户操作系统能够访问底层的硬件资源(比如 VirtualBox、VMware)。
  2. (Page:25)早期的系统级虚拟机在实现时,VMM(Virtual Machine Manager)是直接安装在裸机上的,上面再装上虚拟机。VMM 在最高特权模式下运行,而客户机系统运行时的特权要少一些。VMM 会拦截并执行所有客户机操作系统发出的与硬件资源交互的动作。而后期另一种可选的系统虚拟机即所谓的“宿主虚拟机”,即安装在宿主操作系统上,不需要 VMM 的支持,但缺点是效率较低。
  3. (Page:25)在系统虚拟机中,VMM 的一个主要特色是提供了对平台的复制。VMM 可以访问并管理所有硬件资源,当客户机操作系统要执行一个特定操作时(比如直接访问共享硬件资源的特权指令),这个操作将由 VMM 来解释并检查正确性,再由 VMM 替客户机执行
  4. (Page:28)虚拟机分类法:

进程虚拟机

系统虚拟机

  1. (Page:28)一个例子:Java 应用(JVM)-> Linux IA-32(VMware)-> Windows IA-32(CMS)-> Crusoe VLIW;

Chapter 2:仿真:解释和二进制翻译

  1. (Page:30)陷阱和中断:
  1. (Page:31)译码分派(decode-and-dispatch)解释器:逐条指令地执行源程序来运行,并根据读取到的指令修改源状态。解释的性能代价会相当高。即使解释器代码用汇编语言编写,解释一条像“取字并置零”的单一指令仍需要包含目标 ISA 中数十条指令的执行
  2. (Page:34)线索解释(Threaded Interpretation):在当前指令处理例程结束之前以某种方式(直接、间接查表等)直接跳转到下一个指令处理例程继续执行,进而省去循环分派的过程,降低 CPU 分支预测产生的损耗

  1. (Page:34)预译码(Pre-decoding):将指令的操作码和扩展操作码合并为一个单独的预译码操作码,同时将操作数或立即数等参数按照字节对齐的方式进行存放。这在简化了原指令序列的同时,也会易于虚拟机的访问。一个预译码(针对 IA32)的基本结构如下:
#define CODE_SIZE 1024
struct instruction {
  unsigned long op;  // 此处可以用 OpCode 处理例程的地址代替(DTC);
  unsigned char dest;
  unsigned char src1;
  unsinged int src2;
} code[CODE_SIZE];

(待更新。大概率不会更新了,翻译质量太差)



这是文章底线,下面是评论
  暂无评论,欢迎勾搭 :)