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 系统调用源码 )