1、PGD: Page Global Directory
       Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的。当创建一个新的进程时,都要为新进程创建一个新的页面目录PGD,并从内核的页面目录swapper_pg_dir中复制内核区间页面目录项至新建进程页面目录PGD的相应位置,具体过程如下:do_fork() --> copy_mm() --> mm_init() --> pgd_alloc() --> set_pgd_fast() --> get_pgd_slow() --> memcpy(&PGD + USER_PTRS_PER_PGD, swapper_pg_dir +USER_PTRS_PER_PGD, (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t))
         这样一来,每个进程的页面目录就分成了两部分,第一部分为“用户空间”,用来映射其整个进程空间(0x0000 0000-0xBFFF FFFF)即3G字节的虚拟地址;第二部分为“系统空间”,用来映射(0xC000 0000-0xFFFF FFFF)1G字节的虚拟地址。可以看出Linux系统中每个进程的页面目录的第二部分是相同的,所以从进程的角度来看,每个进程有4G字节的虚拟空间,较低的3G字节是自己的用户空间,最高的1G字节则为与所有进程以及内核共享的系统空间。每个进程有它自己的PGD( Page Global Directory),它是一个物理页,并包含一个pgd_t数组。
关键字:
             PTE:  页表项(page table entry)
             PGD(Page Global Directory)
             PUD(Page Upper Directory)
             PMD(Page Middle Directory)
             PT(Page Table)

PGD中包含若干PUD的地址,PUD中包含若干PMD的地址,PMD中又包含若干PT的地址。每一个页表项指向一个页框,页框就是真正的物理内存页。

2、TLB

Translation lookaside buffer,即旁路转换缓冲,或称为页表缓冲;里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。又称为快表技术。如果匹配到逻辑地址就可以迅速找到页框号(页框号可以理解为页表项),通过页框号与逻辑地址的后12位的偏移自合得到最终的物理地址。如果没在TLB中匹配到逻辑地址,就出现TLB不命中(TLB Misss),需要通过常规的页表查询。如果TLB足够大,那么这个转换就会变得迅速。但是事实是TLB的容量非常小,一般都是几十项到几百项不等。
       在有些的处理器架构中,为了提供效率,还将TLB进行分组,以X86架构为例,一般都分为以下四个组:
       第一组:缓存一般页表(4KB页面)的指令页表缓存(Instruction-TLB)
       第二组:缓存一般页表(4KB页面)的数据页表缓存(Data-TLB)
       第三组:缓存大尺寸页表(2MB/4M页B面)的指令页表缓存(Instruction-TLB)    
       第四组:缓存大尺寸页表(2MB/4MB页面)的数据页表缓存(Data-TLB)
       举一个例子:假设一个应用程序需要使用8KB的物理内存,如果使用常规页(4KB)并且使TLB总能命中,那么至少需要在TLB表中存放两个表项,在这种情况下,只要寻址的内容都在该内容页内,那么只要两个表项就足够了。如果该应用程序需要使用512个内容页也就是2MB大小,那么需要512个页表表项才能保证不会出现TLB不命中的情况。但是TLB容量有限,随着程序的变大或者使用内存的增加,那么势必会增加TLB的使用项,最后导致TLB出现不命中的情况。此时,大页的优势就显示出来了,如果使用2MB作为分页的基本单位,那么只需要一个页表项就可以保证不出现TLB不命中的情况;对于消耗内存以GB(2^30)为单位的大型程序,可以采用1GB为单位作为分页的基本单位,减少TLB不命中的情况。

