首页 > 系统相关 >Linux内核如何通过内存回收和压缩机制来管理物理内存

Linux内核如何通过内存回收和压缩机制来管理物理内存

时间:2024-09-04 21:55:11浏览次数:6  
标签:内存 回收 内核 Linux 机制 物理

大家好,今天给大家介绍Linux内核如何通过内存回收和压缩机制来管理物理内存,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。

Linux内核通过一系列复杂的内存回收和压缩机制来有效管理物理内存,确保系统能够在不同负载条件下稳定运行。这些机制主要包括后台内存回收(如kswapd)、直接内存回收、OOM(Out of Memory)机制以及内存压缩技术。

首先,当物理内存充足时,内核会直接建立页框与页的映射关系,以满足进程对内存的需求。然而,当物理内存不足时,内核会启动内存回收机制。

后台内存回收主要通过kswapd内核线程实现。kswapd在内存不足时会在后台进行内存回收,这个过程是异步的,不会阻塞进程。它会扫描进程的页表,找到长时间未使用的页帧并释放它们,从而回收物理内存。

如果后台内存回收仍不能满足内存需求,内核会触发直接内存回收。在进程申请并访问内存时,如果此时内存可用page数小于一个预设的阈值(如pages_min),不足以进行内存分配建立映射关系,内核会触发直接内存回收。这个过程是同步的,会阻塞进程直到回收足够的内存。

如果直接内存回收之后,系统的剩余空闲内存仍然不足以进行内存分配,内核会进一步触发OOM机制。OOM机制会尝试找到一个占用内存较多的进程并终止它,以释放其占用的物理页帧,从而解决内存不足的问题。

除了上述的内存回收机制,Linux内核还采用了内存压缩技术来进一步节省内存。这些技术包括ZSWAP、ZRAM和ZCACHE等。它们通过在内存与磁盘之间或内存内部进行数据的压缩和解压缩操作,减少了实际使用的物理内存量,从而提高了内存的利用率。

综上所述,Linux内核通过后台内存回收、直接内存回收、OOM机制以及内存压缩技术等多种手段来有效管理物理内存。这些机制和技术协同工作,确保了系统能够在不同负载条件下稳定运行,并提供了良好的性能和可靠性。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!

点击找小助理免费领取资料

扫码进群领资料icon-default.png?t=N7T8https://ad.pdb2.com/l/16QijNiGb32IFIn

标签:内存,回收,内核,Linux,机制,物理
From: https://blog.csdn.net/D_ovis/article/details/137358919

相关文章

  • 嵌入式linux就业前景怎么样?
    嵌入式Linux的就业前景在当前科技快速发展的背景下显得尤为广阔和乐观。以下是对嵌入式Linux就业前景的详细分析:一、行业背景与需求增长技术普及与应用广泛:嵌入式Linux作为一种操作系统,广泛应用于各种嵌入式设备中,如智能手机、智能家居、工业自动化等领域。随着物联网技术的......
  • Linux
    1.inode简介    inode是Linux文件系统的基础。硬盘的最小存储单位是扇区(Sector),块(block)由多个扇区组成。文件数据存储在块中。块的最常见的大小是4kb,约为8个连续的扇区组成(每个扇区存储512字节)。一个文件可能会占用多个block,但是一个块只能存放一个文件。虽......
  • redis内存碎片
    一、什么是内存碎片redis数据删除后,所占用内存不会马上换给操作系统,而是交给内存分配管理器,所以对操作系统来说redis仍然占用着这些内存。这里有个风险点是:redis释放的内存有可能是不联系的,这种不连续的内存很可能无法再次使用,最终造成了内存的浪费。二、如何判断有内存碎片可......
  • rocky linux 9部署zabbix6
    安装rocky9阿里巴巴开源镜像站http://mirrors.aliyun.com1、Rocky2、初始化防火墙        systemctlstopfirewalld        systemctldisablefilewalld        或者        systemctldisablefirewalld--now3、selinuxvi/etc......
  • Linux常用命令
    cdcd~:进入到当前用户的主目录cd-:切换到上一次所在的目录cd..:切换到上一级cd../..:切换到上两级**cd/**:切换到根目录lsls:列出目录下文件ls-a:列出所有文件,包括隐藏文件ls-A:列出所有文件,包括隐藏文件,除了.和..ls-l:列出文件的详细信息-t......
  • linux C++基于共享内存的同步机制
    无缘进程间同步,本来打算使用有名信号量进行同步,但是有名信号量的初始化会受进程启动顺序影响,故使用共享内存进行封装,封装后的使用方法类似二值信号量,代码如下:1#include<sys/ipc.h>//ipc:inter-processcommunication进程通信2#include<sys/shm.h>//shm:shareme......
  • Linux源码下生成并安装内核文档
    最近想使用man命令查看Linux内核函数的帮助信息,无奈有如下提示: xinu@slam:~$manprintkNomanualentryforprintk 而在Linux内核源码下,我们执行makehelp命令后,输出的提示内容有关于内核文档的如下信息:Documentationtargets: Linuxkernelinternaldocumentati......
  • 初尝内核中断
    每台计算机都连接有很多外设,那操作系统对这些外设进行管理时要如何通信呢?一般有轮询(Polling)和中断(Interrupt)两种,第一种是操作系统定时主动去查询这些外设,看有没有设备需要进行处理,而第二种则是外设需要处理时主动向操作系统发送请求信号,然后操作系统再做相应的处理。这第二种不......
  • 书写首个内核模块
    在《为Ubuntu换颗“心”》一文中,我们已经了解到了如何去编译安装新的Kernel,编译过程也生成了相应的内核树,为什么要生成内核树呢?其实就跟我们写应用程序时一样,写程序会调用到其他的库文件或其他文件生成的目标文件,最后再由链接器把这些目标文件处理生成可执行文件,就是这道理,这为......
  • 【为项目做准备】Linux网络编程重点知识(项目通用知识)
    Linux网络编程的简单梳理,不够再来更新~socket()setsockopt()bind()listen()accept()socket()socket()函数,用来创建套字节头文件:#include<sys/socket.h>函数:intsocket(intdomain,inttype,intprotocol)相应参数说明:-domain:指定套接字的地址族,常见的AF_INET......