Linux内存管理--系列文章柒——硬件架构

一、引子

之前文章讲解的是系统的虚拟内存,本章讲述这些硬件的架构和系统怎样统一管理这些硬件的。

二、物理内存模型

物理内存模型描述了计算机系统中的物理内存如何由操作系统组织和管理。它定义了物理内存如何划分为单元,如何寻址这些单元以及如何将它们映射到虚拟内存地址。物理内存模型对于确保高效和可靠的内存管理至关重要。
物理内存模型对操作系统管理内存分配、虚拟内存映射和内存访问模式产生重大影响。它会影响内存碎片化、缓存利用率和整体系统性能等因素。

2.1平坦内存模型(Flat Memory Model)

平坦内存模型,也称为线性内存模型,是一种简单的内存管理方式,在这种模型下,整个内存空间被视为一个连续的线性地址空间。每个地址直接对应物理内存中的一个字节,没有分段或分页的复杂性。
因为该内存模型的所有内存地址是一个连续的线性地址空间,因此Linux内核中,使用一个全局数组来管理这些物理内存页,并且内核中默认的配置是使用平坦内存模型。在Linux中最小分配的内存是4KB,所以即使是平坦内存模型,还是按来管理内存的。
特点
单一地址空间:所有程序和数据共享一个统一的地址空间,从地址0到最大地址。
无分段和分页:没有分段和分页机制,所有内存地址都是线性且连续的。
简单性:管理和编程简单,适用于内存需求较小且操作系统简单的系统。
优点
简单易用:由于没有复杂的地址转换机制,编程和调试相对简单。
效率高:没有地址转换的开销,访问内存速度快。
低开销:硬件和软件开销较低,适合资源有限的系统。
缺点
不灵活:不适合内存需求复杂的系统,难以进行内存保护和共享。
容易出错:程序错误可能会破坏整个系统内存,因为没有内存保护机制。
扩展性差:难以应对大规模内存需求,无法有效利用大内存。

2.2稀疏内存模型(Sparse Memory Model)

稀疏内存模型,也称为非连续内存模型,允许内存空间中存在大量未使用的地址区域(稀疏地址空间)。这种模型广泛用于需要大地址空间但实际使用内存较少的应用场景,如大规模数据处理、内存映射文件和某些高级编程语言的运行时系统。
在有多块非连续的物理内存时,在使用平坦内存模型的数组来初始化管理内存地址将会造成很大的内存浪费。稀疏内存模型是将物理内存划在宏观层面上分为一块一块的内存集合体,每个集合体使用一个节点来管理。内核在宏观上通过管理节点来间接的管理到每一个内存页。每个节点中管理的内存集合体也可以是不连续的,内核又将内存集合体分为多个连续内存块。在连续内存块中,内核就可以将其视为平坦内存模型来管理。
特点
稀疏地址空间:地址空间中大部分区域未使用,仅在需要时分配实际的物理内存。
虚拟内存支持:通过虚拟内存机制,将实际需要的内存区域映射到物理内存,其余部分不占用物理内存。
按需分配:内存仅在访问时分配,减少了不必要的内存占用。
优点
内存利用率高:由于仅在需要时分配内存,减少了物理内存的浪费。
支持大地址空间:可以处理非常大的地址空间,而不需要实际分配所有的物理内存。
灵活性:适合处理稀疏数据结构和大规模数据集,提供更大的灵活性。
缺点
复杂的管理:需要操作系统和硬件支持虚拟内存和按需分配,增加了系统的复杂性。
可能的性能开销:按需分配和地址转换可能带来一定的性能开销,特别是在频繁访问新的内存区域时。

2.3补充

2.3.1 物理内存模型关系

平坦内存模型通过全局数组直接管理每一个内存页。

稀疏内存模型通过内存集合体的节点管理内存集合体,并且在内存集合体中又分出多个连续内存块。内存块和内存块中间,可以不连续。每一个连续内存块都可以视为平坦内存模型。

