Memory 确定虚拟内存的页表大小

Memory 确定虚拟内存的页表大小,memory,paging,virtual-memory,page-tables,Memory,Paging,Virtual Memory,Page Tables,考虑一个具有38位虚拟字节地址、1KB页面和512MB物理内存的虚拟内存系统。假设有效位、保护位、脏位和使用位总共占4位,并且所有虚拟页都在使用中,那么此计算机上每个进程的页表的总大小是多少?(假设磁盘地址没有存储在页表中。)如果问题只是“页表的大小是多少?”而不管它是否适合物理内存,答案可以这样计算: 首先是物理内存。物理内存有512K页(512M/1K)。这需要19位来表示每个页面。加上4位的会计信息,你得到23位 现在是虚拟内存。使用38位地址空间和10位(1K)页面大小,页面表中需要22

考虑一个具有38位虚拟字节地址、1KB页面和512MB物理内存的虚拟内存系统。假设有效位、保护位、脏位和使用位总共占4位,并且所有虚拟页都在使用中,那么此计算机上每个进程的页表的总大小是多少?(假设磁盘地址没有存储在页表中。)

如果问题只是“页表的大小是多少?”而不管它是否适合物理内存,答案可以这样计算:

首先是物理内存。物理内存有512K页(512M/1K)。这需要19位来表示每个页面。加上4位的会计信息,你得到23位

现在是虚拟内存。使用38位地址空间和10位(1K)页面大小,页面表中需要228个条目

因此,23位的228个页表条目每个是6174015488位或736M

这是每个进程的单个级别VM子系统所需的最大大小

现在很明显,如果你只有512M的物理内存,那么这是行不通的,所以你有两个选择

  • 您可以减少物理页面的数量。例如,只允许一半内存进行分页,而另一半始终驻留在内存中。这将为每个条目节省一位,实际上不足以产生影响

  • 如果可能,请增加页面大小。38位地址空间上的1K页是页面表非常粗的原因。例如,我认为带有32位地址空间的386使用4K页面。这将产生一百万页的表格条目,远远少于这里需要的2.6亿页

  • 多层次的。更高级一点,但它基本上意味着页表本身要进行分页。您必须使第一级页表驻留在物理内存中,但第二级页表可以根据需要进出。这将大大降低物理需求,但会以速度为代价,因为在实际进程页上可能会出现两级页面错误(一级用于辅助分页表,另一级用于进程页)


  • 让我们仔细看看选项3

    如果我们允许主分页表使用32M,并为每个条目提供4个字节(32位:只需要23个字节,但我们可以在这里进行四舍五入以提高效率),那么辅助分页表将允许使用8388608个页面

    由于这些辅助页表页面中的每个页面都有1K长(允许我们以每个4字节的速度存储256个辅助页表条目),因此我们可以处理总共2147483648个虚拟页面

    这将允许8192个完全加载(即使用其全部28位地址空间)的进程并行运行,前提是您有足够的磁盘空间来存储非驻留页面

    现在很明显,主分页表(和VM子系统,可能还有操作系统其余部分的相当一部分)必须始终驻留。不能允许您将其中一个主页面分页,因为您可能需要该页面才能将其返回:-)


    但是,在主分页表的512M中,这只是32M的常驻成本,远远好于736M(至少对于一个完全加载的进程而言)的常驻成本。

    页表的大小=页表条目的总数*页表条目的大小

    步骤1:查找页表中的条目数:

    no of page table entries=virtual address space/page size
    
    =2^38/2^10=2^28
    
    因此,页面表中有2^28个条目

    步骤2:物理内存中的帧数:

    物理内存中的帧数=(512*1024*1024)/(1*1024)=524288=2^19

    因此,我们需要
    19位
    和额外的
    4位
    ,用于有效位、保护位、脏位和使用位 总共23位=2.875字节

    size of the page table=(2^28)*2.875=771751936B=736MB
    

    1KB页面=2^10,512MB=2^29=>Offset=29-10=19位

    虚拟包含两部分:页面帧+偏移量=>页面帧+脏位=38-19=29位。 29位包括4位脏(以上)=>25位的实际页面帧,每个页面帧有10位长

    因此,页表大小:2^25*10=320M


    希望这是正确的。

    2^28由于虚拟空间大小/页面大小的原因,请输入条目。每个条目4字节(28位用于寻址vp编号,+4位=32位)2^28*4=1024 MB,大于物理内存。没有道理,我在学校不及格。这是我的猜测,不是真正的答案。提前谢谢。我不认为问题中的任何地方都要求所有页表都在物理内存中。为什么要给出物理内存,然后声明表中没有存储磁盘地址?这意味着您只需要寻址512MB的物理内存。。除非我错了。再次感谢。如果有其他方法获取磁盘地址,则不需要在页表中存储磁盘地址。例如,假设交换文件本身包含进程id/虚拟地址到交换文件位置的额外映射。无论如何,您都必须读取磁盘文件,最好执行两次读取而不是一次读取。这不是一个理想的解决方案,但在内存有限的环境中是可行的。而且您的虚拟表没有28位来寻址VP号。VP编号是键(数组索引),而不是值)。它只需要足够的位来引用您想要使用的所有物理页面。假设物理页面位于1K边界上,最多为512M/1024个条目(512K=19位)。感谢您的回复!有一件事——除非我输入的数学错误,否则2^28*32=6174015488位=771751936字节=738MB不是应该吗?是的,我很确定你至少会看到4KB的页面大小,甚至可能是8或16…是的,你的计算是正确的,但那是因为你使用的是32位页面条目,而我的是23位。在一个真实的系统中,毫无疑问,你会将它提升到至少24位,可能是32位,正如你所做的那样,但这就是数字不同的原因。您是使用23位还是32位取决于您,因为问题仅限于spe