Memory 确定虚拟内存的页表大小
考虑一个具有38位虚拟字节地址、1KB页面和512MB物理内存的虚拟内存系统。假设有效位、保护位、脏位和使用位总共占4位,并且所有虚拟页都在使用中,那么此计算机上每个进程的页表的总大小是多少?(假设磁盘地址没有存储在页表中。)如果问题只是“页表的大小是多少?”而不管它是否适合物理内存,答案可以这样计算: 首先是物理内存。物理内存有512K页(512M/1K)。这需要19位来表示每个页面。加上4位的会计信息,你得到23位 现在是虚拟内存。使用38位地址空间和10位(1K)页面大小,页面表中需要228个条目 因此,23位的228个页表条目每个是6174015488位或736M 这是每个进程的单个级别VM子系统所需的最大大小 现在很明显,如果你只有512M的物理内存,那么这是行不通的,所以你有两个选择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
让我们仔细看看选项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