Linux内存管理

Linux 内存管理 本文详细的介绍了多种内存管理方式,同时详细介绍了Linux下的内存管理方式 阅读详情

LINUX内存管理子系统是采用请求调页式的虚拟存储器技术实现的。在32位硬件平台上,LINUX逻辑地址为32位,因此每个进程的虚拟地址空间为4GB,操作系统占用了高端的1GB,低端的3GB则留给用户程序使用。

对于每个进程,LINUX使用mm_struct结构体来描述进程使用的地址空间的各种信息。在每个进程PCB(task_struct)中包含一个mm_struct的指针指向本进程的mm_struct。每个进程与用户空间相关的各种信息都存放在mm_struct结构体中,其中包含本进程的页目录表的地址,本进程的用户区组成情况等重要信息。

每个进程的用户区由一组vm_area_struct结构体组成的链表来描述。每个段如代码段、数据段、栈段等。

分页模型:

LINUX采用4级页表结构。第一级页表的起始地址保存在PCB中,页表中的每个表项保存了下级页表的页面号(即起始地址)。

为了实现跨平台运行,LINUX提供了一系列转换宏使得内核可以访问特定进程的页表。

内存映射

可执行文件内容仅仅映射到了对应进程的虚拟地址空间中,并没有调入物理内存。当程序开始运行并使用到这部分时,linux才通过缺页中断把他们从磁盘上调入内存。这种将文件连接到进程虚拟地址空间的过程称为内存映射。

物理内存模型:

适应NUMA硬件结构,LINUX建立物理内存模型,对于一个CPU来说,使用性能相同的一段内存空间被成为一个节点。

物理页面的分配:

LINUX使用free_area数组来管理空闲页面,每一个区域都有一套这样的管理结构。每个元素含有两个重要指针:一个指向一个位图区域;而另一个指向由page结构体(页面信息)作为元素的双向链表。

BUDDY(伙伴)算法:管理页面的分配和回收。以2的幂次方作为单位来管理内存。

页面回收:解决的关键问题就是如何快速地确定回收的页面能否与已经存在的相邻空闲页面组成更大的空闲页块。free_area数组中的每个元素指向的位图正是用于这一目的。当页面块被释放时,代码将通过位图检查是否有相同大小的相邻或者buddy内存块存在。如果有,则将它们结合起来形成一个大小为原来两倍的新空闲块。

SLab缓存管理:buddy只适合对大块内存的请求。对于需要小内存区的请求,如果也按照页面为单位分配,将是极大浪费内存资源。

slab分配器算法:

设计目标:

对象服用、硬件cache利用率。

页面换出或丢弃

为了保证进程需要页面时能够及时申请到足够的物理内存,LINUX利用内核线程kswapd来定期检查系统内的空闲物理内存总量。

kswapd通过以下三个途径来减少系统中使用的物理页面的个数:

减少缓存与页面cache的大小;

将系统V类型的共享内存页面交换出去;

换出或者丢弃属于进程用户空间的页面。

(转载)脏页-linux内核中的概念,因为硬盘的读写速度远赶不上内存的速度,系统就把读写比较频繁的数据事先放到内存中,以提高读写速度,这就叫高速缓存,linux是以页作为高速缓存的单位,当进程修改了高速缓存里的数据时,该页就被内核标记为脏页,内核将会在合适的时间把脏页的数据写到磁盘中去,以保持高速缓存中的数据和磁盘中的数据是一致的。

交换cache

当页面交换到交换空间时,LINUX总是避免页面写,除非必须这样做。只要页面在内存中没有被写过,则交换空间中的复制是有效的。LINUX使用交换缓存来跟踪这些页面,为一个页表入口链表,每个对应于系统中的物理页面。当LINUX需要将一个物理页面交换到交换空间时,它将检查交换缓存,如果对应此页面存在有效入口,则不必将这个页面写到交换空间中。因为自从上次从交换空间中将其读出来,内存中的这个页面还没有被修改。

(转载)红黑树(Red Black Tree) 是一种自 平衡二叉查找树 ,是在 计算机 科学中用到的一种 数据结构 ,典型的用途是实现 关联数组 。
它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。
红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。
它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。

Python量化交易实战:从零搭建你的第一个多因子选股模型(附完整代码) 本文是一份详细的Python量化交易入门实战指南,手把手教你从零搭建第一个多因子选股模型。内容涵盖环境配置、数据获取、因子挖掘与有效性检验、多因子合成以及完整的策略回测与绩效评估,并附有可直接运行的完整代码,帮助初学者快速掌握量化交易的基本概念与实践流程。 阅读详情

相关推荐

S905L3B机顶盒刷Armbian:从安卓Root到eMMC全攻略

