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

Linux内核 MMU的工作原理

接下来配全图片,以一个例子说明页页框之间在MMU 的调度下是如何进行映射的: image.png 在这个例子中,我们有一个可以生成16位地址的机器,它的虚拟地址范围从0x0000 ~ 0xFFFF(...这个例子中,页的大小为64K ,页框大小页相同(这点必须保证的,内存和外围存储器之间传输总是以页为单位),对 应64K 的虚拟地址和32K 的物理存储器,它们分别包含了16 个页 和 8 个页框。...如果是32位处理器, 则内存地址总线是32位的,CPU 执行单元相连,而经过MMU转换后的外地址总线则不一定是32位。...也就是说,虚拟地址空间物理地址空间是独立的,32位处理器的虚拟地址空间是4GB,而物理地址空间既可以大于也可以小于4G。...用户空间和内核空间 通常操作系统把虚拟地址划分为用户空间和内核空间,例如 X86平台的Linux 系统虚拟地址空间是0x00000000 - 0xFFFFFFFF,前3GB(0x00000000 - 0xBFFFFFFF

1.8K20

Linux内存管理之MMU的过程

「那么CPU是如何通过MMU和Cache来访问内存的呢?」 ? 可以看出虚拟地址和物理地址的转换关键是过程Table Walk Unit。...从线性地址的第四部分中取出页表项的索引,页表基址相加得到页表项的物理地址。 第四次读取内存得到pte_t结构的目录项,从中取出物理页的基地址。...从线性地址的第五部分中取出物理页内偏移量,物理页基址相加得到最终的物理地址。 第五次读取内存得到最终要访问的数据。...#include #include #include #include ...这个过程也是mmu的过程。 小结 我相信你已经对cpu通过MMU访问内存的本质有所掌握(还是不理解的话不要说认识我),而且通过linux的一个实验,对其软件模拟流程也有所感性的认识。

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

图解MMU

这是图解系列之MMU MMU叫内存管理单元,现在是处理器/核中的一个硬件单元,通常每个核有一个MMU。 下面cloud3图解一下MMU的工作原理。 ?...CPU发出的地址是虚拟地址,MMU通过页表技术,把虚拟地址转换为物理地址,再去访问物理内存条。 ?...以这张页表为例, 当CPU发出的虚拟地址中页表Index是3时,MMU会去查页表的第3行,发现第3行没有命中,MMU会给CPU发出page fault,CPU自动跳到fault的代码去处理fault。...当CPU发出的虚拟地址中页表Index是2时,MMU会去查页表的第2行,发现第2行命中了物理地址112*4KB,MMU会访问内存条112*4KB这个物理地址。...以上以32位系统中一级和二级页表来描述了MMU的最简单原理,多级页表的实现方式在理论上也是相同的,包括在64位系统中MMU工作原理也是如此。 这是图解系列之MMU

1.4K31

MMU那些事儿

MMU存在的意义 [导读] 本文从内存管理的发展历程角度层层递进,介绍MMU的诞生背景,工作机制。而忽略了具体处理器的具体实现细节,将MMU的工作原理从概念上比较清晰的梳理了一遍。...MMU诞生之前: 在传统的批处理系统如DOS系统,应用程序操作系统在内存中的布局大致如下图: 应用程序直接访问物理内存,操作系统占用一部分内存区。...虚实内存映射及交换管理,可以将真实的物理内存,有可变或固定的分区,分页或者分段虚拟内存建立交换映射关系,并且有效的管理这种映射,实现交换管理。...高效的虚实内存交换需求:需要在实际的虚拟内存物理内存进行内存页/段交换过程中快速高效。 总之,在这样的背景下,MMU应运而生,也由此可见,任何一项技术的发展壮大,都必然是需求驱动的。...内存管理实现总体策略 从操作系统角度来看,虚拟内存的基本抽象由操作系统实现完成: 处理器内存空间不必真实的所连接的物理内存空间一致。

1.1K20

liteos MMU(十八)

概述 1.1 基本概念 MMU全称“Memory Management Unit”,顾名思义就是“内存管理单元”。...综合来说,对MMU操作就是通过修改页表描述符和控制CP15协处理器来实现的,具体运作流程如下图1所示。 ?...Huawei LiteOS的MMU有两个方面的作用: 提供硬件机制的内存cache/nocache属性的控制接口。 提供硬件机制的内存访问权限控制接口。 2....开发指导 2.1 使用场景 系统内部有些内存不希望被修改,否则会造成不可预测的后果,此时可以用MMU修改该段内存的访问权限。...3 注意事项 目前MMU二级页表可操作最小内存单位是4KB,所以要设置访问权限的内存区域的起始地址和结束地址都要4KB对齐。一级页表修改未做对外接口,无需关注。

86330

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

1开场白 环境: 处理器架构:arm64 内核源码:linux-5.10.50 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 本文讲解Linux内核虚拟内存管理中的mmu_gather...2.源代码解读 2.1 重要数据结构体 首先我们先介绍一下,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..., end); //刷mm的tlb,释放所有积聚物理页,释放所有积聚结构相关物理页 4.总结 Linux内核mmu-gather用于积聚解除映射的相关物理页面,并保证了刷tlb和释放物理页面的顺序。

2K52

一文搞懂 | ARM MMU

MMU概念介绍 MMU分为两个部分: TLB maintenance 和 address translation MMU的作用,主要是完成地址的翻译,无论是main-memory地址(DDR地址),还是...下图是一个linux kernel系统中宏观的虚拟地址到物理地址转换的视图,可以看出在MMU进行地址转换时,会依赖TTBRx_EL1寄存器指向的一个页表基地址。...: 在secure和non-secure中使用MMU TTBRx_EL1是banked的,在linux和optee双系统的环境下,可同时开启两个系统的MMU。...attributes条目,如同下面这个样子(以linux kernel为例,在创建页表的时候,应该会设置这个memory attributes,有待看代码去验证): • Unprivileged eXecute...包括但不限于:C/C++,Arm, Linux,Android,人工智能,单片机,树莓派,等等。在上面的【人人都是极客】公众号内回复「peter」,即可免费获取!!

2.2K30

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

文章目录 一、进程通信 二、用户空间内核空间 三、MMU 虚拟内存地址 一、进程通信 ---- 进程隔离概念 : 系统中的进程存在 " 进程隔离 " , 出于对进程运行的保护 , 两个进程的内存是隔离的..." Binder " 机制 完成的 ; Binder 机制不是内核自带的机制 , 而是 Android 可以动态进行 Binder 注册 , 然后进程间通过 Binder 进行通信 ; 二、用户空间内核空间...虚拟内存地址 ---- 每个 应用进程 的 内存空间 使用的地址都是 独立的 , 连续的 , 虚拟地址 ; 内存管理单元 ( MMU - Memory Management Unit ) 的作用就是进行...内存映射的 ; MMU 的作用是将真实的 内存 物理地址 转为 虚拟地址 , 虚拟地址 又称为 逻辑地址 , 一般情况下虚拟地址大小远远大于物理地址 ; MMU 可以让每个进程都拥有独立的连续的内存空间...会让每个应用都有 1 个 4 GB 大小的空间 , Linux 系统内核空间占 1 GB , 用户空间 3 GB ; 0 ~ 3 GB 是用户空间地址 , 3 ~ 4

1.7K10

ARM MMU的存在必要及作用

ARM中的MMU就是内存管理单元,是Memory Management Unit的缩写,那这个东西主要是解决什么问题呢,MMU诞生的主要原因就是解决程序,数据、堆栈的总的大小大于实际的物理存储器介质的大小这个问题...而将虚拟地址映射成实际地址就是MMU的作用。 举个例子,现在有个应用程序需要16KB的内存,一共有8KB的实际物理内存(物理内存地址假设为0x00000000 ~ 0x00001FFF)。...应用程序共访问16KB内存,虚拟地址为0x10000000~0x10003FFF,应用程序访问MMU虚拟地址0x10000000~0x10001FFF,则相当于访问实际物理地址0x00000000 ~...0x00001FFF,再将应用程序的剩余8KB搬入物理内存中,应用程序访问MMU虚拟地址0x10002000~0x10003FFF的时候,相当于访问实际物理地址0x00000000 ~ 0x00001FFF...当然现在一般内存够用,那MMU的地址映射的作用主要就是进行内存访问的保护。比如像Linux这样的系统的多进程,通过MMU进行内存访问,一个进程出了问题不会影响到其他进程。

40740

【嵌入式开发】 ARM 关闭 MMU ( 存储体系 | ID-Cache | MMU | CP15 寄存器 | C1 控制寄存器 | C7 寄存器 | 关闭 MMU )

MMU (1) 虚拟地址 物理地址 (2) MMU 作用 及 关闭原因 二. 关闭 MMU 和 Cache 1....大小的数量级别, SD 卡 等存储 设备; 该类型存储器 访问速度最慢, 但是数量最大; ---- (2) Cache 由来 ---- Cache 的由来 : Cache 用于解决 处理器 ...MMU (1) 虚拟地址 物理地址 ---- 虚拟机地址 物理地址 : 1.虚拟地址概念 : 程序中使用的地址 是 虚拟地址 ; 2.物理地址概念 : 存储器物理存储单元的实际物理地址 ;... Cache 的 位置 : 在 ① ARM 11 之前, 处理器 -> Cache -> MMU -> 存储器, ② ARM 11 及 ARM 11 之后, 处理器 -> MMU -> Cache...和 MMU 必须关闭, Bootloader 主要作用是将 Linux 内核下载到内存中, 如果下载的过程中 D-Cache 没有配置, 可能就将数据下载到了 Cache 中, 这样就会出现问题, 影响内核运行

2.2K10

Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

文章目录 一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二、Linux 内核架构层次 三、Linux 系统调用接口 一、内存管理架构组成 ( 用户空间 | 内核空间 | MMU..., 该 内存管理单元 主要作用是 将 ” 虚拟内存地址 " 转为 " 物理内存地址 " ; " 内存管理单元 " , 英文名称是 " Memory Management Unit “ , 简称 ” MMU..." ; 二、Linux 内核架构层次 ---- 整个操作系统 由 应用层 , Library Routine , 内核 , 硬件 组成 ; 层次架构如下 : Linux 内核 需要 " 管理硬件 "..., 如 : CPU 处理器 , 内存 , I/O 设备 , 网络设备 等 ; Linux 内核 还需要 向上层的 " 应用程序 " 或 " Library Routine " 提供 API 接口 ,...如 : 系统调用 ; 三、Linux 系统调用接口 ---- " 系统调用 " 接口 , 可以调用 " " Linux 内核 " 中的如下功能 : ① 进程调度 : 内核 调用 CPU 处理器 实现

9.5K40

【建议收藏】MMU是如何完成地址翻译的?

虚拟内存物理内存 3.1 CPU存取数据 ? CPU通过MMU找到虚拟地址对应的物理地址 我们先来看下,CPU是如何根据地址取得数据的。...MMU(Memory Management Unit)叫做内存管理单元,主要用来管理虚拟内存物理内存的映射,由硬件自动完成。 3.2 物理地址常用术语 ?...页表 页表(page tables),虚拟地址物理地址的对应表集合。进程虚拟地址转换成物理地址,程序需要用到数据放在物理主存或磁盘某个位置,页表是存储在主存中。...页表条目(page table entry PTE),虚拟地址物理地址具体对应记录。...MMU生成PTE地址,并从高速缓存/主存请求得到它。 高速缓存/主存向MMU返回PTE。 MMU构造物理地址,并把它传送给高速缓存/主存。 高速缓存/主存返回所请求的数据字给处理器。 ?

1.5K52

Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page MMU 内存管理单元 | 内存节点 pglist_data 物理页 page 联系 )

文章目录 一、物理页 page 简介 1、物理页 page 引入 2、物理页 page MMU 内存管理单元 3、物理页 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 物理页 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理页 Page , Linux 内核中 , 使用 上述...MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元 , 主要作用是 将 " 虚拟地址 " 映射到 真实的 " 物理地址 " 中 , MMU 将 物理页 page 作为内存管理基本单位...内核源码中的 page 结构体 " 物理页 " 使用 page 结构体 进行描述 , 该结构体又称为 " 页描述符 " ; 该 page 结构体 定义在 Linux 内核源码的 linux-4.12\...include\linux\mm_types.h#40 位置 ; 二、内存节点 pglist_data 物理页 page 联系 ---- " 内存节点 " pglist_data 结构体 "

6.7K10

uCLinuxLinux

看到一篇讲解uCLinuxLinux之间的一些差异的文章,大家分享下。uCLinux一般用于MCU,而Linux用于MPU。...---来自百度百度 uClinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。...适合不具备内存管理单元(MMU)的微处理器/微控制器,没有MMU支持是 uClinux主流Linux的基本差异。...二、uCLinuxLinux其他区别 uCLinuxLinux相比,MMU是最基础的区别,其实还有很多区别。...3.通用架构的内核不同 在uCLinux的发布中,/linux/mmnommu目录取代了/linux/mm目录.前者是修改后的内存管理子系统 被修改,去除了MMU的硬件依赖,并在内核软件自身提供基本的内存管理函数

2.2K40

开启MMU瞬间出现的问题以及解决方案

MMU 未开启阶段,PC 操作的都是物理地址执行程序,这样看起来一切正常,没啥问题。...比如在前面的示例中,程序本来执行在 0X4000、0x4004 处,而 0x4004 正好是 enable_mmu 指令,那么接下来 PC 将取值 0x4008 处地址的指令,由于此时 MMU 已经被打开...,那么 0x4008 会被当作虚拟地址,经过MMU翻译.........0x4004 处取指)、译码、执行  -- 这条指令是开启MMU 取指(到虚拟地址 0x4008 处取指,因为是一一映射,所以经 MMU 单元后,物理地址依然是是 0x4008)、译码、执行 .......这条指令是开启MMU 取指,到虚拟地址 0x4008 处取指,经 MMU 单元时在页表是找不到 0x4008 这个虚拟地址的(因为没做 map),所以会产生 prefetch abort 异常、而在异常代码

