• -W.LI-
    2019-07-27
    我们可以一起来测算一下,一个进程如果占用了 1MB 的内存空间,分成了 2 个 512KB 的连续空间。那么,它一共需要 2 个独立的、填满的 2 级索引表,也就意味着 64 个 1 级索引表,2 个独立的 3 级索引表,1 个 4 级索引表。一共需要 69 个索引表,每个 128 字节,大概就是 9KB 的空间。比起 4MB 来说,只有差不多 1/500。
    1个3级索引表,不是有32个2级索引表么?
    为啥需要2个独立的3级索引表啊?
     4
     7
  • 鱼向北游
    2019-07-27
    哈希表有哈希冲突 并且顺序乱 不符合局部性原理 所以页表存储更复合计算机运行特点 64位系统的快表应该是对页表快速查询的一个优化吧 是用硬件实现么?期待老师下次讲解
    
     5
  • zhe
    2019-08-19
    而一个 1 级索引表,32 个 4KiB 的也就是 16KB 的大小,这个怎么算的

    作者回复: zhe同学,

    你好,谢谢纠正。这里写错了,我修正过来,是128KB。写的时候太快把4KiB当成了4K Bit了。

    
     3
  • 李
    2019-07-26
    32 位的内存地址空间,页表一共需要记录 2^20 个到物理的映射关系。这个存储关系,就好比一个 2^20 大小的数组。一个页号是完整的 32 位的 4 字节(Byte),这样一个页表就需要 4MB 的空间
    请问这两个是怎么算出来的?



    展开
     4
     2
  • 美美
    2019-07-30
    一个页号是完整的 32 位的 4 字节(Byte)
    -------------------------------
    一个页号不是20位吗,为什么是32位呢
     1
     1
  • 李
    2019-07-26
    2个独立的二级索引,一个三级索引,一个四级索引吧? 为什么2个独立索引 还需要两个独立3级索引呢? 一个三级索引不就可以引用2个独立索引了吗?
     1
     1
  • 免费的人
    2019-07-26
    页大小是4KByte 还是Bit ?
     2
     1
  • 许童童
    2019-07-26
    多级页表相对于哈希表,优点我觉得应该是可以用到计算机的局部性原理,而用哈希表的话,顺序是打乱的而且存在哈希冲突。多级页表的缺点就是要一级一级查找,速度相对比较慢。
    
     1
  • 徐凯
    2019-07-26
    哈希表会有哈希冲突,比较不稳定。对于访问内存页的过程影响很大 老师是这样么
    
     1
  • 啦啦啦
    2019-07-26
    还是你讲的更通俗易懂
    
     1
  • xindoo
    2019-07-26
    计算机科学里,只要是有局部性,都可以通过加cache的方式解决,所以内存里肯定有另外一个数据结构,可以快速将某些常用的虚拟地址转化成物理地址。
    
     1
  • Hash
    2019-12-24
    数据结构真的是无处不在啊!

    哈希表是数组 + 链表组成的,充分的结合了数组和链表的优势,互补!但是哈希表存在哈希冲突,并且是无序的!不符合局部性原理!

    作者回复: 👍,其实算法和数据结构在软硬件的开发的方方面面都会涉及到。

    
    
  • 有情有义
    2019-11-12
    老师,你好 ,请问下为什么进程加载简单页表时候,就一定要全部加载进去呢?? 为什么不只加载和多级页表一样的只有自己需要的地址呢??感觉这一讲好多地方都不像之前那样好理解啊.
    
    
  • 拯救地球好累
    2019-10-30
    ---问题---
    老师您好,有个问题还是没明白,按这种数据结构,多级页表比简单页表可以访问更大的虚拟空间,但是为什么能够更节省内存呢?某个进程所需要访问的虚拟内存空间一定的情况下,两者不是都需要一样多的页表项吗?
     1
    
  • Luciano李鑫
    2019-10-16
    多级页表省空间的原因是把简单页表切碎了 。
    简单页表是一个大数组 ,数组的长度是2^20 ,总大小是40M。
    多级页表是把数据切碎成32^4个数组,全部填满元素是40M。
    体现了升维的思想,相当于四维空间,要访问四次才能拿到最终的物理地址。
     6
    
  • Luciano李鑫
    2019-10-16
    请问老师,关于之前来时讲的告诉缓存中数据从内存块(block)到高速缓存(cache line)中的内存块和本节中的内存页有什么区别
    
    
  • zaab
    2019-10-12
    我看不懂的地方1.使用32位的内存地址,因为1位只能是0或者1, 所以最多有2的32次方的种不同排列,一个地址对应存1bit数据, 那么1024bit = 1kb , 1024kb=1M 1024M=1G , 所以是 4294967296 /1024/1024/1024= 4GB;
     2.以一个页的大小是 4K 字节(4KB)为例,我们需要 20位高位,12位低位; 12位低位做偏移量,2的12次方=4096=4kb..
    
    
  • 小先生
    2019-09-23
    一个页号是完整的 32 位的 4 字节(Byte)
    -------------------------------
    一个页号不是20位吗,为什么是32位呢??请问有人能回答一下吗??

    作者回复: 小先生同学,

    你好,页表有2^20个项,这个2^20可以认为是一个虚拟页号。但是物理页号其实是一个内存地址,一个32位的操作系统的一个内存地址就是32Bit也就是32位。

    
    
  • 焰火
    2019-09-19
    如果程序很大,两头实,中间也实,那么多级页表所占用的空间肯定比简单页表大得多吧? 进程的页表是操作系统进行统一管理的还是每个进程的装载器自我管理呢?

    作者回复: 焰火同学,

    你好,不太可能都实的,比如现在64位的计算机,内存空间是 2^64,没有哪个程序会需要那么多空间的。

    进程的页表是由操作系统内核来创建管理的,Linux下也就是大家所谓的Kernel在管理。

    
    
  • 活的潇洒
    2019-08-21
    为什么我们不用哈希表而用多级页表呢?
    虚拟内存占用的地址空间,通常是两段连续的空间。而不是完全散落的随机的内存地址。而多级页表,就特别适合这样的内存地址分布
    day40 笔记:httpshttps://www.cnblogs.com/luoahong/p/11383429.html
    
    
我们在线,来聊聊吧