【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )
文章目录
- 一、物理地址空间
- 二、外围设备寄存器
- 三、外围设备寄存器物理地址 映射到 虚拟地址空间
一、物理地址空间
" 物理地址空间 “ 是 CPU 处理器 在 ” 总线 " 上 访问内存的地址 ,
RISC 处理器 只能访问 物理地址空间 , 系统的 外围设备 与 物理内存 都使用 统一的物理地址空间 访问 ;
RISC 全称 " Reduced Instruction Set Computer " , 精简指令集计算机 ;
分配给 " 外围设备 " 的 物理地址 , 又称为 " 设备内存 " ;
ARM64 架构的系统中 , 物理地址空间 分为 222 类 :
- ① 正常内存 : Normal Memory , 指的是 随机存取存储器 RAM 和 只读存储器 ROM ;
- ② 设备内存 : Device Memory , 指的是 分配给 " 外围设备寄存器 " 的 物理地址 ;
ARM64 架构 , 参考 【Linux 内核 内存管理】Linux 内核内存布局 ④ ( ARM64 架构体系内存分布 | 内核启动源码 start_kernel | 内存初始化 mm_init | mem_init ) 博客 , 物理地址最大支持 484848 位 ;
二、外围设备寄存器
CPU 处理器 访问 " 外围设备 “ 是通过 ” 外围设备控制器 " 的 " 寄存器 " 实现的 ;
处理器芯片 中的 寄存器 分为 333 大类 :
- 控制寄存器
- 状态寄存器
- 数据寄存器
外围设备寄存器 有 222 种 编址方式 :
- ① I/O 映射方式 , I/O-Mapped
- ② 内存映射方式 , Memory-Mapped
外围设备寄存器 一般是 连续编址 的 ,
三、外围设备寄存器物理地址 映射到 虚拟地址空间
用户空间 的 应用进程 , 访问 " 外围设备寄存器 " 只能通过 " 虚拟地址 " 实现 ,
Linux 内核 提供了 相关 API 函数 , 将 " 外围设备寄存器 “ 对应的 ” 物理地址 “ 映射到了 ” 虚拟地址空间 " 中 ;
【Linux 内核 内存管理】内存映射原理 ① ( 物理地址空间 | 外围设备寄存器 | 外围设备寄存器的物理地址 映射到 虚拟地址空间 )相关推荐
- Linux内核如何管理内存
在学习了进程的 虚拟地址布局 之后,让我们回到内核,来学习它管理用户内存的机制.这里再次使用 Gonzo: Linux kernel mm_struct Linux 进程在内核中是作为进程描述符 ta ...
- 详细讲解Linux内核源码内存管理(值得收藏)
Linux的内存管理是一个非常复杂的过程,主要分成两个大的部分:内核的内存管理和进程虚拟内存.内核的内存管理是Linux内存管理的核心,所以我们先对内核的内存管理进行简介. 一.物理内存模型 物理内存 ...
- Linux内存管理内存映射以及通过反汇编定位内存错误问题
提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的! 我们需要知道--变量,其实是内存地址的一个抽像名字罢了.在静态编译的程序中,所有的变量名都会在编译时被转成内存地址.机器 ...
- linux内核工程导论,Linux内核工程导论——内存管理(3)
Linux内核工程导论--内存管理(三) 用户端内核内存参数调整 /proc/sys/vm/ (需要根据内核版本调整) 交换相关 swap_token_timeout Thisfile contain ...
- 纯干货,linux内存管理——内存管理架构(建议收藏)
一.内存管理架构 内存管理子系统架构可以分为:用户空间.内核空间及硬件部分3个层面,具体结构如下所示: 1.用户空间:应用程序使用malloc()申请内存资源/free()释放内存资源. 2.内核空间 ...
- Linux内核高端内存
Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图. Linux内核地址空间划分 通常32 ...
- linux内核申请内存的方法,Linux内核空间的内存申请常用函数
在Linux内核编程中内存的申请不同于系统编程,她有自己的一套机制. 1. kmalloc 函数原型:void *kmalloc( size_t size, int flags ) 参数说明:size ...
- ND4J/DL4J的内存管理:工作原理
ND4J/DL4J的内存管理:工作原理 ND4J使用堆外内存存储N维数组NDArray,以便提升从本机代码(例如BLAS和CUDA库)使用NDArray时的性能. "堆外"意味着系 ...
- iOS 内存管理机制与原理
内存分区 内存一般分为五大区:栈区.堆区.常量区.全局区.代码区.如图 1.栈区 是由编译器自动分配并释放的,主要用来存储局部变量.函数的参数等,是一块连续的内存区域,遵循先进后出(FILO)原则.一 ...
- Linux内核页表管理-那些鲜为人知的秘密
1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 通用操作系统,通常都会开启mmu来支持虚拟 ...
最新文章
- 轻量级HTTP服务器Nginx
- java 重定向和转发 的区别
- 总编下午茶:挑战者心态能否帮助微软重回云计算巅峰?
- Online ML那点事-!
- 将json 填入表格_如何将Google表格用作JSON端点
- hdu 1507 Largest Rectangle in a Histogram 动态规划计算最大面积
- mysql人脸数据库_人脸数据库汇总
- 用Spotlight实时监控Windows Server 08
- “天才少年” 27岁华为副总裁 百度CTO 成为阶下囚的传奇经历
- m4a怎么转换成mp3,m4a转mp3的简单方法
- mysql8.0.15下载后怎么打开_mysql8.0.15下载安装详细教程新手必备!
- mysql在centos下改24小时制
- 独立站谷歌付费广告关键词选词技巧实操
- go语言的类型之间的相互转化和float保留小数时的四舍五入
- traits简单介绍
- 三阶魔方还原程序心得
- Android大赛首轮获奖作品解析
- 1700人参加的钢铁行业盛会,下面是你必须知道的!
- 西门子系列全套学习视频,免费领取!
- 1024程序员节|基于Springboot实现运动场馆预约信息管理系统
热门文章
- WebServices | 期末复习 · WebService基本概念、XML
- Linux Debian 分区出错Partition 2 does not start on physical sector boundary 解决方法 + swap
- 一路走来,关于光城那些事
- 性能测试指标和报告解析
- 工具-安装redis和安装redis客户端
- Educoder_Web_移动端电商页面制作
- c语言程序灵魂编译后,谭浩强C程序设计第4版精讲视频课程
- SpringBoot一站式功能提供框架(一)整合MybatisPlus、整合Swagger Knif4j、整合Druid多数据源--柚子真好吃
- PAROT: Translating natural language to SPARQL(PAROT:将自然语言翻译成SPARQL)--10
- 手把手教你从零写一个日志框架