考虑32位虚拟和物理地址空间,物理页面大小为4KB。假设刚创建了一个进程并将其程序复制到内存中。程序大小为1 KB。存储此进程的页表需要多少内存?
我这样做了:。
PTE size for 32bit physical address = 32 bits
= 4 bytes.
no of PTEs in single level page table = virtual pages= virtual address space / page = 2^32 / 2^ = 2^20
所以没有页面= 2 ^ 20。
但在解决方案中,他们也写道:
"#Pages in single level page table = #PTEs x PTE size / page size
= 2^20 x 4 bytes / 2^12 bytes
= 2^10. "
据我所知,页表是一个页表项数组,每个虚拟页一个。因此,页表条目中的任何一个都不应等于Pages。那么为什么#Pages等于2 ^ 10 ??
另一件事是“物理页面大小为4KB”。 ??页面是虚拟地址所以这意味着一个页面在物理内存上占用4KB的空间?
任何形式的帮助将不胜感激。
对于单级页表;虚拟地址空间为4 GiB,页面为4 KiB,因此您需要“4 GiB / 4 KiB = 1048576页= 1048576页表条目”。这就是你提出的答案(2 ^ 20页表项)。
如果有1048576页表条目,并且您不知道页表条目有多大,则所有页表条目所需的内存总量将为“1048576 * unknown = unknowable”。
但是,对于32位物理地址空间大小和4 KiB页面大小,我们知道地址的12位将用于“页内偏移”,而地址的其余20位将用于“页码”;因此我们知道页表项必须至少为20位,因此我们知道所有页表项所需的内存总量至少为“1048576 * 20位= 20971520位= 2560 KiB”。
如果我们做出随机可能错误的假设(基于有根据的猜测)并确定页表条目可能是4个字节,我们可以说所有页表条目所需的内存总量可能是“1048576 * 4 bytes = 4 MIB”。
如果所有页表项所需的内存总量为4 MiB且物理页为4 KiB;然后你将需要“4 MiB / 4 KiB = 1024页”来存储所有页表条目。这是他们提出的答案(2 ^ 10页)。
另一件事是“物理页面大小为4KB”。 ??页面是虚拟地址所以这意味着一个页面在物理内存上占用4KB的空间?
页面不是虚拟地址;并且有虚拟页面和物理页面。
基本思想是将虚拟地址分成两部分(使用屏蔽/ AND和移位),以便“(virtual_page_number << K)+ offset_within_page = virtual_address”,然后使用“virtual_page_number”(和页面表)来查找“physical_page_number” ,然后执行“physical_address =(physical_page_number << K)+ offset_within_page”。
为此,虚拟页面的大小必须与物理页面的大小相同;因此,“页面大小”一词用于指代虚拟页面大小和物理页面大小。