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

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

如何完成VPN到PFN的转换的,要知道这个问题就得清楚的基本内容,即表记录了什么信息。...当然额外的内存访问本身是分页机制相对分段机制的缺陷,一级映射也存在这样的缺陷,只是多级映射将这个缺点再次放大。...TLB要实现这个替换,其需要实现的基本工作原理是: 从虚拟地址中提取页号(VPN),检查TLB是否有VPN的转换映射。...“young”位的模拟方法与“dirty”位类似,也是利用了两套PTE模拟,一套用于Linux,一套用于ARM硬件。 ARMv7如何下发到硬件?...当使用64KB大小时,ARMv8使用三级;当使用4KB和16KB大小时,ARMv8使用四级。正如下图所示。

3.2K10

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

进行"自操作" 在 x86 系统中,内存管理中的分页机制是非常重要的,在Linux操作系统相关的各种书籍中,这部分内容也是重笔浓彩。...如果你看过 Linux 内核相关书籍,一定对下面这张图又熟悉、又恐惧: 这是 Linux 系统中,处理单元的多级查询方式。...这篇文章,我们继续通过图片+实例的方式,一起来研究一下内核代码一般都是如何来进行这些“自操作”的。 把这里面的操作机制研究透彻之后,再去看 Linux 内核代码时,就不会晕头转向了。...例如本文开头的第一张图中,Linux 使用了4级表格来查找,并且中间的两个表格还可以省略不用。 如何跨过中间的这两个表格,Linux 内核代码中的代码更复杂一些,但是策略都是一样的。...对进行寻址 既然已经弄明白了操作系统是如何操作目录的,那么对的操作就不是什么大问题了。

1.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

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

1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位和64位结构的通用分页模型,模型使用四级分页机制,即...1.2 不同架构的分页机制 对于不同的体系结构,Linux采用的四级目录的大小有所不同:对于i386而言,仅采用二级,即上层目录和中层目录长度为0;对于启用PAE的i386,采用了三级...1.3 为什么linux热衷:分页>分段 那么,为什么Linux是如此地热衷使用分页技术而对分段机制表现得那么地冷淡呢,因为Linux的进程处理很大程度上依赖于分页。...在两级或三级分页系统中,宏产生 pgd ,即一个全局目录项的地址 pud_page(pud) 通过上级目录项 pud 产生相应的中间目录的线性地址。...在两级或三级分页系统中,宏产生 pgd ,即一个全局目录项的地址 pmd_offset 根据通过pgd_offset获取的pgd 项和虚拟地址,获取相关的pmd项(即pte的起始地址) pte_offset

3.4K41

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

为了同时支持适用于32位和64位的系统, Linux采用了通用的分页模型. 在Linux-2.6.10版本中, Linux采用了三级分页模型. 而从2.6.11开始普遍采用了四级分页模型....其他内容请参照博主的另外两篇博客, 我就不罗嗦了 深入理解计算机系统-之-内存寻址(五)–式存储管理, 详细讲解了传统的式存储管理机制 深入理解计算机系统-之-内存寻址(六)–linux中的分页机制..., 详细的讲解了Linux内核分页机制的实现机制 3 Linux分页机制的演变 3.1 Linux实现 由于程序存在局部化特征, 这意味着在特定的时间内只有部分内存会被频繁访问,具体点,进程空间中的...3.3 Linux三级 当X86引入物理地址扩展(Pisycal Addrress Extension, PAE)后,可以支持大于4G的物理内存(36位),但虚拟地址依然是32位,原先的表项不适用...这样,就把Linux内核的3级列表扩充为4级列表。这系列PATCH工作得不错,不久被纳入Andrew Morton的-mm树接受测试。 不出意外的话,它将在v2.6.11版本中释出。

5.5K20

Linux内存管理--基本概念

