Xen事件通道实现通讯设计及说明

在前面四篇文章介绍过Xen的事件通道机制后,设计一个简单的通讯样例,并进行原理说明

1、建立dom时完成事件通道的建立与初始化(vcpu绑定)

1.1 事件通道的初始化

domain_create中调用 evtchn_init完成事件通道初始化,evtchn_init中关键函数为get_free_port。在第一次初始化过程中,get_free_port()通过memset()将分配的结构体数组全部清零,其中包括结构体evtchn成员state的值。成员state值为0,意味着初始化后事件通道都处于未分配状态(ECS_FREE,并且notify_vcpu_id也为0,即所有的事件通道默认都和domvcpu 0进行绑定

1.2 xen的修改

为了实现事件通道的预分配,在创建domain时会对domain的事件通道初始化,函数为evtchn_init,对该函数进行修改如下:

int evtchn_init(struct domain *d)

{

    //struct evtchn *lchn,*rchn;

    //int i,j;

    spin_lock_init(&d->event_lock);

    if( get_free_port(d) != 0 )

        return -EINVAL;

    evtchn_from_port(d, 0)->state = ECS_RESERVED;

    if(d->domain_id==0)

    {

        evtchn_from_port(d, 121)->state = ECS_UNBOUND;

        evtchn_from_port(d, 121)->u.unbound.remote_domid =1;

        evtchn_from_port(d, 122)->state = ECS_UNBOUND;

        evtchn_from_port(d, 122)->u.unbound.remote_domid =2;

        evtchn_from_port(d, 123)->state = ECS_UNBOUND;

        evtchn_from_port(d, 123)->u.unbound.remote_domid =3;

        evtchn_from_port(d, 124)->state = ECS_UNBOUND;

        evtchn_from_port(d, 124)->u.unbound.remote_domid =4;

        evtchn_from_port(d, 125)->

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值