非连续内存模型是稀疏内存模型的一种简单形式,它不允许内存集合体中出现不连续的内存块,既将内存集合体视为平坦内存模型。但较新的内核代码已经不在做特殊区分。只是将平坦内存模型和稀疏内存模型使用宏隔开。
如图
在这里插入图片描述

2.3.2 物理内存热插拔

稀疏内存模型管理内存的方式不难看出,物理内存是否可以被系统使用,就看连续内存块能否管理到相应的内存。只要能让连续内存块管理或者不管理该内存,即可实现内存的动态加载或删除。简单来说:连续内存块和连续内存块中间本就可以是不连续的,只需让没有管理连续内存块的连续内存块节点指向一个内存区域就可以动态加载,或让正在管理连续内存块的连续内存块节点指向空就可以动态删除。
需要注意的是,因为内核态的虚拟地址空间中,有一段直接映射区,这块区域是和物理内存地址直接映射的关系,这些物理内存是无法被动态删除的。一块内存是否能被动态删除是内核在初始化时就决定的。

三、CPU和物理内存架构

在多处理器系统中,内存架构是指多个处理器如何访问和共享内存资源的机制。它对于系统性能和可扩展性至关重要。上面讲了物理内存模型,下面要阐述CPU是怎么访问这些物理内存的。

3.1一致性内存访问(Uniform Memory Access,UMA)

一致性内存访问,所有处理器都共享相同的物理内存,并且访问内存的速度和延迟是均匀的。这意味着每个处理器访问内存的时间是相同的,无论内存地址是什么。
特点
统一内存访问时间:所有处理器对内存的访问时间一致。
共享内存架构:所有处理器共享相同的物理内存,没有本地和远程内存的区别。
对称多处理:UMA通常用于对称多处理(SMP)系统中,每个处理器有相同的访问权限和能力。
优点
编程简单:由于访问内存的延迟一致,程序员不需要考虑不同内存访问速度的问题。
负载均衡:可以更容易地实现负载均衡,因为所有处理器访问内存的成本相同。
硬件简单:相对于非一致性内存访问(NUMA),UMA的硬件设计相对简单。
缺点
可扩展性差:随着处理器数量增加,共享内存带宽成为瓶颈,系统性能难以线性扩展。
内存争用:所有处理器共享同一内存总线,容易出现内存争用问题,影响系统性能。

3.2非一致性内存访问(Non-Uniform Memory Access,NUMA)

非一致性内存访问,与一致性内存访问(UMA)相反。在NUMA架构中,每个处理器(或处理器组)有自己的本地内存(Local Memory),同时也可以访问其他处理器的远程内存(Remote Memory)。这种架构设计旨在提高大规模多处理器系统的可扩展性和性能。
特点
本地和远程内存:每个处理器组(或节点)有自己的本地内存,访问速度比较快;同时可以访问其他处理器组的远程内存,速度较慢。
分布式内存架构:系统内存被分割成多个区域(或节点),每个节点由处理器组成,并拥有一部分物理内存。
非均匀访问时间:访问本地内存的延迟比访问远程内存的延迟低,因此访问时间不均匀。
优点
提高扩展性:NUMA架构可以有效处理大型多处理器系统的内存访问和管理,避免了单一内存总线或互连网络的瓶颈。
减少内存争用:每个处理器组有自己的本地内存,减少了不同处理器之间因访问同一内存而产生的争用。
适应大规模并行工作负载:适合需要大量并行计算和高内存带宽的应用场景,如科学计算和大数据处理。
缺点
复杂的编程模型:NUMA架构需要考虑内存分布和访问延迟的不均匀性,编程和优化相对复杂。
高成本:相对于UMA,NUMA系统通常更昂贵,因为需要更复杂的硬件互连和内存控制器。
远程访问性能差:访问远程内存的延迟较高,可能会影响特定类型的应用程序性能。

3.3其他架构

