1)編譯compiler:編譯程式:將使用者源**編譯成若干個目標模組。
1) 邏輯位址(相對位址,虛位址)
使用者的程式經過彙編或編譯後形成目標**,目標**中的指令位址是相對位址。
一般首位址為0,其餘指令中的位址都相對於首位址來編址。 不能用邏輯位址在記憶體中讀取資訊
2) 實體地址(絕對位址,實位址)
記憶體中儲存單元的位址。 實體地址可直接定址被執行。
3)
將使用者程式中的邏輯位址轉換為執行時由機器直接定址的記憶體實體地址的過程。
1) 絕對裝入方式
編譯程式生成的「目標**」就是」裝入模組」 ,邏輯位址直接從某個位址r處增長,裝入模組直接裝入記憶體位址r處。
邏輯位址 = 實體地址
缺點:過於依賴硬體結構, 只適用早期針對硬體直接程式設計、單道環境下。
2) 靜態可重定位裝入
位址對映在程式執行之前進行,重定位後實體地址不再改變。
優點:不需硬體支援,可以裝入有限的多道程式
缺點:軟體裝入一次完成,乙個程式通常需要占用連續的記憶體空間,程式裝入記憶體後不能移動。也不易實現共享。
3) 動態執行時(重定位)裝入方式
實際執行中往往會需要程式在記憶體中的各位置移動,即經常需要重定位到不同的實體地址上。這種執行時移動程式要求位址變換要快速,實現時一般依靠硬體位址變換機構——乙個重定位暫存器。 程式裝入記憶體時,可多次重定位到不同位置。且可以不立即把裝入模組中的相對位址轉換為絕對位址,而是把這種位址轉換推遲到程式真正要執行時才進行。
裝入執行前,生成可執行檔案時進行的。 將多個目標模組及所需庫函式鏈結成乙個整體,以後不再拆開。
由乙個目標模組開始裝入,若又涉及外部模組呼叫事件,裝入程式再找出相應的外部目標模組,並將它裝入記憶體,還要修改目標模組中的相對位址。
比靜態鏈結好在**?
(1) 靜態鏈結好的程式,修改部分模組後,需重新鏈結成可裝入程式。動態方式則便於修改和更新。
(2) 便於實現共享。靜態的n個程式都需要乙個模組時,需要進行n次拷貝。
裝入時動態鏈結的問題:許多情況下,事先不知道某應用程式本次執行需要哪些模組,只能全部裝入,裝入時全部鏈結在一起,效率低。
優點:程式執行裝入的內容少了,加快了裝入過程,而且節省大量的記憶體空間。
為乙個使用者程式分配乙個連續的記憶體空間
(1)單一連續分配
記憶體分為系統區和使用者區兩部分:
系統區:僅提供給os使用,通常放在記憶體低址部分
使用者區:除系統區以外的全部記憶體空間,提供給使用者使用。
最簡單的一種儲存管理方式,只能用於單使用者、單任務的作業系統中。
優點:易於管理。缺點:對要求記憶體空間少的程式,造成記憶體浪費;程式全部裝入,很少使用的程式部分也占用記憶體。
(2)固定分割槽分配
把記憶體分為一些大小相等或不等的分割槽(partition),每個應用程序占用乙個分割槽。作業系統占用其中乙個分割槽。
提高:支援多個程式併發執行,適用於多道程式系統和分時系統。最早的多道程式儲存管理方式。
1) 如何劃分分割槽大小:
分割槽大小相等:只適合於多個相同程式的併發執行(處理多個型別相同的物件)。缺乏靈活性。
分割槽大小不等:多個小分割槽、適量的中等分割槽、少量的大分割槽。根據程式的大小,分配當前空閒的、適當大小的分割槽。
2) 需要的資料結構
建立一記錄相關資訊的分割槽表(或分割槽鍊錶),表項有: | 起始位置 | 大小 | 狀態 |
分割槽表中,表項值隨著記憶體的分配和釋放而動態改變
3) 固定分配的不足:
內碎片(乙個分區內的剩餘空間)造成浪費
分割槽總數固定,限制併發執行的程式數目
3) 動態分割槽分配
分割槽的大小不固定:在裝入程式時根據程序實際需要,動態分配記憶體空間,即——需要多少劃分多少。 、
空閒分割槽表項:從1項到n項:記憶體會從初始的乙個大分割槽不斷被劃分、**從而形成記憶體中的多個分割槽。
優點:併發程序數沒有固定數的限制,不產生內碎片。
缺點:有外碎片(分區間無法利用的空間)
具體實現:
①資料結構
空閒分割槽表:記錄每個空閒分割槽的情況。 每個空閒分割槽對應乙個表目,包括分割槽序號、分割槽始址及分割槽的大小等資料項。
空閒分割槽鏈:每個分割槽的起始部分,設定用於控制分割槽分配的資訊,及用於鏈結各分割槽的前向指標; 分割槽尾部則設定一后向指標,在分割槽末尾重複設定狀態位和分割槽大小表目方便檢索。
②分割槽分配演算法
動態分割槽方式,分割槽多、大小差異各不相同,此時把乙個新作業裝入記憶體,更需選擇乙個合適的分配演算法,從空閒分割槽表/鏈中選出一合適分割槽
首次適應演算法ff(first-fit):
檢索:分配記憶體時,從鏈首開始順序查詢直至找到乙個大小能滿足要求的空閒分割槽; 分配:從該分割槽中劃出一塊作業要求大小的記憶體空間分配給請求者,餘下的空閒分割槽大小改變仍留在空閒鏈中。 若從頭到尾檢索不到滿足要求的分割槽則分配失敗
缺點:但低址部分不斷劃分,會產生較多小碎片;而且每次查詢從低址部分開始,會逐漸增加查詢開銷。
迴圈首次適應演算法 (next-fit)
分配:分出需要的大小
優點:空閒分割槽分布均勻,減少查詢開銷缺點:缺乏大的空閒分割槽
最佳適應演算法 (best-fit)
總是把能滿足要求、又是最小的空閒分割槽分配給作業,避免「大材小用」。
空閒分割槽排序:所有空閒分割槽按容量從小到大排序成空閒分割槽表或鏈。
檢索:從表或鏈的頭開始,找到的第乙個滿足的就分配
分配:分出需要的大小
缺點:每次找到最合適大小的分割槽割下的空閒區也總是最小,會產生許多難以利用的小空閒區(外碎片)
最差適應演算法/最壞匹配法(worst-fit):
基本不留下小空閒分割槽,但會出現缺乏較大的空閒分割槽的情況。
快速適應演算法
根據程序常用空間大小進行劃分,相同大小的串成乙個鏈,需管理多個各種不同大小的分割槽的鍊錶。程序需要時,從最接近大小需求的鏈中摘乙個分割槽。類似的:夥伴演算法
能快速找到合適分割槽,但鍊錶資訊會很多;實際上是空間換時間。
儲存器管理
通用計算機有三層儲存器 cpu暫存器,主存,輔存。為了緩和各儲存器之間處理速度的差異,在暫存器和主存之間加入了快取記憶體,而在主存和輔存之間加入了磁碟快取。模組裝入方式 1 絕對裝入方式 將目標模組裝入到記憶體事先指定的位置。記憶體的分配方式 一 連續分配方式。1 單一連續分配 只能用於單使用者單任...
儲存器管理
一 單一連續分配 分為系統區和使用者區,系統區僅提供給os使用,通常放在低位址,使用者區出系統區以外的全部記憶體空間,供使用者使用。二 固定分割槽分配 把記憶體劃分為大小不一的分割槽,有幾個分割槽便只允許幾道作業併發。會造成內碎片 內碎片 乙個分區內的剩餘空間 三 動態分割槽分配 根據程式大小需要多...
儲存器管理
儲存器管理 重點是記憶體管理,對其有效的管理直接影響儲存器的利用率 系統效能。儲存器資源的分配和 位址變換 儲存共享和保護 虛擬儲存的排程演算法 外存的管理 磁碟儲存器管理 檔案系統等中涉及。裝入時動態鏈結 由乙個目標模組開始裝入,若又涉及外部模組呼叫事件,裝入程式再找出相應的外部目標模組,並將它裝...