搜索
首页系统教程LINUX无需再担心内存问题——Linux系统内存管理简介

无需再担心内存问题——Linux系统内存管理简介

Feb 09, 2024 pm 04:30 PM
linuxlinux教程linux系统linux命令外壳脚本嵌入式linuxlinux入门linux学习

随着计算机的发展,软件应用程序的复杂性和数据量越来越大,对系统内存的要求也越来越高。作为一名Linux系统管理员,了解如何正确地管理和分配内存资源是必不可少的。本文将为你介绍Linux系统内存管理的基础知识。

早期的程序都是直接运行在物理地址上,也就是说这个程序所需要的空间不超过该机器的物理内存就不会有问题,但实际场景中都是多任务,多进程的,这种物理地址reserved给各个进程是不靠谱的。

举个栗子:假如有3个程序a,b,c,a需要10M,b需要100M,c需要20M,总内存就120M,按照之前的分配方式,前10M给a,10M-110M给b,系统还剩10M,但是c需要20M,显然剩下的内存是不够c用的。怎么办?

为什么要内存管理:

1.效率问题

可能你会想到当c程序跑的时候把b程序数据写到磁盘上,等运行b的时候再数据从磁盘写回来,先不说无法满足b,c程序并行跑的需求,就连频繁的io操作带来的耗时问题也是无法接收的。

2.进程地址隔离问题

除了效率问题,reserved给进程的空间如果需要被别的进程访问会出现崩溃。比如a进程访问的空间是前10M,但是a程序中有一段代码访问10-110M的话就有可能导致b程序的崩溃,所以进程的地址空间需要彼此隔离。

3.重定位问题

现实场景中不可能是单任务在分好的内存中运行,当多任务并行跑的情况下在动态申请释放内存的时候有可能申请到其它进程里的地址,这时候需要重定位到新的地址。

内存管理无非就是想办法解决上面三个问题,如何提高内存的使用效率?如何使进程的地址空间隔离?如何解决程序运行时的重定位问题?

内存管理如何从虚拟地址映射到物理地址:

内存管理从虚拟地址映射到物理地址的过程也就是解决上面3个问题的过程。内存管理用分段机制和分页机制分别解决了上面的3个问题,大概过程如下图:

无需再担心内存问题——Linux系统内存管理简介

分段机制:

只要程序分了段,把整个段平移到任何位置后,段内的地址相对段基址是不变的,无论段基址是多少,只要给出段内偏移地址,cpu就能访问到正确的指令。于是加载用户程序时,只要将整个段的内容复制到新的位置,再将段基址寄存器中的地址改成该地址,程序便可准确地运行,因为程序中用的是段内偏移地址,相对新的段基址,该偏移地址处的内容内容还是一样的。

可以看出分段机制解决了进程间隔离和重定位的问题。这个动作是在硬件里做的,但是有的硬件是没有分段机制的,作为跨平台的linux就用了具有更通用性的分页机制来解决线性地址到虚拟地址到物理地址的转换。

分页机制:

可以参考《CPU是如何访问内存的?》了解一级页表的概念,linux为了兼容32位和64位,通常采用四级页表,页全局目录,页上级目录,页中间目录,页表:

无需再担心内存问题——Linux系统内存管理简介

这里不详细解释linux是如何通过四级页表来做线性地址(虚拟地址)到物理地址的转化。

进程在切换的时候就是根据task_struct找到mm_struct里的pgd字段,取得新进程的页全局目录,然后填充到CR3寄存器,就完成了页的切换。

动手看下mmu分页寻址的过程:

上代码:

无需再担心内存问题——Linux系统内存管理简介
无需再担心内存问题——Linux系统内存管理简介无需再担心内存问题——Linux系统内存管理简介无需再担心内存问题——Linux系统内存管理简介无需再担心内存问题——Linux系统内存管理简介

可以看出虚拟地址ffff99b488d48000对应的物理地址是80000000c8d48000。这个过程也是mmu的过程。

