段、頁結合:程式員希望用段,實體記憶體希望用頁,是以、、、
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISM9AnYldnJwAzN9c3Pn5GcuQ0MlQ0MlcnW1JkbMRTTU1ENJpWT00EVNhHM51UMFRUT4lFROhXSE9UeNRUT3lERNlHMD5UerpWT4lEVNZXTE10dJRUT5hzQOl3aq1EeJRVT2NmMiNnSywEd5ITW110MaZHetlVdO1GT3lERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)
從虛拟記憶體中割出一個區域來給這個段,段就有了映射,但是這個虛拟記憶體不能正真的使用,需要把虛拟記憶體再映射一次,這個時候虛拟記憶體中的段分割成固定大小的頁,每一頁再去映射到實體記憶體中
1. 段、頁同時存在
段面向使用者,頁面向硬體
2. 段頁同時存在用的重定位
也就是位址翻譯
從使用者的角度來看就是段的通路,從實體記憶體的角度就是分成一頁一頁
3. 一個實際的段頁結合
1. 段頁式記憶體下程式如何載入記憶體?
- 虛拟記憶體割出一段區域給給使用者,存放資料段、代碼段
- 把使用者的資料段分割成頁,再給到實體記憶體上
2. 從fork()開始
- 配置設定虛拟記憶體
- 建立段表
程序0、程序1、程序2的虛拟位址
3. 接下來
- 配置設定記憶體
- 建立頁表
4. 子程序和父程序都指向同一頁
5. 程式+虛拟記憶體+實體記憶體
6. *p=7?
父程序*p=7 ,
子程序*p=8