Linux内存管理方式

article/2025/10/11 14:11:40

 

目录

前言

内存管理方式

    分段式

    分页式

    段页式

虚拟地址如何映射到物理地址

缺页中断

内存交换

内存置换算法


前言

    之前说过linux中的程序地址空间是使用的虚拟地址,虚拟地址和真实的物理地址有着某种特殊的映射关系(MMU,全称Memory Manage Unit),使用虚拟地址可以提高内存利用率,实现离散式存储和内存访问控制。

    Linux中内存管理方式有三种:分段式、分页式、段页式。

内存管理方式

    分段式

        分段式内存管理是将整体虚拟地址空间划分为多个段(包括代码段、数据段、栈区、堆区等等)。这种内存管理方式的好处是有利于对地址空间进行管理。

    分页式

        这种内存管理方式是将整体虚拟地址空间划分为很多个小的分页(默认4096字节为一页,每页数据量越小,地址空间利用率越高),分页式的作用是实现离散式存储,提高内存利用率。

    段页式

        这种内存管理方式就是分段式和分页式的集合,即先将地址分段,然后对每段分页。

虚拟地址如何映射到物理地址

    分段式:在这种方式下虚拟地址的组成是段号和段内偏移量

    虚拟地址会通过段表来映射物理地址,段表是一种数据结构,其中描述了相关信息、段号和物理内存的起始地址。

    通过上图可知,实际地址=起始地址+偏移量。

   

    分页式:分页式的映射方式和分段式差不多,分页式的虚拟地址由页号和页内偏移量组成。

    虚拟地址通过页表来映射物理地址,页表主要包括页号、物理内存起始地址、缺页中断位、访问权限(当前地址能进行什么样的操作)组成。

    映射方式和分段式一样,是通过虚拟地址中的页号找到页表中物理内存起始地址,然后根据起始地址+页内偏移量得到物理地址。

    分段式和分页式的不同之处在于应用方向不同,分段式利于管理,分页式趋向于碎片化管理,提高内存利用率且便于控制内存的访问。

缺页中断

    当程序要访问一块内存时,经过页表映射时发现页表中的缺页中断位被置位(这个地址原先的数据现在不存在于内存中了),则会触发缺页中断。触发缺页中断后需要重新进行内存置换才能访问,置换后的地址不一定与原地址相同。

内存交换

    因为计算机内存是有限的,如果内存满了,那么再想加载一个新程序进来的话计算机是会直接崩溃的,为了避免内存满后无法运行新的内存,故设计计算机按某种规则将内存中的某些数据从内存中移到硬盘上(实际上是暂时移动到硬盘上的交换区也叫swap区,这个区大小通常是内存大小的两倍,而且不会被我们计算机用户所用,也就是说我们平常在计算机中看到的磁盘总大小是不包含交换区的),然后将腾出的空间供当前程序所用。

    这里注意一旦出现内存交换后,程序运行速率变慢,因为内存交换的效率低下,所以平常我们在计算机上开太多软件或游戏后,电脑会变卡。

内存置换算法

    内存置换算法主要有 LRU——最久未使用, 即会将最久未使用的数据移动到磁盘上

                                      LFU——最少未使用 ,即会将最少未使用的数据移动到磁盘上

                                      FIFO——先进先出(和队列相似),即最先进入内存的数据会被交换


http://chatgpt.dhexx.cn/article/n0QaQKA7.shtml

相关文章

一文讲透Linux内存管理

一、Linux内存管理概述 Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩等一系列操作的管理。在Linux中,内存被划分为多个区域,每个区域有不同的作用,包括内核空间、用户空间、缓存、交换分区等。Linux内存管理的目标是最…

Linux内存管理(一):内存管理概述

首先明确下面几个概念: 程序(Program):一组指令的有序集合,是静态的实体。进程(Process):执行程序后,操作系统将程序的可执行文件和它的相关依赖加载到内存中,得到的动态的实体称为进程。 程序和进程并不…

史上最全linux内存管理

Linux内存结构 Node 首先, 内存被划分为结点. 每个结点关联到系统中的一个处理器,内核中表示为pg_data_t的 实例. 系统中每个节点被链接到一个以NULL结尾的pgdat_list链表中<而其中的每个节点利用pg_data_tnode_next字段链接到下一节&#xff0e;而对于PC这种UMA结构的机…

一文掌握 Linux 内存管理

作者&#xff1a;dengxuanshi&#xff0c;腾讯 IEG 后台开发工程师 以下源代码来自 linux-5.10.3 内核代码&#xff0c;主要以 x86-32 为例。 Linux 内存管理是一个很复杂的“工程”&#xff0c;它不仅仅是对物理内存的管理&#xff0c;也涉及到虚拟内存管理、内存交换和内存回…

linux内存管理(一)-内存管理架构

文章目录 一、内存管理架构二、虚拟地址空间布局架构2.1内核地址空间布局2.2用户地址空间布局 三、物理内存体系架构3.1 正常内存3.2 设备内存四、内存结构五、内存模型六、虚拟地址和物理地址的转换七、页表八、内存映射原理分析 一、内存管理架构 内存管理子系统架构可以分为…

Linux内存管理(最透彻的一篇)

【转】Linux内存管理&#xff08;最透彻的一篇&#xff09; 摘要&#xff1a;本章首先以应用程序开发者的角度审视Linux的进程内存管理&#xff0c;在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管…

