IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux 内存管理 —— 高端内存 -> 正文阅读

[系统运维]Linux 内存管理 —— 高端内存

0. 参考资料

  1. https://www.zhihu.com/question/280526042
  2. https://blog.csdn.net/ibless/article/details/81545359

1.1 进程线性地址空间划分

在 32 位操作系统中,最大可寻址范围为 4G,这就意味着虚拟地址空间(线性地址空间)有 4G,进程地址划分方式是:0~3G用户空间、3~4G内核空间,用户进程最多只可以访问3G线性地址空间。

在这里插入图片描述

1.2 x86 体系架构下的两种硬件约束

  1. ISA 总线下的直接内存存取(DMA):只能对RAM前16MB地址进行寻址;
  2. 大容量RAM的32位计算机中(<4G),CPU 不能直接访问所有的物理内存,线性地址大小仅为 4G,超过 4G 大小无法访问,不仅是 4G,模糊来说,1~4G空间都无法访问;

1.3 应对硬件约束的方法

将内存区域进行划分,划分为三个管理区间:

区域
ZONE_DMA低于16MB的内存空间
ZONE_NORMAL16MB~895MB
ZONE_HIGHMEM896MB~4G

内核和应用程序在访问内存时,都是操作线性地址,“均需要”借助MMU实现对应物理内存地址的映射。

对于内核来讲,前两个区域直接通过 -3G 的方式实现对应到物理内存地址的目的 —— 毕竟这样最快!(Linux 规定这样的直接映射范围最大为 896MB)。那么 ZONE_HIGHMEM 区域怎么办? 用户空间怎么进行转换?

  1. ZONE_HIGHMEM 区域的存在,能够帮助我们访问超过 896MB 的内存,大概的空间大小为 128MB。当内核想访问超过 896MB 的物理内存时,就借用 MMU,将某页物理内存映射到高端内存空间(线性地址空间)中,借用这段线性地址空间,用完后便归还,实现了使用有限的地址空间,访问所有物理内存的目的。
  2. 内核空间不关心0~3G的用户空间,这块的空间需要借助MMU完成,一般除非陷入内核,不然不会走捷径。

针对 ZONE_HIGHMEM 区域还进行了如下划分,划分为了三个区域:

  1. vmalloc:分配虚拟地址上连续的内存;
  2. persistent kernel mappings:用于较长期的动态映射,允许内核建立高端页框到内核虚拟地址空间的长期映射。永久内核映射不能用于中断处理程序和可延迟函数,因为建立永久内核映射可能阻塞当前进程;
  3. fixmaps:高端固定映射区域,其中的一部分用于建立临时内核映射;

在这里插入图片描述

更具体一点,如下图所示,小区域之间有安全区分隔:

在这里插入图片描述


  • 64位中为什么不存在高端内存?

若机器安装的物理内存超过内核地址空间范围(超过896MB,32位高端内存范围是3G+896MB~4G,64位可支持超过512TB的内核地址空间范围),就会存在高端内存。

  • Linux对内存的管理分为三个层次:Node、Zone、Page三个层次
层次说明
Node(存储节点)CPU被划分成多个节点,每个节点都有自己的一块内存,可以参考NUMA架构有关节点的介绍
Zone(管理区)每一个Node(节点)中的内存被划分成多个管理区域(Zone),用于表示不同范围的内存
Page(页面)每一个管理区又进一步被划分为多个页面,页面是内存管理中最基础的分配单位

————————————————
版权声明:本文为CSDN博主「ibless」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ibless/article/details/81545359

在这里插入图片描述

引用:https://www.kernel.org/doc/gorman/html/understand/understand005.html

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-12 13:32:23  更:2021-09-12 13:32:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 3:09:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码