Linux物理内存三级架构 对于内存管理,Linux采用了与具体体系架构不相关的设计模型,实现了良好的可伸缩性。它主要由内存节点node、内存区域zone和物理框page三级架构组成。...又如,由于Linux内核采用 • 物理框page 2....Linux虚拟内存三级 Linux虚拟内存三级管理由以下三级组成: • PGD: Page Global Directory (目录) • PMD: Page Middle...PTE的保护和状态位如下图所示: 2.3 如何通过3级访问物理内存 为了通过PGD、PMD和PTE访问物理内存,其相关宏在asm/pgtable.h中定义。...mm_struct获取pgd项的宏定义如下: • pmd_offset 根据通过pgd_offset获取的pgd 项和虚拟地址,获取相关的pmd项(即pte的起始地址

1.7K90

不同架构的分页机制

对于不同的体系结构,Linux采用的四级目录的大小有所不同:对于i386而言,仅采用二级,即上层目录和中层目录长度为0;对于启用PAE的i386,采用了三级,即上层目录长度为0;对于...64位体系结构,可以采用三级或四级,具体选择由硬件决定。...对于没有启用物理地址扩展的32位系统,两级已经足够了。从本质上说Linux通过使“上级目录”位和“中间目录”位全为0,彻底取消了上级目录和中间目录字段。...内核为上级目录和中间目录保留了一个位置,这是通过把它们的目录项数设置为1,并把这两个目录项映射到全局目录的一个合适的目录项而实现的。 启用了物理地址扩展的32 位系统使用了三级。...Linux全局目录对应80x86 的目录指针(PDPT),取消了上级目录,中间目录对应80x86的目录,Linux对应80x86的

29530

深入分析Linux内核源代码阅读笔记 第一章、第二章

Linux 中的段: Linux 内核的设计并没有全部采用 Intel 所提供的段方案,仅仅有限度地使用了一下分段机制。...这样 Linux 巧妙地绕过了逻辑地址到线性地址的映射 分页机制 分页机制在段机制之后进行,以完成线性—物理地址的转换过程。 分页机制由 CR0 中的 PG 位启用。...有些书上也把页面高速缓存叫做 “联想存储器” 或 “转换旁路缓冲器(TLB)” Linux 中的分页机制 Linux 主要采用分页机制来实现虚拟存储器管理,原因如下: Linux 设计目标之一就是能够把自己移植到绝大多数流行的处理器平台...Linux 的分段机制使得所有的进程都使用相同的段寄存器值 为了保持可移植性,Linux 采用三级分页模式而不是两级,为此,Linux定义了 3 种类型的: 总目录 PGD(Page Global...Directory) 中间目录 PMD(Page Middle Derectory) PT(Page Table) 尽管 Linux 采用的是三级分页模式,但我们的讨论还是以 Intel 奔腾处理器的两级分页模式为主

73850

操作系统中的式内存管理

只是简单说说可能体现不出来分页管理的优势,让我们思考下,除了分页管理之外,简单的内存管理该如何做呢?...每当为一个虚拟页面寻找到一个物理页面后,就在表里面增加一个记录来保留虚拟页面到物理页面的映射关系,随着虚拟页面进出物理内存,的内容不断发生变化。...对于32位寻址的虚拟地址,如果页面大小为4KB,则虚拟页面数最多可以达到2的20次方,即1048576个虚拟页面,那么的记录条数就为1048576条。这样就占用较多空间,如何减少空间呢?...这时可以使用多级根据存放的内容可分为:顶级、一级、二级三级等。...例如,Linux使用的是三级,按照常理来说,这将使得系统的执行效率大大降低,但许多人并没有感觉到Linux特别慢,这就是因为Linux的TLB命中率高,据称其命中率达98%。

1.6K20

Linux 匿名的反向映射

我们知道LINUX的内存管理系统中有”反向映射“这一说,目的是为了快速去查找出一个特定的物理在哪些进程中被映射到了什么地址,这样如果我们想把这一换出(SWAP),或是迁移(Migrate)的时候,就能相应该更改所有相关进程的来达到这个目的...1、为什么要使用反向映射   物理内存的分页机制,一个PTE(Page Table Entry)对应一个物理,但一个物理可以由多个PTE与之相对应,当该页要被回收时,Linux2.4的做法是遍历每个进程的所有...2、Linux2.6中是如何实现反向映射 2.1 与RM(Reverse Mapping)相关的结构 page, address_space, vm_area_struct, mm_struct, anon_vma...Linux采用三级: PGD:顶级,由pgd_t项组成的数组,其中第一项指向一个二级。...PMD:二级,由pmd_t项组成的数组,其中第一项指向一个三级(两级处理器没有物理的PMD)。 PTE:是一个对齐的数组,第一项称为一个表项,由pte_t类型表示。

3.7K31

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

5、linux中的段机制 从2.2 版开始,Linux 让所有的进程(或叫任务)都使用相同的逻辑地址空间,因此就没有必要使用局部描述符LDT。...看来,Linux 巧妙地把段机制给绕过去了,它只把段分为两种:用户态(RPL=3)的段和内核态(RPL=0)的段,而完全利用了分页机制。...当访问一个操作单元时,如何由分段结构确定的32 位线性地址通过分页操作转化成32位物理地址呢?...8、linux 中的分页机制 Linux 的分段机制使得所有的进程都使用相同的段寄存器值,这就使得内存管理变得简单,也就是说,所有的进程都使用同样的线性地址空间(0~4GB)。...Linux 采用三级分页模式而不是两级。如图2.28 所示为三级分页模式,为此,Linux定义了3 种类型的

98330

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

5、linux中的段机制 从2.2 版开始,Linux 让所有的进程(或叫任务)都使用相同的逻辑地址空间,因此就没有必要使用局部描述符LDT。...看来,Linux 巧妙地把段机制给绕过去了,它只把段分为两种:用户态(RPL=3)的段和内核态(RPL=0)的段,而完全利用了分页机制。...当访问一个操作单元时,如何由分段结构确定的32 位线性地址通过分页操作转化成32位物理地址呢?...8、linux 中的分页机制 Linux 的分段机制使得所有的进程都使用相同的段寄存器值,这就使得内存管理变得简单,也就是说,所有的进程都使用同样的线性地址空间(0~4GB)。...Linux 采用三级分页模式而不是两级。如图2.28 所示为三级分页模式,为此,Linux定义了3 种类型的

1.3K50

《笨开发学习操作系统》3内存

分页机制也类似,有着一张:通过页号、内偏移量,来对应最终的物理地址。...多级 多级的设计有点像一棵查找的分段树:首先通过 0 级找到你在 1 级的位置,然后在 1 级中找到你在 2 级中的位置… 以此类推,最终在 3 级中找到最终的实际物理地址。...如何更快的找到物理地址 你想,原来如果只有一个,那么查询的速度肯定很快,找到 key 就能找到对应的 value,但是有了多级之后,那么查询的速度自然就受到影响了。...Linux 中叫 KSM(Kernel Same-page Merging) 内存压缩:当内存不足时,还会触发压缩的机制Linux 中的 zswap,将数据压缩后节省资源,避免频繁的磁盘操作 透明大...故使用大的情况下能大幅度减少的数量,从而增加 TLB 的命中情况,Linux 提供了透明大的支持,能够将连续的内存合并成大,提高命中的同时还可以减少的级数。

38110

CPU高速缓存与反置&调度的科普

但是且慢,其实我们早就已经在跟类似反置机制打交道了,那就是 CPU高速缓存 。你可以质疑反置的实现尚有缺陷,但是质疑反置的本质,便无遗是在质疑CPU高速缓存机制本身。...这便就是反置要解决的问题。完全一致啊! 下面的问题是,如何把CPU高速缓存的那套实现机制,借鉴给反置。...另外还有一个Tip就是, 反置不能使用高速缓存的组相联机制,但是却非常类似全相联 ,Why?...以Linux内核的伙伴系统为例,它就是为此而准备的,而局部性问题则由伙伴系统上层的slab/slub机制来保证。...再说说反置的实现,几乎可以肯定不能用CPU高速缓存的实现方案,因为地址空间差异太大,过于昂贵。如果纯软件化,那效率又过于低下,如何来权衡? 这里不谈TLB,那是另一个话题。

87220

学习ARM64转换流程

而在Linux中存储虚拟地址到物理地址转化的关系的称为。 目前最新的linux内核已经支持了5级。下图是一个4级的转化关系图。 ?...Table Entry) 如果是5级的话,会在PGD和PUD之间增加一个level叫P4D。...LINUX目前是支持5级,当然也可以通过config(CONFIG_PAGE_LEVELS)去配置的,目前手上的模拟板使用的是三级,如果使用三级的话,PUD等于PMD。...前期条件是目前配置的是3级。 目前此地址是线性地址,转化关系比较简单。...PMD_SHIFT ==> 中级目录索引的偏移 PAGE_SHIFT ==> 内的偏移 当前模拟板是只有三级,则就没有P4D和PUD,这样的话PGD=PMD了。

