3、内存地址——MMU 地址转换
- MMU 是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件
- 分段机制把一个逻辑地址转换为线性地址
- 分页机制把一个线性地址转换为物理地址
4、内存地址——分段机制
1) 段选择符
- 为了方便快速检索段选择符,处理器提供了 6 个分段寄存器来缓存段选择符,它们是: cs,ss,ds,es,fs 和 gs
- 段的基地址(Base Address):在线性地址空间中段的起始地址
- 段的界限(Limit):在虚拟地址空间中,段内可以使用的最大偏移量
2) 分段实现
- 逻辑地址的段寄存器中的值提供段描述符,然后从段描述符中得到段基址和段界限,然后加上逻辑地址的偏移量,就得到了线性地址
5、内存地址——分页机制(32 位)
- 分页机制是在分段机制之后进行的,它进一步将线性地址转换为物理地址
- 10 位页目录,10 位页表项, 12 位页偏移地址
- 单页的大小为 4KB
6、用户态地址空间
- TEXT:代码段可执行代码、字符串字面值、只读变量
- DATA:数据段,映射程序中已经初始化的全局变量
- BSS 段:存放程序中未初始化的全局变量
- HEAP:运行时的堆,在程序运行中使用 malloc 申请的内存区域
- MMAP:共享库及匿名文件的映射区域
- STACK:用户进程栈
【文章福利】需要C/C Linux服务器架构师学习资料加群812855908(资料包括C/C ,Linux,golang技术,内核,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等)