Linux:页表中PGD、PUD、PMD、TLB等概念介绍相关推荐

  1. linux页表机制pmd,Linux:页表中PGD、PUD、PMD等概念介绍

    1.PGD: Page Global Directory Linux系统中每个进程对应用户空间的pgd是不一样的,但是linux内核 的pgd是一样的.当创建一个新的进程时,都要为新进程创建一个新的页 ...

  2. linux终端中最漂亮的几款字体介绍及安装

    本文教大家怎样在linux终端下配置漂亮的字体. ubuntu linux用了很久,可是对终端下的字体一直不是很满意,今天终于找到了一些比较好看的终端字体,尤其是droid sans mono字体,简 ...

  3. linux中比较大小的符号,linux shell中的比较符号与特殊符号介绍

    shell字符串比较.判断是否为数字 二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别. 整数比较 -eq 等于,如:if [ "$a" -eq "$b&qu ...

  4. ARMv8 MMU及Linux页表映射:TLB

    <ARM SMMU原理与IOMMU技术("VT-d" DMA.I/O虚拟化.内存虚拟化)> <Linux内存管理:分页机制> <Linux内存管理:内 ...

  5. ARMv8 MMU及Linux页表映射 LoyenWang

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. 内存管理源码分析1-ARMV8-AARCH64 MMU 及 linux页表映射过程

    MMU的作用,主要是完成地址的翻译,无论是main-memory地址(DDR地址),还是IO地址(设备device地址),在开启了MMU的系统中,CPU发起的指令读取.数据读写都是虚拟地址,在ARM ...

  7. linux kernel中的栈的介绍

    目录 1.linux kernel中的中断irq的栈stack (1).arm32体系的irq的栈 (2).arm64体系的irq的栈 2.linux kernel中的栈stack (1).概念介绍: ...

  8. arm linux 页表寻址,操作系统中的页表寻址

    页式内存管理,内存分成固定长度的一个个页片.操作系统为每一个进程维护了一个从虚拟地址到物理地址的映射关系的数据结构,叫页表,页表的内容就是该进程的虚拟地址到物理地址的一个映射.页表中的每一项都记录了这 ...

  9. 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )

    文章目录 一.进程特殊形式 ( 内核线程 | 用户线程 ) 二.C 标准库与 Linux 内核中进程相关概念 三.Linux 查看进程命令及输出字段解析 一.进程特殊形式 ( 内核线程 | 用户线程 ...

最新文章

  1. 转:AbstractQueuedSynchronizer的介绍和原理分析
  2. delphi获取当前计算机所有盘符
  3. Nginx域名访问与访问控制
  4. ASP.NET+AJAX简单的文体编辑器
  5. node.js 中间件_Node.js中的Passport中间件(模块)
  6. python数据分析是什么意思_选择python进行数据分析的理由和优势
  7. 拿到一份陌生数据我们应该怎么办
  8. Ubuntu 配置VNC时,出现“perl: warning: Falling back to the standard locale (C).”等提示错误解决方法...
  9. IDEA / webstorm 破解
  10. 寻找(下载)微信音频文件
  11. FLV格式文件如何转换成MP4格式
  12. 关于用python实现Windows笔记本自动切换强信号WiFi功能
  13. 汇编指令lmm_动画视频角色的LMM神经网络
  14. 【uniapp小程序】路由跳转navigator传参封装
  15. 渗透之——使用Metasploit实现对缓冲区栈的溢出攻击
  16. JAVA_JSP网吧自动计费收费管理系统
  17. webview和android做壳,Android Studio 制作一个 WebView 外壳
  18. linux学习好文章,好网站
  19. java个性签名_程序员用搞笑个性签名
  20. Windows10任务栏的声音、网络图标左键无反应,右键可正常打开

热门文章

  1. 自己的笔记本上设置RabbitMQ集群
  2. 模式识别和机器学习有必要学么_UC Berkeley2019深度学习与应用自然语言处理实战课程分享...
  3. javaWeb 使用线程池+队列解决订单并发问题
  4. String 对象 与 StringBuilder 对象的比较.....
  5. 微信群运营方案及技巧策略(精华版)
  6. oracle中group by用法报错ORA-00979: not a GROUP BY expression
  7. matlab将坐标轴细分然后网格化,基于Matlab建立抚顺市高分辨率网格化大气污染源清单...
  8. 一分钟让你实现Android微信分享功能
  9. u盘复制一直正在计算机,windows7旗舰版系统下u盘读取复制速度慢如何解决
  10. 互联网+装修的行业前景怎么样呢?