sel4 vspace指的是进程的虚拟地址空间。armv8 64位版本的sel4 对应的页表划分分为四级,分别是:pgd(page global directory)、pud(page upper directory)、pd(page directory)和pt(page table)。
本文主要介绍了sel4关于页表的基本数据结构体、sel4为初始进程创建页表的过程解析以及简要的描述了AArch64架构虚拟地址到物理地址的转换流程。
基本数据结构
pgd
pgd结构体:
- pud_base_address:指向pud基地址的指针(指向的pud大小为4K);
block pgde_pud {
padding 16
field_high pud_base_address 36
padding 10
field pgde_type 2 -- must be 0b11
}
pgd cap结构体:
- capPGDMappedASID:进程的ASID(address space Identifiers);
- capPGDBasePtr:指向pgd结构体的指针。
block page_global_directory_cap {
field capPGDMappedASID 16
field_high capPGDBasePtr 48
field capType 5
field capPGDIsMapped 1
padding 58
}
pud
pud结构体:
- pd_base_address:指向pd基地址的指针(指向的pd大小为4K);
block pude_pd {
padding 16
field_high pd_base_address 36
padding 10
field pude_type 2
}
pud cap结构体:
- capPUDMappedASID:进程的ASID(address space Identifiers);
- capPUDBasePtr:指向pud结构体的指针;
- capPUDMappedAddress:指向映射的虚拟地址。
block page_upper_directory_cap {
field capPUDMappedASID 16
field_high capPUDBasePtr 48
field capType 5
field capPUDIsMapped 1
field_high capPUDMappedAddress 10
padding 48
}
pd
pd结构体:
- pt_base_address:指向pt基地址的指针(指向的pt大小为4K);
block pde_small {
padding 16
field_high pt_base_address 36
padding 10
field pde_type 2
}
pd cap结构体:
- capPDMappedASID:进程的ASID(address space Identifiers);
- capPDBasePtr:指向pd结构体的指针;
- capPDMappedAddress:指向映射的虚拟地址。
block page_directory_cap {
field capPDMappedASID 16
field_high capPDBasePtr 48
field capType 5
padding 10
field capPDIsMapped 1
field_high capPDMappedAddress 19
padding 29
}
pt
pte结构体:
- 描述页面属性;
block pte {