Linux 0.11 源码阅读笔记-内存管理
总览
- Linux 0.11 源码阅读笔记-总览
- Linux 0.11 源码阅读笔记-内存的基础概念
- Linux 0.11 源码阅读笔记-启动程序
- Linux 0.11 源码阅读笔记-内核代码
- Linux 0.11 源码阅读笔记-设备驱动程序
- Linux 0.11 源码阅读笔记-文件系统
- Linux 0.11 源码阅读笔记-内存管理
内存管理
本人手工制作的 Linux 0.11 内存管理图解
- 虚拟内存的实现, 使用的是页面出错异常处理. 然后调用
do_no_page()
来读取硬盘数据(必要时先回写), 腾出内存空间. - 写时复制 (copy on write) 机制, 新建进程时, linux不会立刻复制进程数据.
只有某个进程需要进行数据写操作时, 才真正开始执行复制操作.
好处是, 节约内存, 加快创建进程的速度. - Linux 0.11版本的内存管理的主要文件
/mm/memory.c
- 内存的一些基础概念请参考 Linux 0.11 源码阅读笔记-内存的基础概念
进程的内存空间
进程代码和数据在其逻辑地址空间中的分布
- Linux 0.11 每个进程只能有64M byte的逻辑内存.
- 环境参数块最多128K
- 堆栈指针是在逻辑地址的高位, 向下增长
- bss是进程未初始化的数据段, 第一页会被初始化为0
- 使用需求加载机制 (Load on demand), 因此在加载运行文件时, 只是分配64M的线性地址空间, 没有分配任何真正的物理内存.
- 此时, 内核在执行代码或加载数据时, 会触发缺页异常中断, 此时才调用
do_no_page
加载内容到物理内存.
内存的分配 malloc
使用存储桶原理进行内存的分配管理
- 实现很巧妙. 指针应用的出神入化
- 仅内核代码可以调用.
- 基本思想: 对申请的不同的内存块大小, 使用存储桶分别进行处理.
- 提高内存利用率, 可有效避免内存碎片化.
- 源码文件
/lib/malloc.c
参考
原创于 DRA&PHO