作業系統之記憶體管理

2021-07-15 03:17:07 字數 1983 閱讀 4339

記憶體管理的功能有

1)空間分配與**

2)位址轉換

3)空間擴充

4)儲存保護

將資料與程式裝入記憶體分以下步驟

1)編譯成模組

2)鏈結模組 分靜態、裝入時動態、執行時動態鏈結

3)將模組裝入記憶體 分絕對裝入、可重定位裝入、執行時動態裝入

邏輯位址與實體地址

訪問資料時是使用實體地址獲取資料,多個程序可以享用同乙個邏輯位址,因為同乙個邏輯位址可以對映到不空的實體地址

作業系統通過重定位暫存器與界暫存器實現記憶體保護

if(邏輯位址 < v(界暫存器))

擴充記憶體來提高程式的執行效率、記憶體利用率、系統吞吐量,主要有覆蓋記憶體與交換記憶體兩種方式,覆蓋主要使用者單程式,現代計算機主要使用的交換技術主要用於多程序的併發,換入換出也就是程序的中級排程(作業排程,中級排程,程序排程)

記憶體連續分配方式

1)單一連續分配 單道程式簡單分配 但利用率低

2)固定分配 多道程式的簡單分配 但浪費多

3)根據一定演算法動態分配 浪費少且適用多程序 但碎片多

動態分配的演算法有:

首次適應:查詢開銷大

最佳適應:需要遍歷 且容易產生外部碎片

最壞適應:需要遍歷且容易導致大記憶體塊缺失

鄰近適應:會導致之前片段無法分配而閒置

記憶體連續分配方式(碎片少)

1)分頁分配 分為固定分頁與請求分頁(半頁碎片)

2)分段分配

分頁分配通過頁表對映實體地址,也太小導致頁表大,頁太大導致半頁碎片增大,通過使用快表解決每次獲取資料的兩次記憶體查詢帶來的效率問題,快表類似於mysql的查詢緩衝,採用二級頁表(將頁表在分頁儲存)來解決頁表過大導致的記憶體使用率降低的問題。

分段分配中,按照程式自然段劃分邏輯空間,每個段內的位址是連續的,段與段之間是非連續的。分段同分頁類似,通過段表對映實體地址,而每個分段中又可以用分頁的方式進行儲存。分段能反映程式邏輯結構,利於共享,分頁提高記憶體利用率

分段與分頁的保護方式都是訪問保護+越界保護

區域性性原理

區域性性原理表現在兩個方面

時間區域性性:針對常常訪問的資料

空間區域性性;針對常常訪問資料的鄰近資料(依據簇聚儲存)

區域性性原理是重要的指導思想,不管在程式效率上還是資料訪問上,快取記憶體器就是基於區域性性原理設計

虛擬記憶體的特性

1)多次性

2)對換性

3)虛擬性

注:程式程序在請求外純的時會發生中斷

請求分頁的方式實現虛擬記憶體

請求分頁原理類似於記憶體的分頁分配,其頁表項增加了狀態位、修改位、訪問字段位,外存位址位,其需要計算機擁有的硬體條件有內外存,中斷機制,位址轉換,分頁機制。

請求分頁的位址轉換過程大概如下

請求->保護->查詢記憶體->快表->分頁表

如果不在記憶體中則:

請求外存->中斷->保留現場->獲取外存->內外存交換->記憶體頁表修改

如果請求外存後,沒有足夠記憶體的情況下才會根據一定的演算法來進行內外存的資料交換

記憶體置換演算法有以下幾種

1)最佳置換演算法(opt) 無法實現

2)先進先出演算法(fifo) belady異常

3)最近最久未使用演算法(lru) lru效能較好,但需要暫存器和棧的硬體支援

4) 時鐘演算法(clock) 類似lru,效能優良,就是在資料上增加訪問以及修改的資訊得出最少被使用的資料

頁面分配策略

1)固定分配區域性置換

2)可變分配全域性置換

3)可變分配區域性置換

調入頁面的時機有預調入(命中率是問題)與請求調入(增大了i/o)

作業系統之記憶體管理

位址對映和重定位是乙個概念 適應於請求段的記憶體分配方法是最佳適應和可變分割槽 可重入 reentrant code 又稱為 純 purecode 是一種允許多個程序同時訪問的 為使各個程序所執行的 完全相同,絕對不允許可重入 在執行中有任何改變。目的 擴充主存容量 最基本的特徵 多次性 最主要的技...

作業系統之記憶體管理

便於程式設計師編寫程式 分治 可以控制每個段的許可權 寫 讀 符合跳轉指令邏輯 段號,段內偏移 執行時重定位 當執行某條指令時才進行位址重定位,先查詢程序pcb指向的段表,然後根據偏移量算出實體地址。編譯時重定位 編譯時就把所有跳轉指令進行重定位。缺點 導致必須使用重定位後的那一段記憶體,若那一段記...

作業系統之記憶體管理

訊號量 計數器,鎖機制 用來同步 訊號 通知某一事件已經發生 管道 父子程序 命名管道 任意程序 共享記憶體 實現多個程序共享的乙個記憶體。訊息佇列 訊息鍊錶 套接字鎖機制 互斥鎖 條件變數 讀寫鎖 訊號量機制 訊號機制 先來先服務 短作業優先 時間片輪轉法 高響應比優先 優先權排程演算法 多級佇列...