首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 是否对页目录和页表使用自映射?

Linux对页目录和页表使用自映射。

在Linux中,页目录和页表是用于管理虚拟内存和物理内存映射关系的数据结构。为了提高性能和节省内存空间,Linux使用了自映射技术来管理页目录和页表。

自映射是指将页目录和页表本身也映射到虚拟内存中的一部分空间。这样,操作系统可以通过访问虚拟地址来访问页目录和页表,从而简化了对它们的访问和管理。

自映射的优势在于:

  1. 简化了页目录和页表的访问:通过将页目录和页表映射到虚拟内存中,操作系统可以像访问普通内存一样访问它们,而不需要额外的特殊处理。
  2. 节省了内存空间:由于页目录和页表也是虚拟内存的一部分,它们可以共享同一块物理内存,从而节省了内存空间的使用。

Linux中的自映射技术在x86架构下使用了一种特殊的页表项,称为"页全局目录表项(PGD)"。PGD的作用是将页目录映射到虚拟内存中的一个固定地址,然后通过该地址访问页目录。类似地,页目录项和页表项也被映射到虚拟内存中的固定地址。

Linux中的自映射技术在虚拟内存管理、进程地址空间管理等方面发挥了重要作用。在实际应用中,可以使用腾讯云的云服务器(CVM)来搭建Linux环境,进行云计算和应用开发。腾讯云的CVM产品提供了高性能、可靠稳定的云服务器实例,适用于各种应用场景。详情请参考腾讯云的云服务器产品介绍:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux从头学16:操作系统-如何把【目录】当做普通物理进行操作的?

进行"操作" 在 x86 系统中,内存管理中的分页机制是非常重要的,在Linux操作系统相关的各种书籍中,这部分内容也是重笔浓彩。...如果你看过 Linux 内核相关书籍,一定下面这张图又熟悉、又恐惧: 这是 Linux 系统中,处理单元的多级查询方式。...文章链接在此:Linux从头学15:【目录】-理论 + 实例 + 图文的最完全、最接地气详解!,但是其中有一个环节被特意忽略过去了。...那就是:在操作系统构造目录的时候,如何它们自身进行寻址操作? 这部分内容,也是内存管理中比较复杂的地方,就好比一名医生给病人做手术,但是病人却是“医生自己”。...详细的讨论过程,请参考上一篇文章:Linux从头学15:【目录】-理论 + 实例 + 图文的最完全、最接地气详解!。

1.5K20

深入理解Linux内核映射分页机制原理

前言 操作系统用于处理内存访问异常的入口操作系统的核心任务是系统资源的管理,而重中之重的是CPU内存的管理。...大的好处: 省内存:可以解决分页机制占用内存的问题,取得多级一样节省内存的效果; TLB友好:大表意味着地址转换时需要更少的映射表项,映射表项少了意味着TLB缓存的表项少,这样就提高了...映射过程是MMU通过TTBRx虚拟地址VA[31:20]索引到PGD一级,再由PGD一级虚拟地址VA[19:12]索引到PTE映射表,在由PTE映射虚拟地址VA[11:0]索引到物理地址...而Linux有一个三层的结构,可以很容易地将其包装成适合两层的结构—只使用PGDPTE。但是,Linux还要求每个页面有一个“PTE”,而且至少要有一个“dirty”位。...当使用64KB大小时,ARMv8使用三级;当使用4KB16KB大小时,ARMv8使用四级。正如下图所示。

3.2K10

Linux从头学15:【目录】-理论 + 实例 + 图文的最完全、最接地气详解

