Xen的共享信息页(Shared Info Page)

Xen的共享信息页(Shared Info Page)

1. 共享信息页(Shared Info Page)概述

       启动信息页(Start Info Page)只在Domain启动或恢复时才被更新,且启动信息页由Domain Builder在Domain启动时映射到内存空间中。而共享信息页(Shared Info Page)在Domain整个运行过程中,都可以被Xen和Guest OS访问更新,可以用来在Xen和Guest OS之间共享和传递信息,主要收集与VCPU和虚拟机状态相关的信息,其中包括VCPU状态信息,时钟信息和事件通道(虚拟中断)状态信息等,且共享信息页是由Guest OS自己将其映射到内存空间中的。

2.共享信息页的结构

2.1 共享信息页的结构体定义

struct shared_info {
	/*与VCPU信息相关, XEN_LEGACY_MAX_VCPUS=64*/
	struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS];
	/*与事件通道相关*/
	unsigned long evtchn_pending[sizeof(unsigned long) *8];
	unsigned long evtchn_mask[sizeof(unsigned long)*8];
	
	uint32_t wc_version;/*当前挂钟版本计数器*/
	uint32_t wc_sec; /*当前挂钟时间(秒)*/
	uint32_t wc_nsec;/*当前挂钟时间(纳秒)*/
	/*与系统体系结构相关信息*/
	struct arch_shared_info arch;
};
#ifndef  __XEN__
typedef struct shared_info shared_info_t;
#endif

2.2 结构体struct shared_info的结构示意图


Figure1:The hierarchy of structures used for the shared info page

3 结构体shared_info的成员字段说明

(1)evtchn_pending 和evtchn_mask

        evtchn_pending和evtchn_mask数组都与事件通道相关。在Xen系统中,每个事件通道都有一对(pending,mask)标志位与之相对,而evtchn_pending和evtchn_masking数组就用来保存这些pending和mask标志位,其中pending标志位表示与其对应的事件通道中有未处理的事件通知,只能由Xen设置,由Guest OS清除;mask标志位用来屏蔽该事件通道的事件通知,只能由Guest OS进行更新。由于pending或mask标志位仅需要1bit表示,所以在x86_32平台上,Domain所分配的事件通道个数为

(unsignedlong)*(sizeof(unsigned long))*8=1024

(2)wc_version,wc_sec和wc_nsec

         wc_version, wc_sec和wc_nsec都与系统时间(SystemTime)相关。其中,wc_version为挂钟版本计数器,wc_sec和wc_nsec都表示挂钟的当前时间,分别是秒级和纳秒级。在Xen系统中,主要有两类时间,一类是系统实际时间,一类Guest OS虚拟时间。

(3)arch

        struct arch_shared_info结构体arch用于保存与体系结构相关的信息,其中max_pfn表示P2M表中出现的最大物理页框号(Physical Frame Number, PFN),pfn_to_mfn_frame_list_list则表示包含P2M表的页框列表的页框机器地址,nmi_reason用来记录发生非屏蔽中断(NonMask Interruption, NMI)的原因,其结构定义如下所示:

struct arch_shared_info {
    unsigned long max_pfn;                     
    xen_pfn_t     pfn_to_mfn_frame_list_list;
    unsigned long nmi_reason;
    uint64_t pad[32];
};

(4)    vcpu_info

        vcpu_info保存与VCPU状态相关的信息,vcpu_info数组中的每个成员对应一个分配给Domain的VCPU,在vcpu_info的每个成员中,evtchn_upcall_pending由Xen设置,若非零表示vcpu存在未处理事件;evtchn_upcall_mask由Guest OS设置,若设为非零,其将使该VCPU屏蔽所有事件通道, evtchn_pending_sel可以看做evtchn_pending数组的选择符(selector),若第10个(端口号为9)事件通道中存在未处理的事件通知,则evtchn_pending_sel的第一位被设置为1,表示在端口号为0-31组成的一组事件通道中存在未处理的事件通知。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值