Linux
文章目录
Linux 内存管理
- 32位系统虚拟内存空间: 4GB(通常是被分隔成多个物理内存碎片),其中内核空间占用1GB(高地址),用户空间占用3GB(低地址)。
- 用户空间布局:
- 栈(Stack): 从高地址向低地址增长,存储函数参数、局部变量等。默认大小通常为8MB,但可自定义。
- 文件映射: 包括动态库、共享内存,位于栈和堆之间。
- 堆(Heap): 动态分配的内存区,从低地址向高地址增长。
- 未初始化数据段(.bss): 存放未初始化的全局变量和静态变量。
- 已初始化数据段(.data): 存放已初始化的全局变量和静态变量。
- 程序代码段(.text): 存放可执行代码。
- 分页机制: 每页大小通常为4KB。
- 页表: 实现虚拟地址到物理地址的映射。
- 段页式内存管理: 地址结构包括段号、段内页号和页内位移。
Linux 虚拟内存
概述
- 虚拟内存空间:32位处理器的虚拟内存空间为4GB。
- 进程视角:每个进程认为自己拥有4GB的连续虚拟地址空间,实际上只有部分映射到物理内存。
- 物理内存与外部存储:物理内存中可能会存在碎片,部分内容会存储在外部磁盘上,需要进行数据的交换(页置换)。
虚拟地址与物理地址的映射
- 两次映射:
- 映射到虚拟内存空间。
- 映射到物理内存空间。
- 责任分配:
- 硬件部分:存储管理单元 (MMU) 负责将虚拟地址转换为物理地址。
- 软件部分&