【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)
文章目录
- 一、用户空间内存管理 ( 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 操作系统 申请 " 虚拟地址空间 " 内存 , 并且将某个文件 " 映射 “ 到该申请的内存中 ; 如果 不需要映射文件 到该空间中 , 则该空间就是 ” 匿名空间 " , 可作为 " 堆内存 " 使用 ;
【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)相关推荐
- php从内存中获取源码_【PHP7源码分析】PHP内存管理
作者: 顺风车运营研发团队 李乐 第一章 从操作系统内存管理说起 程序是代码和数据的集合,进程是运行着的程序:操作系统需要为进程分配内存:进程运行完毕需要释放内存:内存管理就是内存的分配和释放: 1. ...
- 无盘服务器大内存的好处,4GB+64GB够用?看完秒懂,原来大内存还有那么多好处...
原标题:4GB+64GB够用?看完秒懂,原来大内存还有那么多好处 随着智能手机的普及,手机APP也随之而来,成了我们生活的一部分.但是,随着APP数量的增多和体量的增大,也占据了手机的大部分内存,让不 ...
- C语言 利用malloc()和realloc()动态分配内存
1. C语言定义1个数组的时候, 必须同时指定它的长度. 例如: int a[5]={1,2,3,4,5}; //合法 int b[6]; //合法int c[]; //错误 因为没有指定长度 但是下 ...
- 【Linux 内核 内存管理】虚拟地址空间布局架构 ② ( 用户虚拟地址空间组成 | 内存描述符 mm_struct 结构体源码 )
文章目录 一.用户虚拟地址空间组成 二.内存描述符 mm_struct 结构体源码 一.用户虚拟地址空间组成 " 用户虚拟地址空间 " 包括以下区域 : ① 代码段 ② 数据段 ③ ...
- Linux 内存管理与系统架构设计
Linux 提供各种模式(比如,消息队列),但是最著名的是 POSIX 共享内存(shmem,shared memory). Linux provides a variety of schemes ( ...
- 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )
文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...
- 显卡 内存分配 linux,【原创】Linux环境下的图形系统和AMD R600显卡编程(4)——AMD显卡显存管理机制...
显卡使用的内存分为两部分,一部分是显卡自带的显存称为VRAM内存,另外一部分是系统主存称为GTT内存(graphics translation table和后面的GART含义相同,都是指显卡的页表,G ...
- 从结构体、内存池初始化到申请释放,详细解读鸿蒙轻内核的动态内存管理
摘要:本文带领大家一起剖析了鸿蒙轻内核的动态内存模块的源代码,包含动态内存的结构体.动态内存池初始化.动态内存申请.释放等. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dyna ...
- Linux云计算架构-用户及用户组管理
文章目录 Linux云计算架构-用户及用户组管理 1. 用户管理命令 1. 查看用户信息 2. 添加用户 3. 添加组 4. 修改用户信息 5. 修改组信息 6. 删除用户 7. 删除组 8. 用户密 ...
最新文章
- 建立企业级产品测试报告体系(概述)
- 3-openstack之keystone上
- windows 远程桌面 启动方式
- 基于STM32分析栈、堆、全局区、常量区、代码区、RAM、ROM
- 最大后验估计_PR Ⅱ:贝叶斯估计/推断及其与MAP的区别
- python中分支结构包括哪些_python中的分支结构
- LeetCode 1062. 最长重复子串(二分查找)
- LeetCode 532. K-diff Pairs in an Array
- 由于连接方在一段时间后没有正确答复或连接的主机_新风换气机使用效果不佳,为何?掌握正确使用方法就好了...
- 软工课设第一周周四报告
- php 修改文件的权限_php修改文件权限
- Aruba7010 默认密码_收藏 | 各大品牌的变频器默认密码、万能密码、超级密码汇总...
- python实现栅栏密码加解密
- 虚拟机 Ubuntu 联网设置
- 浅谈Python爬虫(四)【英雄联盟人物背景故事爬取】
- iOS开发之GameCenter使用
- 利用Tushare获取A股所有股票代码
- 如何改进企业旧式工时管理系统?
- 关于MongoDB的Write Concern
- java namevaluepair_NameValuePair方式传参数