精华内容
下载资源
问答
  • 多级页表

    千次阅读 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的意思好像是不用存。?
    展开全文
  • 多级页表&页目录自映射学习记录 在做虚拟内存管理时,有很多搞不懂的地方,所以在这里记录下来,以便日后查阅复习 多级页表 为什么采用多级页表 一级页表存在的问题 首先明确页表的概念,每个进程有一个页表,...

    多级页表&页目录自映射学习记录

    在做虚拟内存管理时,有很多搞不懂的地方,所以在这里记录下来,以便日后查阅复习

    多级页表

    为什么采用多级页表

    一级页表存在的问题

    首先明确页表的概念,每个进程有一个页表,用于描述该进程占用的物理页面及逻辑排列顺序。页表记录虚页号和实页号的对应关系。页面大小固定 → \rightarrow 页面偏移量固定;虚页大小由逻辑地址决定,除去页面偏移量的固定位数,剩余的就是虚页号了。那么如果逻辑地址空间很大,虚页就会很多,意味着我们要一片大大的连续地址空间 来存储一张好大好大的页表,页表是要放在物理内存里的,我们向硬件要这么大的连续空间实在太为难硬件了。

    那么我们该怎么解决这个问题呢???

    于是引入了多级页表来分散物理页表空间。

    多级页表理解

    在老师的ppt中,对多级页表的描述只有一句话:

    多级页表结构中,指令所给出的地址除偏移之外的个部分全是各级页表的页表号或页号,而各级页表中记录的全是物理页号,指向下级页表或真正的被访问页。

    什么意思呢???一句一句分析来看看:

    • 指令所给出的地址除偏移之外的个部分全是各级页表的页表号或页号

      一级页表结构:逻辑地址 = 一级页表号(虚页号) + 偏移量

      二级页表结构:逻辑地址 = 一级页表号(页目录号) + 二级页表号(虚页号) + 偏移量

      也许这里理解起来有点困难,不如像这个例子:我们的教材是分章节的对吧,一级页表就就相当于一本只分节,没有章的书;而二级页表就相当于将节划分为不同的章,再在各个章里面分别编号。这里的虚页号就相当于节,页目录号就相当于章,有没有一点点懂了呀~

    • 各级页表中记录的全是物理页号

      一级页表结构:页表首地址由系统设定,并存在页表寄存器中,然后直接根据虚页号就能找到对应的表项读出物理页号,从而找到物理地址。

      二级页表结构:一级页表(页目录)的首地址仍是由系统设定,并存在页表寄存器中,然后根据一级页表号(页目录号)就可以在页目录中找到对应页目录项读出二级页号,这里的二级页号就是物理页号,然后根据虚页号在二级页表中找到对应的页表项读出物理页号,从而找到物理地址(配图食用效果更佳)

    在这里插入图片描述
    在这里插入图片描述

    为什么说是物理页号呢??其实我也不清楚为什么要选择存物理页号,但是我认为这个设计相比直接存储物理地址是可以省空间的,这样就留出了一些空余位置来存放一些其他信息。但是为什么不存储虚页号呢?我还没搞懂,等搞懂再补充。。。。(我菜www)

    有一个很重要的一点就是在我们实验的操作系统(32位 = 10 + 10 + 12)中,页目录表为4KB,每一个二级页也是4KB,物理页面大小也是4KB。

    页目录自映射

    示意图:

    在这里插入图片描述

    页目录:页表页的地址映射;1024个页表页逻辑连续,物理分散,逻辑-物理映射关系记录在页目录中。

    关键点理解

    • 存储页表的4MB地址空间中是整个4GB虚拟地址空间的一部分,即这4MB在4GB中
    • 记录这4MB连续地址空间到物理地址空间的映射关系的是一个4KB的页目录
    • 记录这4MB连续地址空间到物理地址空间的映射关系的是一个4KB的页表页(4MB页表中的一员)

    所以,页目录和页表页内容相同,页目录无需额外分配单独的存储空间,即有一个4KB的空间可以同时作为页目录和一个页表项,这个4KB的空间表示了整个页表的4MB地址空间与物理地址空间的映射关系。这就是自映射

    第两点的理解:页目录记录着1024个页表页的对应物理页号,而这1024个页表页逻辑连续,就相当于页目录记录了着1024*4KB = 4MB的连续地址空间到物理空间的映射关系;

    自映射:页目录中有一条PDE指向自身物理地址,这个地址就是页目录基址。

    页目录自映射机制构建

    PT_base:页表基址,应4M对齐

    PD_base:页目录基址,PD_base = PT_base + PT_base >> 10

    解释:页目录第一个页目录项一定也是记录着第一个页表页的页表项。 P T b a s e > > 12 PT_{base} >> 12 PTbase>>12表示第一个页表页的物理页号,一个页表项占4B空间,所以记录第一个页表页的页表项 相对页表的偏移为 ( P T b a s e > > 12 ) < < 2 = ( P T b a s e > > 10 ) (PT_{base}>>12)<<2 = (PT_{base}>>10) (PTbase>>12)<<2=(PTbase>>10),可得记录第一个页表页的页表项的地址为 P T b a s e + P T b a s e > > 10 PT_{base} + PT_{base}>>10 PTbase+PTbase>>10,这就是页目录第一个页目录项的地址,即页目录基址。

    PDE_self_mapping:自映射目录表项, PDE_self_mapping = PT_base + PT_base >> 10 + PT_base >> 20

    解释:已经得到页目录基址,只需计算出该页目录项相对于页目录基址的偏移。页目录项对应的是页表页,那么只需要计算当前页表页的页表页号即可。已经计算出来第一个页表页的页表项地址(即页目录基址)相对页表基址的偏移为 ( P T b a s e > > 10 ) (PT_{base}>>10) (PTbase>>10),一个页表页4KB,所以页目录的页表页号为 ( ( P T b a s e > > 10 ) > > 12 ) ((PT_{base}>>10)>>12) ((PTbase>>10)>>12),一个页表项4B,故偏移为 ( ( P T b a s e > > 10 ) > > 12 ) < < 2 ((PT_{base}>>10)>>12)<<2 ((PTbase>>10)>>12)<<2

    在这里插入图片描述

    展开全文
  • 多级页表的好处

    2021-11-23 22:12:28
    如果只使用了一个页表,一个表项的大小为4byte,32位系统有4GB的物理空间(一个进程看到是4GB大小的虚拟空间),每一个表项对应着物理空间的第xxx页(4KB大小的页),那么应该有4GB/4KB=1MB个表项,因为每个表项4byte...

    在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%,这样一下子就比只有一级页表时少了。

    展开全文
  • 为什么使用多级页表

    万次阅读 多人点赞 2018-07-29 21:17:15
    其中,最低12位表示偏移量,中间的10位表示页表项,最高10位表示页目录项。由线性地址转换成物理地址经过两部,也就是所谓的二级页表。 32位线性地址寻址过程如下: \ 说明:控制寄存器cr3中存放了页目录的物理...

    对于32位处理器来说,32位的线性地址被分成三部分,如下图。其中,最低12位表示偏移量,中间的10位表示页表项,最高10位表示页目录项。由线性地址转换成物理地址经过两部,也就是所谓的二级页表。

    32位线性地址寻址过程如下:

    \

    说明:控制寄存器cr3中存放了页目录的物理地址,通过cr3寄存器可以找到页目录,而线性地址中的Directory部分决定页目录中的目录项,而页目录项中存放了要找的页表的物理基地址,再结合线性地址中的中间10位(Page Table部分),就可以找到页框的物理地址。一个页框大小为4096字节,线性地址中的Offset部分占12位,因此页框的物理地址结合线性地址Offset部分就可以找到页框中的任何一个字节。

    问题来了,为什么要用二级页表而不使用一级页表,或者说使用二级页表比一级页表的优势在哪里?

    (1)使用多级页表可以使得页表在内存中离散存储。多级页表实际上是增加了索引,有了索引就可以定位到具体的项。举个例子:比如虚拟地址空间大小为4G,每个页大小依然为4K,如果使用一级页表的话,共有2^20个页表项,如果每一个页表项占4B,那么存放所有页表项需要4M,为了能够随机访问,那么就需要连续4M的内存空间来存放所有的页表项。随着虚拟地址空间的增大,存放页表所需要的连续空间也会增大,在操作系统内存紧张或者内存碎片较多时,这无疑会带来额外的开销。但是如果使用多级页表,我们可以使用一页来存放页目录项,页表项存放在内存中的其他位置,不用保证页目录项和页表项连续。

    (2)使用多级页表可以节省页表内存。使用一级页表,需要连续的内存空间来存放所有的页表项。多级页表通过只为进程实际使用的那些虚拟地址内存区请求页表来减少内存使用量(出自《深入理解Linux内核》第三版51页)。举个例子:一个进程的虚拟地址空间是4GB,假如进程只使用4MB内存空间。对于一级页表,我们需要4M空间来存放这4GB虚拟地址空间对应的页表,然后可以找到进程真正使用的4M内存空间。也就是说,虽然进程实际上只使用了4MB的内存空间,但是为了访问它们我们需要为所有的虚拟地址空间建立页表。但是如果使用二级页表的话,一个页目录项可以定位4M内存空间,存放一个页目录项占4K,还需要一页用于存放进程使用的4M(4M=1024*4K,也就是用1024个页表项可以映射4M内存空间)内存空间对应的页表,总共需要4K(页表)+4K(页目录)=8K来存放进程使用的这4M内存空间对应页表和页目录项,这比使用一级页表节省了很多内存空间。当然,在这种情况下,使用多级页表确实是可以节省内存的。但是,我们需要注意另一种情况,如果进程的虚拟地址空间是4GB,而进程真正使用的内存也是4GB,如果是使用一级页表,则只需要4MB连续的内存空间存放页表,我们就可以寻址这4GB内存空间。而如果使用的是二级页表的话,我们需要4MB内存存放页表,还需要4KB内存来存放页目录项,此时多级页表反倒是多占用了内存空间。注意在大多数情况都是进程的4GB虚拟地址空间都是没有使用的,实际使用的都是小于4GB的,所以我们说多级页表可以节省页表内存。

    那么使用多级页表比使用一级页表有没有什么劣势呢?

    当然是有的。比如:使用一级页表时,读取内存中一页内容需要2次访问内存,第一次是访问页表项,第二次是访问要读取的一页数据。但如果是使用二级页表的话,就需要3次访问内存了,第一次访问页目录项,第二次访问页表项,第三次访问要读取的一页数据。访存次数的增加也就意味着访问数据所花费的总时间增加。

    总结:

    多级页表优势:

    1.可以离散存储页表。

    2.在某种意义上节省页表内存空间。

    多级页表劣势:

    增加寻址次数,从而延长访存时间。

    展开全文
  • 虚拟内存- MMU 和 TLB - 多级页表 在计算机中,我们直接操作物理地址,是一种效率底下的的方式,而虚拟内存的出现,则大大加速了程序员的开发能力。(虽然这降低了性能,不过是 Trade off 罢了)。 在 CPU 中内存管理...
  • 简单的说,页表就是一个存储物理页地址的表,我们知道,现在的程序使用的都是虚拟内存,CPU在取指令或者取数据的时候使用的是虚拟地址,为了能够从内存中取得数据,需要将虚拟地址转换为物理地址 ...
  • 多级页表的原理

    万次阅读 多人点赞 2017-12-24 20:29:46
    我之前一直有一个疑惑,为什么同样都是把页表存储在内存中,多级页表就比一级页表要省空间? 如果你也有这个疑惑,看完这篇博客你就明白了 先说一些基本概念(参考《现代操作系统》) 虚拟存储器的基本...
  • 多级页表计算题目

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

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

    千次阅读 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 ...多级分页: ...
  • 二、多级页表 在解释多级页表之前,先来梳理下概念,免得后面的内容看晕: 1、页表:缓存了很多页面信息(有效位+物理页号)的表; 2、各页面信息分别由页表中每个PTE记录, 3、页面:就是对应虚拟存储器(磁盘空间...
  • 在学习计算机组成原理时,书中谈到,"使用多级页表可以压缩页表占用的内存",在了解了多级页表的原理后,恐怕对这句话还是理解不了:把页表换成多级页表了就能节约内存了?不是还是得映射所有的虚拟地址空间么? ...
  • 详解多级页表与快表

    2021-07-26 14:56:29
    多级页表与快表 文章目录多级页表与快表什么是页表页表带来的问题快表多级页表三级页表转换法参考 什么是页表 页表就是一个用于将虚拟地址转换为物理地址的工具。 转换的公式就是: 通过页表先找到页,在使用页内...
  • 快表和多级页表

    千次阅读 2020-09-20 17:19:20
    页表管理机制中有两个非常重要的概念,快表和多级页表,在分页内存管理中,很重要的两点是:1. 虚拟地址到物理地址的转换要快。2. 解决虚拟地址空间大,页表也会有很大的问题。 快表:为了解决虚拟地址到物理地址的...
  • 虚拟内存,页表,快表,多级页表,倒排页表

    万次阅读 多人点赞 2018-05-03 11:45:10
    上面提到的解决方案是为计算机设置一个小型的硬件设备,将虚拟地址直接映射到物理地址,而不必再访问页表。这种设备称为转换检测缓冲区(Translation Lookaside Buffer, TLB ),有时又称为相联存储器(associate ...
  • 为了解决这个问题,就引入了多级页表。 五.多级页表 将一级页表再进行分页,分成1024个二级页表,并且每个二级页表中存有1024个页表项,形成如下的二级分页的结构。 虽然分级乍一看花费的物理内存变多了,但是实际...
  • 页表记录进程页面和实际存放的内存块之间的映射关系 页面大小的选择 和目前计算机的物理内存大小有关:2n。 较小的页面,减小内碎片,但加大页表的长度,从而形成新的开销并增加换入、换出的开销; 较大的页面,...
  • 这篇文章将详细解释为什么多级页表可以节省内存空间,以及TLB如何减少地址映射带来的开销。我们将首先从多级页表开始谈起。 多级页表 为了方便理解,我们先从二级页表开始图解。假设虚拟内存和物理内存都是4G, 地址...
  • 我们的指令和数据,都必须先加载到内存,才会被CPU拿去执行。...简答页表 想要把虚拟内存地址,映射到物理内存地址,最直观的方法,就是来键一张映射表。这个映射表,能够实现虚拟内存里面的页,到物理内存里面
  • Q: 为什么使用多级页表能省内存? A: 首先考虑一级页表的情况。 内存虚拟空间是0~4G 按4K一页的方式分页。 那么需要总共1024 * 1024个页表项, 即1M个页表项 其中每个页表项为32位整数。 为什么?? 想想里面...
  • 一、虚拟地址到物理地址的映射必须非常快 1、32位虚拟地址,需要更大的页面和页表 由于页面和页表是相对应的;因此计算机为32位地址空间,而页面大小为4KB,则需要页面个数;将超过100万页; 此时页表就得有100万...
  • 每一个页表项中都记录了页号和该页号所对应的块号(分区号),所以页表的作用就是实现从页号到物理块号的地址映射。其实页表就像一本厚厚的书的目录,书的页数太多,直接翻找很麻烦,我们可以从目录中找出每一章对应...
  • 其中,最低12位表示偏移量,中间的10位表示页表项,最高10位表示页目录项。 由线性地址转换成物理地址经过两步,也就是所谓的二级页表。 32位线性地址寻址过程如下: 说明:控制寄存器cr3中存放...
  • 在谈到多级页表的优势的时候,很多地方都是这么说的:32位地址空间的分页系统,如果页面大小为4KB,则每个进程可达1M个页,假设每个页表项占用4个字节,这样每个进程仅仅页表项就占用了4MB连续的内存空间。...
  • 分页,段页式: https://blog.csdn.net/zephyr_be_brave/article/details/8944967 虚拟地址和物理地址映射多级页表: https://www.cnblogs.com/binarylei/p/12600886.html
  • 页表是由页表项组成的,每个页表项记录逻辑页放入了哪个物理页框,因此每一个逻辑也都需要一个页表项来记录信息。譬如32位程序使用的逻辑地址是32位的,所以最大的逻辑地址是让2^32,每个页面大小为4KB(2^12),...
  • 深入Linux内核(内存篇)—页表映射分页

    千次阅读 多人点赞 2020-10-11 23:41:26
    深入Linux内核(内存篇)—页表映射一、分页二、X86中的分页三、ARM中的分页四、Kernel中的分页 操作系统的核心任务是对系统资源的管理,而重中之重的是对CPU和内存的管理。为了使进程摆脱系统内存的制约,用户进程...
  • 单级页表的缺点 前面说了为了提高内存的利用率,内存是分页管理的,并且有一个页表用来存储页号(逻辑地址)与页框号(物理地址)的对应关系。通过找页号就可以找到页框号。这个思想理论上是没有问题的,但是实际...
  • 文章目录块表【1】块表【2】多级页表【3】总结 块表 在页式内存管理中有2个重要的问题: 虚拟地址到物理地址的转换要快 当虚拟空间很大时,相应的页表也会变得很大 为了解决这两个问题,引入了块表和多级页表 ...

空空如也

空空如也

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

多级页表的映射