0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是内存碎片Linux

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者:Vincent 2023-10-08 10:12 次阅读

什么是内存碎片?

内存碎片在Linux很早的时候就已经出现了,了解早期内存碎片产生的历史,有利于我们对它的理解。

假设现在有一块32MB大小的内存,一开始操作系统使用了最小的一块——4MB大小,剩余的内存要留给4个进程使用,如图(a)所示。

图片

进程A使用了操作系统往上的10MB内存,进程B使用了进程A往上的6MB内存,进程C使用了进程B往上的8MB内存,如图(b)所示,:

图片

进程D需要5MB内存,所以剩余的内存不足以装载进程D,这个内存末位就形成了第一个空洞(内存碎片)。假设某个时刻,操作系统需要运行进程D,因为系统中没有足够的内存,所以需要选择一个进程来换出,为进程D腾出足够的空间。假设操作系统选择进程B来换出,这样进程D就装载到了原来进程B的地址空间里,于是产生了第二个空洞,如图(c)所示:

图片

假设操作系统某个时刻需要运行进程B,也需要选择一个进程来换出,假设进程A被换出,那么操作系统中又产生了第三个空洞,如图(d)所示:

图片

随着时间的推移,内存空洞会越来越多,内存的利用率也随之下降,这些内存空洞就是我们常说的内存碎片。

图片

看到这,你已经知道了什么是内存碎片,同时还了解了一种内存管理机制——动态分区法。上述举例其实就是动态分区法,操作系统早期使用动态分区法来管理内存。

怎么解决内存碎片化问题?

思路其实很简单:把多个小块内存拼成一个大块内存。

早期使用动态分区法的操作系统,为了解决碎片化问题,就是动态地移动进程,使得进程占用的空间是连续的,并且所有的空闲空间也是连续,这样就把多个小内存块拼起来了。但是缺点也非常明显,进程的迁移需要耗费大量的时间。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10990

    浏览量

    206736
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72769
  • 操作系统
    +关注

    关注

    37

    文章

    6287

    浏览量

    121886
  • 进程
    +关注

    关注

    0

    文章

    193

    浏览量

    13876
收藏 人收藏

    评论

    相关推荐

    linux内存相关知识科普

    linux 内存组织结构和页面布局,内存碎片产生原因和优化算法。
    发表于 08-08 10:57 312次阅读

    走进Linux内存系统探寻内存管理的机制和奥秘

    Linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍Linux 内存组织结构
    的头像 发表于 01-05 09:47 1377次阅读

    Linux内存相关知识科普

    Linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍**Linu****x 内存组织结构和页面布局,
    发表于 07-25 14:43 554次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内存</b>相关知识科普

    C语言malloc申请内存时的碎片问题

    解决问题:malloc在申请内存的时候,内存碎片问题会导致原本内存大小足够,却申请大内存失败。
    发表于 08-06 16:58 1014次阅读
    C语言malloc申请<b class='flag-5'>内存</b>时的<b class='flag-5'>碎片</b>问题

    Linux内核内存规整总结

    1.前言 伙伴系统作为内核最基础的物理页内存分配器,具有高效、实现逻辑简介等优点,其原理页也尽可能降低内存外部碎片产生,但依然无法杜绝碎片问题。外部
    的头像 发表于 11-11 11:17 937次阅读
    <b class='flag-5'>Linux</b>内核<b class='flag-5'>内存</b>规整总结

    请问mymalloc会产生内存碎片吗?

    malloc申请内存在释放后,会产生内存碎片,所以UCOSIII内有专门的内存申请。原子哥视频(UCOSIII视频19讲)最后的时候说可以用原子哥自己的mamalloc函数来申请
    发表于 10-16 04:35

    如何避免内存碎片的产生

    考试题型:单选 8 道,不定项 2 道,编程 2 道,问答 1 道考点:进程间通讯的方式,linux的基本指令(考了grep,chmod),根据代码给出运行的结果问答题:简述内存碎片的定义,如何避免
    发表于 12-21 07:50

    如何避免Linux的物理内存碎片

    Linux buddyy系统是linux kernel比较稳定的一个模块,但是并不是说它没有缺陷,Linux内存管理系统自诞生之日,就一直存在物理
    的头像 发表于 05-01 16:43 5243次阅读
    如何避免<b class='flag-5'>Linux</b>的物理<b class='flag-5'>内存</b><b class='flag-5'>碎片</b>化

    你知道linux kernel内存碎片防治技术?

    Linux kernel组织管理物理内存的方式是buddy system(伙伴系统),而物理内存碎片正式buddy system的弱点之一,为了预防以及解决
    发表于 05-10 10:59 822次阅读

    OPPO内存碎片化引擎的作业

    OPPO宣传的内存碎片化引擎是个什么东西?它有何作用?针对上述问题,ColorOS官方微博特地发文科普,我们一起来看看。
    的头像 发表于 03-15 16:20 3441次阅读

    一文解析Linux内存系统

    Linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍Linux 内存组织结构
    的头像 发表于 09-01 10:46 2230次阅读
    一文解析<b class='flag-5'>Linux</b><b class='flag-5'>内存</b>系统

    Linux内存管理的基础知识科普

    ,为什么还要看你这一篇,这正是我写此文的原因,网上碎片化的相关知识点大都是东拼西凑,先不说正确性与否,就连基本的逻辑都没有搞清楚,我可以负责任的说Linux内存管理只需要看此文一篇就可以让你入
    的头像 发表于 06-08 15:24 1785次阅读

    一文解析Linux内存碎片整理原理

    内存整理也是这样,看起来很简单,但实现起来就不那么简单了。因为在内存整理后,需要修正进程的虚拟内存与物理内存之间的映射关系。
    发表于 12-28 12:41 550次阅读

    FreeRTOS内存碎片是怎么来的

    内存碎片 在看 FreeRTOS的内存分配方法之前我们先来看一下什么叫做内存碎片,看名字就知道是小块的、
    的头像 发表于 07-30 10:29 554次阅读
    FreeRTOS<b class='flag-5'>内存</b><b class='flag-5'>碎片</b>是怎么来的

    如何解决内存碎片内存交换效率慢的问题

    内存分页 分段的好处是能产生连续的内存空间,但是会出现大量内存碎片内存交换效率低的问题 先思考一下怎么解决这两个问题,
    的头像 发表于 10-09 16:57 548次阅读
    如何解决<b class='flag-5'>内存</b><b class='flag-5'>碎片</b>与<b class='flag-5'>内存</b>交换效率慢的问题