分类: 虚拟化
2010-07-19 18:55:21
Smart-VM目前实现的是硬盘启动方式。
计算机从硬盘读取引导扇区到内存的0x7C00,然后将控制权直接交给引导程序。
1. 在引导程序中,将loader.bin和root.bin读取到内存中,然后跳转到保护模式,在保护模式下,将控制权交给loader.bin;
2. loader.bin获取控制权后,开启虚拟内存机制,然后跳转到root.bin;
3. root.bin获取控制权之后,就开始初始化运行环境,内容包括:
a) 初始化全局描述符、中断描述符和任务描述符,建立基本的程序运行环境;
b) 初始化控制台驱动程序;
c) 初始化键盘驱动程序;
d) 初始化硬盘驱动程序;
e) 开启中断;
f) 从硬盘读取客户操作系统的引导程序到内存中;
4. 完成基本的程序运行环境之后,就开始跟Intel-VT相关的操作,内容包括:
a) 激活VMX模式;
b) 为运行客户操作系统做相关的准备;
硬件自动将boot.bin加载到0x7c00,然后自动跳转到0x7c00执行第一条指令。引导程序在执行的时候,要注意PC BIOS的内存分布图(图6.1)。
引导程序的运行流程:
图 6.1 PC BIOS内存分布图
1. boot.bin将自己拷贝到内存的0x90000;
2. 跳转到新的位置上的执行点;
3. 从硬盘读取loader.bin到内存的0x80000;
4. 从硬盘读取root.bin到内存的0x500;
5. 将root.bin从0x500拷贝到0x0;
6. 从实模式跳转到保护模式[16][17];
从实模式跳转到保护模式的步骤如下:
1) 加载全局描述符表;
2) 关中断;
3) 开启A20开关
4) 开启保护模式;
7. 跳转到内存的0x80000;
图6.2是引导程序启动完成的时候的内存分配图:
图 6.2 引导程序启动完成的时候的内存分配图
加载程序的主要功能是建立页表映射,开启虚拟内存机制。
图 6.3 加载程序的内存分布图
加载程序将页表放在0x88000。
一旦确立了页表的位置,需要建立页表映射。将物理内存中的0~4M分别映射到虚拟内存空间中的0~0x400000和0xC0000000~0xC0400000中。如图6.4所示。
图 6.4 加载程序的页表映射图
一旦完成了页表映射的工作,加载程序就开启虚拟内存机制,跳转到root.bin,将控制权交给内核,这里跳转到的地址是0xC0000000地址,详见下一节的进程内存分布。
在Smart-VM中,每个进程的内存都是4G虚拟内存。但是由于真实的内存不一定有那么大。因此无法将所有的内存都映射到4G的虚拟内存。因此,Smart-VM的内存管理机制借助英特尔处理器的页错误机制,采用的是按需分配的算法。
由于Smart-VM上有很多的进程,每个进程都需要Smart-VM内核的代码,因此所有的进程都共享Smart-VM内核。在Smart-VM中,每个进程的4G的虚拟内存的最后1G是内核占用。所有的进程的最后1G都映射到相同内核中,如图6.5。图6.6是每个进程的内存空间分布。
图 6.5 进程内存布局
图 6.6 进程内存布局
Smart-VM目前的进程调度较为简单,采用的是平均分配时间的方法。
Smart-VM的进程通信机制需要处理两种情况:
a) 进程A向进程B发送消息的时候,需要等待进程B的回复;
b) 进程A向进程B发送消息的时候,不需要等待进程B的回复;
在Smart-VM 中,只支持固定的32M容量的内存。
图 6.7 Smart-VM物理内存划分
由于VMX模式需要在开启分页机制的情况下才能够激活,因此Smart-VM也提供了虚拟内存的管理方案[18]。
Smart-VM的物理内存划分见图6.7。0~8M用于Smart-VM,其余的用于客户操作系统。
Smart-VM内核物理内存的使用范围是0~8M空间。
在这8M的空间中,0~0x10000用于内核的代码段和数据段,0x9FC00~0x100000是内存保留区,具体参见图6.1,除此之外,用于内核的堆和栈的使用。
内存分配需要提供以下几点功能:
a) 根据要求的地址对齐方式,分配内存;
b) 不需要按照规定的地址对齐方式,分配内存;
内存回收需要提供以下几点功能:
a) 检查回收的内存地址是不是之前分配的地址;
Smart-VM分配给客户操作系统的物理内存的方案是一次性分配,内存管理方案的要求:
a) 要为分配的物理内存建立一张页表;
b) 分配的物理内存都是按4K对齐分配;
c) 当虚拟机关闭的时候,需要回收该客户操作系统用到的所有内存。
要随时记录物理内存的使用状况,监视内容包括:
a) 分别记录内核物理内存和客户操作系统的已用内存和未用内存的大小;
b) 单个客户操作系统使用哪些物理内存;
为了防止两个进程同时修改同一块内存,Smart-VM提供了锁住内存的功能。
a) 对于内核物理内存的分配粒度不受限制;
b) 对于客户操作系统物理内存的分配粒度,一般情况下是以1M为单位;
Smart-VM根据硬件设备的传输速度,将硬件设备分为两大类:字符设备和块设备。
驱动程序借助于硬件控制器的DMA机制,相比于轮询机制,能够减轻CPU的负载。
目前只包含键盘驱动程序和控制台显示程序。
在键盘驱动程序之上,有一个终端控制程序,主要功能是翻译键盘编码和控制输入输出;
需要处理当多个进程同时访问硬件设备的时候的调度问题。
Smart-VM采用的是先到先处理的算法。当一个进程要访问一个硬件的时候,如果该硬件空闲,则直接访问硬件,如果该硬件设备忙,则被插入到该硬件设备的一个等待队列。
硬件设备作为文件系统的一个特殊设备,由文件系统管理。
分配给虚拟机的硬盘也作为一个特殊的文件。
Smart-VM文件系统需要真实存储的文件不大,最多可到32M。
图6.8是Smart-VM文件系统的结构[19]:
a) Root:根文件夹节点;
b) Desktop:桌面文件夹,作为用户刚进入系统的操作界面,也可存放一些临时文件;
c) Dev:硬件文件夹,用于管理硬件设备的特殊文件夹。该文件夹除了存放硬件设备等特殊文件外,不能存放其他类型的文件;
d) VMS:虚拟机文件夹,用于管理用户创建的虚拟机,每个虚拟机所需的配置文件夹等放在VMS下的子文件夹。该文件夹只用于存放用户创建的虚拟机相关的文件,不能存放其他类型的文件,子文件夹的名字是虚拟机名;
e) Temp:临时文件夹,用于存放临时文件;
f) Obj:存放一些Smart-VM组件的文件夹;
图 6.8 Smart-VM文件系统结
文件最大为32M。
当一个进程访问一个文件的时候,需要锁定该文件,防止另外一个进程修改该文件。
本章介绍了Smart-VM的操作系统层的实现。
Smart-VM专用操作系统的模块包括:
a) 进程管理:实现了进程的内存空间分布以及进程的调度和通信功能;
b) 内存管理:对内存进行了合理的分配和回收,同时针对小内存块申请和大内存块申请进行了优化;
c) 设备驱动:将设备分为字符设备和块设备;
d) 文件系统:由于Smart-VM操作系统需要存放的文件不需要太大,因此对文件大小的上限做了限制;