Linux内存管理机制(最透彻的一篇)

摘要&#xff1a;本章首先以应用程序开发者的角度审视Linux的进程内存管理&#xff0c;在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后&#xff0c;我们给出一个内存映射的实例…

概述 - Linux内存管理(一)

内存管理是从单板上电运行uboot启动引导linux并完成文件系统挂载&#xff08;文件系统管理Nandflash&#xff09;过程前两个环节都需要完成的重要工作&#xff0c;并且随着程序推进的内存管理也逐渐完善起来。如果一步到位直接编写一个非常完整的内存管理系统&#xff0c;这个过…

linux 内存管理

目录 1 Linux内存管理概述 1.1 内存的层次结构 1.2 虚拟内存概述 1.2.1 虚拟内存基本思想 1.2.2 进程虚拟地址空间 1.3 内核空间到物理空间的映射 1.3.1 内核空间的线性映射 1.3.2 内核镜像的物理存储 1.4 虚拟内存实现机制 2 进程用户空间管理 2.1 进程用户空间布局…

linux内存管理

内存管理 一、相关概念 ● 虚拟内存&#xff1a;内存管理的一种技术&#xff0c;它使得应用程序认为它拥有连续的可用内存&#xff08;一个连续完整的地址空间&#xff09;&#xff1b; ● 物理内存&#xff1a;相对于虚拟内存而言&#xff0c;指通过物理内存条而获得的内存空间…

Linux中内存管理详解

Linux中内存管理 内存管理的主要工作就是对物理内存进行组织&#xff0c;然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。 虚拟地址的作用 如果用户进程直接操作物理地址会有以下的坏处&#xff1a; 1、 用户进程可以直接操作内核对应的内存&#xff0c;破坏内…

Linux 内存管理 详解(虚拟内存、物理内存,进程地址空间)

Linux -操作系统内存管理 存储系统存储器的层次结构 Linux的内存管理物理内存物理内存管理 虚拟内存虚拟地址空间(写时拷贝) 和物理地址映射关系页表虚拟内存优缺点 「在 4GB 物理内存的机器上&#xff0c;申请 8G 内存会怎么样&#xff1f;」 计算机硬件的五大组成部分为&…

逆向汇编与反汇编——汇编基础快速入门

一、常用32位寄存器介绍 不同位数的寄存器的名称&#xff1a; eax&#xff1a;累加寄存器。通常用于算数运算&#xff0c;将结果保留在eax当中&#xff0c;当然也可以用于其他用途&#xff0c;比如一般把返回值通过eax传递出去。 ebx&#xff1a;基址寄存器 。有点类似于ebp…

汇编语言(四)——编程语法入门

目录 0.第一个汇编程序 1.语言常量 &#xff08;1&#xff09;整数常量 &#xff08;2&#xff09;实数常量 &#xff08;3&#xff09;字符常量 2.保留字 3.标识符 4.伪指令 5.指令 &#xff08;1&#xff09;标号 &#xff08;2) 指令助记符 &#xff08;3&#…

汇编语言轻松入门

​通常说的学习编程其实就是学习高级语言编程&#xff0c;比如C语言、C语言、Python语言、JAVA语言等等&#xff0c;即那些为人类设计的计算机语言。 但是&#xff0c;我们的计算机它并不理解什么是高级语言&#xff0c;计算机只是一个机器&#xff0c;它只有电气的特性&#…

汇编入门(一)

汇编入门&#xff08;一&#xff09; 1.第一个汇编程序 目前利用的是keil软件&#xff0c;建立文件时扩展名一定要为asm 如何查看具体地址存储器中的值&#xff1a; 在工具栏上选择“VIEW”>“memory windows”>“memory1” 然后输入地址即可&#xff1a; 注意这里…

汇编语言入门--调试工具debug的使用(史上最全,11种常见命令)

汇编语言入门–调试工具debug的使用&#xff08;史上最全&#xff0c;11种常见命令&#xff09; 1.直接启动debug程序 详见&#xff1a;https://bingshuai.blog.csdn.net/article/details/119978461 2.检查和修改寄存器内容命令R 检查 -r 修改 这里用AX来举例&#xff1a; -…

汇编语言入门(二)

汇编语言入门&#xff08;一&#xff09; 文章目录 寄存器【内存访问】内存中字的存储DS和【address】字的传送mov、add、sub指令数据段栈栈顶越界的问题PUSH和POP指令栈的综述栈段【栈的综述】 寄存器【内存访问】 内存中字的存储 4E20是两个字节构成一个字。 上图中0地址单…

汇编语言学习入门+亲自实操+图形并茂

汇编器 汇编器是将汇编语言转化为机器码的程序。或许你会以为汇编转化到机器码没什么大不了的&#xff0c;毕竟几乎是一对一的转换。但nasm存在的意义在于它可以很好的适应多种处理器平台&#xff0c;让编写汇编这件事都变得可移植了。nasm可以在Ubuntu下汇编&#xff0c;使用…

ARM 汇编语言入门

[翻译]二进制漏洞利用(二)ARM32位汇编下的TCP Bind shell&#xff1a;https://bbs.pediy.com/thread-253511.htm ARM汇编语言入门 From&#xff1a;ARM汇编语言入门(一)&#xff1a;https://zhuanlan.zhihu.com/p/109057983 原文地址&#xff1a;https://azeria-labs.com/writi…