微内核中也有着类似Linux中地址空间的概念,被seL4称为VSpace,VSpace泛指任务能够访问的虚拟地址空间,任意一个任务(Thread)都绑定了一个VSpace,而一个VSpace可以被若干个Thread共享,共享一个VSpace的任务同时也共享了整个地址空间。
以RISC-V架构为例,VSpace在内核中被维护为PageTable内核对象,PageTable是一块连续的数组,存储了若干的PageTableEntry,根据页表级数的不同(一般为三级页表),PageTableEntry维护虚拟地址某几位到次级页表(或物理页框)的物理页帧号。次级页表也是一个PageTable内核对象,由此形成一个树形页表结构。
VSpace将PageTable内核对象对应的Capabiltiy暴露给用户态,一般来讲,用户台可以通过UntypedRetype系统调用创建一个PageTable并返回Capability句柄。而后通过PageTableMap系统调用映射对应的二级页表。最后通过PageMap映射对应的物理页帧。
Interface #
- seL4_RISCV_PageTable_Map/seL4_RISCV_PageTable_Unmap:映射二级页表。
- seL4_RISCV_Page_map/seL4_RISCV_Page_Unmap:映射物理页帧。