1 Linux进程内存映像
内存映象指的是内核如何在内存(虚拟地址空间)中存放可执行程序。
- 所有程序的编译链接起始地址相同
- 可执行文件中的不同的section加载到读写权限不同的内存
- Linux通过MMU和页表来管理内存:地址映射、权限管理
2 内核空间
所有进程的内核空间都映射到同样的物理内存
3 用户空间
- 每个进程的用户空间分别映射到不同的物理内存
- 应用程序通过(系统调用、80中断)访问内核空间
4 地址映射
- 虚拟地址通过页表/TLB映射到物理内存
- 页表由OS维护,记录虚拟地址到物理地址的映射关系
- 通过页表还设置内存权限:读、写、可执行
5 地址转换
注:页表会被映射到内核空间中
6 为什么要使用虚拟内存?
- 避免使用物理内存带来的弊端(多个进程容易造成地址冲突)
- 为每个进程提供一个独立的、私有的地址空间
- 保护每个进程的空间不被其它进程破坏
- 内存读写权限管理、保障系统的安全运行