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

    千次阅读 2018-06-09 20:28:45
    一级页表:比如对于4G的空间,4K页那需要2^20 == 1M个页标项(无论用不用都需要,系统不知道哪个地址是否会被访问)1M * 4 == 4M每个进程都需要4M的内存(每个进程最小需要4M的内存)二级页表:每个进程最多需要...

    一级页表:

    比如对于4G的空间,4K页
    那需要2^20 == 1M个页标项(无论用不用都需要,系统不知道哪个地址是否会被访问)
    1M * 4 == 4M

    每个进程都需要4M的内存

    (每个进程最小需要4M的内存)

    二级页表:

    每个进程最多需要一个页目录(4K) + 4K*2^10个页表=4M+4K

    每个进程最少需要一个页目录(4K) + 4K*2^0个页表=4K+4K=8K

    解释:

    一级页表的两个问题:

    1.页表在内存分配是必须连续,否则无法查表。

    2.每个进程都必须实实在在占用4M,必须全部分配,进程才可以使用。

    二级页表的优势:

    1.允许页表被分散在内存的各个页面中,不需要连续的4M内存块;

    2.并不需要为不存在的或线性地址空间未使用部分分配二级页表;

    3.可以在虚拟内存中存放二级页表。

                                                  二级页表结构图


    展开全文
  • 深入剖析MMU二级页表

    2021-12-08 10:53:40
    深入剖析MMU二级页表1.1页表映射1.1.1 不同分页的情况下,虚拟地址的拆分1.1.2 粗细页表大小极小页映射图1.1.3 粗页表与细页表1.1.3.1 最小单位映射1.1.3.2 以1K为最小映射单元1.1.3.3 以4K为最小映射单元1.2 为何...

    1. 深入剖析MMU二级页表

       如果使用页面映射的方式,段映射表就变成了一级映射表(First Level table,在linux内核中成为PGD),其表项提供的不再是物理段地址,而是二级页表的基地址。32bit虚拟地址的高12bit(bit[31:20])作为访问一级页表的索引值,找到相应的表项,每个表项指向一个二级页表。以虚拟地址的次8bit(bit[19:12])作为访问二级目录的索引值,得到相应的页表项,从这个页表项找到20位的物理页面地址。最后将这20bit的物理页面地址和虚拟地址的低12bit拼凑起来,得到最终的32bit物理地址。这个过程在ARM32架构中由MMU硬件完成,软件不需要介入;

    1.1页表映射

    1.1.1 不同分页的情况下,虚拟地址的拆分

    在这里插入图片描述   根据1级描述符的低2bit,1级描述符可以代表4种不同的含义

    1.1.2 粗细页表大小极小页映射图

    在这里插入图片描述

    1.1.3 粗页表与细页表

      粗页表只能以大页(64K)和小页(4K)为单位进行映射,而细页表除了能以大页和小页为单位进行映射之外,还可以以极小页(1K)为单位进行映射,假如配置Linux划分页表的最小映射单位为1K,那么就必须使用细页表,粗页表是做不到以1K为单位进行映射的

    1.1.3.1 最小单位映射

    粗页表和细页表的不同之处就是一条描述符所能映射的地址空间大小的能力,粗页表的一条描述符能够映射4K的物理地址空间,而细页表的一条描述符只能映射1K的物理地址空间,细页表也可以以小页和大页进行映射,假如细页表以小页(4K)进行映射,那么这条描述符所相邻的一共4条描述符均相同。

    1.1.3.2 以1K为最小映射单元

    如下图所示,只能以细页表进行映射,二级描述符的低两位为11,代表以1K极小页进行映射,映射范围为1K
    

    在这里插入图片描述

    1.1.3.3 以4K为最小映射单元

      这种情况粗页表和细页表均能完成,下图为粗页表完成映射的情况,一条描述符(第239条描述符)即可完成4K的映射
    在这里插入图片描述
      下图为细页表完成4K映射的关系图,由于细页表的最小映射单位为1K,所以需要4条描述符(第1019-1022条)完成4K的映射,这四条描述符的内容相同,所以无论访问到4条描述符的哪一条,访问到的都是同一片4K物理地址区域
    在这里插入图片描述

    1.2 为何要用到二级页表?

      每个进程都有其自己的虚拟地址空间,对于32位虚拟地址来说,一级页表的确是需要4MB的内存来存储,而事实上,很少有需要4G内存的程序,很多地址其实进程是用不上的,这些地址就白白浪费。而多级页表的引进是避免把全部页表都保存到内存中去(就像一级页表那样),特别是那些程序没有用到的页表更是如此,二级页表是在进程的确需要更多内存的时候,才会分配更多的页表给当前进程,这样会更加有效率。而且每个进程都有自己独立的页表,如果每个进程都按需分配页表,相比一级页表的“全能”,总体看来,多级页表还是比较节省内存的

    展开全文
  • 原标题:Arm-Linux二级页表的问题以前,在一些文档和代码中看到过说 -linux的 分为linux版本和硬件版本。一直觉得概念比较混乱,没有仔细研究,今天终于遇到了这个问题,不得不学习一下了。在do_page_fault()过程中...

    原标题:Arm-Linux二级页表的问题

    以前,在一些文档和代码中看到过说 -linux的 分为linux版本和硬件版本。一直觉得概念比较混乱,没有仔细研究,今天终于遇到了这个问题,不得不学习一下了。

    在do_page_fault()过程中,有下面函数会被调到:

    [c] static inline void __pmd_populate(pmd_t *pmdp, unsigned long pmdval) { pmdp[0] = __pmd(pmdval); pmdp[1] = __pmd(pmdval 256 * sizeof(pte_t)); flush_pmd_entry(pmdp); } [/c]

    它的功能是把在这一个新申请的二级页表与PMD关联起来。在这之前,pmdp指向的PMD项是空的,当前的过程正是在为它建立映射。在调用这个函数之前,已经申请好了一张4K大小的二级页表。

    pmdp[0] = __pmd(pmdval); 这一行很容易理解,这是在把根据pte生成的PMD表项值赋值给PMD项。但是下面这一句是为什么呢?

    首先先看一张二级页表有多大,arm-linux采用的是粗粒度二级页表映射,使用这种一映射关系,一个PMD表项下面映射/覆盖1M内存,一个PTE项下面映射/覆盖4K内存,所以一张二级表应该有1M/4K=256个表项。而一个二级表项是4字节,所以一张二级表应该占用空间256*4=1K字节。一个4K的内存页可以容纳4张二级表。

    其次,关于二级页表,不知为什么内核要为一张二级页表提供两份版本(一个版本,一个硬件版本)。而且两个版本的表的位置关系定义得很别扭。看pgalloc.h中的一个注释图:

    从上(低地址)到下(高地址)分别是:第一张表的硬件版本、第二张表的硬件版本,第一张表的Linux版本、第二张表的Linux版本。可见,同一张表的linux版本和硬件版本是不连续的,但两张不同表的同一版本是连续的。我想,把这样的4张表放在一起,正是为了向4K的页面大小对齐,不至于浪费空间。

    这样,一切就都好理解了。上述函数中,接下来这一行:

    pmdp[1] = __pmd(pmdval 256 * sizeof(pte_t));

    正是把第二张硬件表的对应的PMD值写到接下来的一个PMD表项中去。

    这个函数实际上是完成了两张二级表的映射。

    责任编辑:

    展开全文
  • 二级页表理解与计算

    千次阅读 多人点赞 2020-11-12 10:25:57
    二级页表 为什么要二级页表? 1.页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框2.没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。 页表项的大小如何计算?...

    二级页表

    为什么要二级页表?

    1.页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
    2.没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。

    页表项的大小如何计算?页表大小如何计算?

    页表项大小取决于需要表示的页号+需要表示的页内偏移量(取决于页面大小)
    如一个页面大小是4KB,那么它需要表示的页内偏移量为 2 12 B 2^{12}B 212B,即需要12位,若系统为32位,则剩下的20位可以用来表示页号,最多可以表示 2 20 2^{20} 220页。而这32位都存放在页表项中,即一个页表项4B。
    而页表由很多页表项组成,具体多少页表项由页号决定,如有 2 20 2^{20} 220个页表项,则页表大小为 2 20 B × 4 B = 2 22 B = 4 M B 2^{20}B\times4B=2^{22}B=4MB 220B×4B=222B=4MB,即页表大小4MB

    页表如何分割成更小的页表?

    页表被分割的前提是当前页表很大,用来搜索很不方便,如有一本很厚目录,目录中没有大标题,而是直接指向最底层的内容,因此需要进行分割(加大标题)

    如上,一级页表有4MB,页面大小是4KB,页表项是4B,我们将一级页表看作一个新程序,这个程序中可以分为 4 M B 4 K B = 2 10 页 \dfrac{4MB}{4KB}=2^{10}页 4KB4MB=210每一个页就是一个二级页表,一个页能装 4 K B 4 B = 2 10 项 \dfrac{4KB}{4B}=2^{10}项 4B4KB=210,页内偏移量是 4 K B = 2 12 B 4KB=2^{12}B 4KB=212B,即12位。

    原来一个4MB的页表被分为了 2 10 2^{10} 210个大小为 4 K B ( 2 12 B ) 4KB(2^{12}B) 4KB(212B)的二级页表二级页表中每个页表项为4B,所以二级页表有 2 10 2^{10} 210

    页表项中的32位起初前20位用来指引页号,后12位用来指引页内偏移量;现在前10位变为指引二级页表( 2 10 个 页 表 中 的 哪 一 个 2^{10}个页表中的哪一个 210),后10位指引具体哪个页号,再后12位指引页面偏移量。

    假设此时程序段对应的是0号二级页表第5项,则进程的某一程序段寻找对应的内存块时,首先会问一级页表:
    “请问我该去哪个内存块?”
    一级页表说:“让我看看你地址前10位…找到了,你去Z号内存块里0号二级页表看看。”
    然后程序段再问0号二级页表:“一级页表让我来找你,请问我该去哪个内存块?”
    0号二级页表说:“让我看看你地址的11~20位,你是我的第5项,你去内存块X看看吧”
    然后程序段来到对应内存块X,问内存:“请问我具体在内存块哪个位置呢?”
    X号内存块说:“我看看你最后12位…你的偏移量是Y,去Y位置吧!”
    接着程序段装入内存块,结束。

    最近操作系统课程正好上到这一块,起初自己在理解的时候有些地方比较混乱,后期理清了思路后把思路写了下来,希望能对你有帮助!
    动动小手给个免费的赞鼓励一下吧

    展开全文
  • 内存管理之二级页表详解

    千次阅读 2021-01-13 11:57:05
    二级页表 一级页表相当于把一本书缩小成几页的目录,通过目录来找书的内容。 但有个问题,如果书非常非常厚,有两本康熙字典那么大,目录也非常多,有一本高中教材那么厚。 那自然而然的,继续分呗,把高中教材...
  • 3.1.9 OS之二级页表的原理和地址结构

    千次阅读 多人点赞 2020-05-05 14:41:55
    2.二级页表的原理和地址结构3.如何实现二级页表的地址变换?4.几个小细节 0.思维导图 1.为什么引入二级页表? 因为单级页表存在一些问题,所以引入二级页表和多级页表,有两个问题: 上面提到了这两个问题,那么...
  • 基本页表和二级页表的思路和比较

    千次阅读 2020-08-01 10:44:20
    基本页表 默认块号大小为4KB。 (页表项由 页号 和 块号 组成) 页号是进程的,块号是内存的。 块号 -> 物理地址 内存的块号是唯一的,通过它能得到内存内的物理地址。 块号为0,它的物理地址为0。 比如块号为3,...
  • 操作系统二级页表

    千次阅读 2021-04-15 09:57:52
    计算机采用二级页表的分页存储管理方式,按字节编址,页面大小为1024B,每个页表项占2B, 逻辑地址结构为:  若逻辑地址空间的大小为 64K 个页面,则表示整个逻辑地址空间的页目录表中包含的表项的个数至 少为____...
  • 二级页表分页存储需要目录页表数形象解释

    千次阅读 多人点赞 2020-02-18 15:50:39
    某计算机采用二级页表的分页存储管理方式,按字节编址,页面大小为1024B,每个页表项占2B,若逻辑地址空间的大小为 64K 个页面,则表示整个逻辑地址空间的页目录表中包含的表项的个数至 少为__128_____ 在解决这个...
  • 3.1.9 二级页表

    2020-09-24 10:36:23
    目录思维导图单级页表存在的问题二级页表的原理 地址结构如何实现地址转换需要注意的细节 思维导图 单级页表存在的问题 二级页表的原理 地址结构 如何实现地址转换 需要注意的细节 ...
  • 既然有了一级页表,为什么还要搞个二级页表呢?理由如下: 一级页表中最多可容纳1M(1048576)个页表项,每个页表项是4字节,如果页表项全满的话,便是4MB大小。 一级页表中所有页表项必须要提前建好,原因是操作...
  • 【操作系统/计组】页面大小、页表项、一级页表、多级页表的关系与计算
  • 2020年二级页表大题

    千次阅读 2020-05-10 13:38:10
    某32位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录项和页表项均为4字节,虚拟地址结构如下: 页目录号(10位) 页号(10位) 页内偏移量(12位) 某C程序中...
  • 二级页表的地址映射过程

    万次阅读 2019-05-31 20:00:46
    对于要求连续的内存空间来存放页表的问题,即难以找到大的连续的内存空间来存放页表的问题,可利用将页表进行分页的方法,使每个页面的大小与内存物理块的大小相同,并为他们进行编号,然后离散地将各个页面分别存放...
  • MMU二级页表

    2019-03-15 10:39:00
    https://blog.csdn.net/forDreamYue/article/details/78887035 转载于:https://www.cnblogs.com/littleMa/p/10535485.html
  • (b)若采用二级页表,页面大小为16KB,每个页表项为4字节,应该对第一级页表域分配多少位?对第二级页表域分配多少位?请解释原因。 我的解答: (a) 尽可能较少在页表中产生内部碎片,使得页表在满足内存使用需求时...
  • 对于二级页表节约内存的理解

    千次阅读 2017-01-15 20:27:45
    最近在看操作系统方面的书,看到了虚拟内存中的章节,当看到为了解决巨大的虚拟地址问题的二级页表问题,对于书上所宣称的节约内存消耗产生了疑问: 书上假设的是32位虚拟地址,假设页面大小为4kb,并且假设页表项...
  • 二级页表的原理、结构 实现地址转换的流程 从进程的PCB(进程控制块)中读出页目录表的起始地址,再根据一级页号查询页目录表,通过其中的逻辑地址找到对应的内存块号 通过1中查询到的内存块号,可以在这个内存块号...
  • 级页表

    千次阅读 2021-07-26 07:59:41
    本文从单级页表存在的问题引出两级页表,以及两级页表如何实现地址的变换。1单级页表存在的问题假设某计算机系统按字节寻址,支持32位逻辑地址,采用分页存储管理,页面大小为4KB,页表项长度为4B。4KB = 212B,因此...
  • 操作系统,二级页表存储方式

    千次阅读 2015-02-07 15:08:34
    操作系统,二级页表存储方式标签(空格分隔): 操作系统题目:有一个24bit的操作系统, 4kb / page (每个页表占4kb), 4byte / page table entry(每个页表项占4b) 问:给你一个虚拟地址,要求你求出其在内存...
  • 我的理解先去内存读发现不在内存是一次,去外存取写回内存是一次。然后去内存读页表,找到其对应的内存块号是一次。一共三次。...还有说三级页表缺页比二级页表缺页多访存一次,写回之后读两次才读到地址。
  • 二级页表如何节省内存

    千次阅读 2015-04-16 12:58:24
    :如果使用简单的一级页表,如果进程使用全部4G线性地址空间,那么将需要高达2^20表项(总共地址线是32位,每页大小为4kb,则页偏移量需要低12位,高20位当作页表地址)来保存表示每个进程的页表,若每项4B,则需要4...
  • 三十、两级页表

    2021-02-13 21:10:00
    一、知识总览 二、单级页表存在的问题 单级页表存在的问题 问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页...第二次访存:访问内存中的二级页表 第三次访存:访问目标内存单元 四、总结 ...
  • ARM 全局页表与二级页表转换调试

    千次阅读 2016-08-19 20:33:03
    最近在看ARM的内存管理,刚好看到全局页表swapper_pg_dir,看了很久细想能否直接通过查看内存方式查看swapper_pg_dir的内存: 幸好之前弄过/dev/mem,知道可以把物理内存映射出来。 先贴工具代码: #include #...
  • 级页表即多级页表:因为各级页表的大小不能超过一个页面,所以需要根据页面大小和页表项的大小调整为几级页表 当然、每增加一级页表,则访存次数就会增加,n级的页表,需要n+1的访存次数 虚拟内存 ...
  • L2(二级页表,页表)index为8位,所以二级页表的大小为2^8*4B=1KB // 所以一套(一级和二级)页表的"最大"大小为 // 16KB + 16KB/4B * 1KB = 4MB + 16KB // 一级页表大小 + 所有的 二级页表大小 arm32 硬件上 有 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,124
精华内容 7,649
关键字:

二级页表