缓存一致性共享内存(CC-UMA): 每个处理器都有自己的本地缓存,但所有处理器共享一个全局一致性视图。这种架构结合了 UMA 和 NUMA 的优点,既能提供低延迟的本地访问,又能支持大规模扩展。
分布式共享内存(DSM): 物理内存分布在多个节点上,每个节点拥有一部分内存。处理器通过消息传递访问其他节点的内存。这种架构具有高度的可扩展性,但编程和调试更加复杂。

随着多处理器系统变得越来越复杂,内存架构也将继续发展。未来的趋势包括:
混合内存架构: 使用不同类型的内存架构来满足不同的需求,例如使用 NUMA 架构来满足对高性能的需求,使用 DSM 架构来满足对可扩展性的需求。
硬件支持的一致性模型: 硬件支持更强的一致性模型,以简化编程并提高性能。
新型内存技术: 使用新的内存技术,例如非易失性内存(NVM),来提高性能和降低功耗。

本篇大致讲述了硬件的情况,可以看出稀疏内存模型就是在平坦内存模型上多加一些管理节点,非一致性内存访问的CPU就是一堆一致性内存访问的CPU捏合在一起。下一篇文章将会对内核初始化硬件信息并管理的情况进行阐述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/793030.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数电设计提问求帮助,出租车计费器。

🏆本文收录于《CSDN问答解惑-》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

Unity自定义场景背景图片

Unity自定义场景背景图片 1.更改图片材质 2.新建空对象并进行组件的添加、图层的设置 3.隐藏图层 4.对原有摄像机进行设置 5.新建摄像机,并进行设置 6.对步骤2新建的空物体大小进行设置,直至铺满整个屏幕

..质数..

先弄清楚我们在上小学时 学的概念。 1、什么是质因数? -质因数是指能够整除给定正整数的质数。每个正整数都可以被表示为几个质数的乘积,这些质数就是该数的质因数。质因数分解是将一个正整数分解成若干个质数相乘的过程。例如,数字 12…

Vue 3 与 TypeScript:最佳实践详解

大家好,我是CodeQi! 很多人问我为什么要用TypeScript? 因为 Vue3 喜欢它! 开个玩笑... 在我们开始探索 Vue 3 和 TypeScript 最佳实践之前,让我们先打个比方。 如果你曾经尝试过在没有 GPS 的情况下开车到一个陌生的地方,你可能会知道那种迷失方向的感觉。 而 Typ…

oracle 23ai新的后台进程bgnn介绍

前言 昨天发文研究了哪些oracle 后台不能杀 具体文章如下链接 oracle哪些后台进程不能杀?-CSDN博客 其中23ai中新增了一个后台进程bgnn 但是在oracle 23ai database reference中并没有找到该后台进程 有点不甘心就开了个SR,找oracle 官方来看看这个后…

[Qt] Qt Creator中,新建QT文件时选择界面模版下的各选项

在Qt Creator中,新建文件时选择界面模版下的各选项具有特定的意义,这些选项主要帮助开发者根据项目需求快速生成不同类型的文件。以下是对这些选项的详细解释: 0. Qt Item Model 意义:列表模型是Qt中用于表示和操作数据的强大抽…

Sqli-labs 3

1.按照路径http://localhost/sqli-labs/sqli-labs-master/Less-3/进入 2.判断注入类型----字符型 Payload:?id1’) and 11-- 注:根据报错提示的语法错误,在第一行中使用接近’union select 1,2,3--’)的正确语法 3.判断注入点:…

scss概念及使用

目录 scss是什么 scss和css比较 scss的使用 声明变量 区分默认变量 区分全局变量和局部变量 嵌套语法 选择器嵌套 基本嵌套 嵌套中的父选择器引用(&) 嵌套的注意事项 嵌套的嵌套 属性嵌套 基本属性嵌套 嵌套的注意事项 继承 基本用…

为什么使用代理IP无法访问网站

