armlinux内核页表
参考文献 我对上一个链接中讨论的主题有疑问/疑问:armlinux内核页表,linux,arm,mmu,Linux,Arm,Mmu,参考文献 我对上一个链接中讨论的主题有疑问/疑问: 0到0xBFFFFF是内存的较低部分(用于用户进程),由TTB0中的页表管理,它包含当前进程的页表 参考arm/include/asm/pgtable-2 h级:PTRS_PER_PGD=2048,PTRS_PER_PMD=1,PTRS_PER_PTE=512 0xc0000000到0xFFFFFF是由TTBR1中的页表管理/转换的地址空间的上部(操作系统和内存映射I/O)。 TTB1表的尺寸和对齐方式是固定的(至16k)。每个级别1条目的大
swapper\u pg\u dir
(refSystem.map
)页面表格,将16K置于实际文本地址下方swapper\u pg\u dir=0中的第一个768条目(用户进程为0x0到0xbffffff)和768到1024之间的有效条目(0xc000000到0xffffff用于操作系统和内存映射的I/O)
swapper\u pg\u dir
PGD吗由于ARM MMU的设计方式,翻译表(TTB0和TTB1)只能在1:1映射内核映射中使用 大多数Linux内核都有3:1映射(3GB用户空间:ARM的1GB内核空间)。 这意味着0-0xBFFFFF是用户空间,而0xC0000000-0xFFFFFF是内核空间 现在对于硬件内存转换,只使用TTBR0。TTBR1只保存初始交换程序页(包含所有内核映射)的地址,并不真正用于虚拟地址转换。TTBR0保存当前使用的页面目录(硬件用于翻译的页面表)的地址。现在每个用户进程都有自己的页表,对于每个进程开关,TTBR0将更改为当前用户进程页表(它们都位于内核空间) 例如,对于每个新的用户进程,内核创建一个新的页面目录,将所有内核映射从交换程序页面(3-4GB的页面帧)复制到新的页面表,并清除用户页面(0-3GB的页面帧)。然后,它将TTB0设置为此页面目录的基址,并刷新缓存以安装新的地址空间。swapper页面也始终随映射的更改保持最新 关于你的问题:
x/100x 0xc0007000
中使用gdb来检查前100个内核条目。然后,您可以查看当前平台的技术参考手册,以破译页面表属性如果您想进一步了解Linux内核,我建议您使用Qemu与gdb一起模拟Beagleboard来检查和调试源代码。我这样做是为了了解内核如何在初始化期间构建页面表 由于ARM MMU的设计方式,翻译表(TTB0和TTB1)只能在1:1映射内核映射中使用 大多数Linux内核都有3:1映射(3GB用户空间:ARM的1GB内核空间)。 这意味着0-0xBFFFFF是用户空间,而0xC0000000-0xFFFFFF是内核空间 现在对于硬件内存转换,只使用TTBR0。TTBR1只保存初始交换程序页(包含所有内核映射)的地址,并不真正用于虚拟地址转换。TTBR0保存当前使用的页面目录(硬件用于翻译的页面表)的地址。现在每个用户进程都有自己的页表,对于每个进程开关,TTBR0将更改为当前用户进程页表(它们都位于内核空间) 例如,对于每个新的用户进程,内核创建一个新的页面目录,将所有内核映射从交换程序页面(3-4GB的页面帧)复制到新的页面表,并清除用户页面(0-3GB的页面帧)。然后,它将TTB0设置为此页面目录的基址,并刷新缓存以安装新的地址空间。swapper页面也始终随映射的更改保持最新 关于你的问题:
x/100x 0xc0007000
中使用gdb来检查前100个内核条目。然后,您可以查看当前平台的技术参考手册,以破译页面表属性如果您想进一步了解Linux内核,我建议您使用Qemu与gdb一起模拟Beagleboard来检查和调试源代码。我这样做是为了了解内核如何在初始化期间构建页面表 如果阅读引用的线程,则不使用TTB0/TTB1。仅使用一个版本。对于典型的Linux内存模型,拆分是错误的。这可能对其他OSs.Thx有好处。请确认:(1)交换者目录中的每个条目,好吗