操作系统-段页结合的实际内存管理
山丘i 人气:0
段、页结合:程序员希望用段,物理内存希望用页,所以、、、
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214610153-1138228138.png)
**从虚拟内存中割出一个区域来给这个段,段就有了映射,但是这个虚拟内存不能正真的使用,需要把虚拟内存再映射一次,这个时候虚拟内存中的段分割成固定大小的页,每一页再去映射到物理内存中**
### 1. 段、页同时存在
段面向用户,页面向硬件
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214638397-2119674374.png)
### 2. 段页同时存在用的重定位
也就是地址翻译
从用户的角度来看就是段的访问,从物理内存的角度就是分成一页一页
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214650939-499318114.png)
### 3. 一个实际的段页结合
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214829509-1788521708.png)
#### 1. 段页式内存下程序如何载入内存?
1. 虚拟内存割出一段区域给给用户,存放数据段、代码段
2. 把用户的数据段分割成页,再给到物理内存上
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214909600-157869187.png)
#### 2. 从fork()开始
1. 分配虚拟内存
2. 建立段表
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214922198-1561709542.png)
进程0、进程1、进程2的虚拟地址
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214930225-1800412725.png)
#### 3. 接下来
1. 分配内存
2. 建立页表
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214947223-1475447521.png)
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214951099-1722086930.png)
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328214957230-1000322318.png)
#### 4. 子进程和父进程都指向同一页
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328215012874-728611127.png)
#### 5. 程序+虚拟内存+物理内存
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328215030403-486903355.png)
#### 6. *p=7?
父进程*p=7 ,
子进程*p=8
![](https://img2020.cnblogs.com/blog/1212924/202003/1212924-20200328215045469-1751887930.png)
加载全部内容