27、内核进程与线程基础:用户与内核空间剖析

内核进程与线程基础:用户与内核空间剖析

1. 进程虚拟地址空间基础

虚拟内存的一个基本规则是,所有潜在可寻址的内存都在一个“盒子”里,即被沙箱化。我们将这个“盒子”视为进程映像或进程虚拟地址空间(VAS),无法“查看”盒子之外的内容。

用户 VAS 被划分为同质的内存区域,称为段或更专业地称为映射(因为它们是通过 mmap() 系统调用在内部构建的)。以下是每个 Linux 用户空间进程都会有的最小映射(段):
- 文本段 :存储机器代码,是处理器核心的指令指针(或等效寄存器)在进程的线程执行代码时所指向的位置,大小固定(模式:r - x)。注意,文本段并非从虚拟地址 0x0 开始,第一个虚拟页面(包含空地址 0x0)被称为“空陷阱”页面。
- 数据段 :位于文本映射的正上方,存储全局和静态数据变量(模式:rw -),实际上包含三个不同的数据段:
- 已初始化数据段 :存储预先初始化的全局/静态变量,大小固定。
- 未初始化数据段 :存储未初始化的全局/静态变量(在运行时自动初始化为 0,该区域有时称为 bss),大小固定。
- 堆段 :标准 C 库用于内存分配和释放的 API(如 malloc() 系列例程)从这里获取内存。但在现代 glibc 中,只有请求小于 MMAP_THRESHOLD 字节(默认 128 KB)的 mall

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值