代理IP可以为用户在访问网站时提供更多的便利性和匿名性,但有时用户使用代理IP后可能会遇到无法访问目标网站的问题。这可能会导致用户无法完成所需的业务要求,给用户带来麻烦。使用代理IP时,您可能会因为各种原因而无法访问您的网站。以下是…

AutoHotKey自动热键(八)脚本快速暂停与重新加载

我们在编辑脚本的时候,可以添加快捷键来改变脚本的状态 ;暂停脚本 F11::Suspend;重置脚本 F12::Reloadreload用来重置脚本 我们可以在脚本开头加上标签提示脚本重启成功 ToolTip, 脚本已经重启 Sleep, 1000 ToolTip第二个ToolTip是用来关闭提示器用的 这个提示功能一定要写…

深入探索大语言模型

深入探索大语言模型 引言 大语言模型(LLM)是现代人工智能领域中最为重要的突破之一。这些模型在自然语言处理(NLP)任务中展示了惊人的能力,从文本生成到问答系统,无所不包。本文将从多个角度全面介绍大语…

Dify 与 Xinference 最佳组合 GPU 环境部署全流程

背景介绍 在前一篇文章 RAG 项目对比 之后,确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。 Dify 是将模型的加载独立出去的,因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference,理由如下&…

Windows环境+C#实现显示接口测试

代码如下: using Models; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; …

短视频矩阵:批量发布的秘密揭秘

在数字化时代,短视频已经成为一种广受欢迎的媒体形式。无论是用于品牌推广、产品营销还是个人创作,短视频都提供了一种直观、生动的方式来吸引观众的注意力。然而,有效地制作、管理和发布短视频对于许多创作者和企业来说是一个挑战。 为此&am…

C++ 现代教程三

// 模板参数类型区分 template <class T> static std::string cppdemangle() {std::string s{cppdemangle(typeid(std::remove_cv_t<std::remove_reference_t<T>>))};if (std::is_const_v<std::remove_reference_t<T>>)s " const";if…

Linux 入门教程 by 程序员鱼皮

本文作者&#xff1a;程序员鱼皮 免费编程学习 - 编程导航网&#xff1a;https://www.code-nav.cn 大家好&#xff0c;我是鱼皮。 前两天我学编程的老弟小阿巴过生日&#xff0c;我问他想要什么礼物。 本来以为他会要什么游戏机、Q 币卡、鼠标键盘啥的&#xff0c;结果小阿巴…

【car】深入浅出学习机械燃油车知识、结构、原理、维修、保养、改装、编程

汽车的五大总成通常是指发动机、变速器、前后桥、车架和悬挂系统。 发动机&#xff1a;是汽车的动力来源&#xff0c;负责将燃料的化学能转化为机械能&#xff0c;驱动汽车行驶。常见的发动机类型有内燃机&#xff08;如汽油发动机、柴油发动机&#xff09;和电动机&#xff0…

网络安全应急响应信息收集利器-Eagle_Eye

项目介绍: 网络安全应急响应信息收集利器 - Eagle_Eye&#xff1a;您的终端信息自动收集专家 在网络安全的紧急时刻&#xff0c;每一秒都至关重要。Eagle_Eye&#xff0c;这款专为应急响应设计的工具&#xff0c;如同一位随时待命的侦察兵&#xff0c;能够在危机时刻迅速收集…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下&#xff1a;这里使用的是主机host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

[激光原理与应用-109]:南京科耐激光-激光焊接-焊中检测-智能制程监测系统IPM介绍 - 12 - 焊接工艺之影响焊接效果的因素

目录 一、影响激光焊接效果的因素 1.1、光束特征 1.2、焊接特征 1.3、保护气体 二、材料对焊接的影响 2.1 材料特征 2.2 不同材料对激光的吸收率 &#xff08;一&#xff09;、不同金属材料对不同激光的吸收率 1. 金属材料对激光的普遍反应 2. 不同波长激光的吸收率差…