在一台机器上运行多个操作系统挑战在于:
1 操作系统相互之间不能互相影响
2 需要支持不同的操作系统同时运行
3 虚拟化带来的性能上的影响应该尽可能的小
Xen设计的目标是:
1 修改应用程序对于用户来说是不能接受的。否则用户不会去使用xen,因此xen必须虚拟出ABIs要求的所有的体系结构特征
2 支持多任务的操作系统。
3 为了达到高的性能和资源的隔离性,paravirtualization是必须的
Xen和Denali 的区别:
1 Denali目标不在于ABIs的虚拟,所以在VM接口里可以不用某些体系特征,比如x86里面的段结构
2 Denali的设计没有考虑在单OS里支持多任务和多地址空间,实际上虚拟的是一个单用户单任务无保护的“操作系统”
3 Denali 结构里,VMM页的管理使用的是磁盘,可能是因为在虚拟层缺少内存管理的支持。Xen里,每个客户OS的页面管理使用的是自己的保留的内存地址
4 Denali 虚拟了所有机器资源的namespaces,VM不能access没有命名的资源。但是,hypervisor能提供足够的保证,让物理的资源对于客户OS可见也能保证强正确性和性能。
1 Xen 的内存管理:
每次当客户OS需要新的页表,就从自己的内存空间里面分配和初始化一个页,并向xen注册,客户OS放弃写入特权到页表内存里去,后继的更新由Xen来完成。每个地址空间起始的64M分配给Xen,客户OS不能access或是从新映射这段空间。一般的x86 ABIs不需要这段地址空间。所以不会破坏程序的兼容性。
2 xen的CPU:
内存的虚拟是最难的部分。大多数处理器只提供两个优先级,这样客户OS只好和应用程序享用同一个优先级。用户OS为了保护自己需要让自己运行在单独的地址空间里面。用户OS需要通过hypervisor来设定虚拟的优先级,修改自己的地址空间
在x86里面,有4个优先级,hypervisor优先级为0,客户OS为1,应用程序为3,这样即可以保证客户OS优先级低于hypervisor,又能保证客户OS和应用程序间的隔离性。
异常,包括内存错误和陷阱。用很简单的方式虚拟出来。用一个表来描述在Xen里面注册的异常对应的handle。
Xen的设计细节:
1 控制转移:domain 同步call Xen使用hypercall,Xen传递notification到domain使用异步事件机制。Hypercall允许domain产生一个同步trap到hypervisor以执行特权操作(例如页表的更新)。异步的事件机制替代传统的设备中断使用的传递机制,允许重要事件的轻量notification。Pending事件被存储在每个domain的bitmask里面,Xen 在调用客户OS的事件回调handler之前更新bitmask。回调handler负责处理重置pending事件集。
2 数据传递,I/O环:hypervisor意味着在客户OS和I/O设备间添加了保护domain。系统垂直传递机制的开销应该尽可能小。
异步I/O环是个圆型的descriptor队列,descripter由domain分配,由Xen来使用。Descripter不直接包含数据,它只是一个指向数据buffer的指针。通过两对producter-consumer指针来Access to环。Domain放置一个request到环上去,advance a request producer 指针。Xen remove requests,然后处理这些requests,advance 相关 request consumer 指针。
3 子系统的虚拟化:
CPU策略:BVT(Borrowed Virtual Time) provides low-latency dispatch by using virtual-time warping, a mechanism which temporarily violates `ideal' fair sharing to favor recently-woken domains. However,other scheduling algorithms could be trivially implemented over our generic scheduler abstraction. Per-domain scheduling parameters can be adjusted by management software running in Domain0.
虚地址转换:Vmware的做法是为每个客户OS提供虚拟页表,Xen的做法是将每个客户OS的页表直接向MMU注册,限制客户OS只允许它们以只读的方式访问页表,使用hypercall让Xen执行页表的更新,执行前必须验证请求。
物理内存:每个domain被生成时初始化内存分配,如果某个domain内存不足时,可以向Xen申请更多的内存。
网络:Xen提供VFR(virtual firewall-router)抽象,每个domain拥有一个或多个网络接口(VIFs)与VFR连接。VIF有些类似于网卡。
磁盘:Only Domain0 has direct unchecked access to physical (IDE and SCSI) disks.其他的domains通过VBDs(virtual block devices)访问磁盘。在Xen里面为每个VBD维护translation table