Linux 内核 内存管理内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )相关的知识,希望对你有一定的参考价值。
文章目录
一、物理地址空间
" 物理地址空间 “ 是 CPU 处理器 在 ” 总线 " 上 访问内存的地址 ,
RISC 处理器 只能访问 物理地址空间 , 系统的 外围设备 与 物理内存 都使用 统一的物理地址空间 访问 ;
RISC 全称 " Reduced Instruction Set Computer " , 精简指令集计算机 ;
分配给 " 外围设备 " 的 物理地址 , 又称为 " 设备内存 " ;
ARM64 架构的系统中 , 物理地址空间 分为 2 2 2 类 :
- ① 正常内存 : Normal Memory , 指的是 随机存取存储器 RAM 和 只读存储器 ROM ;
- ② 设备内存 : Device Memory , 指的是 分配给 " 外围设备寄存器 " 的 物理地址 ;
ARM64 架构 , 参考 【Linux 内核 内存管理】Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init ) 博客 , 物理地址最大支持 48 48 48 位 ;
二、外围设备寄存器
CPU 处理器 访问 " 外围设备 “ 是通过 ” 外围设备控制器 " 的 " 寄存器 " 实现的 ;
处理器芯片 中的 寄存器 分为 3 3 3 大类 :
- 控制寄存器
- 状态寄存器
- 数据寄存器
外围设备寄存器 有 2 2 2 种 编址方式 :
- ① I/O 映射方式 , I/O-Mapped
- ② 内存映射方式 , Memory-Mapped
外围设备寄存器 一般是 连续编址 的 ,
三、外围设备寄存器物理地址 映射到 虚拟地址空间
用户空间 的 应用进程 , 访问 " 外围设备寄存器 " 只能通过 " 虚拟地址 " 实现 ,
Linux 内核 提供了 相关 API 函数 , 将 " 外围设备寄存器 “ 对应的 ” 物理地址 “ 映射到了 ” 虚拟地址空间 " 中 ;
以上是关于Linux 内核 内存管理内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )
Linux 内核 内存管理内存映射相关数据结构 ① ( vm_area_struct 结构体 | task_structmm_structvm_area_struct 3 个结构体之间的关系)
Linux 内核 内存管理munmap 系统调用源码分析 ① ( munmap 系统调用函数执行流程 | munmap 函数源码 | vm_munmap 函数源码 )
Linux 内核 内存管理优化内存屏障 ② ( 内存屏障 | 编译器屏障 | 处理器内存屏障 | 内存映射 I/O 写屏障 )
Linux 内核 内存管理内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )
Linux 内核 内存管理mmap 系统调用源码分析 ① ( mmap 与 mmap2 系统调用 | Linux 内核中的 mmap 系统调用源码 )