計算機體系結構與記憶體層次
- 記憶體最小的通路機關是1B=8bit,每個位元組都有自己的實體位址
- 總線一般是一次讀取4B=32bit
- cpu裡面有高速緩存cache和寄存器作為存儲幫手
- 通路速度最快的是幾納秒,最慢的幾毫秒,相差百萬級
- 程序會共享所需要的核心資源
- 程序和核心的邏輯位址會經過中間的存儲管理單元轉換成實體位址,實作抽象、保護、共享、虛拟化
- 作業系統核心放在記憶體的前面一部分,程序有一部分放在記憶體裡面,有一部分放在外存裡面,如圖
- 程序的邏輯位址空間可能會大于實體記憶體總量
作業系統采用的記憶體管理方式
- 重定位:段位址+偏移
- 分段:分成代碼、資料、堆棧
- 分頁:把記憶體分成最基本的機關
- 虛拟存儲:把資料存到硬碟上,使得邏輯位址空間大于實體記憶體空間
邏輯位址生成
- 靜态重定位是指裝入時把邏輯位址轉換成實體位址,裝入後不變
- 動态重定位指裝入後位址在執行中,子產品位址會改變
- 編譯:生成若幹子產品
- 連結:将子產品和庫函數連結到一起,形成一個完整的裝入子產品,此時生成邏輯位址
- 運作:将完整的子產品裝入記憶體
- 編譯和連結後每個目标子產品都以0号單元開始編址,不同程序有相同的邏輯位址
- MMU位址轉換子產品
連續記憶體配置設定
- 連續記憶體配置設定有兩種實作方式:固定分區配置設定,動态分區配置設定
- 程序内部無法利用的碎片叫内碎片,配置設定單元之間無法利用的碎片叫外碎片
- 動态配置設定下,程序大小可變,由作業系統确定那些是可用的那些是不可用的區域
- 配置設定政策有三個:First-fit,Best-fit,Worst-fit
- First-fit:找到第一個合适的分區就裝進去,簡單,但有外碎片,高位址有大塊記憶體空間,但大塊記憶體空間配置設定就要找比較久,較慢
- Best-fit:找到比它大,而且大得最小的分區,相對簡單,大的分區不會被拆開,但還是有外碎片,釋放分區較慢
- Worst-fit:找到比它大,而且大得最多的分區,不喜歡,不記
碎片整理
- 将程序間的外碎片整理起來
- 隻有可動态重定位的程式可以移動整理
- 一般在程序等待狀态下時移動
- 小個的外碎片會選擇跳過,避免開銷
分區兌換
- 記憶體不夠用時,會把等待狀态的程序先放到外存
夥伴系統
- 不斷将分區分成兩個小的部分,直到裝不下程序的前一次大小,最多空2^i-1内碎片
- 外碎片合并時如果不能合成空間大小2的整數幂,将不合并
- 目前unix和linux都有對夥伴系統的相關實作