Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory management 操作系统和内存管理(理论)_Memory Management_Operating System_Theory - Fatal编程技术网

Memory management 操作系统和内存管理(理论)

Memory management 操作系统和内存管理(理论),memory-management,operating-system,theory,Memory Management,Operating System,Theory,嘿,我有一个问题和一个答案,但我不能理解答案的第二部分! 这里有人能帮我吗 这是: 问题, 计算机有32位虚拟地址和4-K.B页。程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。如果使用传统(一级)分页,页面表中需要多少次尝试?两级分页需要多少页表条目,每个部分10位 答复 对于一级页面表,需要2^32/2^12或1M页面。因此 页表必须有1M个条目对于两级分页,主页表 有1K个条目,每个条目都指向第二页表格。只有两个 这些都是用过的。因此,总共只需要三个页表条目,一个在 顶级

嘿,我有一个问题和一个答案,但我不能理解答案的第二部分! 这里有人能帮我吗

这是:

问题,

计算机有32位虚拟地址和4-K.B页。程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。如果使用传统(一级)分页,页面表中需要多少次尝试?两级分页需要多少页表条目,每个部分10位

答复

对于一级页面表,需要2^32/2^12或1M页面。因此 页表必须有1M个条目对于两级分页,主页表 有1K个条目,每个条目都指向第二页表格。只有两个 这些都是用过的。因此,总共只需要三个页表条目,一个在 顶级表格和每个较低级别表格中的一个。

我不能理解粗体字。例如,我无法理解1K是如何出现的

谢谢你抽出时间


干杯

我认为,问题第一部分的答案是错误的,因为您没有使用问题的上下文:
程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。因此,虽然页表条目的总数是1048576,但在这些条目中,您只使用了两个条目,这两个页面中的每一个都有一个条目(代码/数据页面的条目0点和堆栈页面的条目1048575点)

对于问题的第二部分,您得到了一个非常有用的提示:
两级分页,每个部分有10位
。但首先,让我们回到上面,更简单的情况

在使用单页表的情况1中,虚拟地址:

most significant bits                       least significant bits
| 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
  • 具有32位(计算机具有32位虚拟地址)
  • 它们的12个最低有效位表示页面中的位置(计算机有…4-K.B页面,也可以是
    适合最低页面(0-4095)
  • 剩下的20个最高有效位显然选择了页面表中的一个条目。所选页面表条目包含页面的物理地址

    因此,虚拟地址如下所示:

    most significant bits                            least significant bits
    | 20 bits = index into the page table | 12 bits = index into the page |
    
    因此,CPU使用以下公式访问内存:

    PhysicalAddress = PageTable[VirtualAddress / 4096] + VirtualAddress modulo 4096
    
    现在,让我们回到案例2

    您仍然有12个LSB位来选择页面中的一个字节

    但有什么新鲜事吗?它是两级分页,每个部分有10位

    这10位是页表索引的长度,现在有两个

    在此基础上,我们得出了虚拟地址的以下细分:

    most significant bits                       least significant bits
    | 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
    
    地址转换公式自然是:

    PhysAddr = PageTable[VirtAddr / (1024*4096)][(VirtAddr / 4096) modulo 1024] + VirtAddr modulo 4096
    
    现在,我们仍然有同样的程序,占2页

    指向代码/数据页的虚拟地址为(二进制):

    指向堆栈页的虚拟地址是(也是二进制的):

    由此可以看出,您在级别1使用了两个不同的页表条目(由索引0000000000和1111111选择),在级别2使用了两个类似的页表条目

    因此,在案例2中,程序运行所需的总页数为2+2=4页表条目


    请注意,如果您不记得:210=1024、212=4096、220=1048576。

    我认为,问题第一部分的答案是错误的,因为您没有使用问题的上下文:
    程序和数据在最低页面(0-4095)中匹配,堆栈在最高页面中匹配。因此,虽然页表条目的总数是1048576,但在这些条目中,您只使用了两个条目,这两个页面中的每一个都有一个条目(代码/数据页面的条目0点和堆栈页面的条目1048575点)

    对于问题的第二部分,您得到了一个非常有用的提示:
    两级分页,每个部分有10位
    。但首先,让我们回到上面,更简单的情况

    在使用单页表的情况1中,虚拟地址:

    most significant bits                       least significant bits
    | 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
    
  • 具有32位(计算机具有32位虚拟地址)
  • 它们的12个最低有效位表示页面中的位置(计算机有…4-K.B页面,也可以是
    适合最低页面(0-4095)
  • 剩下的20个最高有效位显然选择了页面表中的一个条目。所选页面表条目包含页面的物理地址

    因此,虚拟地址如下所示:

    most significant bits                            least significant bits
    | 20 bits = index into the page table | 12 bits = index into the page |
    
    因此,CPU使用以下公式访问内存:

    PhysicalAddress = PageTable[VirtualAddress / 4096] + VirtualAddress modulo 4096
    
    现在,让我们回到案例2

    您仍然有12个LSB位来选择页面中的一个字节

    但有什么新鲜事吗?它是两级分页,每个部分有10位

    这10位是页表索引的长度,现在有两个

    在此基础上,我们得出了虚拟地址的以下细分:

    most significant bits                       least significant bits
    | 10 bits = PT index | 10 bits = PT index | 12 bits = page index |
    
    地址转换公式自然是:

    PhysAddr = PageTable[VirtAddr / (1024*4096)][(VirtAddr / 4096) modulo 1024] + VirtAddr modulo 4096
    
    现在,我们仍然有同样的程序,占2页

    指向代码/数据页的虚拟地址为(二进制):

    指向堆栈页的虚拟地址是(也是二进制的):

    由此可以看出,您在级别1使用了两个不同的页表条目(由索引0000000000和1111111选择),在级别2使用了两个类似的页表条目

    因此,在案例2中,程序运行所需的总页数为2+2=4页表条目


    如果你不记得的话,请注意:210=1024,212=4096,220=1048576。

    10位每部分=2^10条目数=1024条目数=1K条目数我得到了这部分。然后它说“每一个都指向第二个页面表格。只使用了其中的两个。因此总共只需要三个页面表格条目,一个在顶级表格中,一个在低级表格中。”为什么只使用其中的两个(这些是什么?条目?)我根本不明白。好吧,现在看来