1. 程式人生 > >分段與分頁儲存

分段與分頁儲存

來自網路的一個比喻

你去聽課,帶了一個紙質筆記本做筆記。筆記本有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). 將該段基址和段內地址相加,得到實際的實體地址。

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

在段頁式儲存管理系統中,作業的地址空間首先被分成若干個邏輯分段,每段都有自己的段號,然後再將每段分成若干個大小相等的頁。對於主存空間也分成大小相等的頁,主存的分配以頁為單位。

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

程式設計師按照分段系統的地址結構將地址分為段號與段內位移量,地址變換機構將段內位移量分解為頁號和頁內位移量。

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