天天看點

分段與分頁存儲

來自網絡的一個比喻:

你去聽課,帶了一個紙質筆記本做筆記。筆記本有100張紙,課程有國文、數學、英語三門,對于這個筆記本的使用,為了便于以後複習友善,你可以有兩種選擇。

第一種是,你從本子的第一張紙開始用,并且事先在本子上做劃分:第2張到第30張紙記國文筆記,第31到60張紙記數學筆記,第61到100張紙記英語筆記,最後在第一張紙做個清單,記錄着三門筆記各自的範圍。這就是分段管理,第一張紙叫段表。

第二種是,你從第二張紙開始做筆記,各種課的筆記是連在一起的:第2張紙是數學,第3張是國文,第4張英語……最後呢,你在第一張紙做了一個目錄,記錄着國文筆記在第3、7、14、15張紙……,數學筆記在第2、6、8、9、11……,英語筆記在第4、5、12……。這就是分頁管理,第一張紙叫頁表。你要複習哪一門課,就到頁表裡查尋相關的紙的編号,然後翻到那一頁去複習。

分段與分頁一些比較:

1.基本思想:

使用者程式的位址空間被劃分成若幹固定大小的區域,稱為“頁”,相應地,記憶體空間分成若幹個實體塊,頁和塊的大小相等。可将使用者程式的任一頁放在記憶體的任一塊中,實作了離散配置設定。頁是資訊的實體機關。

将使用者程式位址空間分成若幹個大小不等的段,每段可以定義一組相對完整的邏輯資訊。存儲配置設定時,以段為機關,段與段在記憶體中可以不相鄰接,也實作了離散配置設定。段是資訊的邏輯機關。

2.設計目的:

分頁、分段都是可以使程式的位址空間超過存儲器的實體空間。

分頁主要是為了解決記憶體碎片問題,采用固定大小的頁面,是系統管理的需要。

分段是為了使程式和資料劃分為邏輯上獨立的位址空間而設計的,這樣做有利于管理變長資料結構、過程的連結、過程與資料的共享、設定特定保護類型等,是出于使用者需求的設計。

3.位址轉換:

分頁的作業位址空間是一維的,轉換是通過MMU實作頁号到塊号的轉換或通過硬體“快表”TLB實作快速轉換(詳細過程見另外blog)。

分段的作業位址空間是二維的,由段号和段内位址映射到實體位址,具體轉換過程:

  • (1). 程式執行時,從PCB中取出段表始址和段表長度,裝入段表寄存器。
  • (2). 由分段位址變換機構将邏輯位址自動分成段号和段内位址。
  • (3). 将段号與段表長度進行比較,若段号大于或等于段表長度,則表示本次通路的位址已超越程序的位址空間,産生越界中斷。
  • (4). 将段表始址與段号和段表項長度的乘積相加,便得到該段表項在段表中的位置。
  • (5). 取出段描述子得到該段的起始實體位址。
  • (6). 檢查段内位移量是否超出該段的段長,若超過,産生越界中斷。
  • (7). 對該段的存取控制進行檢查。
  • (8). 将該段基址和段内位址相加,得到實際的實體位址。

(另)段頁式存儲:

分頁系統能有效地提高記憶體的使用率,而分段系統能反映程式的邏輯結構,便于段的共享與保護,将分頁與分段兩種存儲方式結合起來,就形成了段頁式存儲管理方式。

在段頁式存儲管理系統中,作業的位址空間首先被分成若幹個邏輯分段,每段都有自己的段号,然後再将每段分成若幹個大小相等的頁。對于主存空間也分成大小相等的頁,主存的配置設定以頁為機關。

段頁式系統中,作業的位址結構:段号、段内位址,其中段内位址又分為:頁号和頁内偏移量。

程式員按照分段系統的位址結構将位址分為段号與段内位移量,位址變換機構将段内位移量分解為頁号和頁内位移量。

為實作段頁式存儲管理,系統應為每個程序設定一個段表,包括每段的段号,該段的頁表始址和頁表長度。每個段有自己的頁表,記錄段中的每一頁的頁号和存放在主存中的實體塊号。

繼續閱讀