操作系統_離散分配存儲管理方式

目錄

概述

一、分頁存儲管理方式

1,設計思想概述

 

2,頁面大小

3,頁表

4,地址機構

5,地址重定位

指令跨頁怎麼辦?

6,地址變換機構

性能問題:

解決辦法: 快表

7,頁表的存儲問題

我們可以採用這樣兩個方法來解決這一問題:

這裏介紹一下方法一:離散分配方式——多級頁表

二、分段存儲管理方式

1,分段管理方式的引入

2,分段

3,地址結構

4,段表

5,地址變換機構

6,分段與分頁的區別

三、段頁式存儲管理方式

1,基本思想

2,地址結構

3,段表與頁表

4,地址變化機構


概述

爲進程分配內存空間的兩個基本原則——出於直覺:
(1)位置:爲程序分配連續的內存空間,亦即按順序存儲在內存中: 
(2)尺寸:按程序的大小來確定所分配內存空間的大小;

連續分配方式會形成許多“碎片”,雖然可通過“緊湊”方法將許多碎片拼接成可用的大塊空間,但須爲之付出很大開銷。如果允許將一個進程直接分散地裝入到許多不相鄰接的分區中, 便可充分地利用內存空間,而無須再進行“緊湊”。基於這一思想而產生了離散分配方式。根據在離散分配時所分配地址空間的基本單位的不同,又可將離散分配分爲以下三種:分段、分頁、段頁式存儲管理方式。

一、分頁存儲管理方式

1,設計思想概述

分頁存儲管理將進程邏輯地址空間分成若干個頁,併爲各頁加以編號,從0開始,如第0頁、第1頁等。相應地,也把內存物理地址空間分成若干個塊(頁框),同樣也爲它們加以編號,如0#塊、1#塊等等。在爲進程分配內存時,以塊爲單位,將進程中的若干個頁分別裝入到多個可以不相鄰接的物理塊中。由於進程的最後一頁經 常裝不滿一塊,而形成了不可利用的碎片,稱之爲“頁內碎片”。

Windows系統使用此方法。

2,頁面大小

頁面過小:雖然一方面可以減小內存碎片,起到減少內存碎片總空間的作用,有利於內存利用率的提高,但另一方面卻會造成每個進程佔用較多的頁面,從而導致進程的頁表過長,佔用大量內存。此外,還會降低頁面換進換出的效率。

頁面過大:雖然可以減少頁表的長度,提高頁面換進換出的速度,但卻又會使頁內碎片增大。因此,頁面的大小應選擇適中,且頁面大小應是2的冪,通常爲1 KB~8 KB。
 

3,頁表

在分頁系統中,允許將進程的各個頁離散地存儲在內存的任一物理塊中,爲保證進程仍然能夠正確地運行,即能在內存中找到每個頁面所對應的物理塊,系統又爲每個進程建立了一張頁面映像表,簡稱頁表。在進程地址空間內的所有頁(0~n),依次在頁表中有一頁表項,其中記錄了相應頁在內存中對應的物理塊號。在配置了頁表後,進程執行時,通過查找該表,即可找到每頁在內存中的物理塊號。可見,頁表的作用是實現從頁號到物理塊號的地址映射。

即使在簡單的分頁系統中,也常在頁表的表項中設置一存取控制字段,用於對該存儲塊中的內容加以保護。當存取控制字段僅有一位時,可用來規定該存儲塊中的內容是允許讀/寫還是隻讀;若存取控制字段爲二位,則可規定爲讀/寫、只讀和只執行等存取方式。如果有一進程試圖去寫一個只允許讀的存儲塊時,將引起操作系統的一次中斷。如果要利用分頁系統去實現虛擬存儲器,則還須增設一個數據項

頁表描述

  • 以數組形式存放至內存中;(進程開始時,大小就已經固定)
  • 頁表大小不固定,故不存放在PCB中,只是在PCB中記錄頁表起始地址;

頁表的作用:分頁系統的核心數據結構

  • 記錄程序各頁面所在的頁框位置;
  • 支持進行地址重定位;
  • 實現頁面訪問控制;(地址結構中存取控制字段,但有時一個頁面中數據和程序混合存放,而存取控制類型唯一,這也是分頁存儲的缺點)
  • 存儲保護:限制程序在操作系統指定的內存區域內運行。(頁表長度寄存器)
     

4,地址機構

5,地址重定位

指令跨頁怎麼辦?

PC+地址重定位

PC指向(邏輯地址中的)下一條指令的地址,每次取出一個字節,並對其進行地址重定位。

如圖,一條多字節指令跨1-2兩個頁面,PC先指向頁面1中的指令,進行地址重定位,並將物理地址放入內存,然後PC加一,到達頁面2,接着進行地址重定位......。這樣便解決了指令跨頁的問題。

6,地址變換機構

操作系統調度某個進程到CPU上執行時,需要先佈置CPU現場(包括通用寄存器設置,以及PCB中頁表地址寄存器和頁表長度寄存器)

性能問題:

訪問1次內存變量,涉及2次地址訪問:頁表+變量(訪問內存中的頁表,進而獲得內存地址;訪問內存地址,進而獲得變量)

解決辦法: 快表

  • 設置在CPU內 部;
  • 具有並行查找能力;
  • 暫存當前正在使用的頁表項;
  • 尺寸:16-512。可達到90%以上命中率
  • 別名:聯想存儲器(相聯存儲器) ( associative memory),Intel術語: TLB( Translation lookaside buffers )
     

7,頁表的存儲問題