通过本文的介绍,我们了解了Linux系统内存管理的基础知识,包括内存分区、虚拟内存、交换空间等内容。在实际的工作中,正确的内存管理可以提高系统的稳定性和性能,避免因内存问题而出现的意外故障。希望本文的介绍可以帮助你更好地理解Linux系统内存管理的原理与方法,让你轻松应对各种内存管理问题。

以上是无需再担心内存问题——Linux系统内存管理简介的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:良许Linux教程网。如有侵权,请联系admin@php.cn删除
说明Linux的开源性质及其与Windows的对比。说明Linux的开源性质及其与Windows的对比。Apr 28, 2025 am 12:03 AM

Linux的开源本质使其在社区参与、性能、安全性等方面优于Windows,但Windows在用户友好性和软件生态上更胜一筹。1)Linux鼓励社区贡献,开发速度快;2)在服务器和嵌入式系统中性能更好;3)开源本质使其更安全;4)Windows用户界面友好,软件生态广泛。

5个用于监视磁盘I/O性能的Linux工具5个用于监视磁盘I/O性能的Linux工具Apr 27, 2025 pm 04:45 PM

本指南探讨了用于监视和故障排除磁盘I/O性能的基本Linux工具,这是对服务器速度和应用程序响应的关键度量。 磁盘I/O性能直接影响从和书面读取数据的速度

在Linux中查找插入USB设备名称的4种方法在Linux中查找插入USB设备名称的4种方法Apr 27, 2025 pm 04:44 PM

对于新的Linux用户,识别连接的设备至关重要,尤其是USB驱动器。 本指南提供了几种命令行方法来确定USB设备的名称,这对于格式化等任务必不可少。 虽然USB驱动器经常自动安装(例如, /

如何在根(/)分区上修复'设备上没有剩余空间”如何在根(/)分区上修复'设备上没有剩余空间”Apr 27, 2025 pm 04:43 PM

Linux系统,特别是磁盘空间有限的系统,最常见的问题之一就是根分区(/)空间耗尽。 出现此问题时,您可能会遇到以下错误: No space left on device 别慌!这只是表示您的根目录(/ 分区)已满,这是一个常见问题,尤其是在磁盘空间有限的系统或全天候运行的服务器上。 发生这种情况时,您可能会遇到以下问题: 无法安装或升级软件包。 系统启动失败。 服务无法启动。 无法写入日志或临时文件。 本文将引导您完成识别问题、安全清理空间以及防止再次发生此问题的实用步骤。这些说明适用于初

2025年Linux的前16名记事本替代品2025年Linux的前16名记事本替代品Apr 27, 2025 pm 04:42 PM

本文探讨了Linux用户的一流记事本替代方案。 记事本虽然在Windows上很棒,但缺少Linux版本。 本指南提供了适合各种需求和偏好的各种选择。 最高记录的替代方案

如何在SystemD中创建和运行新服务单元如何在SystemD中创建和运行新服务单元Apr 27, 2025 pm 04:41 PM

几天前,我遇到了32位CentOS 8分布,并决定在较旧的32位系统上进行测试。 启动后,我发现了一个网络连接问题。连接将下降,每次重新启动后都需要手动修复。这个公关

如何在Linux的硬盘上检查不良扇区如何在Linux的硬盘上检查不良扇区Apr 27, 2025 pm 04:40 PM

让我们澄清什么构成不良扇区或不良区块:这是硬盘驱动器或闪存的一部分,它变得不可读取或无法写入,这通常是由于对磁盘表面的物理损害或闪烁的闪存闪存晶体管。 累积

如何强制CP命令无需提示即可覆盖文件如何强制CP命令无需提示即可覆盖文件Apr 27, 2025 pm 04:39 PM

CP命令(“复制”)是Linux和其他类似Unix的系统的基本工具,用于复制文件和目录。 虽然对本地文件传输有效,但对于基于网络的副本,SCP(安全副本)是首选的

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器