全部博文(370)
分类: 虚拟化
2011-10-31 17:35:48
struct start_info {
char magic[32]; /* "xen-版本号-平台".字符串 如Xen-3.1-x86_32p */
unsigned long nr_pages; /* Xen分给Domain的内存页面数. */
unsigned long shared_info; /* 共享信息页的机器物理地址. */
uint32_t flags; /* Domain设置的选项标志位,以SIF_开头 */
xen_pfn_t store_mfn; /* 共享页面的机器物理页号. */
uint32_t store_evtchn; /* XenStore通道的事件通道. */
union { //控制台相关的数据
struct {//对于domU来说
xen_pfn_t mfn; /* 控制页面的的物理页号 */
uint32_t evtchn; /* 控制页面的事件通道. */
} domU;
struct {//对于dom0来说
uint32_t info_off; /* 控制结构的偏移量. */
uint32_t info_size; /* */
} dom0;
} console;
/* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME). */
unsigned long pt_base; /* Domain Builder 生产的页目录的虚拟机地址. */
unsigned long nr_pt_frames; /* Number of bootstrap p.t. frames. */
unsigned long mfn_list; /* VIRTUAL address of pag. */
unsigned long mod_start; /* VIRTUAL address of pre-loaded module. */
unsigned long mod_len; /* Size (bytes) of pre-loaded module. */
int8_t cmd_line[MAX_GUEST_CMDLINE]; //控制台信息组
/* The pfn range here covers both page table and p->m table frames. */
unsigned long first_p2m_pfn;/* 1st pfn forming initial P->M table. */
unsigned long nr_p2m_frames;/* # of pfns forming initial P->M table. */
};
typedef struct start_info start_info_t;
二、共享页:包含与CPU状态相关的基本信息,主要用于在Guest OS运行过程Xen和Guest OS之间的共享。
struct shared_info {
struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS]; //VCPU信息结构体数组
unsigned long evtchn_pending[sizeof(unsigned long) * 8]; //事件通道相关标志位数组
unsigned long evtchn_mask[sizeof(unsigned long) * 8]; //事件通道相关的标志位数组
uint32_t wc_version; /* Version counter: see vcpu_time_info_t. */
uint32_t wc_sec; /* Secs 00:00:00 UTC, Jan 1, 1970. */
uint32_t wc_nsec; /* Nsecs 00:00:00 UTC, Jan 1, 1970. */
struct arch_shared_info arch; //体系结构相关的结构,在/xen/include/public/arch-x86/xen.h 中定义
};
#ifndef __XEN__
typedef struct shared_info shared_info_t;
#endif
struct vcpu_info {
uint8_t evtchn_upcall_pending; //标志位,由Xen设置,若非0则表示存在未处理的事件,如为1表示存在未处理的时
uint8_t evtchn_upcall_mask; // 标志位,若设置为非0,则表示屏蔽VCPU中断
unsigned long evtchn_pending_sel; //可以看作evtchn_pending选择符,表示该未处理的Event Channel在shared_info结构中的evtchn_pending数组中所在的 位置。
struct arch_vcpu_info arch; //VCPU体系结构信息
struct vcpu_time_info time; //VCPU时间相关信息
}; /* 64 bytes (x86) */
#ifndef __XEN__
typedef struct vcpu_info vcpu_info_t;
#endif
三、XenStore:一个与传统操作系统的文件系统相似的树形结构,用于存储一些设备信息和与Domain相关的其他信息(如各个虚拟机的配置信息)。
在机器加电后,BIOS会对硬件设备进行一次彻底的检测,即加电自检。BIOS自检完成后,会对硬件设备进行初始化,保证所有的在IRQ(中断请求)和I/
O端口操作时没有冲突。BIOS的这一部分功能是由启动信息页和XenStore共同完成的。为了能够尽早使用控制台设备,将控制台设备的信息保存在启动信息页中,在Guest OS内核启动时加载。其他设备的信息则保存在XenStore中。
(注:启动信息页和共享信息页时通过共享内存内存页来实现的)