微内核 seL4 Untyped

2020-09-28  本文已影响0人  汪大星

seL4的内存管理

在seL4中,除了少量静态内存属于内核,所有的物理内存都由用户态管理。在root task开始运行的时候就已经获取了所有seL4启动时候创建的object相应的capability,还有那些未被使用的物理资源。

untyped memory的概念

除了用于创建root task的object,所有未被使用的物理内存都叫untyped memory,相应的capability都统称为untyped memory capability。untyped memory是一块制定大小的连续物理内存。

untyped object(untyped memory)有一个boolean属性叫device,说明内存对于内核是否可写。如果内存有device属性,那么它就不被RAM支持,只能被一些其他设备支持。device untyped object只能被retype成frame object(physical memory frames,可被映射到虚拟内存)。

在seL4_BootInfo的结构体中有从untyped.start到untyped.end的所有untyped memory对应的capability,而且有一个untyped list保存着这些内存的物理地址,大小和device属性。

retype

只要untyped capability对应的memory大小允许,memory可以被拆分成许多新的object。使用seL4_Untyped_Retype函数对untyped capability进行创建新的capability(同时也是会对应的untyped object进行retype)。新的capability是原来untyped capability的children,children按顺序获得有效内存,且内存是对齐的。例如,创建4k object以后创建16k object,这样有12k就被浪费了。

seL4_Untyped_Retype(parent_untyped, seL4_UntypedObject, untyped_size_bits, seL4_CapInitThreadCNode, 0, 0, child_untyped, 1);

这个函数中的参数:

用seL4_CNode_Revoke可用回退掉retype操作。

上一篇下一篇

猜你喜欢

热点阅读