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

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

  1. #define MAX_GUEST_CMDLINE 1024
  2. typedef struct start_info {
  3. /* THE FOLLOWING ARE FILLED IN BOTH ON INITIAL BOOT AND ON RESUME. */
  4. char magic[32]; /* "xen-<version>-<platform>". */
  5. unsigned long nr_pages; /* Total pages allocated to this domain. */
  6. unsigned long shared_info; /* MACHINE address of shared info struct. */
  7. uint32_t flags; /* SIF_xxx flags. */
  8. unsigned long store_mfn; /* MACHINE page number of shared page. 用于和XenStore通信的共享内存页面的机器页号。*/
  9. uint32_t store_evtchn; /* Event channel for store communication. 用于和XenStore通信服务的事件通道端口号。*/
  10. unsigned long console_mfn; /* MACHINE address of console page. */
  11. uint32_t console_evtchn; /* Event channel for console messages. */
  12. unsigned int store_mfn_gref; /* to make store_mfn -kcr */
  13. /* THE FOLLOWING ARE ONLY FILLED IN ON INITIAL BOOT (NOT RESUME). */
  14. unsigned long pt_base; /* VIRTUAL address of page directory. */
  15. unsigned long nr_pt_frames; /* Number of bootstrap p.t. frames. */
  16. unsigned long mfn_list; /* VIRTUAL address of page-frame list. */
  17. unsigned long mod_start; /* VIRTUAL address of pre-loaded module. */
  18. unsigned long mod_len; /* Size (bytes) of pre-loaded module. */
  19. int8_t cmd_line[MAX_GUEST_CMDLINE];
  20. unsigned long min_mfn; /* min mfn (min_page in xen) */
  21. } 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状态信息、时钟信息和事件通道(虚拟中断)状态信息等。

  1. struct shared_info {
  2. struct vcpu_info vcpu_info[XEN_LEGACY_MAX_VCPUS]; /* VCPU信息结构体数组 */
  1.     xen_ulong_t evtchn_pending[sizeof(xen_ulong_t) * 8]; /* 事件通道pending */
  2.     xen_ulong_t evtchn_mask[sizeof(xen_ulong_t) * 8]; /* 事件通道掩码*/
  3.     /*
  4.      * Wallclock time: updated only by control software. Guests should base
  5.      * their gettimeofday() syscall on this wallclock-base value.
  6.      */
  7.     uint32_t wc_version;      /* Version counter: see vcpu_time_info_t. */
  8.     uint32_t wc_sec;          /* Secs  00:00:00 UTC, Jan 1, 1970.  */
  9.     uint32_t wc_nsec;         /* Nsecs 00:00:00 UTC, Jan 1, 1970.  */
  10.     struct arch_shared_info arch; /* VCPU体系结构信息*/
  11. };

关键点:

(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中通用的做法。

阅读笔记---第三章 Xen信息页的更多相关文章

  1. 《Interest Rate Risk Modeling》阅读笔记——第三章:拟合期限结构

    目录 第三章:拟合期限结构 思维导图 扩展 第三章:拟合期限结构 思维导图 扩展 NS 模型的变种

  2. C++PRIMER 阅读笔记 第三章

    本章主要介绍 string vector 和 bitset, 不能贪多,现在本文主要介绍 string 与 vector 头文件中最好不要使用namespace std, 因为头文件会直接被预处理器放 ...

  3. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  4. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

  5. Hadoop阅读笔记(三)——深入MapReduce排序和单表连接

    继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...

  6. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  7. 《大象Think in UML》阅读笔记(三)

    Think in UML 阅读笔记(三) 把从现实世界中记录下来的原始需求信息,再换成一种可以知道开发的表达方式.UML通过被称为之概念化的过程来建立适合计算机理解和实现的模型,这个模型被称为分析模型 ...

  8. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  9. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

随机推荐

  1. openstackx

  2. [转发]for 循环,jQuery循环遍历详解

    1.for 循环原生JS最基本的使用: for (var i=0;i<cars.length;i++) { ..... } for - 循环代码块一定的次数2.for infor/in - 循环 ...

  3. Python3基础 函数 函数名赋值操作

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  4. 数据分析入门——pandas之数据合并

    主要分为:级联:pd.concat.pd.append 合并:pd.merge 一.numpy级联的回顾 详细参考numpy章节 https://www.cnblogs.com/jiangbei/p/ ...

  5. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存

    import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...

  6. c# 并行循环支持 async

    var bag = new ConcurrentBag<object>(); var tasks = myCollection.Select(async item => { // s ...

  7. Mysql关键字之Group By(一)

    原文地址,优先更新https://hhe0.github.io group by 是一个我们在日常工作学习过程中经常遇到的一个Mysql关键字.现总结其用法如下,内容会不断补充,出现错误欢迎批评指正. ...

  8. 两种Redis持久化原理的详解

    Redis为持久化提供了两种方式: RDB:在指定的时间间隔能对你的数据进行快照存储. AOF:记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据. 本文将通过下面内容的介 ...

  9. [转自baidu]修正古人五行,《七行说》之提出

    一.论原五行相生.相克关系不妥之处: 祖国医学原“五行说”即金.木.水.火.土.在五行学说中说相生规律为:金生水:水生木:木生火:火生土:土生金.相克规律为:火克金:金克木:木克土:土克水:水克火.这 ...

  10. 博客迁移到github了

    博客迁移到github了,这边基本不更新, 主要是没有找到快捷的同步方法,手动同步太麻烦了,如果你有快速把github博客同步到博客园的方法请一定告诉我