【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

2023-03-30 14:18:15 浏览数 (1)

文章目录

  • 一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )
  • 二、内核空间内存管理
    • 1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap )
    • 2、sys_brk、sys_mmap 系统调用

一、用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc )


" 应用程序 " 通过使用

C 中的 malloc / free 函数 ,

或者 C 中的 new / delete 函数 ,

glibc 提供的 ptmalloc 函数 , FreeBSD 提供的 jemalloc 函数 , Google 提供的 tcmalloc 函数 ,

操作 堆内存 ;

上述函数 都是 " 用户空间 " 操作内存的函数 ;

malloc / free 函数 是 glibc 函数库 ( GNU 发布的 libc 库 ) 的 " 内存分配器 " , 由 ptmalloc 函数提供 内存操作接口 ;

glibc 库提供的 ptmalloc 函数 的原理是 , 调用 Linux 内核 提供的 brk / mmap 系统调用接口 , 以 " 内存页 “ 为单位 , 申请内存 , 然后将申请的内存 分成 ” 内存块 “ 分配给 用户空间 的 ” 应用程序 "

二、内核空间内存管理


1、内核内存管理系统调用 ( sys_brk | sys_mmap | sys_munmap )

在 " 内核空间 " 中 , 调用 Linux 内核中的 sys_brk / sys_mmap / sys_munmap 函数 , 管理 " 堆内存 " ;

  • sys_brk 通过修改 堆内存 的 终止地址 , 扩张 / 收缩 堆内存 ;
  • sys_mmap 在 " 内存映射区 " 分配 " 虚拟内存页 " ;
  • sys_munmap 释放 " 虚拟内存页 " ;

上述函数属于 " 虚拟内存管理 “ , 虚拟内存管理 从 ” 进程虚拟地址空间 “ 分配 / 释放 ” 虚拟内存页 " ;

2、sys_brk、sys_mmap 系统调用

可参考 【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 ) 博客 ;

① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现堆内存的 扩张或收缩 ;

② mmap 系统调用 : 向 Linux 操作系统 申请 " 虚拟地址空间 " 内存 , 并且将某个文件 " 映射 “ 到该申请的内存中 ; 如果 不需要映射文件 到该空间中 , 则该空间就是 ” 匿名空间 " , 可作为 " 堆内存 " 使用 ;

0 人点赞