1、文件/xen/include/public/xen.h

2、第一个数据结构:启动信息页strat_info,启动信息页是GuestOS内核启动时,由Xen映射到GusetOS内存空间的一个物理页面,其中包含了GuestOS内核启动所需要的所有信息。代码如下:

#define MAX_GUEST_CMDLINE 1024
typedef struct start_info {
/* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */
char magic[32]; /* "xen-<version>-<platform>". */
unsigned long nr_pages; /* Total pages allocated to this domain. */
unsigned long shared_info; /* MACHINE address of shared info struct. */
uint32_t flags; /* SIF_xxx flags. */
unsigned long store_mfn; /* MACHINE page number of shared page. 用于和XenStore通信的共享内存页面的机器页号。*/
uint32_t store_evtchn; /* Event channel for store communication. 用于和XenStore通信服务的事件通道端口号。*/
unsigned long console_mfn; /* MACHINE address of console page. */
uint32_t console_evtchn; /* Event channel for console messages. */
unsigned int store_mfn_gref; /* to make store_mfn -kcr */
/* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME). */
unsigned long pt_base; /* VIRTUAL address of page directory. */
unsigned long nr_pt_frames; /* Number of bootstrap p.t. frames. */
unsigned long mfn_list; /* VIRTUAL address of page-frame list. */
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];
unsigned long min_mfn; /* min mfn (min_page in xen) */
} start_info_t;

关键解读:

(1)store_mfn和store_etchn与设备XenStore相关,由页号和事件通道端口号组成的(mfn,evtchn)键值对共同确定了属于某一Domain的XenStore设备,这种形式在Xen系统中应用广泛。

(2)在Xen系统中,只有XenStore和console这两种设备是在启动信息页定义的,其他设备(块设备、网络设备等)都是通过XenStore来定义。

3、第二个重要数据结构:shared_info,共享信息页

启动信息页只在Domain启动或者恢复的时候才能发挥作用,也只能在这个时候被更新;与之不同,共享信息页在整个过程中都发挥作用,且能够在整个运行过程中被动态新。能够被Xen和GuestOS同时访问,用来在Xen和GuestOS之间共享和传递信息。

共享信息页主要收集:VCPU状态信息、时钟信息和事件通道(虚拟中断)状态信息等。

struct shared_info {
struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS]; /* VCPU信息结构体数组 */
    xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8]; /* 事件通道pending */
    xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8]; /* 事件通道掩码*/     /*
     * Wallclock time: updated only by control software. Guests should base
     * their gettimeofday() syscall on this wallclock-base value.
     */
    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; /* VCPU体系结构信息*/ };

关键点:

(1)在Xen系统中,每个事件通道都有一对(pending,mask)标志位与之相对应。如过在x86平台下,每个Domain分配的事件通道个数为:(unsign long) * (sizeof(unsigned long)) * 8 = 1024。 evtchn_pending数组中的pending标志位表示与其对应的事件通道中有未处理的事件:只能Xen设置,GuestOS清除;evtchn_mask数组中的mask标识未用来屏蔽该事件通道的通知,只能有GuestOS进行更新。

(2)arch_shared_info结构提目前定义于/xen/include/arch-x86/xen.h,这一点改进非常好,因为这样就将不同平台的支持隔离开来,相应的对arm平台的支持文件就可以放在/xen/include/arch-arm/下了。这是linux kernel中通用的做法。

最新文章

  1. MarkdownPad2 表格不显示处理
  2. 数学复习 ---- Mathematics Notes: A Programmer&#39;s Perspective ---- by Orzer ---- 我是沙茶
  3. BZOJ3755 : Pty爬山
  4. php curl向远程服务器上传文件
  5. Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛
  6. BufferedReader的ready与readLine使用,以及Premature EOF异常
  7. CSDN 高校俱乐部: 排列搜索
  8. 走进javascript——类型
  9. Android 开发笔记___spinner__适配器基础_arrayadapter
  10. scss 编译方法
  11. 在线数据库表(sql语句)生成java实体类工具
  12. Python05(运算符)
  13. 最大矩阵(简单DP)
  14. 微信小程序客服消息新增临时素材接口java实现
  15. SQL server学习(五)T-SQL编程之存储过程
  16. 关于android 动态设置view 样式 问题(默认style)
  17. Altium Designer (DXP) 复制粘贴,放器件 出错报异常的原因
  18. WebClient vs HttpClient vs HttpWebRequest
  19. 2018-2019第一学期Java助教心得
  20. HDU 4735 Little Wish~ lyrical step~(DLX搜索)(2013 ACM/ICPC Asia Regional Chengdu Online)

热门文章

  1. pytorch ImageFolder的覆写
  2. 史上最全的 DB2 错误代码大全
  3. RequestUtil 获取网址页面信息
  4. 解决端口被占用问题(端口timewait)
  5. Shenzhen Wanze Technology Co., Ltd.技术支持
  6. SpringBoot2+Druid+MyBatis+MySql实现增删改查
  7. Oracle Spatial分区应用研究之三:县市省不同分区粒度的效率比较
  8. SpringBoot自动配置原理学习
  9. Spring笔记4
  10. Java开发笔记(一百一十)GET方式的HTTP调用