記憶體分為按位元組編址(8位)和字編制(不同計算機不一樣,64位計算機就是64位,即8個位元組)
相對位址=邏輯位址 絕對位址=實體地址
從邏輯位址到實體地址的轉換由裝入解決。
裝入的三種方式
絕對裝入:在編譯時知道程式放在記憶體中的哪個位置,編譯程式將產生絕對位址的目標**。
靈活性很低,只適用於單道程式環境,只有單道程式環境可以在程式執行之前就能確定程式將要放入哪個位置
靜態重定位:又稱為可重定位裝入。裝入模組全部使用邏輯位址,在裝入的時候將邏輯位址全部轉換為實體地址。
特點是必須分配其要求的全部記憶體空間,如果沒有足夠的記憶體,就不能裝入作業。作業一旦進入記憶體後,在執行期間就不能再移動,也不能再申請記憶體空間。
動態重定位:又稱為動態執行時裝入。裝入模組使用相對位址。相對位址到實體地址的轉變要等到實際執行的時候才能確定。因此裝入記憶體後所有的位址仍然是邏輯位址。這種方式需要乙個重定位暫存器的支援。
重定位暫存器:存放裝入模組存放的起始位置。當實際執行的時候實時地將邏輯位址轉換為實體地址。
採用動態重定位允許程式在記憶體中發生移動。可以將程式分配到不連續的儲存區:在程式執行前只需要裝入他的部分**即可投入運算,然後在程式執行期間根據需要動態申請分配記憶體,便於程式段的共享,可以向使用者提供乙個比儲存空間大得多的位址空間。
鏈結的三種方式
記憶體空間的分配與**
作業系統需要提供某種技術從邏輯上對記憶體空間進行擴充
記憶體保護:保護各個進行執行互不干擾
方法一:在cpu中設定一對上下限暫存器,存放程序的上下限位址。程序的指令要訪問某個位址時,cpu檢查是否越界。
方法二:採用重定位暫存器(基址暫存器)和界位址暫存器(限長暫存器)進行越界檢查。重定位暫存器中存放的是程序的起始實體地址,界位址暫存器中存放的是程序的最大邏輯位址。
覆蓋技術
用於解決「程式大小超過物理記憶體總和」的問題
覆蓋技術的思想:將程式分為多個段(多個模組)。常用的段常駐記憶體,不常用的段在需要時調入記憶體。
記憶體中分為固定區和 若干個覆蓋區
需要常駐記憶體的段放入固定區中,調入後就不再調出(除非執行結束)。不常用的段就放在覆蓋區中。按照自身邏輯結構,讓那些不可能同時被訪問的程式段共享同乙個覆蓋區。
程式設計師必須宣告覆蓋結構,作業系統完成自動覆蓋。缺點:對使用者不透明,增加了使用者程式設計負擔。(已經沒人用了)
交換技術
也叫做對換技術:記憶體空間緊張時,系統將記憶體中某些程序暫時換到外存中,把外存中某些已經具備執行條件的程序換入記憶體(中級排程)
程序的pcb需要常駐記憶體。
中級排程(記憶體排程):決定將哪個處於掛起狀態的程序重新調入記憶體。
暫時換出外存等待的程序的狀態為掛起狀態。
掛起狀態可以分為:就緒掛起、阻塞掛起兩種狀態。
應該在外存的什麼位置儲存被換出的程序?
具有對換功能的作業系統中,通常把磁碟檔案分為檔案區和對換區兩部分。檔案區主要用於存放檔案,主要追求儲存空間的利用率,因此對檔案區空間的管理採用離散分配方式;對換區空間只佔磁碟空間的一小部分,被換出的程序資料就存放在對換區。對於對換的速度直接影響到系統的整體速度,因此對換區空間的管理主要追求換入換出速度,因此通常對換區採用連續分配方式。總之,對換區的i/o速度比檔案區的更快。
應該什麼時候交換?
交換通常在許多程序執行且記憶體吃緊時進行,而系統負荷降低就暫停。例如:在發現許多程序執行時經常發生缺頁,就說明記憶體緊張,因此可以換出一些程序;如果缺頁率明顯下降,就可以暫停換出。
應該換出哪些程序?
可優先換出阻塞程序;可換出優先順序低的程序;為了防止優先順序低的程序飢餓,有的系統還會考慮程序在記憶體的駐留時間。。。(pcb常駐記憶體)
覆蓋技術和交換技術的區別:
連續分配管理
系統為使用者程序分配必須是乙個連續的記憶體空間。
單一連續分配
記憶體被分為系統區和使用者區。記憶體中只能有一道使用者程式,使用者程式獨佔整個使用者區空間。
優點:實現簡單,沒有外部碎片;可以採用覆蓋技術擴充記憶體;不一定需要採取記憶體保護(eg:早期的ms-dos)
缺點:只能用於單使用者、單任務的作業系統;有內部碎片;儲存器利用率極低
內部碎片:分配給程序的記憶體區域中,如果有些部分沒有用上,就是內部碎片。
固定分割槽分配
將使用者區劃分為若干個固定大小的分割槽,在每個分割槽中之狀如一道作業,這樣就形成了最早的,最簡單的一種可執行多道程式記憶體管理方式。
如果分割槽大小相等:缺乏靈活性,但是很適用用於同一臺計算機控制多個相同物件。
如果分割槽大小不等:增加了靈活性,可以滿足不同大小程序的需求。產生一些大的,產生一些小的。
分割槽說明表:來實現每個分割槽的分配與**。每個表象對應乙個分割槽,通常按分割槽大小分配。
優點:實現簡單,無外部碎片
缺點:當使用者程式太大時,可能所有分割槽都不能滿足需求,用覆蓋技術來解決可能降低效能;可能產生內部碎片,記憶體利用率低
動態分割槽分配
又稱為可變分割槽分配。根據程序裝入記憶體時的大小動態建立分割槽。因此系統分割槽的大小和數目時可以改變的。
操作使用什麼樣的資料結構記錄記憶體
當很多空閒分割槽都能夠滿足需求時選擇哪乙個
使用動態分割槽分配演算法
分割槽的分配和**
動態分割槽沒有內部碎片,但是有外部碎片。
內部碎片:分配給某程序的內部區域中如果有些部分沒有用上
外部碎片:記憶體中的某些空閒分割槽由於太小而難以利用
為了解決外部碎片,我們可以採用緊湊技術,通過將不同程序的記憶體空間挪挪位將不連續的記憶體空間湊在一起。為了實現這種技術我們應該是用動態重定位的裝入方式,每次緊湊之後都將程序的起始位址都放在基址暫存器(重定位暫存器)中。
動態分割槽分配演算法
首次適應演算法
最佳適應演算法
缺點:每次採用最小的分割槽選擇,會產生很多外部碎片
最壞適應演算法
缺點:如果大程序到達就會導致沒有空間使用
鄰近適應演算法
首次適應演算法每次從開始查詢導致開始部分出現很多外部碎片。為了解決這個問題,每次從上次查詢結束的位置開始檢索。
實現:空閒分割槽以位址遞增的順序排列成迴圈鍊錶。每次記憶體分配從上次查詢結束的位置開始查詢。同首次適應演算法一樣每次分配以後不需要對鍊錶重新排列。
首次適用演算法雖然容易產生外部碎片,但是可能保留大分割槽。鄰近適應演算法雖然減少產生外部碎片,但是可能沒有外部碎片。
綜合來看首次適應演算法還是比較優秀的。
作業系統儲存管理 連續記憶體管理
1.記憶體層次 2.作業系統採取的記憶體管理方式 3.位址空間 4.邏輯位址生成時機 編譯時 假設起始位址已知 如果起始位址未知,必須重新編譯 類似於功能機 載入時 如果編譯時起始位置位置,編譯器需生成可重定位的位址 載入時,生成絕對位址 通過修改可執行檔案的可重定位表來生成絕對位址 執行時 虛擬儲...
作業系統 記憶體管理 連續分配管理
記憶體管理 對記憶體的劃分和動態分配 功能程式鏈結的三種方式 靜態鏈結 裝入時動態鏈結 執行時動態鏈結 裝入的三種方式 絕對裝入 重定位裝入 動態執行時裝入 邏輯位址空間與實體地址空間記憶體保護 1 設定上下限暫存器,cpu要訪問時,與兩個暫存器相比,判斷有無越界 2 重定位暫存器 最小實體地址 和...
作業系統 記憶體管理基礎
記憶體管理 os的記憶體管理主要負責記憶體的分配和 malloc free 同時位址轉換等功能也由os記憶體管理來做。常見記憶體管理機制 連續性分配管理方式 塊式管理。非連續性分配管理方式 頁式管理 段式管理 段頁式管理。1.塊式管理 將記憶體分為幾個固定大小的塊,每個塊只包含乙個程序。當程式執行需...