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

linux 内核 - 内存管理单元(MMU)与地址翻译(一)

        MMU 不仅负责将虚拟地址转换为物理地址,还能防止未经授权的内存访问。对于一个进程而言,它所需访问的任何页面都必须存在于该进程的某个 VMA 中,因此也必须记录在该进程的页表里(每个进程都有自己的页表)。

        内存是按照固定大小的块来组织的:在虚拟内存中称为“页(page)”,在物理内存中称为“帧(frame)”。在我们的例子中,大小为 4 KB。不过,这个大小在内核中是通过宏 PAGE_SIZE 定义并可访问的。但需要注意,页面大小是由硬件决定的。在一个以 4 KB 为页大小的系统中,字节地址 0 到 4095 属于第 0 页,字节地址 4096 到 8191 属于第 1 页,以此类推。

        引入页表(page table)的概念,是为了管理页面与帧之间的映射关系。页面被分布到页表中,每个页表项(PTE, Page Table Entry)对应着一个页面与一个物理帧之间的映射。随后,每个进程都会被分配一组页表,用来描述它所有的内存区域。

        为了在页面之间进行遍历,每个页面都会被分配一个索引,称为页号(page number)。对于物理帧来说,则称为页帧号(PFN, Page Frame Number)。这样一来,VMA(更准确地说是逻辑地址)就由两部分组成:页号和偏移量(offset)。在 32 位系统中,偏移量由地址中最低的 12 位表示;而在页大小为 8 KB 的系统中,偏移量由最低的 13 位表示。下面的示意图展示了这种将地址拆分为“页号 + 偏移量”的概念:

        

        操作系统或 CPU 是如何知道某个逻辑地址对应哪个物理地址的呢?它们使用页表作为翻译表,每个页表项的索引就是虚拟页号,而该索引对应的值就是 PFN(页帧号)。当需要通过虚拟内存访问物理内存时,操作系统首先会提取偏移量和虚拟页号,然后遍历该进程的页表,将虚拟页号与物理页匹配。一旦找到对应关系,就可以访问该物理页帧中的数据。

        

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

相关文章:

  • yolo_RK3588系列(三)
  • mac电脑软件左上角的关闭/最小化/最大化按钮菜单的宽度和高度是多少像素
  • ijkplayer Android 编译
  • strncpy 函数使用及其模拟实现
  • AI重塑软件测试:质量保障的下一站
  • 成本管控:餐饮利润的隐形守护者
  • Zemax光学设计输出3D
  • 4位量化:常规的线性层被替换成了4位线性层(48)
  • 酶 EC number 预测工具CLEAN的安装和使用
  • QT官方库头文件找不到(添加模块方法)
  • C++模板元编程:从SFINAE到Concepts的进化史
  • mac 搭建docker-compose,部署docker应用
  • AI on Mac, Your Way!全本地化智能代理,隐私与性能兼得
  • pcl求平面点云的边界凸包点
  • Frida Hook Android Activity生命周期全方法监控方案
  • 哈希:字母异位词分组
  • RHCA07-Linux跟踪工具及CPU调优
  • Linux I/O 多路复用实战:深入剖析 Select 与 Poll
  • capsh 命令详解
  • 【机器学习深度学习】Ollama、vLLM、LMDeploy对比:选择适合你的 LLM 推理框架
  • Objective-C 版本的 LiveEventBus 效果
  • vue+openlayers示例:适配arcgis矢量瓦片服务以及样式(附源码下载)
  • 英伟达Blackwell架构下的中国特供版AI芯片:B30A与RTX 6000D,是技术妥协还是市场新策略?
  • 基于单片机太阳能充电器/太阳能转换电能
  • C端高并发项目都有哪些
  • Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考
  • C++围绕音视频相关的资料都有哪些?如何进行学习
  • 实现自己的AI视频监控系统-第一章-视频拉流与解码2
  • 【ansible】4.实施任务控制
  • 【沉浸式解决问题】peewee.ImproperlyConfigured: MySQL driver not installed!