我正在阅读页表的示例,并发现了这一点:
考虑一个具有 32 位逻辑地址空间的系统。如果这样的系统中的页面大小为 4 KB (2^12),那么一个页表可能包含多达 100 万个条目 (2^32/2^12)。假设每个条目由 4 个字节组成,每个进程可能需要多达 4 MB 的物理地址空间来单独用于页表。
我真的不明白这个 4MB 的结果代表什么。它是否代表实际页表占用的空间?
我正在阅读页表的示例,并发现了这一点:
考虑一个具有 32 位逻辑地址空间的系统。如果这样的系统中的页面大小为 4 KB (2^12),那么一个页表可能包含多达 100 万个条目 (2^32/2^12)。假设每个条目由 4 个字节组成,每个进程可能需要多达 4 MB 的物理地址空间来单独用于页表。
我真的不明白这个 4MB 的结果代表什么。它是否代表实际页表占用的空间?
由于我们有一个2^32的虚拟地址空间并且每个页面大小是2^12,我们可以存储(2^32/2^12) = 2^20 pages。由于该页表中的每个条目都有一个大小为 4 字节的地址,因此我们有2^20*4 = 4MB。所以页表占用了4MB的内存。
我的解释使用了帮助我理解的基本构建块。注意我正在利用@Deepak Goyal 上面的回答,因为他提供了明确性:
我们得到了一个逻辑 32 位地址空间(即我们有一台 32 位计算机)
考虑一个具有 32 位逻辑地址空间的系统
我们还被告知
每个页面大小为 4 KB
正如德帕克所说,我们用这个公式计算页表中的页数:
Num_Pages_in_PgTable = Total_Possible_Logical_Address_Entries / page size
Num_Pages_in_PgTable = 2^32 / 2^12
Num_Pages_in_PgTable = 2^20 (i.e. 1 million)
作者继续给出页表中的每个条目占用 4 个字节的情况。这意味着物理内存中页表的总大小将是 4MB:
Memory_Required_Per_Page = Size_of_Page_Entry_in_bytes x Num_Pages_in_PgTable
Memory_Required_Per_Page = 4 x 2^20
Memory_Required_Per_Page = 4 MB (Megabytes)
所以是的,每个进程都需要至少 4MB 的内存才能运行,增量为 4MB。
现在,如果一位教授想让这个问题比书中的解释更具挑战性,他们可能会询问一台 64 位计算机。假设他们想要内存在bits。为了解决这个问题,我们将遵循相同的过程,只是确保将 MB 转换为 Mbits。
让我们逐步了解这个例子。
- 逻辑地址空间:64位
- 页面大小:4KB
- Entry_Size_Per_Page:4 个字节
回想一下:一个 64 位条目可以指向 2^64 个物理页帧之一 - 因为页大小是 4 KB,所以我们仍然有2^12字节页大小
- 1 KB(千字节)= 1 x 1024 字节 = 2^10 字节
- 每页大小 = 4 x 1024 字节 = 2^2 x 2^10 字节 = 2^12 字节
`Num_Pages_in_PgTable = Total_Possible_Logical_Address_Entries / page size
Num_Pages_in_PgTable = 2^64 / 2^12
Num_Pages_in_PgTable = 2^52
Num_Pages_in_PgTable = 2^2 x 2^50
Num_Pages_in_PgTable = 4 x 2^50 `
Memory_Required_Per_Page = Size_of_Page_Entry_in_bytes x Num_Pages_in_PgTable
Memory_Required_Per_Page = 4 bytes x 8 bits/byte x 2^52
Memory_Required_Per_Page = 32 bits x 2^2 x 2^50
Memory_Required_Per_Page = 32 bits x 4 x 2^50
Memory_Required_Per_Page = 128 Petabits
[2]:操作系统概念(第 9 版)- Gagne、Silberschatz 和 Galvin
假设逻辑地址空间是32 位,因此可能的逻辑条目总数为2^32,另一方面假设每个页面大小为4 KB,那么一页的大小为2^2 2^10=2^12... 现在我们知道不。页表中的页数是页=可能的逻辑地址条目总数/页大小所以页数=2^32/2^12 =2^20 现在假设页表中的每个条目占用 4 个字节,然后是物理内存中页表的总大小将是=2^2 2^20=2^22=4mb **
在 32 位虚拟地址系统中,我们可以有 2^32 个唯一地址,因为给定的页面大小是 4KB = 2^12,所以我们需要页表中的 (2^32/2^12 = 2^20) 个条目,如果每个条目是 4Bytes 然后页表的总大小 = 4 * 2^20 Bytes = 4MB
由于逻辑地址空间是 32 位长,这意味着程序大小是 2^32 字节,即 4GB。现在我们有4KB的页面大小,即2^12字节。因此程序中的页面数为2^20。(程序中的页面数=程序大小/页面大小)。现在页表条目的大小为4字节因此页表的大小为 2^20*4 = 4MB(页表大小 = 程序中的页数 * 页表条目大小)。因此,内存中需要 4MB 空间来存储页表。