在嵌入式开发与轻量级服务器搭建中,ARM架构设备因其低功耗和高性价比备受关注。晶晨S905L3B作为运营商机顶盒的主流芯片,通过刷写Armbian系统可将其改造为ARM小服务器。其原理是利用Amlogic芯片的uboot引导机制,将Linux系统写入eMMC存储,从而脱离原厂安卓限制。这一方案的技术价值在于以极低成本实现Docker容器、下载机、轻量数据库等服务的部署,应用场景涵盖家庭网络广告过滤、智能家居控制、复古游戏机等。本文以CM311-1S为例,详细拆解从安卓9 Root到Armbian写入eMMC

weixin_31476015的博客 341

《Linux性能优化实战》笔记(八)—— 内存是怎么工作的

一、 内存映射 我们通常所说的内存容量,指的是物理内存。物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存。那么,进程要访问内存时,该怎么办呢? Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(单个 CPU 指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。比如最常见的 32 位和

Hehuyi_In的博客 2394

vue 获取el-table多选的选中行

<el-table :data='tableData' ref="multipleTable" v-loading='loading' border max-height='700' style='width: 100%' size="mini"> <el-table-column type="selection" width="55"></el-table-column> <el-table-column label

且听风吟的博客 6649

linux 系统物理页面的管理----如何记录哪个页框是空闲的

linux 系统中,用 binary buddy allocator (二进制伙伴分配算法)去管理物理页面。1、 Managing Free Blockslinux 系统中将所有的空闲页面分为11个空闲链表,分别管理着1,2,4,8,。。。1024个连续的空闲页框。如2^0=1,这个链表中装的是1个页框大小的内存,2^10 表示装着1024个连续页框的大小的内存。这些链表称为 freelist.每...

qq_26566749的博客 2280

【C语言项目合集】这十个入门必备练手项目,让C语言对你来说不再难学!

适合刚入门C语言的编程学习小白的十个练手项目,每个都很经典且实用,让你学完C语言不再迷茫!

kxtxdy的博客 3万+

泛微ecology9 利用字段值动态控制明细表显示与隐藏

本文详细介绍了在泛微ecology9中,如何利用WfForm.bindFieldChangeEvent监听字段变化,结合jQuery动态控制明细表显示与隐藏的实战方法。通过五步操作,可实现根据字段值(如报销类型)智能切换明细表,提升表单交互体验与开发效率,并确保PC与移动端完美兼容。

7z8x2c4v6b9的博客 585

linux内存管理

对于物理内存内存,linux对内存的组织逻辑从上到下依次是:node,zone,page,这些page是根据buddy分配算法组织的,看下面两张图:

wwwlyj123321的博客 4547

三维视觉智能焊接系统:免示教技术的工业应用实践

本文深入探讨了三维视觉智能焊接系统中免示教技术的工业应用实践。该系统通过三维视觉相机实时扫描工件,自动识别焊缝并生成轨迹,将产线换型时间从数小时缩短至几分钟,显著提升了生产柔性。文章详细解析了其核心硬件、算法及工厂部署流程,并展望了与数字孪生、工艺智能化融合的未来趋势。

weixin_29091105的博客 432

关于 Linux 内存管理

Linux 内存管理涵盖了分配、释放、映射、交换、压缩、保护和监控等操作。最大限度地利用内存;保证系统的稳定与可靠;为应用提供抽象且隔离的运行环境。内存管理是操作系统对硬件内存资源的抽象与管理。它通过虚拟内存机制将进程的地址空间与物理内存解耦,使得每个进程都“感觉”自己独占了整个内存空间。物理内存是计算机中的主存(DRAM),它是 CPU 运行程序的直接存储区域。速度快:比磁盘快,但比 CPU 缓存慢;容量有限:受硬件限制;寻址方式:通过物理地址直接访问。

m0_74258518的博客 1089

UDP协议详解——使用Socket通信

UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。UDP使用具有最小协议机制的简单无连接通信模型。UDP提供数据完整性的校验和,以及用于在数据报的源和目标寻址不同函数的端口号。它没有握手对话,因此将用户的程序暴露在底层网络的任何不可靠的方面。

qq_3517289697的博客 3387

通过Simulink搭建一个智能微电网能量管理系统(Energy Management System, EMS)

通过上述代码实现,您可以逐步创建一个智能微电网能量管理系统。多源能量集成:整合光伏、风力发电、柴油发电机、电池储能等多种能源资源。负荷预测与调度:基于历史数据和天气预报,预测未来负荷和可再生能源输出,进行优化调度。储能系统优化:设计合理的充放电策略,确保储能系统的高效利用和寿命延长。经济性分析:评估不同运行模式下的经济性,考虑电价、维护成本等因素。环境影响评估:分析微电网对环境的影响,如减少碳排放、提高可再生能源利用率等。硬件在环仿真(HILS)

amy_mhd的博客 314

Linux内核之内存管理

NUMA(Non-Uniform Memory Access,非统一内存访问)是一种多处理器系统的内存架构。内存被划分为多个节点(node),每个节点与一个或多个处理器核心相关联。处理器访问本地节点内存的延迟较低,访问远程节点内存的延迟较高。以上是我自己学习内存管理时所做的笔记,很多抽象的东西用了通俗的语言来解释清楚,方便在学习的过程中理解,如果你正好是在学习内存管理的相关内容,可以以我的笔记作为参考,如果你是需要突击内存管理相关的知识,也可以结合着大语言模型来进行学习。

qq_56187001的博客 1128

RK3588 实战级 YOLOv5 Android 全解析:NPU 量化 + 多线程 + 跟踪算法,源码一次买齐

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

FJN110的博客 157

linux 内存管理

目录 1Linux内存管理概述 1.1 内存的层次结构 1.2 虚拟内存概述 1.2.1 虚拟内存基本思想 1.2.2 进程虚拟地址空间 1.3 内核空间到物理空间的映射 1.3.1 内核空间的线性映射 1.3.2 内核镜像的物理存储 1.4 虚拟内存实现机制 2进程用户空间管理 2.1 进程用户空间布局 2.2 进程用户空间的内核描述 2.2.1 概述 2.2.2 mm_struct 结构 2.2.3 vm_area_struct 结构 2.2.4 实例:内核态打印虚存..

5755

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux的内存管理

Linux的内存管理是操作系统中至关重要的组成部分之一。它负责管理系统中的物理内存,以便进程可以访问和使用它。

weixin_39512905的博客 884

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【Linux内存管理】

解决内部内存碎片化。不连续页分配器提供分配内存的接口vmalloc和释放内存的接口vfree,在内存碎片化的时候,申请连续物理页的成功率很低,可以申请不连续的物理页,映射到连续的虚拟页,即虚拟地址连续页物理地址不连续,每处理器内存分配器用来为每处理器变量分司内存。为了使系统可以正确的访问页在对应页框中的映像,在把一个页映射到某个页框上的同时,就必须把页码和存放该页映像的页框码填入一个叫做页表的表项中,这个页表就是映射记录表。如果释放的块大小大于链表中的其他块,它可能会与相邻的块合并以形成一个更大的块。

weixin_40146547的博客 694

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

一文讲透Linux内存管理

Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩等一系列操作的管理。在Linux中,内存被划分为多个区域,每个区域有不同的作用,包括内核空间、用户空间、缓存、交换分区等。Linux内存管理的目标是最大限度地利用可用内存,同时保证系统的稳定和可靠性。内存管理是计算机系统中负责管理系统内存资源的一种机制,主要包括内存分配、内存释放、内存映射和虚拟内存管理等方面。它是计算机系统中非常重要的一个组成部分,能够有效地提高系统的资源利用率和应用程序的性能。

LinkSLA的博客 1874

Linux上的内存管理

 Linux上的内存管理 [ FAQ ]Q:什么是mm?A:这可不是meimei哦!指的是内存管理(memory management)。是内核中的一套软件机制,用于有效管理内存的使用。Q:内存管理的软件实现了什么功能?A:1) 进程的保护,即进程向内存管理请求的物理页,由内存管理系统负责,不会将同一物理页(共享页面除外)映射到不同进程的虚地址空间。?? 2) 虚存的实现,允许所有进程使用的内存总

