天天看點

作業系統核心原理-5.記憶體管理(下):段式記憶體管理

作業系統核心原理-5.記憶體管理(下):段式記憶體管理

分頁記憶體管理存在頁表大、速度慢、共享困難等缺陷,特别是一個程序隻能占有一個虛拟位址空間。于是,新的管理模式—分段管理系統橫空出世,分段管理就是将一個程式按照邏輯單元分成多個程式段,每一個段使用自己單獨的虛位址空間。這樣,一個段占用一個虛拟位址空間,就不會再發生空間增長時碰撞到另一個段的問題,進而避免因空間不夠而造成編譯失敗的情況。而段頁式管理是将程式分為多個邏輯段,在每個段裡面又進行分頁,即将分段和分頁組合起來使用。

一、分頁系統的缺點

  分頁系統存在的一個無法容忍,同時也是分頁系統無法解決的一個缺點就是:一個程序隻能占有一個虛拟位址空間。在此種限制下,一個程式的大小至多隻能和虛拟空間一樣大,其所有内容都必須從這個共同的虛拟空間内配置設定。

二、分段管理系統

2.1 何為分段管理

  分段管理就是将一個程式按照邏輯單元分成多個程式段,每一個段使用自己單獨的虛拟位址空間。例如,對于編譯器來說,我們可以給其5個段,占用5個虛拟位址空間,如下圖所示:

作業系統核心原理-5.記憶體管理(下):段式記憶體管理

  如此,一個段占用一個虛拟位址空間,不會發生空間增長時碰撞到另一個段的問題,進而避免因空間不夠而造成編譯失敗的情況。如果某個資料結構對空間的需求超過整個虛拟之地所能夠提供的空間,則編譯仍将失敗。不過出現這種可能的機率恐怕不會比太陽從西邊出來的機率高出多少。

2.2 分段管理優缺點

  優點:

  (1)每個邏輯單元可單獨占用一個虛拟位址空間,這樣使得編寫程式的空間大為增長。

  (2)由于段式按邏輯關系劃分,是以共享起來十分友善。

  (3)對于空間稀疏的程式來說,分段管理将節省大量的空間。

  缺點:

  (1)外部碎片和一個段必須全部加載到記憶體。

  那麼,解決辦法是什麼呢?分頁,不過這次的分頁不是前面提到的直接對程式程序進行分頁,而是對程式裡面的段進行分頁,于是就形成了所謂的段頁式記憶體管理模式。

三、段頁式記憶體管理

3.1 何為段頁式記憶體管理

  段頁式管理就是将程式分為多個邏輯段,在每個段裡面又進行分頁,即将分段和分頁組合起來使用。這樣做的目的就是想同時獲得分段和分頁的好處,但又避免了單獨分段或單獨分頁的缺陷。

  如果我們将每個段看做一個單獨的程式,則邏輯分段就相當于同時加載多個程式。

3.2 段頁式記憶體管理的實作

  采用多級頁表,頂級為段表,次級為頁表。由段号在段表裡面獲得所應該使用的頁表,然後在該頁表裡面查找實體頁面号,如下圖所示:

作業系統核心原理-5.記憶體管理(下):段式記憶體管理

  如果需要,次級頁表又可以再分為兩個或者多個層次,形成層次更為豐富的段頁式層次結構。

四、記憶體管理的演變

  (1)一開始,人們根據直覺,将一個程式作為一整段進行管理,進而形成了純粹分段(固定加載位址、固定分區、非固定分區、交換)管理模式,也稱為基本記憶體管理模式,這種模式由于直覺易實作,曾經大為流行。

  (2)但是,純粹分段存在重大缺陷(由于此種模式下一個程式隻有一段,進而導緻記憶體空間增長困難,外部碎片、程式不能超過實體記憶體容量、一個程式必須同時加載到記憶體才能執行等缺點),為了克服這些缺點,引入了頁式記憶體管理模式。

  (3)顯然,頁式記憶體管理克服了純粹分段的一系列缺點,但又存在共享不友善、一個程式隻能在一個徐位址空間增長的問題,為了解決這個問題,引入了邏輯分段。邏輯分段将一個程式按邏輯關系分解為多個段,進而擴大了程式可以使用的虛拟位址空間并解決了共享難的問題。

  (4)但是,邏輯分段終究還是分段,自然又引入了分段的缺點。而要客服這些缺點,自然又想到了分頁。這樣,人們又引入了段頁式管理模式。

  是以,記憶體管理模式經曆了從純粹分段到分頁,再到邏輯分段,再到段内分頁的演變過程,如下圖所示:

作業系統核心原理-5.記憶體管理(下):段式記憶體管理

參考資料

作業系統核心原理-5.記憶體管理(下):段式記憶體管理

鄒恒明,《作業系統之哲學原理》,機械工業出版社

作者:周旭龍

出處:http://edisonchou.cnblogs.com

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。

繼續閱讀