内存管理

alloc_page分配内存

由 张子攀 | 2900字 | 阅读大约需要6分钟 | 归档于内存管理

2021年9月28日

在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担。Linux内核使用二进制伙伴算法来管理和分配物理内存页面。伙伴系统是一个结合了2的方幂个分配器和空闲缓冲区合并计技术的内存分配方案, 其基本思想很简单。内存被分成含有很多页面的大块, 每一块都是2个页面大小的方幂. 如果找不到想要的块, 一个大块会被分成两部分, 这两部分彼此就成为伙伴。其中一半被用来分配, 而另一半则空闲。这些块在以后分配的过程中会继续被二分直至产生一个所需大小的块。当一个块被最终释放时, 其伙伴将被检测出来, 如果伙伴也空闲则合并两者.

继续阅读

Linux进程虚拟地址空间

由 梁金荣 | 2700字 | 阅读大约需要6分钟 | 归档于内存管理

2021年8月30日

谈到Linux进程虚拟地址空间,还要从程序说起。本文通过分析程序的编译执行过程,分享了Linux进程虚拟地址空间的结构、组织和创建,并通过分析Linux内核源代码,总结了进程、进程虚拟地址空间和虚存区的关系。

继续阅读

动态链接与静态链接

由 孙张品 | 5600字 | 阅读大约需要12分钟 | 归档于内存管理

2020年11月2日

本文对内存管理一章学习内容进行补充和记录,包括进程地址空间的分配、与撤销(mmap,munmap),动态链接与静态链接的区别,静态链接简单实验。

继续阅读

CMA机制

由 贺东升 | 1600字 | 阅读大约需要4分钟 | 归档于内存管理

2020年10月8日

当一些设备需要使用大块连续物理内存时,可以比较容易的申请到,而当这些设备不工作时,这些内存又可以当做普通的内存那样被系统其他模块申请使用。引入CMA就是为了解决这个问题的,定义为cma区域的内存,也是由操作系统来管理的,当一个驱动模块想要申请大块连续内存时,通过内存管理子系统把CMA区域的内存进行迁移,空出连续内存给驱动使用;而当驱动模块释放这块连续内存后,它又被归还给操作系统管理,可以给其他申请者分配使用

继续阅读

伙伴系统

由 梁鹏 | 4000字 | 阅读大约需要8分钟 | 归档于内存管理

2020年9月1日

本文主要介绍伙伴系统的产生由来,以及伙伴算法的分配原理和相关的数据结构。

继续阅读

内存映射do_mmap相关源码分析

由 梁鹏 | 3700字 | 阅读大约需要8分钟 | 归档于内存管理

2020年8月19日

通过分析内存映射部分相关的do_mmap到do_mmap_pgoff,get_unmapped_area,mmap_region的函数源码来更好地理解内存映射。

继续阅读