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捏合在一起。下一篇文章将会对内核初始化硬件信息并管理的情况进行阐述。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powershell美化工具Oh My Posh安装教程

1. 安装Oh My Posh 进入Oh My Posh官网,可根据不同平台进行下载 windows下可以直接在微软商店下载 2. 安装Nerd Fonts字体 进入Nerd Fonts官网,选择自己喜欢的字体下载解压后,全选所有文件,右键选择安装即可(忽略LICEN…

WordPress回复评论自动添加@评论者

久以前有朋友反应,回复了却没有接到通知!今天小编分享一款关于WordPress回复评论自动添加评论者的代码,以后大家留言的时候,只有被回复就会自动你了哟,在这里也感谢大家的支持 教程开始将一下代码添加到当前模板函数 (…

Spring如何解决循环依赖问题

在 Spring 框架中,循环依赖问题(Circular Dependency)是指多个 Bean 之间存在互相依赖的情况。Spring 容器通过一些机制来解决循环依赖问题,以确保应用程序的正常启动和运行。 1. 什么是循环依赖? 循环依赖是指两个或多个 Bean 之间存在互相依赖的关系。例如,Bean A 依…

Qt调用Matlab(一)

目录 1 概述2 创建Qt工程2.1 增加Matlab支持3 调用Matlab3.1 widget.h3.2 widget.cpp4 运行4.1 配置4.2 运行1 概述 MATLAB是MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域…

【matlab】分类回归——智能优化算法极限学习机

目录 引言 基本原理 主要特点 应用领域 发展趋势 智能优化算法——蜣螂优化算法(DBO) 算法原理 算法特点 应用前景 代码实现 ELM训练函数——elmtrain 函数 ELM预测函数——elmpredict 函数 适应度函数 主函数 引言 极限学习机(…

ARM_Linux驱动开发——字符设备驱动开发(上)

目录 一、Linux驱动开发思维 二、Linux驱动开发分类 三、“ ARM_Linux驱动开发——字符设备驱动开发 ” 字符设备驱动简介 前言 在分享Linux驱动开发之前,我想带大家首先回顾一下裸机驱动开发和Linux驱动开发的区别。 1、运行环境和操作系统: 裸机驱…

CI脚本的python基础

CI脚本的python基础 基础python语法getopt.getopt(args, shortopts, longopts[])requests.requestjson.loads()os.popensplit的用法os.path.existshutil.rmtree以及shutil家族shutil.make_archivetime.strftime计算Python zfill(width&#x…

Spring Cloud Gateway报sun.misc.Unsafe.park(Native Method)

项目引入spring cloud gateway的jar报,启动的时候报: [2024-07-05 10:10:16.162][main][ERROR][org.springframework.boot.web.embedded.tomcat.TomcatStarter][61]:Error starting Tomcat context. Exception: org.springframework.beans.factory.Bean…

Apache Seata 高可用部署实践

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata 高可用部署实践 Seata 高可用部署实践 使用配置中心和数据库来实现 Seata 的高…

使用Spring Boot和自定义缓存注解优化应用性能

在现代应用开发中,缓存是提高系统性能和响应速度的关键技术之一。Spring Boot提供了强大的缓存支持,但有时我们需要更灵活的缓存控制。本文将介绍如何使用Spring Boot和自定义缓存注解来优化应用性能。 1. 为什么需要自定义缓存注解? Sprin…

AI算力革命:GPU租赁与算力市场的未来趋势

在数字化和智能化的时代背景下,人工智能(AI)的快速发展已成为全球科技领域的焦点。AI算力作为支撑其发展的关键因素,正以前所未有的速度改变着我们的生活和工作方式。其中,GPU租赁模式的兴起,不仅解决了AI算…

IT学习之路:深耕技能,拥抱变化

高考,作为人生的重要转折点之一,为无数学子开启了通往梦想与未来的大门。对于众多选择投身IT行业的青年而言,这段旅程既是挑战也是机遇。IT行业以其快速的发展速度、广泛的应用领域和无限的创新潜力,成为了许多年轻人实现自我价值…

瀑布模型、渐增式开发、原型化开发、统一过程模型(RUP)都是软件开发生命周期中的重要模型和方法,他们的原理及他们的应用场景有哪些

软件开发生命周期中的不同模型和方法各有其独特的原理和应用场景。本文将详细分析瀑布模型、渐增式开发、原型化开发以及统一过程模型(RUP)的原理及其适用的应用场景。 瀑布模型 原理 瀑布模型是一种线性顺序的软件开发方法,其名称源于其流…

用SpringBoot打造坚固防线:轻松实现XSS攻击防御

在这篇博客中,我们将深入探讨如何使用SpringBoot有效防御XSS攻击。通过结合注解和过滤器的方式,我们可以为应用程序构建一个强大的安全屏障,确保用户数据不被恶意脚本所侵害。 目录 什么是XSS攻击?SpringBoot中的XSS防御策略使用…

ASP.NET Web应用中的 Razor Pages/MVC/Web API/Blazor

如果希望使用ASP.NET Core创建新的 Web 应用程序,应该选择哪种方法?Razor Pages还是 MVC(模型-视图-控制器),又或者使用Web API Vue/React/......。 每种方法都有各自的优点和缺点。 什么是 MVC? 大多数服…

轻松设置:服务器域名配置全攻略

目录 前置条件 在阅读本篇内容之前,请先确保以下物料已准备好: 一台公网服务器,服务正常运行申请完成的域名,在对应域名服务商后台正常DNS解析域名备案完成可选条件:有https访问请求时,需要申请SSL证书 …

微信小程序的“小鱼在乎”日程计划系统-计算机毕业设计源码51307

摘要 本文介绍了一种基于微信小程序和Spring Boot后端服务的“小鱼在乎”日程计划系统。该系统结合了前端微信小程序的便捷交互与后端Spring Boot框架的稳健性能,为用户提供了一款功能全面、体验出色的日程管理工具。 “小鱼在乎”日程计划系统涵盖了多种功能&#…

DNS正向解析与反向解析实验

正向解析 安装bind软件 [rootlocalhost ~]# dnf install bind bind-utils -y修改主配置文件/etc/named.conf [rootlocalhost ~]# vim /etc/named.conf重启DNS服务(named) [rootlocalhost ~]# systemctl restart named编辑数据配置文件。在/var/named…

技术周总结 2024.07.01~07.07(Spark Scala)

文章目录 一、07.01 周一1.1)问题01:scala怎么实现 一个变量作为函数的入参以及返回值1.2)问题02:park中DataFrame使用 createView的用法1.3)问题03:scala中三元运算符1.4) 问题04:伴生对象和伴…

vue 等待数据被定义后再执行v-for(ai生成)

在Vue中&#xff0c;如果你想确保在使用v-for循环之前数据已经被定义&#xff0c;你可以使用v-if指令来控制v-for的执行。有时使用axios异步请求数据时需延时&#xff08;比如500ms&#xff09;&#xff0c;才能获得被赋值的数据&#xff0c;v-if判断后再执行v-for。 <temp…