1、1,和春技術學院資訊管理系九十三學年度第一學期系統程式,教學投影片課程網頁講師:毛立仁,2,第五章記憶體管理,5-1 儲存體之架構5-2 記憶體管理策略5-3 記憶體配置5-4 記憶體配置策略5-5 記憶體間隙的解決策略5-6 程式置換5-7 虛擬記憶體5-8 需求式分頁記憶體管理系統5-9 頁映成表之製作5-10 分段式記憶體管理5-11 分段且分頁記憶體管理系統,3,5-1 儲存體之架構,儲存體依其關係可分成三個層次,三個層次的關係如下圖所示:,4,(1)次儲存體 (Secondary Storage):因其儲存容量大,存取速度慢,故將一些資料或未被執行的程式置放於此。(如:磁帶、磁碟)(
2、2)主儲存體 (Primary Storage):將準備執行的程式或所需的資料從次儲存體中移至此儲存體中。(3)快取儲存體 (Cache Storage):為了提高系統的存取效率常會增加一個快取儲存體,此種儲存體的儲存容量小,但存取速度快,故將常用的資料置放於此。,5,5-2 記憶體管理策略,記憶體管理策略可從三個方面來考量:(1) 存取策略 (Fetch Strategy)(2) 配置策略 (Allocation Strategy)(3) 取代策略 (Replacement Strategy),6,存取策略,考慮的因素為何時該將所需的資料與程式段移入主記體內。此種策略可分二類:(1)需求式存
3、取策略 (Demand Fetch Strategy):其運作的方式是在需要程式段或資料時,再去尋找可用的記憶體空間,以便儲存移入的程式段或資料。(2) 預測式存取策略 (Anticipatory Strategy):其運作的方式是事先預測將被移入的程式段或資料,並事先保留適當大小可用的記憶空間供其使用。,7,配置策略,決定以那一個區塊的記憶體空間來存放移入的程式段或資料,以便達到較佳的使用效率。,8,取代策略,決定將儲存於某一個記憶體區塊內的程式段或資料移走,以便新的程式段或資料移入。,9,5-3 記憶體配置,記憶體的配置方式可以分成:(1) 單一使用者連續配置法(Single User C
4、ontiguous Storage Allocation)(2) 多重分區法 (Multiple Partitions),10,乃是整個記憶體(作業系統所佔用的部分除外) 全歸一個使用者 (程式) 使用。若程式比記憶體空間小,則剩餘記憶體就空著。若程式比記憶體空間大且不是整個程式需要同時被載入 (並非每個副程式都同時被呼叫),則可採用重疊 (Overlay) 的技巧,使得程式較記憶體空間大時,仍可順利執行程式。為了避免 OS 被破壞,在 CPU 中有邊界暫存器 (Boundary Register 或稱 Fence Register),以防止程式中有跳到 OS 中的錯誤指令。,單一使用者連續儲
5、存體配置法,11,12,多重分區法,記憶體被切割成數個區塊 (Partition),每個區塊可配置給一個程式,故記憶體中的區塊數將限制同時於系統中執行的程式數量 (Degree of Multiprogramming)。若某一區塊內的程式執行完畢,則可將此記憶體區塊再配置給其它等待執行的程式。,13,多重分區法有下列兩類,固定式分區法 (Fixed Partition) 此法又可再分成兩種 a. 絕對位址式轉譯與載入 b. 可重定位址式轉譯與載入: 可變式分區法 (Variable Partition),14,絕對位址式轉譯與載入,記憶體被切割成數個大小固定的區塊 (Partition),由於
6、程式是以絕對位址式的轉譯,故每次均會佔用固定的記憶體位址;即每個區塊僅能供某些固定的程式使用。CPU 則可藉由迅速的在每一個程式間切換的方式來達到多程式 (Multiprogramming) 的功能。缺點:因採用絕對位址式分配,可能會造成某些區塊有許多的程式在排隊等候使用,而有些區塊則閒置未用。另一缺點則是會造成記憶體碎片 (Fragmentation)。,15,可重定位址式轉譯與載入,由於程式是採用可重定位址式的轉譯,故程式無需每次均須佔用固定的記憶體區塊;即只須更改重定位暫存器 (Relocation Register) 內的值程式便可在任何區塊上執行。缺點:會產生記憶體碎片 (Fragm
7、entation),造成記憶體空間的浪費。,16,可變式分區法,採用此法執行的程式會佔用連續位址的記憶體區塊,每當程式要執行時,才會配置足夠的記憶體空間供程式使用。採用此法時,記憶體並不會事先分成幾個區塊。缺點:會因程式執行完畢後,形成記憶體間隙 (Hole)。,17,5-4 記憶體配置策略,記憶體配置策略是用來決定將那一個區塊的記憶體配置 (Allocate) 給所載入的程式或資料。常見的配置策略有三種,其分別為最佳適用法,最先適用法與最差適用法。,18,最佳適用法 (Best-Fit Strategy),尋找一個記憶體區塊其大小與程式的大小最接近者。此法需花費較多的時間去尋找適合的記憶體區
8、塊,但所產的間隙 (Hole) 會最小。,19,尋找第一個能容納程式或資料的記憶區塊。此法花費於尋找適合的記憶體區塊的時間會最小。,最先適用法 (First-Fit Strategy),20,最差適用法 (Worst-Fit Strategy),尋找最大的記憶體區塊供程式或資料存放。此法會造成最大的間隙。,21,5-5 記憶體間隙的解決策略,解決記憶體間隙 (Hole) (即記憶體外部碎片)的方法有二種:(1) 間隙接合 (Coalescing Holes)(2) 壓擠 (Compaction),22,間隙接合,若有兩個間隙 (Hole) 彼此相鄰,則將之合併成為一個較大的區塊,以便能供其它程
9、式使用。,23,壓擠,空隙接合僅適用於將彼此相連的間隙 (Hole) 合併成一個較大的區塊。若間隙是分散於記憶體的各處,則須採用壓擠法 (Compaction)。壓擠法能將散佈於記憶體各處之小間隙合併成一個大區塊,以便能供其它程式使用。,24,執行壓擠的時機,(1) 記憶體空間已經不足時。(2) 定期執行壓擠的工作。,25,5-6 程式置換,在某些系統中,主記憶體每次僅允許一個程式佔用。因些,若是在分時系統 中,當某一個程式使用完其 CPU 的時間配額 或某種原因無法繼續執行時,則此程式必須釋出 CPU 的使用權並被移出 (Swap Out) 記憶體,而準備要執行的程式則被移入 (Swap I
10、n) 記憶體,並取得 CPU 的使用權。此將程式移入與移出之動作稱為置換 (Swap)。,26,置換時間,置換時間(Swap Time) = 平均潛伏時間 (Average Latency Time) + 資料傳輸時間 (Data Transfer Time),27,置換程式,負責將使用者的程式自主記憶體中移入 與移出的程式稱為置換程式 (Swapper)。,28,5-7 虛擬記憶體,在具有虛擬記憶體 (Virtual Memory) 的系統下,使用者能使用比真實的記憶體空間還大的位址空間,且不須知道程式會載入那個位址,系統會自動幫你做計算及安排,其設計方法三種:(此三種均稱為區塊對應 (Bl
11、ock Mapping) )(1) 分頁法 (Paging)(2) 分段法 (Segmentation)(3) 分段且分頁 (Segmentation / Paging),29,在程式載入系統時,系統會配置記憶體區塊供程式執行,若記憶體中每一個區塊大小均相同,則每一個區塊稱為頁 (Page)若記憶體中每一個區塊大小均不盡相同,則每一個區塊稱為段 (Segment)。,30,5-8 需求式分頁記憶體管理系統,分頁系統將實際記憶體 (Physical Memory) 事先分割成固定大小的區塊 (Block),每一個區塊稱為一個頁幅 (Frame)。相對應的邏輯記憶體 (Logical Memory
12、) 亦被分割成固定大小的區塊,每一個區塊則稱為一個頁 (Page)。,31,分頁的架構,(1)主儲存體依固定大小分割成頁幅 (Frame),頁幅的大小會因機器而異。(2)次儲存體中的程式也需要被分成一頁一頁 (Page)的型態。(3)分頁系統中必須要有頁映成表 (Page Map Table,PMT) 來處理動態位址轉換 (Dynamic Address Translation,DAT),同時也需要有一個頁映成表基底暫存器 (Page Map Table Base Register,PMTBR) 來儲存頁映成表的起始位置,32,頁映成表,頁映成表的每一個欄位內含有:a. 頁駐存位元 (Page
13、 Resident Bit) rr = 1,表示此頁目前存在於記憶體中r = 0,表示此頁目前儲存在次儲存體中b. 此頁在次儲存體之位址c. 此頁在記憶體中的頁幅編號,33,邏輯位址與實際位址的轉換,CPU 所送出的位址為邏輯位址 (Logical Address),此邏輯位址是由兩個部份所組成:(1) 頁數 (Page Number,p)(2) 頁位移 (Page Offest,d)頁數主要是用來當做頁映成表 (Page Map Table) 內的索引 (Index)。在頁映成表中儲存各頁在記憶體中的基底位址 (Base Address),將此基底位址加上頁位移 (Page Offest)
14、便可得到此頁在記憶體中的實際位址 (Physical Address)。,34,若每一個頁的大小為 q,則存放資料的頁數 p 與頁位移 d,可經由邏輯位址 A 計算得之,其計算方式如下:,35, 範例:若每個頁的大小為 3 個字組 (Words),且假設頁映成表基底暫存器值 b = 0,則經由頁映成表 可將邏輯位址對映至實際位址。,如資料 F 的邏輯位址為 5,則 p = 5 div 3 = 1 (頁) d = 5 mod 3 = 2 (頁位移)p + b = 1 (索引),由索引值可以得知資料放置於第 2 個頁幅內。故實際位址 = 基底位址 + 頁位移 = 6 + 2 (註:頁幅 2 的基底
15、位址為 6) = 8,36,5-9 頁映成表之製作,頁映成表的製作方式可以分成三種方式:(1) 直接映成 (Direct Mapping)(2) 聯合映成 (Associative Mapping)(3) 聯合 / 直接映成 (Associative / Direct Mapping),37,直接對映,其作法是利用一個頁映成表基底暫器來指向某一個程式之頁映成表的存放位址。若某一程式用到虛擬位址 V = (p , d),p 表示頁數,d 表示頁位移。假設當時之頁映成表基底暫存器內的值為 b。若頁映成表的 (b + p) 欄內的對應值為 p,則 (p , d) 即為虛擬位址 (p , d) 所對應
16、之實際位址,38,39,聯合映成(Associative Mapping),把整個頁映成表放在高速的儲存體 (如 Cache) 中,則可加快處理位址轉換的速度。若欲取得虛擬位址 V = (p , d) 所對應的實際位址 (p , d),其處理方式便是同時到頁映成表中尋找頁數 p 所對應的記憶體頁幅編號 p。如此僅要一次即可取得 p,則 (p , d) 即為虛擬位址 (p , d) 的實際位址。,40,41,聯合映成與直接映成之混合,此法是只使用部分的高速儲存體,不同於聯合映成方法中完全採用高速儲存體,如此可降低成本。其做法是在高速儲存體中存放最近才被使用過的一些頁對應資料 (即部分頁映成表),
17、而整個完整的頁映成表仍然存放於主記憶體中。依局限性 (Locatlity) 的特性,下一次被參考到的頁會在快速記憶體中的機率會相當的高。故欲求得虛擬位址 V = (p , d) 的實際位址便是先到聯合儲存體中尋找 p 的對應值 p,若是順利的找到 p 的對應值 p,則 p + d 即所為所求的實際位址。否則,才以直接對應的方法找尋主記憶體中的頁映成表。,42,43,5-10 分段式記憶體管理,此種系統結構,程式可以存放在記憶體中幾個分開的區塊 (Block),不若一般系統必須將整個程式置於連續的記憶體區塊才可以執行。而且每個區塊的大小也未必相同。,44,分段的架構,在此系統中,必須有一個段映成
18、表 (Segment Map Table,SMT) 來作動態位址轉換,而且必須有一個段映成表基底暫存器 (Segment Map Table Base Register,SMTBR)。若虛擬位址 V = (s , d),其中的 s 表示段數 (Segment Number),段位移 (Segment Offest) 且假設當時之段映成表基底暫存器內的值為 b。如果段映成表的 (b + s) 欄位內的對應值為 s,則 (s + d) 即為虛擬位址 (s , d) 所對應之實際位址。,45,46,此種系統的好處是能夠充分的控制某段 內程式 (或資料) 的存取權。如讀取(R)、執行(E)、寫(W)、
19、附加(A) 等功能的限制。另一項好處是可以做動態連結 (Dynamic Linking)。也就是讓程式中的每個副程式能恰好佔用一個區塊,到要使用時才載入該副程式。,47,段映成表之格式,(1) r: r = 0 表示此段目前並不在主記憶體中。 r = 1 表示此段目前存在於主記憶體中。(2) a:表示此段在次儲存體中的位址。(3) L:表示此段的長度。,48,(4) R:R = 1 表示可以讀取此段的內容。R = 0 表示不可以讀取此段的內容。(5) W:W = 1 表示可以修改此段的內容。W = 0 表示不可以修改此段的內容。 (6) E:E = 1 表示可以執行此段的內容。E = 0 表示
20、不可以執行此段的內容。(7) A:A = 1 表示可以增添資料於內容的末端。A = 0 表示不可以增添資料。(8) S:此段於記憶體中的基底位址。,49,5-11 分段且分頁記憶體管理系統,結合分段與分頁兩種結構的優點,將每個段再被細分成數個頁,而且每個段中的每一頁不一定要全部在主儲存體中。在系統中,每一個處理單元都會對應一個段映成表,而每一個段又會對應一個頁映成表。在此種系統中會含有一個段映成表基底暫存器,其對應的方法是採用聯合映成與直接映成的結構。其作法是將某些常用段的頁映成表存放於高速的儲存體中 (即是將最近剛使用過的一些頁存放於高速儲存體中)。其餘不常用段的頁映成表則存放於主儲存體或次
21、儲存體中。,50,邏輯位址與實際位址的轉換,若虛擬位址 V = (s , p , d),且段映成表基底暫存器內的值為 b。(1) 先採用聯合映成的方式至高速儲存體中尋找頁數 p 所對應之值 (s , p)。若能夠順利地找到 p 的對應值 (s , p , d),則 (s , p , d) 即為對應的實際位址 。(2) 若在高速儲存體中無法找到該頁數 p 所對應的值,則取出段映成表中的第 (b + s) 欄位內的值 s,該 s 即是該段的頁映成表的起始位址。再取出該頁映成表中的第 (s + p) 欄位內的值 p,則 (s , p , d) 即為對應的實際位址。,51,(3) 若在尋找段映成表時,發現該段 s 並不在記憶體中 (可由段映成表的段駐存位元 (Segment Resident Bit) r = 0 得知),此種情況即是所謂的 “取段失敗” (Segment Fault),此訊號將使得作業系統必須從次儲存體中載入該段,並建立該段的頁映成表,且把該段中的某幾頁放進記憶體中。(4) 若尋找頁映成表時,發現該頁 p 不在主記憶體中 (由頁映成表的頁駐存位元 (Page Residence Bit) r = 0 得知),便是所謂的 取頁失敗 (Page Fault),此訊號將使得作業系統必須從次儲存體找到該頁並將之載入記憶體中。,52,