目录 的拆分过程 目录结构 几个相关的寄存器 加载用户程序时: 目录的分配填充过程 线性地址到物理地址的查找、计算实例 在x86系统中,为了能够更加充分、灵活的使用物理内存,把物理内存按照...在 32 位系统中,它使用了多达4MB的物理内存空间(每个表项4个字节,一共有4G/4K个表项)。 为了解决这个问题,x86处理器使用了两级转换:目录。...表示这个物理中的数据是否被写过; 目录 现在,每一个物理,都被一个中的一个表项来指向了,那么这1024个的地址,应该怎么来管理呢? 答案是:目录!...这个寄存器中,保存了当前正在执行的那个任务的目录地址。 每个任务(程序)都有自己的目录目录的地址被记录在任务的TSS段中。...; 分配一个空闲物理,用作程序的目录目录的地址会记录在稍后创建的 TSS 段中; 使用虚拟内存中的线性地址,分配一个物理(4 KB),登记到目录中; 从硬盘上读取 8 个扇区的数据(每个扇区

1.3K30

宋宝华: ARM64 Linux内核的块映射

以典型的4K48位虚拟地址为例,整个内核空间的虚拟地址分布如下: ?...我们看看这种情况下的,我们既可以用最终的【20:12】对应的PTE映射项,以4K为单位,进行虚拟地址到物理地址的映射;又可以以【29:21】对应的PMD映射项,以2M为单位,进行虚拟地址到物理地址的映射...我们把它们全部选中,这样我们可以得到一个debugfs接口: /sys/kernel/debug/kernel_page_tables 来获知内核态的情况。...如果我把这个kernel启动选项去掉,我得到的内核是完全不一样,线性映射区也全部是PTE映射: ?...最后,值得一提的是,不仅线性映射区可以使用PMD映射,vmemmap映射区也是在4K页面情况下,默认用PMD映射的: ?

3.3K10

【内存管理】映射基础知识

的一些术语 现在Linux内核中支持四级映射,我们先看下内核中关于的一些术语: 全局目录项,PGD(Page Global Directory) 上级目录项,PUD(Page Upper...例子1 内核映射 前面我们介绍了很多关于内核的宏,函数,下面我们通过实际的例子学习如何使用这些宏 系统初始化时需要把kernel image区域线性映射区建立映射,这个时候依次调用start_kernel...(3) 首先检查映射类型的prot_l1字段是否为0。prot_l1表示第一级(Level 1 Page Table)的保护位。如果prot_l1为0,表示无法使用页面进行映射。...增加mm_struct中匿名的统计计数 这个新页进行反向映射,主要工作是:设置此的_mapcount = 0,说明此正在使用,但是是非共享的(>0是共享)。...ARM32Linux那些奇葩的地方 ARM32硬件中PGD目录项PGD是从20位开始的,但是为何头文件定义是从21位开始?

11810

Linux内存寻址之分段机制及分页机制【转】

第31~12位是20位物理页面地址,除第6位外第0~5位及9~11位的用途目录项一样,第6位是页面项独有的,当涉及的页面进行写操作时,D位被置1。...对于没有启用物理地址扩展的32位系统,两级已经足够了。从本质上说Linux通过使“上级目录”位中间目录”位全为0,彻底取消了上级目录中间目录字段。...不过,上级目录中间目录在指针序列中的位置被保留,以便同样的代码在32位系统64位系统下都能使用。...内核为上级目录中间目录保留了一个位置,这是通过把它们的目录项数设置为1,并把这两个目录映射全局目录的一个合适的目录项而实现的。 启用了物理地址扩展的32 位系统使用了三级。...Linux全局目录对应80×86 的目录指针(PDPT),取消了上级目录中间目录对应80×86的目录Linux对应80×86的

3.4K50

Linux分页机制之概述--Linux内存管理(六)

1.1 为什么使用多级来完成映射 但是为什么要使用多级来完成映射呢?...用来将虚拟地址映射到物理地址的数据结构称为, 实现两个地址空间的关联最容易的方式是使用数组, 虚拟地址空间中的每一, 都分配一个数组项....第一步, 基于两级转换(目录中间), 最终查找到地址所在的帧 第二步, 基于偏移, 在所在的帧中查找到对应偏移的物理地址 使用这种二级可以有效的减少每个进程所需的RAM的数量....这样线性地址空间就剩下64-12=52位分配给中间Table目录Directory....目前的内核的内存管理总是假定使用四级, 而不管底层处理器是否如此.

5.5K20

Linux-3.14.12内存管理笔记【建立内核(1)】

前面已经分析过了Intel的内存映射linux的基本使用情况,已知head_32.S仅是建立临时,内核还是要建立内核,做到全面映射的。...建立内核前奏,了解两个很关键的变量: max_pfn:最大物理内存页面帧号; max_low_pfn:低端内存区(直接映射空间区的内存)的最大可用帧号; max_pfn 的值来自setup_arch...Linux是一个支持多硬件平台的操作系统,各种硬件芯片的分页并非固定的2级(全局目录),仅仅Intel处理器而言,就存在3级的情况(全局目录中间目录),而到了64位系统的时候就成了4...所以Linux为了保持良好的兼容性移植性,系统设计成了以下的4级分页模型,根据平台环境配置的情况,通过将上级目录中间目录的索引位设置为0,从而隐藏了三级目录中间目录的存在。...由此管中窥豹,看到了Linux内存分页映射模型的存在相关设计,暂且也就先了解这么多。 分析宏是一件很乏味的事情,不过以小见大却是一件很有意思的事情。

1.8K41

80386的分段机制、分页机制物理地址的形成

注:本分类下文章大多整理《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程网络编程中的一些概念性问题...内核不区分数据段堆栈段,这也体现了Linux 内核尽量减少段的使用。...第4 位是PCD(Page Cache Disable)位,表示是否启用高速缓存,该位为1 表示启用高速缓存。 • 第5 位是访问位,当目录项进行访问时,A 位=1。...80386 的每个目录项指向一个,存储在一个4K 字节的页面中,最多含有1024 个页面项,每项4 个字节,包含页面的起始地址有关该页面的信息。...第31~12 位是20 位物理页面地址,除第6 位外第0~5 位及9~11 位的用途目录项一样,第6 位是页面项独有的,当涉及的页面进行写操作时,D 位被置1。

99330

80386的分段机制、分页机制物理地址的形成

注:本分类下文章大多整理《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程网络编程中的一些概念性问题...内核不区分数据段堆栈段,这也体现了Linux 内核尽量减少段的使用。...第4 位是PCD(Page Cache Disable)位,表示是否启用高速缓存,该位为1 表示启用高速缓存。 • 第5 位是访问位,当目录项进行访问时,A 位=1。...80386 的每个目录项指向一个,存储在一个4K 字节的页面中,最多含有1024 个页面项,每项4 个字节,包含页面的起始地址有关该页面的信息。...第31~12 位是20 位物理页面地址,除第6 位外第0~5 位及9~11 位的用途目录项一样,第6 位是页面项独有的,当涉及的页面进行写操作时,D 位被置1。

1.3K50

Linux虚拟内存管理

Linux操作系统采用了一种称为“分页”的技术来实现虚拟内存。每个进程都有其自己的,该页将虚拟地址映射到物理地址。的大小通常为4KB,但这可能会根据具体的系统配置有所不同。...二、Linux虚拟内存管理的实现在Linux内核中,虚拟内存的管理主要涉及以下几个部分:管理、页面分配与回收、页面置换算法以及内存映射。1....管理每个进程都有其自己的,这些存储在物理内存中,并由内核来管理。当进程需要访问某个虚拟地址时,内核会使用来将该虚拟地址映射到物理地址。这个过程称为“地址转换”。...在Linux内核中,的实现是非常复杂的。为了方便管理,内核使用了一种称为“全局目录”(Page Global Directory, PGD)的数据结构来存储。...内存映射Linux中,进程可以通过系统调用(如mmap)来创建新的内存映射。这些映射可以是文件的映射,也可以是匿名映射(即没有对应文件的映射)。映射的创建和管理涉及到虚拟地址空间的分配的更新。

41100

Linux虚拟存储管理分析

Linux诞生以来,发展迅猛,已经受到了全球开源社区许多商业科技巨头的大力支持以及政府、教育机构、科研单位的重视。...两级的第一级称为目录,存储在一个4K字节的中,目录共有1K个表项,每个表项为4个字节,线性地址最高的10位(22-31位)用来产生第一级索引,由该索引得到的表项中的内容定位了二级中的一个的地址...在创建过程中,每个进程(根据需要)创建并初始化新页目录,设置目录基地址寄存器,在GDT中添加进程对应的TSS项LDT项,创建并初始化该进程的LDT。...创建一个进程时页面分配的情况大致是这样的:进程控制块(1),内存态堆栈(1),目录(1),(需要的n)。在进程以后执行的执行中,再根据需要逐渐分配更多的内存页面。...进程用了一个指向vm_area_struct链表的指针,来描述进程虚拟内存空间的一个区域,包括该区域的起始终止地址的描述。

1.5K20

深入理解虚拟 物理地址转换,--基于ARMV8

转换寄存器描述符 1.1,/目录结构 基于前言中的内核配置,内核采用39位虚拟地址,因此可寻址范围为2^39 = 512G,采用(linux 默认为五级,另外还有PUD,P4D,由于本文只配置三级.../都有29=512个目录项/表项,使用4k页面大小,212 = 4096,因此虚拟地址中offset字段占12位,每一个pte表项可以映射4k个地址空间,共有512x512x512个pte表项...,这些宏控都会有清晰得理解!!...2.3 用户/内核PGD基地址 基于之前的分析可知,用户虚拟地址内核虚拟地址转换为物理地址的时候使用不同的基地址寄存器(TTBRx),因此他们的转换是基于不同的全局目录PGD。...: MMU在转换虚拟地址的时候遵循以下步骤(基于以上配置): 1,如果虚拟地址bit[63:40]都为1,则使用TTBR1作为第一级目录基地址,当bit[63:40]都为0时,使用TTBR0作为第一级目录基地址

24100

框分配器【转】

linux采用四级分页模型,这四种是:全局目录(PGD)、上级目录(PUD)、中间目录(PMD)、(PTE)。这里的所有全局目录上级目录中间目录,它们的大小都是一个。...linux下各个硬件上并不一定都是使用四级目录的,当使用于没有启动物理地址扩展(PAE)的32位系统上时,只使用二级linux会把上级目录中间目录置空。...而在启用了物理地址扩展的32位系统上时,linux使用的是三级上级目录被置空。而在64位系统上,linux根据硬件的情况会选择三级或者四级。...实际上,只有进程使用到的情况下系统才会分配给进程一条路径,比如我们要求访问一个线性地址,但是这个地址可能对应的上级目录中间目录都不存在的,这时系统会产生一个缺页异常,在缺页异常处理中再给进程的这个线性地址分配页上级目录...、中间目录所需的物理框。

67020

一文聊透 Linux 缺页异常的处理 —— 图解 Page Faults

mmap 映射的虚拟内存相关的各级目录表项还都是空的。...虚拟内存之前被映射过,其在进程的各级目录以及中均有对应的目录表项,但是其对应的物理内存被内核 swap out 到磁盘上了。...在内核中使用 pgd_offset 函数来定位虚拟内存地址在全局目录 PGD 中对应的目录项 pgd_t,这个过程访问数组一模一样,事实上整个 PGD 就是一个 pgd_t[PTRS_PER_PGD...笔者在之前的文章《一步一图带你构建 Linux 体系》 中介绍了表项 pte 的比特位布局如下图所示: image.png 其中 pte 的第 0 个比特位表示该 pte 映射的物理内存是否在内存中...image.png 比如,我们使用 mmap 进行私有文件映射之后,此时只是分配了虚拟内存,进程或者相关 pte 还是空的,这时这块映射的虚拟内存进行访问的时候就会触发缺页中断,最后在之前介绍的

2.5K22

Linux分页机制之分页机制的实现详解--Linux内存管理(八)

1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位64位结构的通用分页模型,该模型使用四级分页机制,即...对于没有启用物理地址扩展的32位系统,两级已经足够了。从本质上说Linux通过使“上级目录”位中间目录”位全为0,彻底取消了上级目录中间目录字段。...内核为上级目录中间目录保留了一个位置,这是通过把它们的目录项数设置为1,并把这两个目录映射全局目录的一个合适的目录项而实现的。 启用了物理地址扩展的32 位系统使用了三级。...2 linux处理数据结构 2.1 类型定义pgd_t、pmd_t、pud_tpte_t Linux分别采用pgd_t、pmd_t、pud_tpte_t四种数据结构来表示全局目录项、上级目录项...如果被保存在高端存储器中,那么内核建立一个临时内核映射,并用 pte_unmap 它进行释放。

3.4K41

操作系统内存换入-请求调---14

–13 此时并没有把子进程申请的对应的物理页面用户进程的线性地址空间进行映射。...某一个物理页面进程的线性地址空间映射是指,将这个页面的物理地址存入该进程线性地址空间所对应的的某个表项当中,这样进程才有权限该页面进行访问。...之所以说,并没有把对应的页面用户进程的线性地址空间进行映射,是因为并没有把对应的物理地址放入这个的某个表项当中。...总之,用户进程只能访问其线性地址空间所对应的(前10位找到目录项,目录项中的内容就是该线性地址所对应的的物理地址),中的表项所指向的物理内存页面。...而不能访问内核管理进程所使用本身,也就是用户进程读写不了表项,但可以读写表项中指向的物理页面。

62820

万字整理,肝翻Linux内存管理所有知识点

(当内容有变化的时候,需要清除TLB,以防止地址映射出错。)...我们知道linux采用了分页机制,通常采用四级全局目录(PGD),上级目录(PUD),中间目录(PMD),(PTE)。...第三次读取内存得到pmd_t结构的目录项,从中取出的物理基地址。 从线性地址的第四部分中取出表项的索引,与基址相加得到表项的物理地址。...Linux框分配器之内存碎片化整理 什么是内存碎片化 Linux物理内存碎片化包括两种:内部碎片化外部碎片化。 内部碎片化: 指分配给用户的内存空间中未被使用的部分。...换入的过程如下: 查找swap cache中是否存在所查找的页面,如果存在,则根据swap cache引用的内存,重新映射并更新页;如果不存在,则分配新的内存,并添加到swap cache的引用中

1.3K13

Linux内核管理-那些鲜为人知的秘密

1)地址转换 将虚拟地址转换为物理地址 2)权限管理 管理cpu物理的访问,如读写执行权限 3)隔离地址空间 隔离各个进程的地址空间,使其互不影响,提供系统的安全性 打开mmu后,没有映射的虚拟内存访问或者有映射但是没有访问权限都会发生处理器异常...,而对使用虚拟地址的用户进程来说是透明的;通过,很容易实现内存共享,使得一份共享库很多进程都可以映射到自己地址空间使用;通过,可以小内存加载大应用程序运行,在运行时按需加载映射... 3.的存放在哪...Linux内核为何使用多级?...填写/切换时机 1)内核填充 内核初始化过程: 物理地址 -> 恒等映射(建立恒等映射粗粒度内核) ->打开mmu -> paging_init(建立细粒度的内核内存线性映射...12.遍历过程 下面以arm64处理器架构多级遍历作为结束(使用4级大小为4K): Linux内核中 可以将扩展到5级,分别是全局目录(Page Global Directory,

1.8K21

Linux分页机制之分页机制的演变--Linux内存管理(七)

分页机制解决了上面分段方法所存在的一个内存使用效率问题;其核心思想是系统为程序执行文件中的第x分配了内存中的第y,同时y会添加到进程虚拟空间地址的映射表中(),这样程序就可以通过映射访问到内存...因为PDPT存放在RAM的前4GB中, 并在32字节(2^5)的倍数上其, 因此27位足以表示这种的基地址 当把线性地址映射到4KB的时(目录项中的PS标准清0), 32位线性地址将按照如下方式解释...如果我们决定为两个字段个预留18位,那么每个进程的目录都含有2^18个项,即超过256000个项。 由于这个原因,所有64位处理器的硬件分页系统都使用了额外的分页级别。...第9~11位由操作系统专用,Linux也没有做特殊之用。 ? 80386的每个目录项指向一个最多含有1024个页面项,每项4个字节,包含页面的起始地址有关该页面的信息。...第31~12位是20位物理页面地址,除第6位外第0~5位及9~11位的用途目录项一样,第6位是页面项独有的,当涉及的页面进行写操作时,D位被置1. 4GB的内存只有一个目录,它最多有1024个目录

1.9K20
领券