首页
学习
活动
专区
圈层
工具
发布

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

虚拟内存的实现需要硬件的支持,从Virtual Address到Physical Address的映射,通过一个叫MMU(Memory Mangement Unit)的部件来完成 2 分页机制支持 2.1...但是Linux并没有采用这种机制 正如前面所述,通过设置页目录项的Page Size标志启用扩展分页功能。在这种情况下,分页单元把32位线性地址分成两个字段: Directory:最高10位。...若这个标志为0,只有当CPL小于3(这意味着对于Linux而言,处理器处于内核态)时才能对页寻址;若该标志为1,则总能对页寻址。...如果置为1,页目录项指的是4MB的页面,请看后面的扩展分页。 第9~11位由操作系统专用,Linux也没有做特殊之用。 ?...3.4 扩展分页 从奔腾处理器开始,Intel微处理器引进了扩展分页,它允许页的大小为4MB ? 在扩展分页的情况下,分页机制把32位线性地址分成两个域:最高10位的目录域和其余22位的偏移量。

2.7K20

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

1 linux的分页机制 1.1 四级分页机制 前面我们提到Linux内核仅使用了较少的分段机制,但是却对分页机制的依赖性很强,其使用一种适合32位和64位结构的通用分页模型,该模型使用四级分页机制,即...1.2 不同架构的分页机制 对于不同的体系结构,Linux采用的四级页表目录的大小有所不同:对于i386而言,仅采用二级页表,即页上层目录和页中层目录长度为0;对于启用PAE的i386,采用了三级页表...1.3 为什么linux热衷:分页>分段 那么,为什么Linux是如此地热衷使用分页技术而对分段机制表现得那么地冷淡呢,因为Linux的进程处理很大程度上依赖于分页。...这就是虚拟内存机制的基本要素。 每一个进程有它自己的页全局目录和自己的页表集。...pte_free(pte) 释放与页描述符指针 pte 相关的页表 pte_free_kernel(pte) 等价于 pte_free( ) ,但由主内核页表使用 clear_page_range(mmu

4.3K42
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    1 分页机制 在虚拟内存中,页表是个映射表的概念, 即从进程能理解的线性地址(linear address)映射到存储器上的物理地址(phisical address)....因此linux内核堆页表进行了分级. 前面我们提到过, 对于32位系统中, 两级页表已经足够了. 但是64位需要更多数量的分页级别....为了同时支持适用于32位和64位的系统, Linux采用了通用的分页模型. 在Linux-2.6.10版本中, Linux采用了三级分页模型. 而从2.6.11开始普遍采用了四级分页模型....其他内容请参照博主的另外两篇博客, 我就不罗嗦了 深入理解计算机系统-之-内存寻址(五)–页式存储管理, 详细讲解了传统的页式存储管理机制 深入理解计算机系统-之-内存寻址(六)–linux中的分页机制..., 详细的讲解了Linux内核分页机制的实现机制 3 Linux分页机制的演变 3.1 Linux的页表实现 由于程序存在局部化特征, 这意味着在特定的时间内只有部分内存会被频繁访问,具体点,进程空间中的

    6.4K20

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

    前言 本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制; 最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。...MMU地址转化过程 MMU是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件,在此,我们把它们分别叫做分段机制和分页机制,以利于从逻辑的角度来理解硬件的实现机制。...Linux中的分页机制 Linux使用了一个适合32位和64位系统的分页机制。 ?...我们虽然讨论的是Linux的分页机制,实际上我们用了大部分篇幅来讨论Intel CPU的分页机制实现。因为Linux的分页机制是建立在硬件基础之上的,不同的平台需要有不同的实现。...Linux在软件层面构造的虚拟地址,最终还是要通过MMU转换为物理地址,也就是说,不管Linux的分页机制是怎样实现的,CPU只按照它的分页实现来解读线性地址,所以Linux传给CPU的线性地址必然是满足硬件实现的

    4.3K50

    Linux内核 MMU的工作原理

    Physical Address (物理地址) 二、MMU的工作过程 大多数使用虚拟存储器的系统都使用一种称为分页(paging)。...三、虚拟内存管理 现代操作系统普遍采用虚拟内存管理(Virtual Memory Management)机制,这需要处理器中的MMU(Memory Mangement Unit,内存管理单元)提供支持。...那为什么要设计这么复杂的内存管理机制呢? 多了一层VA 到 PA 的转换到底换来什么好处?...MMU 除了做地址转换之外,还提供内存保护机制,各种体系结构都有用户模式(User Mode)和特权模式(Privileged Mode)之分,操作系统可以在页表中设置每个内存页面的访问权限, 有些页面不允许访问...用户空间和内核空间 通常操作系统把虚拟地址划分为用户空间和内核空间,例如 X86平台的Linux 系统虚拟地址空间是0x00000000 - 0xFFFFFFFF,前3GB(0x00000000 - 0xBFFFFFFF

    3K21

    Linux内存管理之MMU的过程

    Caches:cpu和内存之间的缓存机制,用于提高访问速率,armv8架构的话上图的caches其实是L2 Cache,这里就不做进一步解释了。...「那么CPU是如何通过MMU和Cache来访问内存的呢?」 ? 可以看出虚拟地址和物理地址的转换关键是过程Table Walk Unit。...我们知道linux采用了分页机制,通常采用四级页表,页全局目录(PGD),页上级目录(PUD),页中间目录(PMD),页表(PTE)。如下: ?...#include linux/module.h> #include linux/kernel.h> #include linux/init.h> #include linux/sched.h>...这个过程也是mmu的过程。 小结 我相信你已经对cpu通过MMU访问内存的本质有所掌握(还是不理解的话不要说认识我),而且通过linux的一个实验,对其软件模拟流程也有所感性的认识。

    2.9K43

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

    一、分页 分页即将内存划分为固定长度的单元,每个单元就是一页。对于虚拟地址空间,分页机制将地址空间分割成固定大小的单元,每个单元称为一页。...所以,可以说分页机制的核心就是VPN到PFN的映射。而VPN到PFN的映射关系是通过页表记录的。MMU通过页表记录的映射关系完成VPN到PFN的转换,即找到了页表就找到了物理地址。...1.4 实际使用的分页机制 考虑到分页机制占用内存过多的问题,实际的分页机制是多级分页。...当然额外的内存访问本身是分页机制相对分段机制的缺陷,一级页表映射也存在这样的缺陷,只是多级页表映射将这个缺点再次放大。...set_pgd(pgdp, pgd) 向PGD写入指定的值 set_p4d(p4dp, p4d) 向P4D写入指定的值 分页机制与CPU体系架构强相关,因此分析Linux Kernel分页时还是需要根据体系架构分析

    5.3K11

    浅谈内存管理中的分页和分段

    MMU通过分页的机制,提供进程的虚拟地址到物理地址的映射方法。段页机制是MMU机制提供,Linux内核是使用者。...MMU的内存管理机制 在x86体系结构下CPU对内存寻址都是通过分段和分页方式进行,在保护模式下,一个段的可以理解为基地址+段的界线+类型。...进程的虚拟地址就是在段中的偏移量;线性地址就是在某个段中基地址+偏移地址得出的地址;在x86中MMU提供了分页机制,如果未开启,那么线性地址就是物理地址;反之需要经过分页机制换算后,线性地址才能转为物理地址...MMU对于内存的管理主要是分段和分页,CPU把生成的逻辑地址交给MMU内的分段单元,分段单元为每个逻辑地址生成一个线性地址,然后再将线性地址交给MMU的分页单元,最终生成物理内存的地址。...80x86的分页机制是由CR0寄存器中的PG位开启,如果PG=1则开启分页机制,把线性地址转为物理地址;如果PG=0,禁用分页机制,直接把分段单元产生的线性地址当做物理地址使用。

    1.7K11

    UClinux操作系统详解

    研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:操作系统,本专栏为讲解各操作系统的历史脉络,以及各性能对比,以及内部工作机制...UClinux(Micro-Controller Linux)是专为**无内存管理单元(MMU)**的微控制器设计的Linux变体。...核心特点对比 特性 标准Linux UClinux MMU要求 必须 不需要 内存保护 有(进程隔离) 无(扁平地址空间) 进程模型 完整分页 简单分页/无分页 可执行文件 ELF格式 Flat格式 应用场景...详细对比表 维度 标准Linux UClinux 影响与考量 硬件成本 需要MMU芯片 无MMU芯片 UClinux硬件成本降低30-50% 系统开销 较大(内存管理) 极小 UClinux节省10-...:它牺牲了标准Linux的内存保护和进程隔离,换取了在低成本、无MMU硬件上运行Linux生态的能力。

    57610

    深入理解Linux内核之mmu-gather操作

    1开场白 环境: 处理器架构:arm64 内核源码:linux-5.10.50 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 本文讲解Linux内核虚拟内存管理中的mmu_gather...相关的主要数据结构有三个: struct mmu_gather struct mmu_table_batch struct mmu_gather_batch 1)mmu_gather 来表示一次mmu...2.2 总体调用 通常mmu-gather操作由一下几部分函数组成: tlb_gather_mmu unmap_vmas free_pgtables tlb_finish_mmu 其中tlb_gather_mmu...下面我们来看下tlb_finish_mmu做的mmu-gather的收尾动作: void tlb_finish_mmu(struct mmu_gather *tlb, unsigned..., end); //刷mm的tlb,释放所有积聚物理页,释放所有积聚结构相关物理页 4.总结 Linux内核mmu-gather用于积聚解除映射的相关物理页面,并保证了刷tlb和释放物理页面的顺序。

    3.1K63

    【Binder 机制】进程通信 | 用户空间与内核空间 | MMU 与虚拟内存地址

    , 并且不允许进行直接通信 ; 内核自带通信机制 : 内核提供了 pipe 管道 , socket 等通信机制 , 可以进行跨进程通信 ; Binder 机制 : Android 中的进程间的通信 ,...是通过 " Binder " 机制 完成的 ; Binder 机制不是内核自带的机制 , 而是 Android 可以动态进行 Binder 注册 , 然后进程间通过 Binder 进行通信 ; 二、用户空间与内核空间...; 32 位的操作系统的 寻址空间是 0 ~ 2^{32} , 大小 4 GB ; 32 位操作系统 , 使用的是 二级分页 ; 64 位的操作系统的 寻址空间是 0 ~ 2...^{64} , 这个寻址空间很大 , 一般是使用前 40 位 , 大概是 18 TB ; 64 位操作系统 , 使用的是 四级分页 ; 在 32 位的系统中 , MMU 会让每个应用都有...1 个 4 GB 大小的空间 , Linux 系统内核空间占 1 GB , 用户空间 3 GB ; 0 ~ 3 GB 是用户空间地址 , 3 ~ 4 是内核空间地址 ;

    2.2K10

    uCLinux与Linux

    ---来自百度百度 uClinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。...适合不具备内存管理单元(MMU)的微处理器/微控制器,没有MMU支持是 uClinux与主流Linux的基本差异。...uCLinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。但是由于没有MMU管理,所以实际上uCLinux采用实存储器管理策略。...二、uCLinux与Linux其他区别 uCLinux与Linux相比,MMU是最基础的区别,其实还有很多区别。...3.通用架构的内核不同 在uCLinux的发布中,/linux/mmnommu目录取代了/linux/mm目录.前者是修改后的内存管理子系统 被修改,去除了MMU的硬件依赖,并在内核软件自身提供基本的内存管理函数

    3K40

    linux系统编程之基础必备(五):Linux进程地址空间和虚拟内存

    一、虚拟内存 先来看一张图(来自《Linux内核完全剖析》),如下: 分段机制:即分成代码段,数据段,堆栈段。...分页机制:当使用分页机制时,每个段被划分成页面(通常每页在4KB大小),页面会被存储于物理内存或硬盘上。如果禁用分页机制,那么线性地址空间就是物理地址空间。...负责虚拟地址到物理地址的转换工作,分段和分页操作都使用驻留在内存中的段表和页表来指定他们各自的交换信息。...如果用户程序想要访问一个虚拟地址,经MMU检查无权访问(特权级),MMU产生一个异常,CPU从用户模式切换到特权模式,跳转到内核代码中执行异常服务程序,内核把这个异常解释为段错误,把引发异常的进程终止掉...在Linux下,栈是高地址往低地址增长的。 对于函数栈来说,函数运行完毕就释放内存,举例递归来说,一直开辟向下函数栈,然后由下往上收复,所以递归太多层的话很可能造成栈溢出。

    2.9K70

    Linux 的内存分页管理

    因此,Linux采用了分页(paging)的方式来记录对应关系。所谓的分页,就是以更大尺寸的单位页(page)来管理内存。在Linux中,通常每页大小为4KB。...Linux把物理内存和进程空间都分割成页。 内存分页,可以极大地减少所要记录的内存对应关系。我们已经看到,以字节为单位的对应记录实在太多。...这种对应关系让上层的抽象内存和下层的物理内存分离,从而让Linux能灵活地进行内存管理。由于每个进程会有一套虚拟内存地址,那么每个进程都会有一个分页表。为了保证查询速度,分页表也会保存在内存中。...这意味着,如果使用连续分页表,很多条目都没有真正用到。因此,Linux中的分页表,采用了多层的数据结构。多层的分页表能够减少所需的空间。 我们来看一个简化的分页设计,用以说明Linux的多层分页表。...最新Linux系统中的分页表多达3层,管理的内存地址也比本章介绍的长很多。不过,多层分页表的基本原理都是相同。 综上,我们了解了内存以页为单位的管理方式。

    1.5K30

    Linux的内存分页管理

    因此,Linux采用了分页(paging)的方式来记录对应关系。所谓的分页,就是以更大尺寸的单位页(page)来管理内存。在Linux中,通常每页大小为4KB。...Linux把物理内存和进程空间都分割成页。 内存分页,可以极大地减少所要记录的内存对应关系。我们已经看到,以字节为单位的对应记录实在太多。...这种对应关系让上层的抽象内存和下层的物理内存分离,从而让Linux能灵活地进行内存管理。由于每个进程会有一套虚拟内存地址,那么每个进程都会有一个分页表。为了保证查询速度,分页表也会保存在内存中。...这意味着,如果使用连续分页表,很多条目都没有真正用到。因此,Linux中的分页表,采用了多层的数据结构。多层的分页表能够减少所需的空间。 我们来看一个简化的分页设计,用以说明Linux的多层分页表。...最新Linux系统中的分页表多达3层,管理的内存地址也比本章介绍的长很多。不过,多层分页表的基本原理都是相同。 综上,我们了解了内存以页为单位的管理方式。

    1.7K20

    Linux的内存分页管理

    因此,Linux采用了分页(paging)的方式来记录对应关系。所谓的分页,就是以更大尺寸的单位页(page)来管理内存。在Linux中,通常每页大小为4KB。...Linux把物理内存和进程空间都分割成页。 内存分页,可以极大地减少所要记录的内存对应关系。我们已经看到,以字节为单位的对应记录实在太多。...这种对应关系让上层的抽象内存和下层的物理内存分离,从而让Linux能灵活地进行内存管理。由于每个进程会有一套虚拟内存地址,那么每个进程都会有一个分页表。为了保证查询速度,分页表也会保存在内存中。...这意味着,如果使用连续分页表,很多条目都没有真正用到。因此,Linux中的分页表,采用了多层的数据结构。多层的分页表能够减少所需的空间。 我们来看一个简化的分页设计,用以说明Linux的多层分页表。...最新Linux系统中的分页表多达3层,管理的内存地址也比本章介绍的长很多。不过,多层分页表的基本原理都是相同。 综上,我们了解了内存以页为单位的管理方式。

    1.9K10

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

    5、linux中的段机制 从2.2 版开始,Linux 让所有的进程(或叫任务)都使用相同的逻辑地址空间,因此就没有必要使用局部描述符表LDT。...看来,Linux 巧妙地把段机制给绕过去了,它只把段分为两种:用户态(RPL=3)的段和内核态(RPL=0)的段,而完全利用了分页机制。...分页机制通过把线性地址空间中的页,重新定位到物理地址空间来进行管理,因为每个页面的整个4K 字节作为一个单位进行映射,并且每个页面都对齐4K 字节的边界,因此,线性地址的低12 位经过分页机制直接地作为物理地址的低...8、linux 中的分页机制 Linux 的分段机制使得所有的进程都使用相同的段寄存器值,这就使得内存管理变得简单,也就是说,所有的进程都使用同样的线性地址空间(0~4GB)。...Linux 采用三级分页模式而不是两级。如图2.28 所示为三级分页模式,为此,Linux定义了3 种类型的表。

    1.6K30

    Linux下内存空间分配、物理地址与虚拟地址映射

    (内存管理单元) MMU是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。...它一个与软件密切相关的硬件部件,也是理解Linux等操作系统内核机制的最大障碍之一。不搞清楚MMU原理会使编程思想停留在单片机与无OS的时代。...5.2 相关概念介绍 ——地址范围、虚拟地址映射为物理地址以及分页机制 任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。...大多数使用虚拟存储器的系统都使用一种称为分页(paging)机制。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页帧(frame).页和页帧的大小必须相同。...ARM MMU提供的分页机制有1K/4K/64K 3种模式。ARM-Linux操作系统上分页使用的是4K模式。涉及的寄存器,全部位于协处理器15。

    5.5K31
    领券