1.22k likes | 1.45k Views
Module 9: Memory Management. Background Logical versus Physical Address Space Swapping Contiguous Allocation Paging Segmentation Segmentation with Paging. 記憶體. 記憶體是記憶細胞 (cell), 每個都擁有獨一無二的實體位址的集合體 大部分的電腦都是以位元組為可定址的單位 (byte-addressable) 每一個儲存單元 ( 稱為位元 ) 可以保存一個 0 或 1
E N D
Module 9: Memory Management • Background • Logical versus Physical Address Space • Swapping • Contiguous Allocation • Paging • Segmentation • Segmentation with Paging Applied Operating System Concepts
記憶體 • 記憶體是記憶細胞(cell),每個都擁有獨一無二的實體位址的集合體 • 大部分的電腦都是以位元組為可定址的單位(byte-addressable) • 每一個儲存單元(稱為位元)可以保存一個0或1 • 而這些位元可以群聚在一起成為位元組(8個位元) • 而這些位元組又可以群聚在一起成為字組 • 左圖中位址11111110的內容是什麼?以位元樣式儲存在此的內容是10101010 Applied Operating System Concepts
記憶體 • 記憶體的儲存格是由0開始給予連續的編號, • 例如定址能力是8位元,則有256(=28)個記憶體儲存格,這些儲存格將被編號成左圖的位址 • 例如Pentium IV是一部32位元機器,表示這個處理器可以區分232個不同的記憶體位址 • n位元可以定址出2n個不同的位址 Applied Operating System Concepts
Background • 一個典型的指令執行週期將先從記憶體中提取出一個指令,此指令將被解碼並且可能造成運算元(operand)從記憶體中被取出,執行完畢後,結果可能被存回記憶體中 Applied Operating System Concepts
Background • 一個機器指令包含二個部分,運算碼 (opcode)與運算元(operand) • Ex. • 系統中,有16(=24)個暫存器R0…R15,每個容量8bit 有256(=28)個位元組,每個容量8bit opcode(4bit) operand(16bit) 需使用4bit指定使用哪一個暫存器 需使用8bit指定使用哪一個記憶體位址 Applied Operating System Concepts
Background • Ex. 一個高階程式語言 Total Price + Tax • 其低階語言為 Load R5 Price Load R6 Tax Add R0 R5 R6 Store R0 Total • 其中 -Price的值儲存在記憶體6C的位址上 -Tax 的值儲存在記憶體6D的位址上 -Total的值儲存在記憶體6E的位址上 • 指令在記憶體中的位址由程式計數器指定 • 變數在記憶體中的位址由運算元決定 5A 5B 5C 5D 6C 6D 6E Load R5 6 C Load R6 6 D Add R0 R5 R6 Store R0 6 E Applied Operating System Concepts
記憶體保護(Memory Protection) • 每一個行程皆有一個個別的記憶體空間,我們需要有決定合法位址範圍的能力,而且行程只能在這些合法位址存取。 • 這種保護可以由2個暫存器來達成 • 基底暫存器(base register) – 存放最小的合法實體記憶體位址 • 限制暫存器Limit register –存放合法實體記憶體範圍的大小 • 超出合法範圍的記憶體空間必須被保護 Applied Operating System Concepts
A Base And A limit Register Define A Logical Address Space • 每個使用者行程的基底與限制值會在內容轉換(context switch)時切換。 • 行程暫停時基底與限制值會儲存在行程控制表(process control block, PCB)中 Job2的大小是109200 Limit值為109200 300040+120900 = 420940 Applied Operating System Concepts
Memory Protection Hardware • 基底暫存器與限制暫存器可以由作業系統使用『特權指令』來設定,由於特權指令只能在監督模式中執行,而且只有作業系統能執行於監督模式中。 • 所以,只有作業系統可以設定基底暫存器與限制暫存器的內含值。 Applied Operating System Concepts
Memory Protection Hardware < base Base基底值 Limit 邊界值 Base + limit 基底+邊界值 >base+limit Applied Operating System Concepts
位址連結 • 通常,程式是以二進位的可執行檔的型態儲存於磁碟中。 • 程式必須被載入記憶體,並且放在為其所建立的行程中才能執行 • 在磁碟上正等待被載入到記憶體的所有行程,放在一個輸入佇列(input queue)中等候載入。 • 正常的步驟是 • 由輸入佇列中挑選一個行程,並且將他載入記憶體 • 執行時,他會從記憶體中存取指令和資料 • 行程結束時,他所佔用的記憶體空間會被宣告釋放 • 使用者程式可能位於實體記憶體的任何部分,因此,儘管記憶體位址空間是由0000開始計位,使用者行程的第一個位址也不必要就是0000 Applied Operating System Concepts
位址連結 9.01 使用者程式在執行時,要通過下面幾個步驟 Applied Operating System Concepts
Loader(載入)的功能 • Allocation(配置):在memory中尋找適當的space分配給程式 • Relocation(重定位):調整所有與位址相關的目的碼,使其對應到到所分配的位址 • Loading(載入):將目的程式(機器指令與資料)實地的搬入所分配的記憶體中準備執行 • Linking(鏈結)的功能 • 將數個目的程式結合,並處理目的程式間程式間符號參考的問題 Applied Operating System Concepts
Binding of Instructions and Data to Memory • 使用者行程可能位於實體記憶體的任何部分 • 在原始程式中的位址,通常是符號化的(ex. count) • 編譯程式通常將這些符號化的位址轉換成可重新定位的位址(ex. 距離這個模組的開始處第14得位元組) • 鏈結編輯程式(linkage editor)或載入程式(loader),再依次將這些可重新定位的位址連結到絕對位址(ex 74014) Applied Operating System Concepts
Binding of Instructions and Data to Memory 位址連結(Address binding)的工作就是連結指令或資料到記憶體的位址 連結的工作可在下述任何步驟完成。 • 編譯時間(Compile time): 在編譯時間若已確知程式在記憶體中的位址,那麼絕對碼(absolute code)便可產生 • 如果使用者行程起始於記憶體位址R,那麼所產生的編譯碼便以該位址為起始而往上擴增.(第2個指令位址在R+1,第3個指令位址在R+3….) • 如果將來起使位址改變了,程式就必須重新編譯(MS的*.com) • 載入時間(Load time): 若程式在編譯時間不能確定他在記憶體中的位址,那麼編譯程式必須產生重定位碼(relocatable code) 指令與資料的位址連結動作延遲到載入時間才進行 • 執行時間(Execution time): 如果行程執行時,能夠由原來的記憶體段落移到另一個記憶體段落的話,那麼連結的動作就會延遲到執行時間才發生。這時,必須使用特殊的硬體支援才可以完成。 Applied Operating System Concepts
Addition of Medium Term Scheduling Applied Operating System Concepts
Binding of Instructions and Data to Memory 編譯時間(Compile time): 程式執行只可以在固定的記憶體位址 載入時間(Load time): 程式執行可以在任意的空白可用記憶體 但程式執行時不可以改變其記憶體位址 執行時間(Execution time): 程式執行可以在任意的空白可用記憶體 程式執行時可以改變其記憶體位址 連結的工作可在下述任何步驟完成。 Applied Operating System Concepts
Logical vs. Physical Address Space • 邏輯位址與實體位址的概念對於記憶體管理十分重要. • 邏輯位置(Logical address) – CPU所產生的位址,也稱為虛擬位址(virtual address). • 實體位址(Physical address) – 實體記憶體所看到的位址. • 如果位址連結的動作在 『編譯時間』或『載入時間』完成,那麼邏輯位址等於實體位址。 • 但如果位址連結是在『執行時間』完成,能夠造成邏輯位址不等於實體位址。 • 邏輯位址與實體位址的對應是由記憶體管理單元(MMU)來完成 Applied Operating System Concepts
9.03 Applied Operating System Concepts
Memory-Management Unit (MMU) • 邏輯位址與實體位址的對應是由記憶體管理單元(MMU)來完成 • 使用者程式無法看到實際記憶體的位址,使用者程式所有的處理,都是以346這個數字來處理,只有當他被當作位址來處理時,他才會以相對於重定位暫存器的方式重新定位。 • 使用者程式面對的是邏輯上的位址,由記憶體對應硬體(MMU)將邏輯位址轉換成實際上的位址。. • 邏輯位址與實體位址對應的觀念,對於記憶體管理是很重要的. Applied Operating System Concepts
Logical vs. Physical Address Space • 有2種不同的位址: • 邏輯上的位址 (範圍從 0 到 max) • 實體上的位址 (範圍從 R+0 到 R+max, R為基底(重定位)值) • 使用者程式提供邏輯上的位址,CPU也只看到邏輯上的位址 • 記憶體管理單元(MMU)負責將邏輯位址轉換到對應在實體記憶體的位址。 實體位址 0 R+0 R+max 邏輯位址 (虛擬位址) 0 max Applied Operating System Concepts
Dynamic Loading • 之前討論到行程的程式碼與資料必須在實體記憶體中才能執行 • 行程的大小受限於實體記憶體的大小,為了讓記憶體有較佳的使用率,因此有了動態載入的概念 • 將載入的動作延遲到執行時才發生 • 使用動態載入時,常式只在被呼叫時才會被載入 • 動態載入的方式是將所有程式已可重定位載入的格式儲存在磁碟上,主程式一開始便載入到記憶體並且執行,當需要呼叫其他的常式時,首先看看被呼叫的常式是否已經存在於記憶體中,若不是,則將需要的常式載入於記憶體中並且開始執行 Applied Operating System Concepts
Dynamic Loading 使用者程式 需要使用時才將他載入 Applied Operating System Concepts
Dynamic Loading • 動態載入的優點 • 常式只有被呼叫時才會被載入 • 使用不到的程式部分永遠不會載入到記憶體內 • 例如,一些專門用來處理錯誤狀況的程式碼,由於這些程式碼總和起來體積可能非常龐大,然而他們只在極少數的狀況下會被用到這些程式碼(錯誤狀況並不常發生) • 動態載入不需要作業系統額外的服務 Applied Operating System Concepts
Dynamic Linking • 動態連結與動態載入類似,此時是連結的動作被延遲到執行時才發生 • 通常用在系統程式庫中,他可以讓不同的行程共用相同的系統副程式 • 使用動態連結,在程式中參用副程式處做一記號(Stub),該記號為一小段程式碼,只是如何尋找記憶體中的系統程式庫程式,或是如何載入系統程式庫程式(如果它不在記憶體中) Applied Operating System Concepts
Dynamic Linking 使用者程式1和2同時呼叫某個系統副程式 結果同一個系統程式庫副函式,在記憶體中有2個相同的拷貝 Applied Operating System Concepts
Dynamic Linking 使用者程式2要使用系統程式庫副函式時, 此時,副函式已在記憶體中, 用副函式在記憶體中的位址取代stub,便可直接使用此副函式 使用者程式1要使用系統程式庫副函式時,先檢查此副函式是否再記憶體中, 若沒有,則將他載入到記憶體中 Applied Operating System Concepts
Dynamic Linking 動態連結 所有的行程只需要使用一份相同的系統程式庫 動態連結需要作業系統題供一些支援,因為所需要的資源可能在另一個行程的記憶體空間,而作業系統是唯一可以檢查,並且允許多個行程存取相同的記憶體空間 Applied Operating System Concepts
Swapping • 一個行程必須在記憶體內才能被執行,然而一個行程可能會暫時的被置換出記憶體到備用儲存體儲存,然後再回到主記憶體中繼續執行 • 例如:中程排班程式
Swapping • 一般而言,一個被置換出去的行程,當再度置入到主記憶體時,是被安排在他原先所佔據記憶體空間中 • 如果位址連結是在編譯或載入時間完成,行程不能由原來的記憶體段落移到另一個記憶體段落 OS 置出 Process 置入 User space Backing store Main memory
Swapping • 置換的過程中需要備用儲存體的配合,通常備份儲存體是高速的硬碟。 • 當CPU排班程式決定了下一個要到CPU中執行的行程後,便交由分派程式處理 • 分派程式首先檢查這個要被執行的行程,是不是在記憶體中 • 如果不是,而且記憶體中沒有足夠可用的記憶體空間,則分派程式便將在主記憶體中的一個行程置換出,再置換入所要執行的行程
Swapping • 明顯的,使用置換的方式,在內容交換(context switch)需要耗費大量的時間,例如: • 一個使用者行程大小是1百萬個字組 • 備用儲存體為一標準的磁碟 • 磁碟的傳輸速度是每秒4百萬個字組 1000k/4000k = ¼秒=250豪秒 • 磁碟的平均潛伏時間是8豪秒 • 則置入(或置出)的時間為 250+8=258豪秒 • 由於置換的動作是雙向的,一個換入、一個換出,因此我們一個需要耗費516豪秒
Schematic View of Swapping Applied Operating System Concepts
Limit of Swapping Disk 行程P1置換出去 行程P2置換進來 行程P1正在等待I/O的執行 P2的記憶體資料,被P1的I/O動作污染了 • 正在執行I/O的行程不可被置換出去 • 被置換出去的行程,I/O動作必須暫停,等到下次被置換進來後,再執行I/O Applied Operating System Concepts
連續記憶體配置(Contiguous Allocation) • 記憶體通常分成二個部分,一部份給使用者程式,另一部份給作業系統的常駐程式使用 • 一般將作業系統放在低記憶體部分 • 一般情形下,會有數個使用者程式同時存放在主記憶體中,因此我們必須要考慮 • 如何將可用的記憶體分配給在輸入佇列中等待載入到主記憶體的行程 • 如何保護使用者程式間的記憶體不會互相存取
重定位暫存器與基底暫存器 • 如何保護使用者程式間的記憶體不會互相存取 • 使用重定位暫存器與基底暫存器 Applied Operating System Concepts
連續記憶體配置(Contiguous Allocation) • 如何將可用的記憶體分配給在輸入佇列中等待載入到主記憶體的行程 • 固定分割 • 變動分割 • 分頁法
Contiguous Allocation (Cont.) • 固定分割(fixed partition) • 主記憶體是分成特定數量的分割區。 • 當一個分割可用的時候,一個行程從輸入佇列挑選出來並且載入到此分割中 • 當一個行程中止時,則將它佔用的分割歸還給系統 • 分割區的數目=系統中最多可執行的程序數目 • 分割區大小=系統可執行程序大小的上限 • 記憶體空間浪費非常嚴重 程序1 程序2 程序3 程序4 浪費的空間 Applied Operating System Concepts
Contiguous Allocation (Cont.) 動態分割 當剛開始時,整個記憶體就像是一大塊未被劃分的區間,稱之為洞(Hole) 當行程進入系統,並要求記憶體空間時,作業系統便找出一段夠用的空間分配給該行程, OS OS OS OS process 1 process 1 process 1 process 2 process 2 process 3 Applied Operating System Concepts
Contiguous Allocation (Cont.) 動態分割 當行程結束時, 他所佔據的記憶體空間會歸還給系統, (產生新的洞(Hole)) 新的可用空間可以給接下來的行程使用 OS OS OS OS process 5 process 5 process 5 process 5 process 9 process 9 process 8 process 10 process 2 process 2 process 2 process 2 Applied Operating System Concepts
Hole 1 起始位址 s1 容量 c1 Hole 3 起始位址 s3 容量 c3 Hole 2 起始位址 s2 容量 c2 Contiguous Allocation (Cont.) Process 5 需要記憶體空間 r5 Process 4 需要記憶體空間 r4 輸入佇列: 記憶體可用空間佇列: 看hole1,hole2,hole3中,是否有一個 hole 可以容納 process4 如果沒有 1. 等待到有一個夠用的區間容納 Process 4 2. 跳過 Process 4, 先處理 Process 5 Applied Operating System Concepts
New Hole Hole 2 Hole 3 Hole 2 Hole 1 Hole 1 Contiguous Allocation (Cont.) 如果hole1 足夠大,可以容納 Process 4,便將Process 4載入 如果這各區間太大則可以分開為二, 一部分分配給該行程, 一部分返回到可用區間的集合內 Process 4 Process 4 Applied Operating System Concepts
Contiguous Allocation (Cont.) • 如果一個行程結束,則將他佔用的記憶體空間釋放,同時注意釋放的區間旁邊是否有可用區間的集合,如果有,則將其合併成一個大區間 • 然後看輸入佇列中是否有行程等待載入記憶體,以及這個新的可用區間可否容納此行程,如果可以,則將此行程載入記憶體中 Applied Operating System Concepts
Dynamic Storage-Allocation Problem • 如果一個行程的大小為n, 如何從一堆可用的洞中挑選出一個來載入它 • 最先配合(First-fit) • 最佳配合(Best-fit) • 最差配合(Worst-fit) 500k 1000k ? 800k P5 780k 2000k Applied Operating System Concepts
Dynamic Storage-Allocation Problem 780k P5 500k 1000k • First-fit: • 找出第一個足夠大的 hole, • 簡單,快速 800k 2000k Applied Operating System Concepts
Dynamic Storage-Allocation Problem 780k P5 500k 1000k • Best-fit: • 找出所有足夠大的 hole中,最小者 • 花時間,必須要排序,否則可用空間佇列要依大小排列 • 載入P5後,剩下的可用區間最小 800k 2000k Applied Operating System Concepts
Dynamic Storage-Allocation Problem 780k P5 500k 1000k • Worst-fit: • 找出所有足夠大的 hole中,最大者 • 花時間,必須要排序,否則可用空間佇列要依大小排列 • 載入P5後,剩下的可用區間最大 800k 2000k Applied Operating System Concepts
記憶體斷裂(Fragmentation) 外部斷裂(External fragmentation) – 總共的記憶體可用空間足夠大,但記憶體可用空間並不是連續的,所以不能載入其他的行程 內部斷裂(Internal fragmentation) – 分配比行程要求更多的記憶體空間給一個行程, 這些多分配的記憶體空間, 是分配給行程, 但是行程不會使用到的部分 不論外部斷裂或是內部斷裂, 這些記憶體空間都無法被行程使用,是記憶體空間的浪費 Applied Operating System Concepts
斷裂Fragmentation Applied Operating System Concepts
斷裂Fragmentation 由於行程的載入與移出,使得可用的記憶體空間被劃成許多非連續的小區間,而這些小區間也不能再容納新的行程進入(浪費了),這些小區間稱為外部斷裂 Applied Operating System Concepts