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

上海企业模板建站苏州新闻今天最新消息新闻事件

上海企业模板建站,苏州新闻今天最新消息新闻事件,wordpress手机上导航俩字,外贸网站建设案例文章目录 一、Linux 物理内存区**1. 硬件兼容性与性能优化****ZONE_DMA(直接内存访问区)****ZONE_NORMAL(普通内存区)****ZONE_HIGHMEM(高端内存区)** **2. 地址空间管理需求****直接映射区(Dir…

在这里插入图片描述

文章目录

  • 一、Linux 物理内存区
      • **1. 硬件兼容性与性能优化**
        • **ZONE_DMA(直接内存访问区)**
        • **ZONE_NORMAL(普通内存区)**
        • **ZONE_HIGHMEM(高端内存区)**
      • **2. 地址空间管理需求**
        • **直接映射区(Direct Mapping)**
        • **动态映射区(High Memory)**
      • **3. 内存分配策略**
        • **连续物理内存分配(`kmalloc`)**
        • **非连续内存分配(`vmalloc`)**
        • **Slab 分配器与对象缓存**
      • **4. 跨架构差异**
      • **5. 核心原则总结**
      • **6. 现代系统的演变**
      • **示例代码:查看内存区域信息**
      • **总结**
  • 参考


一、Linux 物理内存区

Linux 内核将物理内存划分为 ZONE_DMAZONE_NORMALZONE_HIGHMEM 的原则,主要基于以下核心因素:


1. 硬件兼容性与性能优化

ZONE_DMA(直接内存访问区)
  • 目的:支持老旧 DMA 控制器(Direct Memory Access)的硬件设备。
  • 硬件限制
    许多早期 DMA 控制器(如 ISA 总线设备)仅能访问物理地址的低范围(通常为 0x00000000 ~ 0x00FFFFFF,即 16MB 或更低)。
    若设备 DMA 操作超出此范围,可能导致地址溢出或数据损坏。
  • 内核策略
    将物理内存的低地址段(如 0x00000000 ~ 896MB)保留为 ZONE_DMA,确保 DMA 设备可直接访问。
ZONE_NORMAL(普通内存区)
  • 目的:存放内核核心数据和频繁访问的内存。
  • CPU 架构优化
    现代 CPU 的 MMU(内存管理单元)和缓存机制对低端内存的访问效率更高。
    内核代码、页表、全局数据结构(如 task_struct)需稳定且连续的物理内存,因此优先分配 ZONE_NORMAL。
ZONE_HIGHMEM(高端内存区)
  • 目的:解决 32 位系统的物理内存寻址限制。
  • 32 位系统限制
    32 位系统的虚拟地址空间为 4GB,内核直接映射的物理内存范围通常为 0x00000000 ~ 0x7FFFFFFF(即 896MB)。
    超出部分(>896MB)无法直接映射到内核虚拟地址空间,需通过动态映射(如 vmallockmap)访问,这部分称为 ZONE_HIGHMEM。
  • 64 位系统差异
    64 位系统的虚拟地址空间极大(如 128TB),可直接映射全部物理内存,因此 无需 ZONE_HIGHMEM

2. 地址空间管理需求

直接映射区(Direct Mapping)
  • ZONE_DMA + ZONE_NORMAL
    内核启动时,物理内存的低地址段(如 0x00000000 ~ high_memory)被直接映射到内核虚拟地址空间(PAGE_OFFSET 起始)。
    此区域访问高效,无需复杂的地址转换。
动态映射区(High Memory)
  • ZONE_HIGHMEM(仅 32 位):
    物理内存超过直接映射范围的部分(high_memory ~),需通过临时映射(如 kmap_atomic)或页表切换访问。
    此区域访问效率较低,但扩展了可用内存上限。

3. 内存分配策略

连续物理内存分配(kmalloc
  • ZONE_DMA & ZONE_NORMAL
    kmalloc() 分配的物理内存默认来自 ZONE_DMA 或 ZONE_NORMAL,保证连续性和低延迟,适用于 DMA、内核数据结构等场景。
非连续内存分配(vmalloc
  • ZONE_HIGHMEM(32 位):
    vmalloc() 分配的虚拟内存可能映射到 ZONE_HIGHMEM,但物理页不要求连续,适用于大块内存或无需 DMA 的场景。
Slab 分配器与对象缓存
  • 缓存亲和性
    频繁访问的小对象(如 struct page)优先从 ZONE_NORMAL 分配,减少缓存失效。

4. 跨架构差异

系统架构ZONE_DMAZONE_NORMALZONE_HIGHMEM
32 位低端内存(如 0~16MB)中段内存(16MB~896MB)高端内存(>896MB)
64 位通常空闲或极小覆盖几乎全部物理内存不存在

5. 核心原则总结

Linux 内核划分内存区域的三大原则:

  1. 硬件兼容性
    适配 DMA 设备等硬件的地址限制。
  2. 性能优化
    优先保障内核高频访问区域的连续性和低延迟。
  3. 地址空间高效利用
    在 32 位系统中通过 ZONE_HIGHMEM 扩展可用内存,64 位系统则简化管理。

6. 现代系统的演变

  • 64 位系统
    因虚拟地址空间极大(如 48/57 位物理寻址),通常仅保留 ZONE_DMA 和 ZONE_NORMAL,ZONE_HIGHMEM 被淘汰。
  • 大内存优化
    对 NUMA(非统一内存访问)系统,Linux 进一步细分 ZONE_NORMAL 为多个内存节点(Node),优化局部性。

示例代码:查看内存区域信息

#include <linux/mm.h>
#include <linux/printk.h>void print_memory_zones(void) {struct zone *zone;for_each_zone(zone) {pr_info("Zone: %s, Start: %lu KB, End: %lu KB
",zone->name,zone->zone_start_pfn << (PAGE_SHIFT - 10),(zone->zone_start_pfn + zone->spanned_pages) << (PAGE_SHIFT - 10));}
}

总结

Linux 内核通过划分 ZONE_DMAZONE_NORMALZONE_HIGHMEM,实现了对硬件兼容性、性能及内存利用率的平衡。这种设计在 32 位系统中尤为重要,而在 64 位系统中则大幅简化,体现了操作系统对底层硬件的深刻理解和抽象能力。

参考

PCIe MMIO、DMA、TLP
【PCIe】PCIe配置空间与CPU访问机制


   
 

Ctrl + Alt + V

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

相关文章:

  • 网站质量度网页设计图片素材网
  • 10月14日星期二今日早报简报微语报早读
  • 网站流量功能更怎么做自己做的影视会员网站违法么
  • 网站设计弹窗西安免费做网站公司
  • 网站建设深网站开发图片侵权
  • 【每日一K】altera 封装数据
  • 建设银行网站字体网站开发必学书籍
  • 济南seo优化公司助力网站腾飞推广平台排行榜有哪些
  • OWL 的 t-* 与 Vue3 的 v-* 全面对比
  • C#项目连接S7-PLCSIM Advanced读写操作
  • Linux中的wheel介绍以及用法
  • 统计期刊介绍——Journal of Statistical Planning and Inference(JSPI)
  • 网站后台 刷新做网站完整过程
  • 泰州企业模板建站北京广告网站建设
  • MySQL8数据库高级特性-第二章
  • 【Python基础】Python路径操作全解析:os.path、glob与pathlib从入门到精通
  • 男人女人做羞羞事网站如皋网站建设招标
  • 在线相册jsp网站开发与设计徐州泰安抖音代运营
  • 网站seo优化步骤给我一个用c 做的网站
  • 重庆建设造价信息网站深圳带停机坪的别墅
  • 2026计算机毕设选题推荐:基于SpringBoot和Vue的电动车租赁平台系统(附源码和数据库)
  • 建湖做网站需要多少钱wordpress缓存图片
  • 济宁网站建设 中企动力临沂wordpress阻止访问
  • 南京建设网站要多少钱手机网站需要域名吗
  • 基于成功率的自适应差分进化 L-SRTDE 用于 CEC 2024 竞赛
  • 企业 办公 网站模板下载企业网站制作步骤
  • 网站建设大致分哪几块天津网站开发公司
  • 怎样查网站备案人的联系方式网站开发自学时间
  • 网站系统平台建设个人网站主页
  • 基于springboot的民谣网站的设计与实现