美文网首页
Linux 内存管理:内存分配

Linux 内存管理:内存分配

作者: 贪睡的企鹅 | 来源:发表于2019-07-19 12:23 被阅读0次

    分配时机

    当系统创建一个进程会调用exec函数,为进程做内存映射,分配内存。

    2 核心流程

    2.1 load_elf_binary

    load_elf_binary函数用来读取二进制文件创建内存映射,其内部存在如下步骤

    • 调用 setup_new_exec,设置内存映射区 mmap_base;

    • 调用 setup_arg_pages,设置栈的 vm_area_struct,这里面设置了 mm->arg_start 是指向栈底的,current->mm->start_stack 就是栈底;

    • elf_map 会将 ELF 文件中的代码部分映射到内存中来;

    • et_brk 设置了堆的 vm_area_struct,这里面设置了 current->mm->start_brk = current->mm->brk,也即堆里面还是空的;

    • load_elf_interp 将依赖的 so 映射到内存中的内存映射区域。

    2.2 调用malloc申请内存
    • 使用malloc 申请一小块内存调用brk函数在堆中分配

    • 使用malloc 申请一大块内存调用mmap函数在映射区分配

    3 内存不足时的处理

    • 回收缓存,比如使用 LRU(Least Recently Used)算法,回收最近使用最少的内存页面;

    • 回收不常访问的内存,把不常用的内存通过交换分区直接写到磁盘中swap

    • 杀死进程,内存紧张时系统还会通过 OOM(Out of Memory),直接杀掉占用大量内存的进程。

    相关文章

      网友评论

          本文标题:Linux 内存管理:内存分配

          本文链接:https://www.haomeiwen.com/subject/qcmjlctx.html