2.2K21

五万字 | 深入理解Linux内存管理

选择一个良好的战场才有利于军队打胜仗,实现一个完善的内存管理机制才能让进程多快好省地运行。如何更好地实现内存管理一直是操作系统发展的一大主题。...在x86 32上,分段机制和分页机制是并存的,系统可以选择只使用分段机制或者两种机制都使用。Linux的选择是使用分页机制,并在逻辑上屏蔽分段机制,因为分段机制是不能禁用的。...此处讲的内存模型是Linux对物理内存地址空间连续性的抽象,用来表示物理内存的地址空间是否有空洞以及如何处理空洞,因此这个概念也被叫做内存连续性模型。...物理内存分配最底层的是帧分配。帧分配的分配单元是区域,分配粒度是页面。如何进行帧分配呢?Linux采取的算法叫做伙伴系统(buddy system)。...目前绝大部分的操作系统采用的内存管理模式都是以分页内存为基础的虚拟内存机制。虚拟内存机制的中心是MMU和,MMU是需要硬件提供的,是需要软件来操作的。

2.5K34

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

内核为上级目录和中间目录保留了一个位置,这是通过把它们的目录项数设置为1,并把这两个目录项映射到全局目录的一个合适的目录项而实现的。 启用了物理地址扩展的32 位系统使用了三级。...Linux全局目录对应80×86 的目录指针(PDPT),取消了上级目录,中间目录对应80×86的目录,Linux对应80×86的。...最后,64位系统使用三级还是四级分页取决于硬件对线性地址的位的划分。 总结 这里我们不讨论代码实现,只关注原理。从上面的讨论可以看到分页机制主要依赖硬件的实现。...Linux采用的四级只是为了最大化兼容不同的硬件实现,单就IA32架构的CPU来说,就有多种分页实现,常规分页机制,PAE机制等。...例如说:Linux在32位CPU上,它的四级结构就会兼容到硬件的两级结构。可见,Linux在软件层面上做了一层抽象,用四级的方式兼容32位和64位CPU内存寻址的不同硬件实现。

3.4K50
领券