段、页结合:程序员希望用段,物理内存希望用页,所以、、、

操作系统-段页结合的实际内存管理_操作系统

从虚拟内存中割出一个区域来给这个段,段就有了映射,但是这个虚拟内存不能正真的使用,需要把虚拟内存再映射一次,这个时候虚拟内存中的段分割成固定大小的页,每一页再去映射到物理内存中

1. 段、页同时存在

段面向用户,页面向硬件

操作系统-段页结合的实际内存管理_操作系统_02

2. 段页同时存在用的重定位

也就是地址翻译

从用户的角度来看就是段的访问,从物理内存的角度就是分成一页一页

操作系统-段页结合的实际内存管理_操作系统_03

3. 一个实际的段页结合

操作系统-段页结合的实际内存管理_操作系统_04

1. 段页式内存下程序如何载入内存?

  1. 虚拟内存割出一段区域给给用户,存放数据段、代码段
  2. 把用户的数据段分割成页,再给到物理内存上

操作系统-段页结合的实际内存管理_操作系统_05

2. 从fork()开始

  1. 分配虚拟内存
  2. 建立段表

操作系统-段页结合的实际内存管理_操作系统_06

进程0、进程1、进程2的虚拟地址

操作系统-段页结合的实际内存管理_操作系统_07

3. 接下来

  1. 分配内存
  2. 建立页表

操作系统-段页结合的实际内存管理_操作系统_08
操作系统-段页结合的实际内存管理_操作系统_09
操作系统-段页结合的实际内存管理_操作系统_10

4. 子进程和父进程都指向同一页

操作系统-段页结合的实际内存管理_操作系统_11

5. 程序+虚拟内存+物理内存

操作系统-段页结合的实际内存管理_操作系统_12

6. *p=7?

父进程*p=7 ,

子进程*p=8

操作系统-段页结合的实际内存管理_操作系统_13