精华内容
下载资源
问答
  • 2021-11-23 22:12:28

    在32位系统下,物理内存进行了分页,每一页的大小为4kb,如果已经通过分段生成了线性地址空间,然后线性地址空间再去找分页的物理地址,比如说,找到了是第xxx页,在通过线性地址里的后12位的offset进行结合找到具体的物理地址,如果只使用了一个页表,一个表项的大小为4byte,32位系统有4GB的物理空间(一个进程看到是4GB大小的虚拟空间),每一个表项对应着物理空间的第xxx页(4KB大小的页),那么应该有4GB/4KB=1MB个表项,因为每个表项4byte,所以一共有4MB的大小,那么一个进程就会浪费掉4MB的空间。
    如果是二级页表,规则就会改变,让二级页表对应到物理内存上的4KB大小的页,一级页表此时变成映射为物理地址的4MB(这样子是无法定位到具体的页(4KB)的,所以二级页表再去找),这样先找到一级页表,一级页表再和二级页表进行结合,二级页表相当于一级页表4MB分成了1024个(1KB个)4KB,找完后二级页表充当了offset的角色,此时定位到具体的4KB的页面,再用一级页表的offset一结合定位到具体物理地址。这样一个进程浪费掉的空间是一级页表占用的:(4GB/4MB)4byte=4KB,二级页表浪费掉的是4byte1kb(4MB/4KB->1个一级页表占用这么多个二级页表)*1kb(此时有1kb(4GB/4MB)个二级页表)=4MB,加起来是4MB+4KB,比光用一级页表要多4KB,但是2级页表是可以不存在的,比如此时程序只用了20%的页,那么4MB就需要乘以20%,这样一下子就比只有一级页表时少了。

    更多相关内容
  • 多级页表内存

    2021-07-24 16:42:27
    多级页表内存 table of table 二级页表的内存占用 假设虚拟地址空间为32位,即4GB 每个页面映射为4KB,以及每条页表项占4B,也就是32位。 一级页表管理:一个进程需要使用1M个页表项(=4GB/4KB,2^20),即页表(每个...

    多级页表内存

    table of table

    二级页表的内存占用

    假设虚拟地址空间为32位,即4GB

    每个页面映射为4KB,以及每条页表项占4B,也就是32位。

    一级页表管理:一个进程需要使用1M个页表项(=4GB/4KB,2^20),即页表(每个进程都有一个页表)占用4MB(1M*4B=4MB)的内存空间。一级页表管理地址空间如下

    20   | 12 
    

    12代表offset位数,也就是页表的大小4KB。20代表是哪个页表,总共有2^20个页表。这里分割地非常自然。

    二级页表管理:2^(10+12)=2^22=4MB,也就是一个一级页表能管理4M,总共需要1K个一级页表。而一个二级页表能管理4KB,总共需要1K个二级页表项,所以总共是1k*4B+1k*1k*4B=4.004MB的内存空间。

    10  | 10 | 12
    

    12还是页内偏移,头一个10是一级页表好,第二个10是二级也标号。一级页表项1024个,二级页表项也是1024个。

    多级页表的内存空间占用反而变大了。

    多级页表为什么省内存?

    二级页表可以不存在

    我们反过来想,每个进程都有4GB的虚拟地址空间,而显然对于大多数程序来说,其使用到的空间远未达到4GB,何必去映射不可能用到的空间呢?

    也就是说,一级页表覆盖了整个4GB虚拟地址空间,但如果某个一级页表的页表项没有被用到,也就不需要创建这个页表项对应的二级页表了,即可以在需要时才创建二级页表。做个简单的计算,假设只有20%的一级页表项被用到了,那么页表占用的内存空间就只有0.804MB(1K * 4B + 0.2 * 1K * 1K * 4B = 0.804MB),对比单级页表的4M是不是一个巨大的节约?

    那么为什么不分级的页表就做不到这样节约内存呢?我们从页表的性质来看,保存在主存中的页表承担的职责是将虚拟地址翻译成物理地址;假如虚拟地址在页表中找不到对应的页表项,计算机系统就不能工作了。所以页表一定要覆盖全部虚拟地址空间,不分级的页表就需要有1M个页表项来映射,而二级页表则最少只需要1K个页表项(此时一级页表覆盖到了全部虚拟地址空间,二级页表在需要时创建)。

    二级页表可以不在主存

    其实这就像是把页表当成了页面。回顾一下请求分页存储管理,当需要用到某个页面时,将此页面从磁盘调入到内存;当内存中页面满了时,将内存中的页面调出到磁盘,这是利用到了程序运行的局部性原理。我们可以很自然发现,虚拟内存地址存在着局部性,那么负责映射虚拟内存地址的页表项当然也存在着局部性了!这样我们再来看二级页表,根据局部性原理,1024个第二级页表中,只会有很少的一部分在某一时刻正在使用,我们岂不是可以把二级页表都放在磁盘中,在需要时才调入到内存?我们考虑极端情况,只有一级页表在内存中,二级页表仅有一个在内存中,其余全在磁盘中(虽然这样效率非常低),则此时页表占用了8KB(1K * 4B + 1 * 1K * 4B = 8KB),对比上一步的0.804MB,占用空间又缩小了好多倍!

    总结

    多级页表从两个方面减少了存储器要求。

    第一,如果一级页表中的第一个PTE(分页)是空的,那么相应的二级页表就根本不会存在,这代表着一种巨大的潜在节约,因为对于一个典型的程序,比如4GB,8GB的虚拟地址空间的大部分都将是未匹配的。

    第二,只有一级页表才需要总是在主存中;虚拟存储器系统可以在需要时创建,页面掉入或调出二级页表,这就减少了主存的压力;只有最经常使用的二级页表才需要缓存在主存中,这种离散的存储方式是非常便利的

    离散化了。

    展开全文
  • 多级页表

    千次阅读 2020-03-26 17:20:04
    为啥要有多级页表 假设系统用单页表,现有32位地址空间、大小为4k的页面、PTE(页表条目)的大小为4B 那内存可以分为2^20 个页,即需要2^20 个PTE,那内存中需要一直存在一个2^20*4B(4MB)的页表 那如果是64位机呢?...

    为啥要有多级页表

    假设系统用单页表,现有32位地址空间、大小为4k的页面、PTE(页表条目)的大小为4B

    那内存可以分为2^20 个页,即需要2^20 个PTE,那内存中需要一直存在一个2^20*4B(4MB)的页表

    那如果是64位机呢?(因为64位机虚拟地址空间远远大于物理内存大小,所以目前一般只用2^48位或更少的地址空间)

    即2^52*4B(16777216G)的页表常驻内存中???

    其实页表大小就是内存(可寻址字节数)大小除以页面大小,因为用一个4B的PTE指向了4K的页面,所以页表大小就是虚拟内存大小/2^10 ,即虚拟地址空间越大,页表也随之变大,两者只差2^10倍。

    由此可见,单页表在计算机位数较大时是不合适的

    • PTE为啥大小为4B呢?

    因为地址空间为32位,即32位可以指向虚拟地址空间的任一字节,也就是4B的PTE可以指向任一地址

    多级页表

    因为单页表大小会随着虚拟地址空间的增加而增加,而为了快速查找页表地址连续,一个页表一次会得到被分配的连续内存(即页表就是页表项数组),所以一个页表如果有一个条目(PTE)在使用,整个页表都会加载在内存中

    多级页表其实就是对页表实施分页管理,即内存中只常驻一级页表,一级页表的每个PTE指向一个二级页表的基地址,以此类推,最后一级页表存储物理块号和块内偏移量,因为页和块的大小相等,所以页偏移量和块偏移量相等,只块号不同,即虚拟地址通过查页表就是完成了页号到块号的转换

    页表分级后,使用到的虚拟地址空间对应的一系列页表加载到内存中,其他没用到的页表就可以不占用内存,若内存紧张,还可将虽有映射关系但不常用的页表调换到磁盘上,等到需要时再通过缺页中断调回内存中

    访问多级页表看起来要花费更多的时间去查表,但实际上因为有TLB(快表)的存在,多级页表的地址翻译并不比单页表慢很多

    上面在总结多级页表的查询速度时提到了快表(TLB),正因为有快表的存在才使得多级页表模式下页的查询不会非常慢,因为快表如果缓存了该页的页表项(PTE),MMU会根据快表缓存的物理页号(PPN)计算出物理地址。得到物理地址后,去查高速缓存,若命中则得到数据。在这个过程中:

    • 通过快表得到PPN避免了至少一次内存访问
    • 通过高速缓存得到数据避免一次内存访问

    这就大大加快了计算机获取数据的速度,弥补了多级页表查询速度上的不足

    快表

    集成在cpu内部的一个独立的硬件缓冲区,是cpu的缓存。快表中存储的是页表中最常用的一些页表项(PTE)中的物理页号(PPN)。当cpu访问一个VA(虚拟地址)时,首先通过VA中的VPN(虚拟页号)分为两部分在TLB中查找,若命中,则获得物理页号,否则就得去页表逐级查找。

    此处应有图->快表->va划分
    找不到好的画图工具,图见csapp第九章,574页

    高速缓存

    位于cpu内部,分为很多组,每组又分为多块,块中存储页内给定偏移量的数据(1B)

    高速缓存图,574页

    其实地址翻译就是将虚拟页号转换成物理页号,因为页的大小和块的大小相同,所以其偏移量也相同。在查快表时,VA中的偏移量部分发送至高速缓存去定位目标值,所以当快表命中时,得到的PPN直接可以和高速缓存中查到的块的标志位进行比较,如果相同,则高速缓存命中,否则通过PPN和PPO合成的PA去访问内存获取数据

    高速缓存的标志位就是PPN(物理页号),用来判断是不是要找的物理页,因为高速缓存通过偏移量(VPO)定位,即找到的数据只能确定是这个偏移量的数据,但不知道是哪个块的,只有等到快表中查出的PPN和高速缓存中查到的标志位比对后,才能判断是否缓存命中

    未解决的问题

    为啥。。。哦明白了突然想通啊哈哈哈

    [已解决 ] 原问题:VPN和VPO都是一串二进制为啥不都用VPN找快表和高速缓存

    一个VPN对应很多VPO,即VPN相同VPO不同,

    • 大部分书和博客的页表项都含有页块号(vpn,ppn),但是他俩就是对应位置的数组下标,还有必要存吗?csapp的意思好像是不用存。?
    展开全文
  • 文章目录页表页面的大小页表特性PTBR--寄存器快表TLB 命中率基于页表的保护与共享多级页表 页表 为什么说分页的逻辑地址是一维的地址; 从下图我们可以看出,把一个程序分为等大的页面(这里每个页面大小假设4bytes...

    页表

    为什么说分页的逻辑地址是一维的地址;
    从下图我们可以看出,把一个程序分为等大的页面(这里每个页面大小假设4bytes),每一个页面的里的指令(假设每条指令大小为1bytes)都会有相对应的逻辑地址,都是从0开始算起的;
    在这里插入图片描述


    页表记录的主要信息就是:页框号和页面号的映射关系,页框号也就是物理地址,页面号也是逻辑地址的一部分;


    在这里插入图片描述


    上面的例子中:把程序分为了3个页面的大小,放入到内存中,其中#0页面放入到了frame#5 也框中,#2页面放入到 frame#2页框中,#1放入到frame#0页框中;

    至于是页面是如何放入到页框的,其实页框是也是有自己一份表,该表记录着页框是否呗占用的情况,只要放页面去页框前去查找页框表,发现没有被占用的页框,那么就会把页面放入进去;

    由于程序的地址,被分成页面放入到页框中,并不是连续存放的,所以我们需要找到程序的真实物理地址,需要一个页表,来记录页框和页面的映射,方便我们找到真实的物理地址空间;


    页面的大小

    在这里插入图片描述


    页面的大小如何计算?
    我们前提的知道逻辑地址的bit位,和页面大小;
    只要有这两个数据,我们就可以通过页面大小推算出,页内位移占用逻辑地址多少个bit;那么页面的大小就可以呼之欲出了;


    不过,一般我们Linux的系统都是逻辑地址有64个bit,因为大多数都是64位OS系统了;
    页面大小一般都是4kbytes,通过简单计算 我们得知 4kbytes = 212bit;那么说明页内位移是有12个bit,这样我们就得出页面大小占用的bit位数位 64 - 12 = 52; 但是着52个bit给页面用,只是理论上的,因为52bit位页面来用实在太多了,实际上OS只用32个bit,给页面使用,其他只是闲置放在没用而已;


    页表特性

    在这里插入图片描述


    OS会给每一份进程都分配一个页表;

    页表的主要作用就是翻译逻辑地址位物理地址的;

    并且页表是只有在进程被CPU调度时候,才会被使用,如果该进程没有被调度,那么对应得页表只会留在内存中,不会被使用;

    CPU是通过一个寄存器来保存页表得信息的;

    并且页表带来一个新的问题,会增加上下文切换的开销,因为进程切换时候,不仅要保存进程的相关信息,它对应的页表信息也需要被保存起来;


    PTBR–寄存器

    在这里插入图片描述


    我们要清楚知道,页表也是需要存储在内存中的,但是页表会增加上下文切换的负担,一直让页表留在内存中,我们切换上下文就会缓慢,所以在CPU中专门有一个为页表服务的寄存器,那就是PTBR,它存放的是页表的地址;

    有了它,就不用上下文切换时候,要把这页表搬来搬去,只需要修改PTBR的值即可,哪个进程被CPU调度,那么就往PTBR添加哪个进程的页表;极大缩短上下文切换的时间;

    我们知道有了这个寄存器后,我们访问页表,就需要有两次的内存访问了咯,当我们调度进程时候,第一次,访问的是页表的位置在哪,把它放入到PTBR寄存器中,第二次访问就是内存中页表的逻辑地址到物理地址的具体位置数据在哪咯;


    快表

    在这里插入图片描述


    认识快表前,我们要知道为什么需要快表?肯定是页表的访问速度太慢了,才导致快表的产生,是的,确实是,因为页表是存储在内存中的,还是那样CPU去内存读取页表,对于CPU来说太慢了,所以为了加快读取页表速度,那么OS设计者搞出一个快表;

    他们如何搞快表的呢?我们知道软件设计有一个大原则:任何问题都可以通过增加中间层来解决问题;

    是的,我们OS设计者,搞了一个硬件,是TLB,就是一缓存,它是专用缓存,专门用来存取页表的条目信息的,因为cahe比较小嘛。。不可以存储全部的页表,只能存储部分的页表条目;

    所以当访地址空间时候,我们首先去TLBcahe查找是否有你要页表信息,如果有直接返回给CPU就可以处理,没有那么就再去内存访问剩余其他的页表条目即可;

    这里会有两次内存访问,一次是访问 cache 一次是内存访问。是不是说这样变慢了/
    不是的,只要我们保证一个原则,我们TLB cache中存放的页表信息,都是进程中需要寻找的地址那么就可以加快速度,只要再TLB cahce的信息,命中率高即可!

    至于愈合提高TLB cache的命中率,是缓存那边的话题,这先不讨论,我们只要知道;有一个TLB硬件,他是cache,并且他存放的是页表的部分条目信息,他可以加快页表的访问速度,快表的体现也就是体现在这里;


    一张图解释:CPU调度程序,如何访问页表的过程:
    在这里插入图片描述


    TLB 命中率

    在这里插入图片描述


    基于页表的保护与共享

    在这里插入图片描述


    在这里插入图片描述


    多级页表

    认识多级页表,我们先看看,页表的大小问题:

    在这里插入图片描述


    基于32位的系统下,我们一个进程最多可以分配到1m个页面(每个页面大小位4kb),用具体数字说,就是100w个左右的页面,那么一个进程的页表就是存放页面和页框的信息,也就是说,一个进程的页表就要存放1m左右的页表项(页面和页框的映射),也就是要一个进程的页表要存放100w个左右的页表项信息;

    我们再假设一个页表项大小为4字节,那么,一个页表就要存放4M字节的信息,也就是400w个左右的页表项信息;

    这是什么概念?这个概念是,每当你创建出一个进程,OS都需要为你这个进程维护一个页表,这个页表占用的实际空间是4M;

    这样可能觉得不大,假如我的OS搞出100个进程呢?那么你OS就要帮你维护400M的页表信息;

    这样说可能觉得还没什么,你知道一个进程维护一个4M字节的页表什么概念嘛?也就是你的物理内存,需要有
    4M / 4KB = 1K个页框存放你的页表哦,意思是你的物理内存有1024个左右的页框,并且还是连续的1024个页框,为什么是连续的?因为你的页表不可以被打散存放在页框中,如果打算存放你怎么找到?


    基于上面页表的信息过于大,且需要连续的物理空间,存放页表信息,所以我们认为这种方式不合理。

    所以多级页表的方式就诞生的。

    多级页表的意思是将页表也拆分一个一个的,然后放入到物理内存的页框中,此时我们就需要多了一个数据结构,保存,页表号,和页框号的信息,因为我们需要找到也标号,才能找到页面号,进而找到对应的物理地址;

    在这里插入图片描述


    这个数据保存页表号的数据结构我们叫页表页;
    所以一个逻辑地址:就被表示为了页表页号+页号+页内位移了;

    上面的处理方式就是2级页表的处理方式;


    在这里插入图片描述


    展开全文
  • 多级页表计算

    2021-12-21 10:46:00
    多级页表 例如,某系统按字节编址,采用40位逻辑地址,页面大小是4KB,页表项大小是4B,假设采用纯页式存储,则采用几级页表,页内偏移量多少 40位 = {28位页号={根据页表大小得到页号一级、二级},12位偏移量} 首先...
  • 【操作系统/计组】页面大小、页表项、一级页表、多级页表的关系与计算
  • 在块大小为4K的32位系统中,逻辑地址的低12位为页内偏移,高20位为页索引。CPU通过查找页表将20位的页索引转换为数据块的物理地址(同样也是20位),然后与低12位的页内偏移拼接,形成最后的物理地址。 操作系统中...
  • 为了不浪费更多的内存,页面尺寸是越小越好,这样造成的内存碎片...譬如32位程序使用的逻辑地址是32位的,所以最大的逻辑地址是让2^32,每个页面大小为4KB(2^12),这样就有2^20个逻辑页,每个逻辑页需要一个页表项来
  • OS-深入理解多级页表

    千次阅读 2020-11-18 17:32:15
    OS-深入理解多级页表多级页表存储什么?寻址? 主要涉及两个问题,其一是对操作系统中多级页表存储什么的探究;其二是对计算机寻址的理解 多级页表存储什么? 多级分页的原理不再赘述,下面主要看这个图,注意到...
  • 虚拟内存- MMU 和 TLB - 多级页表 在计算机中,我们直接操作物理地址,是一种效率底下的的方式,而虚拟内存的出现,则大大加速了程序员的开发能力。(虽然这降低了性能,不过是 Trade off 罢了)。 在 CPU 中内存管理...
  • 为什么要采用多级页表? 为什么要采用多级页表? 如果采用单级别也表,虚拟地址占用的内存大小恒定为210*4B*210=4mb,而二级缓存采用页目录和页,例如用到3个字页,那实际占用内存大小为4B2^10 +2^104B*3 = 4kB+12KB=...
  • 多级页表计算题目

    千次阅读 2021-03-18 21:21:10
    1.若采用多级页表机制,则各级页表的大小不能超过一个页面 例:某系统按字节编址,采用40位逻辑地址,页面大小为4KB,页表项大小为4B,假设采用纯页式存储,则要采用()级页表,页内偏移量为()位? 解题:页面...
  • 为什么使用多级页表

    万次阅读 多人点赞 2018-07-29 21:17:15
    其中,最低12位表示偏移量,中间的10位表示页表项,最高10位表示页目录项。由线性地址转换成物理地址经过两部,也就是所谓的二级页表。 32位线性地址寻址过程如下: \ 说明:控制寄存器cr3中存放了页目录的物理...
  • 今天新学了内存管理 纠结了一天 刚才突然有点阔然开朗的感觉,就赶紧...页表就是书和文件夹对应的目录,页表项就是目录的每一行,由页号和块号组成。页号就是书本的第几页即书页号,块号就是把复印的进程的一页放到内存
  • 我这里先不讲具体的页表是怎么实现的,什么页表的大小,什么虚拟内存的大小,我讲一个例子,来生动说明页表以及证明为什么多级页表可以节省空间。例子如下: 假如河北省要给全省人民办医保,需要给每一个人发一张...
  • 在学习计算机组成原理时,书中谈到,"使用多级页表可以压缩页表占用的内存",在了解了多级页表的原理后,恐怕对这句话还是理解不了:把页表换成多级页表了就能节约内存了?不是还是得映射所有的虚拟地址空间么? ...
  • 多级页表的原理

    万次阅读 多人点赞 2017-12-24 20:29:46
    我之前一直有一个疑惑,为什么同样都是把页表存储在内存中,多级页表就比一级页表要省空间? 如果你也有这个疑惑,看完这篇博客你就明白了 先说一些基本概念(参考《现代操作系统》) 虚拟存储器的基本...
  • 简单的说,页表就是一个存储物理页地址的表,我们知道,现在的程序使用的都是虚拟内存,CPU在取指令或者取数据的时候使用的是虚拟地址,为了能够从内存中取得数据,需要将虚拟地址转换为物理地址 ...
  • 我们先来讲第一种方式,把第一种方式翻译成人话就是 页表太大了,很难找到一块连续的空间来存放整个页表,我们可以采用分页存储管理方式的思想,即把页表进行分页,分页的大小于物理块的大小相同,这样就可以将各个...
  • 一、端到端地址翻译示例 从图上看,TLBI占了t位,而TLBT占了n-p-t位。 上节我们刚把TLB开了个头,多说无益...3、页面大小是64字节(P=64),也就是说(p=6) 4、TLB是四路组相联,总共16个条目; 5、L1 d-cache是物理
  • 多级页表与快表

    千次阅读 2020-05-09 16:27:54
    这样算下来,对应于一个32位的内存地址,一个页表应该4M大小。看起来还可以接受啊。 但注意,每个进程都有一个页表。看下,我的电脑现在有280个进程,也就说如果采用之前的结构,光页表结构就得占用280*4M=1120M,
  • 多级页表及访存次数求解

    千次阅读 2020-06-27 20:30:45
    【知识回顾】 (1)一级页表 页号(36位)“一个进程最多可能有2^36页,因此进程的页表最多有2^36个页表项” 各个页表项必须连续存放...多级页表的【优点】各级页表不再需要连续的存储空间来存放;【缺点】地
  • 操作系统---(32)多级页表及相关计算

    千次阅读 多人点赞 2020-06-09 14:24:59
    多级页表结构 计算:一个由32位二进制组成的地址空间,页面长度为4KB,每个页表项占用4B,则: 进程的页面总数可达 2的20次方 = 1MB个 整个页表最大占用 4MB 页号 页内地址 31-16 11-0 那么问题是:4MB的...
  • 多级页表的优点和缺点

    千次阅读 2018-03-20 11:00:54
    多级页表是基于虚拟地址的分段来划分等级的,最低等级的页表上保存了最终的虚拟页号和物理页号的对应关系。例如拿32位的虚拟地址来说,如果页面的大小为4K,也就是12位,那么地址空间内将有20位,也就是1M的页表项目...
  • 多级页表如何节省进程页表空间

    千次阅读 2017-09-19 15:47:59
    如果使用简单的一级页表,如果进程使用全部4G线性地址空间,那么将需要高达2^20表项(总共地址线是32位,每页大小为4kb,则页偏移量需要低12位,高20位当作页表地址)来保存表示每个进程的页表,若每项4B,则需要4MB...
  • 页表管理及多级页表

    千次阅读 2019-08-02 14:17:18
    页表说需空间大小计算: 1、32 位地址空间、4KB 的页大小页表的每项大小为 4Byte。 32 位地址空间可寻址2^32 = 4GB 每4KB=3^12为1个物理页,故需要总TLB项为2^32/2^12=2^20 每个TLB项的大小为4B,故...
  • 在谈到多级页表的优势的时候,很多地方都是这么说的:32位地址空间的分页系统,如果页面大小为4KB,则每个进程可达1M个页,假设每个页表项占用4个字节,这样每个进程仅仅页表项就占用了4MB连续的内存空间。...
  • 按字节编制:每个存储单元大小为1字节,即1B(8个二进制位) 装入的三种方式 将指令的逻辑地址转换为物理。确定物理地址 绝对装入 在编译时,如果知道程序将要放到内存中的哪个位置,编译程序将产生绝对地址的目标...
  • 多级页表&页目录自映射学习记录 在做虚拟内存管理时,有很多搞不懂的地方,所以在这里记录下来,以便日后查阅复习 多级页表 为什么采用多级页表 一级页表存在的问题 首先明确页表的概念,每个进程有一个页表,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,967
精华内容 2,386
关键字:

多级页表大小

友情链接: print.rar