現代的大多數計算機系統都支持非常大的邏輯地址空間(2^{32} B~2^{64} B)。在這樣的環境下,頁表就變得非常大,要佔用相當大的內存空間。
例如,對於一個具有32位邏輯地址空間的分頁系統,規定頁面大小爲4KB即2^{12}B,頁表項佔4字節,故一個頁面可以存放1K個頁表項。然而當一個進程所需頁表項超過1K時(當頁表項不超過1K時,一個頁框可以存放所有頁表項,故只需將頁框號存放至PCB中即可),便無法滿足需求。

我們可以採用這樣兩個方法來解決這一問題:

①對於頁表所需的內存空間,可採用離散分配方式,以解決難以找到一塊連續的大內存空間的問題;
②只將當前需要的部分頁表項調入內存,其餘的頁表項仍駐留在磁盤上,需要時再調入。
 

這裏介紹一下方法一:離散分配方式——多級頁表

仍然假設一個頁框4KB,每個頁表項佔4字節,一個頁框可容納1024個頁表項。由於頁表的大小超過一個頁框的大小,所以可以將頁表分爲若干個小的頁表,每個1024個連續頁表項佔一個頁框,並設置外部頁表,來指向這些頁表(即對頁表項的存儲也使用分頁思想)。

此時地址結構變爲:

外層頁號確定頁表在哪個頁框(物理塊),找到頁框後,再對應頁號找到變量在哪個頁框,最後根據這個頁框+偏移量,找到變量的物理地址。

 

二、分段存儲管理方式

1,分段管理方式的引入

爲什麼要引入分段存儲管理方式,可從下面兩個方面說明:

  • 一方面是由於通常的程序都可分爲若干個段,如主程序段、子程序段A、子程序段B、...數據段以及棧段等,每個段大多是一個相對獨立的邏輯單位;
  • 另一方面,實現和滿足信息共享、信息保護、動態鏈接以及信息的動態增長等需要,也都是以段爲基本單位的。更具體地說,分段存儲管理方式更符合用戶和程序員多方面的需要。(分頁系統中,4K的空間數據、程序混合存放,且只有一種存取方式,不方便進行信息共享)

2,分段

在分段存儲管理方式中,作業的地址空間被劃分爲若干個段,每個段定義了一組邏輯信息。(這些分段在內存中的分配類似於動態分區分配的思想,會產生零頭)

 

例如,有主程序段MAIN、子程序段X、數據段D及棧段S等,如圖4-19 所示。每個段都有自己的名字。爲了實現簡單起見,通常可用一個段號來代替段名,每個段都從0開始編址,並採用一段連續的地址空間。段的長度由相應的邏輯信息組的長度決定,因此各段的長度並不相等。

整個作業的地址空間由於被分成多個段,所以呈現出二維特性,亦即,每個段既包含了一部分地址空間,又標識了邏輯關係。其邏輯地址由段號(段名)和段內地址所組成。
 

  • 分段是一段有意義的信息集合;
  • 分段的劃分由程序員完成;
  • 分段的長度不定; 
  • 指令不存在跨分段情況;
     

3,地址結構

包括段號和段地址。

在下圖地址結構中,允許-一個作業最長有64K個段,每個段的最大長度爲64 KB。

4,段表

在前面所介紹的動態分區分配方式中,系統爲整個進程分配一個 連續的內存空間。 

而在分段式存儲管理系統中,則是爲每個分段分配一個連續的分區。

進程中的各個段,可以離散地裝入內存中不同的分區中。爲保證程序能正常運行,就必須能從物理內存中找出每個邏輯段所對應的位置。爲此,在系統中,類似於分頁系統,需爲每個進程建立一張段映射表,簡稱“段表”。每個段在表中佔有一一個表項,其中記錄了該段在內存中的起始地址(又稱爲“基址”)和段的長度。

段表可以存放在一組寄存器中,以利於提高地址轉換速度。但更常見的方法是將段表放在內存中。在配置了段表後,執行中的進程可通過查找段表,找到每個段所對應的內存區。

可見,段表是用於實現從邏輯段到物理內存區的映射的。

段表的作用:分段系統的核心數據結構

  • 記錄程序各分段所在的內存位置;
  • 支持進行地址重定位;
  • 實現分段訪問控制;
  • 存儲保護:限制程序在操作系統指定的內存區域內運行。

 

5,地址變換機構

爲了實現進程從邏輯地址到物理地址的變換功能,在系統中設置了段表寄存器,用於存放段表始址段表長度TL

在進行地址變換時,系統將邏輯地址中的段號與段表長度TL進行比較。若S>TL,表示段號太大,是訪問越界,於是產生越界中斷信號。若未越界,則根據段表的始址和該段的段號,計算出該段對應段表項的位置,從中讀出該段在內存的起始地址。

然後,再檢查段內地址d是否超過該段的段長SL。若超過,即d>SL,同樣發出越界中斷信號。若未越界,則將該段的基址d與段內地址相加,即可得到要訪問的內存物理地址。
 

6,分段與分頁的區別

 

三、段頁式存儲管理方式

1,基本思想

分頁系統:負責解決主存分配問題,內存按頁分配; 

分段系統:負責解決邏輯地址空間管理問題,按段爲應用程序分配邏輯地址空間;
 

2,地址結構

3,段表與頁表

在段頁式系統中,爲了實現從邏輯地址到物理地址的變換,系統中需要同時配置段表和頁表。段表的內容與分段系統略有不同,它不再是內存始址和段長,而是頁表始址和頁表長度

4,地址變化機構

在段頁式系統中,爲了獲得一條指令或數據,須三次訪問內存。第一次訪問是訪問內存中的段表,從中取得頁表始址:第二次訪問是訪問內存中的頁表,從中取出該頁所在的物理塊號,並將該塊號與頁內地址起形成指令或數據的物理地址: 第三次訪問才 是真正從第二次訪問所得的地址中取出指令或數據。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章