hondrif82q的专栏 1755

linux内存管理概述

linux内存管理建立在基本的分页机制基础上,在linux内核中RAM的某些部分将会永久的分配给内核,并用来存放内核代码以及静态内核数据结构。RAM的其余部分称为动态内存,这不仅是进程所需的宝贵资源,也是内核本身所需的宝贵资源。实际上,整个系统的性能取决于如何有效地管理动态内存。因此,现在所有多任务操作系统都在经历优化对动态内存的使用,也就是说,尽可能做到当要时分配,不需要时释放。 内存管理是o

bullbat的专栏 4453

Linux内存管理图解

转自: http://www.cublog.cn/u3/94690/showart_2051283.htmlLinux内存管理图解作者:wdy一、逻辑地址转线性地址   机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过MMU(CPU中的内存管理单元)转换成物理地址才能够被访问到。我们写个最简单的hello world程序,用gccs编译,再反编译后会看到以下指令:mov    0x80495b0, %eax这里的内存地址0x80495b0 就是一个逻辑地址,必须加上隐含的DS 数据段的

guogaofeng1219的专栏 1131

Linux - 内存管理

【1】前言 内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 内存管理是操作系统很重要的一部分。作为一个后端开发来说,了解操作系统是如何进行内存管理是必须要的。 【2】读前须知 在看正文之前,我们需要先了解一些相关的知识点帮助接下来的理解。 内存和外存 内存(RAM ) 可以大致理解为在市面上看到的内存条,通常有4G、16G等容量。有着易失性、容量较小、价格偏贵 读写很快得特点。这里需要和 CPU 的一二三级缓存分开理解哦

一七令 1646
上一篇: 操作系统--4内存管理
下一篇: 操作系统--文件系统
abcflyer
博客等级 码龄15年 49粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值