Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我读过 Arm V7 ISA 为程序提供了 4gig 的虚拟地址空间。如果我采用一个所有代码都在 4kb 以内的程序,我的问题是整个 4gig 的空间是否映射到页表中?我采用短描述符格式来构建页表并使用 4k 粒度,这将在 ram 中占用大量空间来保存页表。所以我认为单个进程的整个 4GB 空间没有被映射,但只有一部分被映射。这个对吗?如果它是正确的,那么如何决定表中映射了多少 VA?
在 ARM 中,页表有多个级别。据我所知,第一级有 4096 个条目——每个条目描述一个 1MB 的部分。
从那里你可以通过提供一个指向包含 256 个描述 4KB 部分的条目的二级页表的指针,将 1MB 部分分解为 4KB 大小(或更大——我不记得其他大小)。
顶层 1MB 部分都必须被映射——它们是否必须映射到某个东西由操作系统决定。如果不需要某个区域,某些操作系统只会填写页面错误的条目。
您当然不想将整个内存空间划分为 4KB 的块 - 页表大小会非常巨大。