鸿蒙系统 微内核 sel4,微内核 seL4 Mapping

seL4操作系统不包含内置的虚拟内存管理,用户需自行创建并管理intermediate paging structures。内核保留了高地址空间。启动时,seL4初始化VSpace,其capability在roottask的seL4_CapInitThreadVSpace中。不同平台的paging structures和映射关系配置不同,包括top-level、intermediate和physical frame到虚拟地址的映射,并设置读写权限。分配paging structures和physical frames涉及特定的seL4_CPtr类型和对象枚举。

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

虚拟内存

seL4不提供虚拟内存管理,除了那些用于操作硬件的paging structure。用户态必须有服务去负责创建intermediate paging structure,还有mapping和unmapping。

用户可以自定义自己的地址空间,但要注意内核拥有虚拟内存的高地址空间。对于大多数32位平台,这是在0xe000 0000以上。

Paging Structures

启动时,seL4就初始化了一个顶层硬件虚拟内存对象叫VSpace,访问这个结构的capability是root task的seL4_CapInitThreadVSpace。对于不同平台,这个capability对应的结构体并不相同。除了top-level paging structure不同以外,intermediate paging structure也因平台不同而不同。

当所有paging structures的映射关系已经建立完毕以后,还需要建立physical frame和虚拟地址之间的映射关系。同时指明虚拟内存的读写权限。

几个需要建立的映射关系

top-level paging structure <====> VADDR (例子中不需自己建立)

intermedia paging structure <====> VADDR

physical frame <====> VADDR

一些很让人困惑的变量类型

==================================================

以下这些其实都是seL4_CPtr,是对应object的capability。

seL4_X86_Page

seL4_X86_PDPT

seL4_X86_PageDirectory

seL4_X86_PageTable

==================================================

在使用alloc_object分配paging structures或physical frame时,需要指明想分配的是object,以下都是枚举型:

seL4_X86_4K: 8

seL4_X86_PDPTObject: 5

seL4_X86_PageDirectoryObject: 11

seL4_X86_PageTableObject: 10

(seL4_X64_PML4Object: 12,这个是top-level paging structure对应的类型,在本例子中不需要分配)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值