sel4源码解析(二) - CSpace


Sel4采用基于capability的访问控制模型,进程对系统资源的访问控制权限组成一个capability space,所有的cap存放在CNode里。CSpace是由CNode构成,CNode可以看成一个数组,数组元素称为slot,每一个slot里面可以存放一个cap或者为空。
Sel4提供CDT(capability derive tree)结构保存权能的拷贝、

CNode

CNodes本质是一个结构体数组,该数组的元素是cte(capability table entry),cte中包含一个cap_t结构体和mdb_node_t结构体。CNodes的cte称为slot,下面是slot的结构体:

  • cap:包含权限和指向具体cap的指针;
  • cteMDBNode:保存cap之间的关系,比如:untyped cap衍生出的其它对象的cap。
struct cte {
   
    cap_t cap;
    mdb_node_t cteMDBNode;
};

CNodes本身是一个内核对象,也有相应的cap。下面是CNode cap的结构体:

  • capCNodeGuard:具体的guard数值;
  • capCNodeGuardSize:guard占的位数;
  • capCNodeRadix:CNode的最大slot个数;
  • capCNodePtr:指向CNode的指针;
block cnode_cap(capCNodeRadix, capCNodeGuardSize, capCNodeGuard, capCNodePtr, capType) {
   
    field capCNodeGuard 64
    field capType 5
    field capCNodeGuardSize 6
    field capCNodeRadix 6				
    field_high capCNodePtr 47
}

capability

capability的结构体的大小是16字节,它包含两部分,一部分是seL4_CapRights,另一部分是指向具体对象cap的指针。下面是cap的结构体和seL4_CapRights结构体:

struct cap {
   
    uint64_t words[2];
};

block seL4_CapRights {
   
    padding 32
    padding 28
    field capAllowGrantReply 1
    field capAllowGrant 1
    field capAllowRead 1
    field capAllowWrite 1
}

sel4定义了如下几类cap(不同的架构可能会不同,本例是arm32架构):

enum cap_tag {
   
    cap_null_cap = 0,
    cap_untyped_cap 
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值