linux内存基本概念

一、内存映射

        linux内核为每个进程提供一个独立的虚拟内存,在使用时通过内存映射将虚拟内存地址映射到物理内存地址。内存映射主要是内核维护一个映射表,记录虚拟内存地址与物理内存地址的映射关系。

        映射表存储在cpu内存管理单元(mmu)中,处理器可直接通过硬件找出要访问的内存,当进程访问的虚拟地址在映射表中找不到时,系统会产生缺页异常,然后对物理内存进行分配,更新映射表。

        现阶段linux提供两种内存管理机制,多级页表与大页,mmu使用多级页表方式,每页4k大小。

二、内存分配

        linux提供两种内存分配策略在首次访问时进行分配。

        1.brk()分配:需要分配的内存小于128K时通过移动堆顶的位置来分配内存。这些内存释放后并不会立刻归还系统,而是被缓存起来达到复用目的。使用brk()分配可以减少缺页的情况,提高内存访问效率,但内存没有归还系统,在内存工作繁忙时,频繁分配或释放会造成内存碎片。

        2.mmap()分配:大于128k时内使用内存映射,主要是在文件映射段找一块空闲内存分配出去。使用mmap()会在释放时将内存归还系统,但在内存工作繁忙时,频繁分配内存会导致大量缺页异常。

        内存频繁分配但是不释放会导致内存泄露,所以,程序用完内存后需要调用 free() 或 unmap() ,来释放不用的内存。操作系统也会监控内存使用,发现内存不足时会使用lru算法、swap机制、杀死进程等方式释放内存。

三、内存使用情况查看

        1.使用free查看系统内存使用情况

        mem表示物理内存,swap表示分区交换情况

        total:总内存

        used:使用内存

        free:未使用内存

        shared:共享内存

        buff/cache:缓存和缓冲区大小

        available:新进程可用内存大小,包括未使用内存与可回收内存

        2.使用top或top -hp pid查看各进程,线程使用内存情况,按m可切换到内存排序

        VIRT:虚拟内存大小,申请过就会计算在内

        RES:进程使用内存,不包括swap和共享内存

        SHR:共享内存,与其他进程共享的内存

        %MEM :使用的物理内存占系统总内存的百分比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值