36330

鸿蒙系统开发教程_韦东山 2-1移植RTOS需要做的事

常见的错误观点是把鸿蒙跟Linux放在一起来对比,这不对: Linux只是一个内核,普通人无法使用 还需要在Linux之上安装各类程序 比如Ubuntu等发行版,它们在Linux内核之上,还有桌面、各类办公软件...)的设置:虚拟地址物理地址 完善中断子系统 提供系统tick时钟 为串口驱动实现基于中断的读取字符函数 实现存储设备驱动程序 在存储设备上烧录文件系统 3.1 串口相关 Linux的串口驱动相比...3.2 MMU设置 MMU有2大功能: 3.2.1 权限管理 比如可以把进程A、B的地址空间完全隔离开,它们互不影响 写得差的进程、有恶意的进程,不能影响到其他进程 用户程序、内核地址空间完全隔离开:不允许用户直接访问硬件...示例如下 3.2.2 地址映射 使能MMU后,CPU发出的地址被称为"虚拟地址",它不是直接发送给硬件,而是发给MMU MMU根据页表 进行权限判定 转换为物理地址,发给外设 运行app1时...,CPU发出的addr,通过MMU映射到paddr1; 运行app2时,CPU发出的同一个addr,通过MMU映射到paddr2; 虽然app1、app2使用的地址相同,但是对应的内存不同,如下图:

1K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券