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

Memory 如何确定进程地址空间的大小?,memory,operating-system,paging,memory-address,page-tables,Memory,Operating System,Paging,Memory Address,Page Tables,我正在学习操作系统期末考试,学习指南有以下问题: 问题1 在32位机器中,我们将虚拟地址细分为4段,如下所示: | 10-bit | 8-bit | 6-bit | 8 bit | 我们使用一个3级页面表,这样前10位用于第一级,依此类推 在这样的系统中,页面大小是多少 对于从地址0开始具有256K内存的进程,页表的大小是多少 对于从地址0x1000000开始的48K代码段和从地址0x1000000开始的600K数据段的进程,页表的大小是多少 0x8000000和从地址0xf0000000开始

我正在学习操作系统期末考试,学习指南有以下问题:

问题1 在32位机器中,我们将虚拟地址细分为4段,如下所示:

| 10-bit | 8-bit | 6-bit | 8 bit |
我们使用一个3级页面表,这样前10位用于第一级,依此类推

  • 在这样的系统中,页面大小是多少
  • 对于从地址0开始具有256K内存的进程,页表的大小是多少
  • 对于从地址0x1000000开始的48K代码段和从地址0x1000000开始的600K数据段的进程,页表的大小是多少 0x8000000和从地址0xf0000000开始的64K堆栈段,以及 向上成长(如HP的PA-RISC)
  • 这里有一个答案:

    解决方案:
  • 页面字段为8位宽,则页面大小为256字节
  • 使用上面的细分,第一级页面表格指向1024个第二级页面表格,每个表格指向256个第三级页面表格,每个表格包含64页。程序的地址空间由1024页组成,因此我们需要16个三级页表。因此,在第二级页面表中需要16个条目,在第一级页面表中需要一个条目。因此,大小为:第一个表有1024个条目,第二级页面表有256个条目,第三级页面表有16个条目,每个条目包含64个条目。假设每个条目有2个字节,则所需的空间为1024*2+256*2(一个二级分页表)+16*64*2(16个三级分页表)=4608字节
  • 首先,堆栈、数据和代码段位于需要在第一级页表中有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字节
  • (原文如此)

    我在这里的第一个问题是第2部分的解决方案,其中指出程序的地址空间由1024页组成。我不知道这是如何决定的,到目前为止,试图解决这个问题或找到答案的努力都是徒劳的。有没有什么方程式可以给我答案,或者我遗漏了什么

    我自己也试过解决这个问题,但我能做的最好的办法是计算256KB是2^18字节,但我不理解程序的内存使用和地址空间中的页数之间的关系

    如果有人能解释我是如何根据给定的信息确定页面条目的大小的,或者如果没有给出,这只是一个假设值,就像他们在这里做的一样,这也会很有帮助吗

    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