当前位置: 首页 > news >正文

linux 内核 - 内存管理概念

        在一些允许扩展内存的计算机中,系统内存可以增加,但物理内存仍然是计算机系统中的有限资源,虚拟内存是一个概念,它给每个进程一个“幻觉”,让进程认为自己拥有很大甚至几乎无限的内存,有时比系统实际拥有的内存还多。为了说明内存管理,我们引入几个概念:地址空间、虚拟(或逻辑)地址、物理地址和总线地址。     

     1. 物理地址(Physical Address)

          标识物理内存(RAM)的位置;由于虚拟内存机制,用户或内核通常不会直接操作物理地址,而是通过对应的逻辑地址访问它。

     2. 虚拟地址(Virtual Address)

          不一定在物理内存中实际存在。CPU 使用这个地址访问物理内存,由 内存管理单元(MMU, Memory Management Unit) 负责转换。MMU 位于 CPU 核心和内存之间,通常集成在物理 CPU 中(在 ARM 架构上是核心的一部分)。每次访问内存时,MMU 都会将虚拟地址转换成物理地址,这个过程称为 地址转换(Address Translation)。

      3. 逻辑地址(Logical Address)

       通过线性映射(linear mapping)生成的地址。是虚拟地址中相对于物理地址具有固定偏移量的部分(PAGE_OFFSET 上的映射)。所以 逻辑地址总是虚拟地址,但虚拟地址不一定是逻辑地址。

       4. 总线地址(Bus Address)

        总线地址是 CPU 或 DMA 控制器通过 系统总线访问内存或外设时使用的地址,它是硬件层面的寻址方式,用于在 CPU、GPU、外设和内存之间进行数据传输。对于大多数现代 CPU,总线地址和物理地址通常是 一一对应 的,但有些架构可能存在偏移或重映射。当外设通过 DMA(Direct Memory Access)访问内存时,需要使用总线地址,而不是虚拟地址。内核会负责将物理地址转换为总线地址(如果有必要),保证硬件能够正确访问内存​​​​​​​。

http://www.dtcms.com/a/330359.html

相关文章:

  • Apifox精准定义复杂API参数结构(oneOf/anyOf/allOf)
  • aave v3 存款与借款利息的计算方式
  • 码上爬第七题【协程+参数加密+响应解密+格式化检测】
  • C#面试题及详细答案120道(11-20)-- 面向对象编程(OOP)
  • LeetCode Day5 -- 二叉树
  • 嵌入式学习(day26)frambuffer帧缓冲
  • 【系统安装】虚拟机中安装win10企业版系统记录
  • HarmonyOS 开发实战:搞定应用名字与图标更换,全流程可运行示例
  • 101、【OS】【Nuttx】【周边】文档构建渲染:reStructuredText 格式
  • 硬件工程师八月实战项目分享
  • AI抢饭碗,软件测试该何去何从?
  • 基于离散余弦变换的激活水印(DCT-AW)
  • 交错字符串-二维dp
  • 如何通过 Actor 网络压缩为概率分布实现
  • RK3568 Linux驱动学习——新字符设备驱动
  • 人工智能入门①:AI基础知识(上)
  • Vue3 vs Vue2:全面对比与面试宝典
  • 接口添加了 @Transactional 注解并开启事务,而其中一个小方法启动了新线程并手动提交数据,会有什么影响?
  • 红黑树的特性与实现
  • 打靶日常-文件上传
  • 【Python】新手入门:什么是python运算符?python运算符有哪些种类?运算符优先级是怎么样的?
  • Go语言函数详解:从基础到高阶的行为逻辑构建
  • C5.4:光电器件
  • RagFlow启动源码说明
  • Linux framebuffer 编程入门:直接操作显存画图
  • Flutter权限管理三步曲:检查、申请、处理全攻略
  • 【超算】算力的精度,数据中心的划分标准与行业现状(国家超级计算机,企业万卡GPU集群)
  • 深入详解C语言的循环结构:while循环、do-while循环、for循环,结合实例,讲透C语言的循环结构
  • 关于linux软件编程4:目录IO和一些时间函数
  • PAT 1065 A+B and C (64bit)