页面表的页面大小和条目是如何计算的?

3
这个声明是关于操作系统的,它的意思是:使用2^32地址空间和4K(2^12)页面大小,留下2^20页表项。每个条目占用4字节,这相当于一个4MB的页表,太大了无法合理地保存在连续的内存中(也无法在每个进程切换时交换到内存中)。请注意,用4K页面,需要1024页来保存页表。
他们在最后如何计算1024页?这里的每个条目占用4个字节是什么意思?4K页面大小的含义是什么?4K是否表示4*1024字节?他们是否考虑了每个字为4个字节还是说4个字节意味着有4*1024个字,并且每个字有一定的大小,例如4个字节?
答案:该声明是针对操作系统的。在使用2^32地址空间和4K(2^12)页面大小的情况下,会留下2^20个页表项。每个页表项占用4个字节,因此需要1024个页面来保存整个页面表。4K页面大小指每个页面的大小为4 * 1024字节。4个字节表示每个页表项的大小为4个字节,而不是每个单词的大小为4个字节。

我的陈述有错吗? - hellodear
不是你引用的那个。 - user3344003
2个回答

6
请解释一下最后如何计算出1024页?
请记住我们正在处理2的幂,所以
4 MB = 4,194,304字节
4 KB = 4096字节
4 MB / 4 KB = 4,194,304字节 / 4096字节 = 1024页
在这方面,每个条目的4个字节是什么?
您需要32位来引用所有2 ^ 32个地址空间。 每字节8位,32位= 4字节。
例如,第一个地址为0,最后一个地址为4294967295或(2 ^ 32-1)。
Entry |   Page Memory Location
------------------------------------------
    1 |          0
    2 |       4096
    3 |       8192
  ... |        ...
 2^20 | 4294963200 ->  (2^32 - 1) - 4096

每个表中的条目指向内存中某个地方的1页。在这个例子中,让我们假设它从零开始。将有2^20个条目,它们将涵盖整个内存地址范围(2^32)。由于每个条目是4096字节,您只需要2^20个条目即可覆盖所有页面。

4K是指4*1024字节吗?

是的,它是指每个页面都是4096字节(4*1024)。

他们是否考虑了4个字节(每个单词),或者4个字节意味着它有4*1024个单词,每个单词具有一些大小,比如4个字节?

在32位处理器上可能会更小,但通常一个单词是32位或4个字节。

其他评论

当我说页面大小为4K时,这是否意味着它有1024个每个4个字节的条目,或者1024*4个每个1个字节的条目,还是其他什么?

页面可以容纳任何内容,它是一个数据容器,在这个例子中为4096字节。 页面表 包含指向 页面条目。正如David所述,由于页面表存储在内存中,因此它也存储在页面中。

有人说解释是错误的。正确的是:使用2^32地址空间和4K(2^12)页大小,这将使表中有2^20个页面。每个条目占用4个字节,这相当于一个 4 GB 页面表,太大了,无法在连续的内存中保留。(并在每个进程切换时交换到内存中)。请注意,使用4K页面大小,这将需要1024k页面(=1M页面)才能容纳整个表!他是正确还是错误?

他是不正确的。如果页面表实际上包含每个页面的数据,则他是正确的。使用4096字节的页面和2^20个条目,这将等于4,294,967,296字节(4 GB),但是条目只有4个字节。因此,您将其与2^20个条目相乘,以获得4,194,304字节(4 MB)。

当我说页面大小为4K时,这意味着它有1024个条目,每个条目有4个字节,或者有1024*4个条目,每个条目有1个字节,还是其他什么?我对此感到非常困惑。谢谢快速回复。 - hellodear
更新了我的回答以回应您的评论。 - jmstoker
我修改了关于每个条目4字节的答案。 - jmstoker
有人说解释是错误的。正确的是:使用2^32地址空间和4K(2^12)页大小,这将在表中留下2^20个页面。每个条目4字节,这相当于一个4 GB的页表,太大了,无法合理地保持连续的内存。(并在每个进程切换时进行内存交换。)请注意,使用4K页面大小,这将需要1024 k页面(= 1M页面)才能容纳整个表!他是正确还是错误? - hellodear
我修改了我的回答。简短回答:他是错误的。 - jmstoker

2

文档假设这些值:

2^32 = number of bytes in address space
2^12 = 4K = 4*1024 = number of bytes in one page
2^20 = 1M = 1024*1024 = number of pages
4 = number of bytes in the page table to describe one page
4M = 4*1024*1024 = total number of bytes in the page table
1024 = (4*1024*1024)/(4*1024) = number of pages in the page table

所以,4个字节就是4个字节(一页的页表条目的大小,而不是页面本身的大小!)。 是的,4K表示4*1024字节,而不是4*1024个字。

操作系统和任何应用程序使用的所有内存都存储在系统上的某些页面中。 由于页表是必须存储在内存中的东西,因此它也存储在页面中。


4K页面大小意味着每个条目有4个字节,共1024个条目。这正确吗?@David K - hellodear
1
对于页表的一页,是1024个每个4字节的条目。对于一般的页面,它是4096字节的大小,其中包含应用程序/操作系统选择放在该页面上的任何内容。 - David K
你能解释一下最后一行的意思吗?对于一个页面而言,它是4096,“无论放什么在那个页面上”?谢谢。 - hellodear
@hellodear 页面是存储数据的大小单位。正如wikipedia所述:“页面、内存页面或虚拟页面是一段固定长度的连续虚拟内存块,由页表中的单个条目描述”。 - jmstoker
在这里描述的系统中,页表需要4个字节来描述单个页面的位置。 - David K
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接