如何确定进程地址空间的大小?

时间:2019-05-13 05:40:15

标签: memory operating-system paging memory-address page-tables

我正在研究操作系统的最终版本,学习指南存在以下问题:

  

问题1

     

在32位计算机中,我们将虚拟地址分为以下四个部分:

| 10-bit | 8-bit | 6-bit | 8 bit |
     

我们使用3级页面表,因此前10位用于第一级,依此类推。

     
      
  1. 在这样的系统中页面大小是多少?
  2.   
  3. 从地址0开始具有256K内存的进程的页表大小是多少?
  4.   
  5. 具有从地址0x1000000开始的48K代码段,从地址开始600K的数据段的进程的页表的大小是多少   0x80000000和从地址0xf0000000开始的64K堆栈段和   向上增长(如HP的PA-RISC)
  6.   

这里提供了一个答案:

  

解决方案:

     
      
  1. 页面字段是8位宽,那么页面大小是256个字节。
  2.   
  3. 使用上面的细分,第一级页面表指向1024个第二级页面表,每个第二级页面表指向256个第三级页面表,每个第三级页面表包含64个页面。该程序的地址空间由1024个页面组成,因此我们需要16个第三级页面表。因此,我们在第二级页面表中需要16个条目,而在第一级页面表中需要一个条目。因此,大小为:第一个表1024个条目,第二级页面表256个条目和16个第三级页面表,每个表包含64个条目。假设每个条目2个字节,则所需空间为1024 * 2 + 256 * 2(一个第二级分页表)+ 16 * 64 * 2(16个第三级分页表)= 4608字节。
  4.   
  5. 首先,堆栈,数据和代码段位于需要在第一级页面表中激活3个页面表条目的地址。对于64K,您需要256页或4个第三级页表。对于600K,您需要2400页或38个第三级页表;对于48K,您需要192页或3个第三级页表。假设每个条目2个字节,所需空间为1024 * 2 + 256 * 3 * 2(3个第二级页表)+ 64 *(38 + 4 + 3)* 2(38个用于数据段的第三级页表, 4表示堆栈,3表示代码段)= 9344字节。
  6.   

(原文如此)

我在这里的第一个问题是第2部分的解决方案,其中指出程序的地址空间由1024个页面组成。我不知道该如何确定,到目前为止,试图解决这个问题或寻找答案的尝试都没有结果。是否有一些方程式可以告诉我,或者我错过了什么?

我已经尝试过自己解决问题,但是我能做的最好的就是评估256 KB为2 ^ 18字节,但是我不理解程序的内存使用量与该程序中的页面数之间的关系。地址空间。

如果有人能够解释我如何根据给定的信息确定页面条目的大小,或者仅仅是像没有做的那样,必须假设某些内容具有一定的价值,这也会很有帮助?

1 个答案:

答案 0 :(得分:0)

What is the size of a page table for a process that has 256K of memory starting at address 0?

我们在第1部分的解决方案中发现,页面的大小为256个字节。因此,消耗256K内存的进程的页面数为256K/256 = 1K = 2^10 = 1024