设为首页 收藏本站
查看: 1493|回复: 0

[经验分享] Xen的启动信息页(Start Info Page)

[复制链接]

尚未签到

发表于 2015-10-12 08:57:27 | 显示全部楼层 |阅读模式
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的内存块。






版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125634-1-1.html 上篇帖子: 在CentOS6.5上源码编译安装Xen4.2.0 下篇帖子: Xen虚拟机安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表