美文网首页
微内核 seL4 Capabilities

微内核 seL4 Capabilities

作者: 汪大星 | 来源:发表于2020-09-28 19:54 被阅读0次

    capability的概念

    capability是用于访问系统中的entity/object的独一无二的token。
    在seL4初始化阶段,那些可以控制seL4所有资源的capability就已经交给了root task。如果需要使用任何一种资源,用户都必须使用内核API和相应的capability去执行操作。capability就是个数字,如seL4_CapInitThreadTCB是1,这是root task访问它自己的TCB的capability,seL4_CapInitThreadTCB是libsel4中预定义的一个数字。

    CNode的概念

    CNode是一个capability的数组,CSlot是CNode中的槽位,它只有两种状态:有capability或没有capability(即null)。
    第0号CSlot保持为空。CSlot的大小为1u<<seL4_SlotBits,所以只会是2,4,8,16等2的倍数,所以CNode中CSlot的数量就是CNodeSize/(1u<<seL4_SlotBits)。

    CSpace的概念

    CSpace是一个线程的所有capability,所以它可以由一个或者多个CNode组成。CSpace的寻址方式有两种:直接调用(Invocation)直接CSpace寻址

    CSpace寻址方式1(Invocation)

    在启动阶段,root task已经有一个CNode被安装好作为它的CSpace root,如seL4_CapInitThreadTCB和seL4_CapInitThreadVSpace这些capability都是在CSpace root中的,可以直接调用的。例如:

    seL4_TCB_ReadRegisters(seL4_CapInitThreadTCB, 0, 0, num_registers, &registers); 
    seL4_TCB_Suspend(seL4_CapInitThreadTCB);
    

    CSpace寻址方式2(直接CSpace寻址)

    通过直接指出CSlot的位置,这是需要三个重要的信息:

    1. _service/root:要操作的CNode,它是CSpace root中的index;
    2. index:CSlot在CNode中的index;
    3. 深度:在CNode中寻找到CSlot的距离,对于单层CSpace,深度总是seL4_WordBits(即64位)。例如:
    seL4_CNode_Copy(seL4_CapInitThreadCNode, 0, seL4_WordBits, seL4_CapInitThreadCNode, seL4_CapInitThreadTCB, seL4_WordBits, seL4_AllRights);
    

    seL4_BootInfo中描述了许多初始的capability,也包括可用的空CSlot。

    相关文章

      网友评论

          本文标题:微内核 seL4 Capabilities

          本文链接:https://www.haomeiwen.com/subject/egdjuktx.html