Xen的启动信息页(Start Info Page)

Xen的启动信息页(Start Info Page)

1.传统操作系统与Xen系统中Guest OS的不同

(1)传统的操作系统(例如Linux或Unix)启动时,是通过BIOS直接访问外部设备的硬件信息驱动引导启动的,
但在Xen系统中,Guest OS是不能直接通过访问BIOS来获取这些启动时所需要的硬件信息的。
(2)传统操作系统启动要经历实模式跳转到保护模式的过程, 但Guest OS的启动是在保护模式下进行的。

2.Xen系统中Guest OS启动的解决方案

Xen系统通过内存页的方式向Guest OS提供启动时所需要的硬件信息和初始化信息,则BIOS的功能被Xen系统中的3种机制所实现:
(1)启动信息页(Start Info Page):包含Guest OS初始化内核所必需的一些硬件信息,在Guest OS启动或者从挂起状态恢复过程中
传递给Guest OS;
(2)共享信息页(Shared Info Page):包含与CPU状态相关的基本信息,主要用于在Guest OS运行过程中Xen和Guest OS之间的共享;
(3)XenStore: 一个与传统操作系统的文件系统相似的树形存储结构,用于存储一些设备信息和与Domain相关的其他信息。
在Guest OS内核启动过程中,为了能够尽早的启动控制台(console)设备,则控制台设备的信息保存在启动信息页中,其他设备的信息
保存在XenStore中。 

3.启动信息页

3.1 启动信息页的数据结构

        启动信息页是在Guest OS内核启动时,由Xen映射到Guest OS的伪物理内存空间中,包含了一些内核启动所需要的信息,其数据结构的定义
在xen/include/public/xen.h文件中,以Xen-4.2.1为例如下所示:
struct start_info {
	/*Guest OS启动或从挂起状态恢复时被填充*/
    char magic[32];
    unsigned long nr_pages;
    unsigned long shared_info;
    uint32_t flags;
    xen_pfn_t store_mfn;
    uint32_t store_evtchn;
    union {
        struct {
            xen_pfn_t mfn;
            uint32_t  evtchn;
        } domU;
        struct {
            uint32_t info_off;
            uint32_t info_size;
        } dom0;
    } console;
    /*仅在Guest OS启动时被填充*/
    unsigned long pt_base; 
    unsigned long nr_pt_frames;
    unsigned long mfn_list;
    unsigned long mod_start;
                                
                               
    unsigned long mod_len; 
    int8_t cmd_line[MAX_GUEST_CMDLINE];
    
    unsigned long first_p2m_pfn;
    unsigned long nr_p2m_frames;
};

3.2 struct start_info结构中字段说明

magic: 保存如"Xen-版本号-平台"的字符串,其长度不超过32位,
用于Domain在启动时对Xen的版本和兼容性进行检测,以保证Xen版本和运行平台的一致性;

nr_pages:Xen分配给Domain的总内存页面数;

shared_info: 保存共享信息页的机器物理地址(Machine Address),因为在Guest OS启动或
从挂起状态恢复时,都需要将共享信息页映射到自己的地址空间,所以使用机器物理地址能够
简化这一操作,同时在Xen系统运行过程中,共享信息页在机器内存中存放的位置是不变的。

flags:包含一些可选的Domain参数设置,以SIF_开头。其中SIF_PRIVILEGED表示该Domain为特权
域;SIF_INITDOMAIN表示该Domain为初始化控制域,即为Dom0

store_mfn和store_evtchn:store_mfn表示Domain和XenStore通信的共享内存页面的机器页号,
store_evtchn表示Domain与Xenstore通信服务的事件通道(Event Channel)的端口号。由页号和
事件通道端口号组成的(mfn,evtchn)对共同确定属于该Domain的Xenstore设备。

console:console是一个联合体,根据Domain的类别取不同的值。若为Dom0, console中包含的则是
Dom0控制台结构体struct console_info的偏移量和大小。若为DomU,则用(mfn, evtchn)对来表示
DomU的控制台设备。在Xen系统中,只有XenStore和console这两种设备在启动信息页中定义,其他设备
必须通过XenStore来定义。

pt_base:页表的伪物理内存地址
nr_pt_frames:Domain拥有的Page Frame数
mfn_list:Page Frame list的伪物理内存地址

mode_start:首个预加模块的伪物理内存地址
mode_len:预加模块的总字节
cmd_line: 包含一个不超过MAX_GUEST_CMDLINE个字符的字符串,用于保存
必须在Domain启动时向系统内核传递的参数信息。

在Domain启动过程中,其内存空间要求是以4MB为边界的连续区域。在该区域中依次
存放与Domain启动相关的数据和信息:重新加载的内核镜像、初始化Ramdisk(mode_start, mod_len)、
页框列表虚拟地址和页面数(mfn_list, nr_pages)、启动信息结构体的地址(ESI寄存器)、启动页表虚拟地址
(pt_base、CR3寄存器)和启动栈(ESP寄存器)。这些数据和信息按照顺序放在一起,但每一部分都
以4KB的整数倍作为起始地址。在启动栈之后,会预留512kb的内存空间。如果内存不足,需要再加一个4MB的内存块。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值