XenStore:使用,结构和原理(1. 快速入门)
来源:互联网 发布:mac如何删软件 编辑:程序博客网 时间:2024/06/05 12:39
目录(?)[-]
- 摘要:XenStore是Xen提供的一个域间共享的存储系统,它以字符串形式存放了管理程序和前、后端驱动程序的配置信息。Dom0管理所有的数据,而DomU通过共享内存,向Dom0请求与自己相关的键值,以此实现域间通信。Xen提供了多种接口用来操作XenStore:命令行的xenstore-*命令、用户空间的xs_系列函数、内核的XenBus接口,都可以用来方便地操作XenStore的数据。
- 动机
- 快速入门
摘要:XenStore是Xen提供的一个域间共享的存储系统,它以字符串形式存放了管理程序和前、后端驱动程序的配置信息。Dom0管理所有的数据,而DomU通过共享内存,向Dom0请求与自己相关的键值,以此实现域间通信。Xen提供了多种接口用来操作XenStore:命令行的xenstore-*命令、用户空间的xs_系列函数、内核的XenBus接口,都可以用来方便地操作XenStore的数据。
0. 动机
在Xen的半虚拟化(PV)系统中,各个虚拟机(Domain)之间可以利用Xen核心提供的授权表(Grant Table)和事件通道(Event Channel)机制进行域间通信。但是在实际使用中有这样的问题:
- Alice使用授权表共享了一个页面,但是Sanae想要拿来用,必须事先知道它的授权引用(gref);
- Alice打开一个事件通道(unbound evtchn),但是Sanae想要绑定这个通道,必须事先知道Alice使用的端口号(remote port)。
显然,想要解决这两个问题,需要Alice和Sanae之间,在建立自定义的授权表、事件通道之前就能够互相通信。
使用XenStore可以很方便地实现这种通信。
1. 快速入门
XenStore是Xen提供的一个域间共享的存储系统,它以字符串形式存放了管理程序和前、后端驱动程序的配置信息。Dom0管理所有的数据,而DomU通过共享内存,向Dom0请求与自己相关的键值,以此实现域间通信。
XenStore的存储结构类似于Dom树:每一个节点(Node)有一个字符串值(Value),并且可以有多个子节点。在Dom0启动后,XenStore的结构如下:
/
vm
{uuid}
…
local
domain
0
vm
device
control
memory
console
limit
type
name
......
1
…
tool
xenstored
在根(/)下有三个子目录,vm,local(实际上是/local/domain)和tool。vm存放虚拟机管理信息。tool暂时没有数据。而/local/domain存放了活动虚拟机配置和驱动信息。/local/domain中每一个目录项代表一个活动的虚拟机,例如/local/domain/0代表dom0。Dom0可以读写XenStore的全部数据,而Dom-x只能访问/local/domain/x的内容。需要在dom0和domx之间共享的内容,一般都写在这个目录下,所以/local/domain是最常用的目录。
Xen提供了多种接口用来操作XenStore:命令行的xenstore-*命令、用户空间的xs_系列函数、内核的XenBus接口,都可以用来方便地操作XenStore的数据。
操作
命令行
用户空间
- #include <xs.h>
- -lxenstore
内核空间
- #include “xen/xenbus.h”
列目录
xenstore-ls(递归)
xenstore-list(不递归)
xs_directory
xenbus_directory
读写
xenstore-read
xenstore-write
xs_read
xs_write
xenbus_read
xenbus_write
xenbus_scanf
xenbus_printf
建立/删除目录
xenstore-mkdir
xenstore-rm
xs_mkdir
xs_rm
xenbus_mkdir
xenbus_rm
监视
xenstore-watch
xs_watch
xs_unwatch
xs_read_watch
xenbus_watch
xenbus_unwatch
例子
命令行
- xenstore-write example/Alice hello!
用户空间
- struct xs_handle *xh = xs_open(0);
- int xt=xs_transaction_begin(xh);
- xs_write(xh,xt,"/local/domain/0/example/Alice", "hello!", sizeof("hello!"));
- xs_transaction_end(xh, xt, 0);
- xs_close(xh);
内核空间
- struct xenbus_transaction trans;
- xenbus_transaction_start(&trans);
- xenbus_printf(trans, "example", "Alice", "Hello! trans_id = %d", trans.id);
- xenbus_transaction_end(trans, 0);
具体的使用方法,可以查看相应的头文件
- XenStore:使用,结构和原理(1. 快速入门)
- XenStore:使用,结构和原理(1快速入门) .
- XenStore: 使用,结构和原理
- XenStore:使用,结构和原理(3. XenStore启动过程分析)
- XenStore: 使用,结构和原理(2. XenStore的结构和通信流程)
- XenStore:使用,结构和原理(4. 监视: xs_watch)
- Xenstore和Xenbus
- XenStore 和 Xenbus
- xenstore
- XenStore
- C++快速入门 (十四) 结构和联合
- map结构快速入门
- Redis快速入门、熟悉和使用
- API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)
- API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)
- API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)
- API hook原理和实例快速入门(inline hook),以dll线程注入方式使用(win7-64bit)
- 第一章 快速入门 控制结构
- linux下练习 c++ 特殊容器、特殊函数的使用
- 在ubuntu上安装svn server
- VC 2005 解决方案的目录结构设置和管理
- 北理工虚拟现实作业
- 使用异步 I/O 大大提高应用程序的性能 学习何时以及如何使用 POSIX AIO API
- XenStore:使用,结构和原理(1. 快速入门)
- XenStore: 使用,结构和原理(2. XenStore的结构和通信流程)
- VC++6.0编译环境介绍(2)
- 移植i2c设备驱动
- XenStore:使用,结构和原理(3. XenStore启动过程分析)
- VC++6.0编译环境介绍(1)
- linux里的驱动接口
- Codeforces Round #147 (Div. 2)
- XenStore:使用,结构和原理(4. 监视: xs_watch)