SeL4: 二 内核对象

seL4内核通过CNodes、线程控制块、端点、通知对象等构建其接口,实现同步IPC和对象管理。端点支持消息传递,通知对象提供信号机制,虚拟地址空间对象用于构建线程的地址空间,中断对象处理硬件中断,未分配内存作为内存分配基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍的均为内核不配置 MCS 的情况

内核实现了一类对象类型,应用程序可以调用它们的实例(也称为对象objects)。这些对象的接口构成了内核本身的接口。创建和使用内核服务就是通过创建、操作和组合这些内核对象来实现的:

  • CNodes:存储多个能力,许可线程调用特定对象的方法。

    • 每个CNode有固定数量的slots(槽),且总是2的整数幂,这在CNode创建时确定。Slots可以是空的,也可以包含能力。
  • 线程控制块:表示seL4中的一个线程。

  • 端点:促成了线程之间的消息通信。

    • IPC是同步的:一个线程试图在一个端点上发送或接收数据,会阻塞直到信息可以传递 (这里未考虑非阻塞的情况,因为非阻塞不要求必须成功发送或接收。) 。这意味着消息传递只会发生在发送方和接收方在端点会合时,从而内核可以通过一次拷⻉来传递消息(或无拷⻉而仅使用寄存器来传递短消息)。
    • 端点能力可以限制为仅发送或仅接收。此外,端点还可以拥有授权能力,这允许将另
      外的能力作为消息的一部分进行发送。
  • 通知对象:提供了一个简单的信号机制。

    • 一个通知对象是一个机器字大小的标志集合,每个标志类似于一个两值信号量。
    • 操作包括发送信号、轮询检查任何标志的信号、阻塞等待任一标志的信号。
    • 通知能力可以限制为仅发送或仅接收。
  • 虚拟地址空间对象:用于为一个或多个线程构造虚拟地址空间(VSpace)。

    • 这些对象大部分直接对应硬件设备,因此是架构依赖的。
    • 内核还引入了用于跟踪地址空间状态的ASID(Address Space IDentifier)池和ASID控制对象。
  • 中断对象:赋予应用程序接收和应答硬件设备中断的能力。

    • 初始时,系统有一个IRQControl能力,它允许创建IRQHandler能力。一个IRQHandler能力管理一个与特定设备关联的特定中断源,并被委托给一个设备驱动程序用以访问中断源。IRQHandler对象允许线程等待并应答单个中断。
  • 未分配内存: Untyped Memory 是seL4内核内存分配的基础 。内核内存分配

    • 未分配内存能力只有一个单一的方法用于创建新的内核对象。如果方法成功了,则调用线程获得新创建对象的访问能力。此外,未分配内存可以分为一组更小的未分配内存对象,以代表其拥有的部分或全部系统内存。
    • retyped a new untyped:分配为一个新的未分配对象

对象大小概览

对象大小在libsel4中定义。

注意,CNodes、SC未分配内存对象都是可变大小的。当把未分配内存重新分配成CNodes、SC,或将其分成更小的未分配内存对象时,seL4_Untyped_Retype()size_bits参数用于指定生成对象的大小。对于所有其他对象类型,大小是固定的,seL4_Untyped_Retype()size_bits参数将被忽略。

类型size_bits含义字节大小
CNodelog2(slots数量)2^size_bits x 2^seL4_SlotBits
seL4_SlotBits : 32位架构:4、64位架构:5
SchedContext(仅MCS)log2(字节数量)2^size_bits
Untypedlog2(字节数量)2^size_bits

seL4_Untyped_Retype()的单个调用:

  • 可以将一个未分配内存对象重新分配为多个对象,要创建的对象数量由num_objects参数指定。
  • 同时创建的所有对象必须具有相同的类型,由type参数指定。
  • 对于可变大小的对象,每个对象的大小也必须相同。
  • 如果所需的内存区域大小(通过对象大小乘以num_objects计算)大于未分配内存对象剩余内存,则会导致错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值