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

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

一、分頁系統的缺點

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

二、分段管理系統

2.1 何為分段管理

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

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

2.2 分段管理優缺點

  優點:

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

  (2)由於段式按邏輯關係劃分,因此共享起來十分方便。

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

  缺點:

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

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

三、段頁式記憶體管理

3.1 何為段頁式記憶體管理

  段頁式管理就是將程式分為多個邏輯段,在每個段裡面又進行分頁,即將分段和分頁組合起來使用

。這樣做的目的就是想同時獲得分段和分頁的好處,但又避免了單獨分段或單獨分頁的缺陷。

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

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

  採用多級頁表,頂級為段表,次級為頁表。由段號在段表裡面獲得所應該使用的頁表,然後在該頁表裡面查詢物理頁面號,如下圖所示:

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

四、記憶體管理的演變

  (1)一開始,人們根據直覺,將一個程式作為一整段進行管理,從而形成了純粹分段(固定載入地址、固定分割槽、非固定分割槽、交換)管理模式,也稱為基本記憶體管理

模式,這種模式由於直觀易實現,曾經大為流行。

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

  (3)顯然,頁式記憶體管理克服了純粹分段的一系列缺點,但又存在共享不方便、一個程式只能在一個徐地址空間增長的問題,為了解決這個問題,引入了邏輯分段。邏輯分段將一個程式按邏輯關係分解為多個段,從而擴大了程式可以使用的虛擬地址空間並解決了共享難的問題。

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

  因此,記憶體管理模式經歷了從純粹分段到分頁,再到邏輯分段,再到段內分頁的演變過程,如下圖所示:

參考資料

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

作者:周旭龍

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

相關推薦

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

一、分頁系統的缺點   分頁系統存在的一個無法容忍,同時也是分頁系統無法解決的一個缺點就是:一個程序只能佔有一個虛擬地址空間。在此種限制下,一個程式的大小至多隻能和虛擬空間一樣大,其所有內容都必須從這個共同的虛擬空間內分配。 二、分段管理系統 2.1 何為分段管理   分段管理就是將一個程式按照邏輯單

作業系統核心原理-5.記憶體管理基本記憶體管理

  作業系統的兩個角色分別是魔術師和管理者,在管理者這個角色中,除了CPU之外,記憶體是作業系統要管理的另外一個重要資源。記憶體管理需要達到兩個目標:一是地址保護,即一個程式不能訪問另一個程式的地址空間。二是地址獨立,即程式發出的地址應該與物理主存地址無關。這兩個目標就是衡量一個記憶體管理系統是否完善的標準,

9.spring事務管理:宣告式事務管理

宣告式事務管理  sprin的宣告式事務是管理AOP技術實現的事務管理,其本質是是對方法前後進行攔截,然後 在目標方法開始之前建立或者加入一個事務,在執行完成目標方法之後根據執行情況提交或者回滾事務。   宣告式事務管理優點:不需要通過程式設計的方式管理事務,因而不需要在業務邏輯程

作業系統核心原理-5.記憶體管理分頁記憶體管理

  在上一篇介紹的幾種多道程式設計的記憶體管理模式中,以交換記憶體管理最為靈活和先進。但是這種策略也存在很多重大問題,而其中最重要的兩個問題就是空間浪費和程式大小受限。那麼有什麼辦法可以解決交換記憶體存在的這些問題呢?答案是分頁,它是我們解決交換缺陷的“不二法門”。 一、分頁記憶體管理 1.1 解決問題之

作業系統核心原理-6.外存管理檔案系統

一、為何需要檔案系統?   磁碟具有大容量、低成本以及持久化的特點,即使發生斷電,磁碟上的資料也不會丟失。但是,對於一般使用者而言,使用磁碟是非常苦難的,因為他們不知道如何驅動一個磁碟,以及計算資料在磁碟上的存放位置。從上一篇《磁碟基礎》可以知道,瞭解磁碟的各項技術細節將使使用者不堪重負。   作業系統是

作業系統核心原理-4.執行緒原理死鎖基礎原理

  我們都見過交通阻塞,一大堆汽車因為爭奪行路權,互不相讓而造成阻塞,又或者因為車輛發生故障拋錨或兩輛車相撞而造成道路阻塞。在這種情況下,所有的車都停下來,誰也無法前行,這就是死鎖。本篇就來了解一下什麼是死鎖,如何應對死鎖。 一、死鎖初窺 1.1 為何會發生死鎖?   死鎖的發生歸根結底是因為對資源的競

作業系統核心原理-3.程序原理程序通訊

  程序作為人類的發明,自然也免不了脫離人類的習性,也有通訊的需求。如果程序之間不進行任何通訊,那麼程序所能完成的任務就要大打折扣。人類的通訊方式無外乎對白(通過聲音溝通)、打手勢、寫信、發電報、擁抱等方法。同理,程序也可以通過同樣的方式來進行通訊。本篇我們就來看看程序的這些互動方式。 一、程序對白:管道、

記憶體管理

五、實體記憶體的管理 在核心初始化完成後,記憶體管理的責任由夥伴系統(高效、高速)承擔。 1、夥伴系統的結構 系統記憶體中的每個實體記憶體頁(頁幀),都對應於一個struct page例項。每個記憶體域都關聯了一個struct zone的例項,其中儲存了用於管理夥伴資料的主要陣列。 1 stru

iOS/OS X記憶體管理基本概念與原理

CSDN移動將持續為您優選移動開發的精華內容,共同探討移動開發的技術熱點話題,涵蓋移動應用、開發工具、移動遊戲及引擎、智慧硬體、物聯網等方方面面。如果您想投稿、尋求《近匠》報道,或給文章挑錯,歡迎傳送郵件至tangxy#csdn.net(請把#改成@)。  在Objective-C的記憶體管理中,其實就

深入淺出處理器_內存管理映射

深入淺出 不同 ces watermark 意義 分享 下使用 shadow 模式 專題1—深入淺出處理器 處理器(下)_內存管理(映射) 1.內存管理單元(MMU) 內存管理單元簡稱MMU,它負責虛擬地址到物理地址的映射,並提供硬件機制的內存訪問權限檢查。MMU使得每個用

ORCAD16.6中原理圖DRC檢查

Cadence Orcad DRC 檢查 接ORCAD16.6中原理圖DRC檢查(上) 上次說了電氣規則,下面接著說物理規則。 參考了http://blog.sina.com.cn/s/blog_e0ae98f10101fhg1.html; 5、物理規則 check power pin vi

第12章,網絡管理網絡基礎配置

linix 網絡管理 更多內容請點擊:Linux學習從入門到打死也不放棄,完全筆記整理(持續更新,求收藏,求點贊~~~~) http://blog.51cto.com/13683480/2095439筆記整理開始時間:2018年5月2日18:52:09 第12章,網絡管理(下)網絡基礎配置 本章內容

Java併發volatile的實現原理 Java併發Java記憶體模型乾貨總結

synchronized是一個重量級的鎖,volatile通常被比喻成輕量級的synchronized volatile是一個變數修飾符,只能用來修飾變數。 volatile寫:當寫一個volatile變數時,JMM會把該執行緒對應的本地記憶體中的共享變數重新整理到主記憶體。 volatile讀:當讀一

十二、Linux虛擬機器管理

本節著重介紹virsh虛擬機器管理命令、建立快照、虛擬機器遷移 - virsh虛擬機器管理命令 virsh list ## 檢視正在執行的虛擬機器 virsh list --all

Windows核心基礎虛擬記憶體空間佈局

32位Windows作業系統支援32位定址,因此2的32次方就等於4GB,每個程式在執行時都會被對映進4GB空間的記憶體空間,這4GB空間不全是使用者可以使用的,其中0x7fffffff-0xffffffff是2GB的核心空間,這部分用來儲存核心的資料,使用者程式是無法直接訪問的。

Oracle 自動共享記憶體管理ASMM與自動記憶體管理AMM

相關引數: MEMORY_MAX_TARGET:不可動態調整,代表記憶體(SGA+PGA)的最大值。 SQL>ALTER SYSTEM SET MEMORY_MAX_TARGET = 1000M SCOPE=SPFILE MEMORY_TARGET可被動

作業系統課程設計Linux程序管理

一、設計內容 實現一個模擬shell:編寫三個不同的程式:cmd1.c, cmd2.c, cmd3.c,每個程式輸出一句話,分別編譯成可執行檔案cmd1, cmd2, cmd3。然後再編寫一個程式,模擬shell程式的功能,能根據使用者輸入的字串(表示相應的命

講述Sagit.Framework解決雙向引用導致的IOS記憶體洩漏- block中任性用self

前言: 發現業務程式碼有一個地方的記憶體沒釋放,原因很也簡單: 在block裡用到了self,造成雙向引用,然後就開始思考怎麼處理這個問題。 常規則思維,就是改程式碼,block不要用到self,或只用self的弱引用。 只是框架這裡特別,有一個特好用的系列,STLastXXX系列,是用巨集定

解讀ASP.NET 5 & MVC6系列4核心技術與環境配置

asp.net 5是下一代的asp.net,該版本進行了全部重寫以適用於跨平臺,新新版本中,微軟引入瞭如下工具與命令:DNVM、DNX、DNU。 DNVM(.NET Version Manager):由於要實現跨平臺的目錄,微軟提供了DNVM功能,DNVM是ASP.NET最底層的內容,他是一組Powershe

設計模式):單例模式 JVM類載入機制 JDK原始碼學習筆記——Enum列舉使用及原理 Java併發):雙重檢驗鎖定DCL Java併發):Java記憶體模型 Java併發):Java記憶體模型 Java併發):雙重檢驗鎖定DCL JDK原始碼學習筆記——Enum列舉使用及原理

單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許一個例項存在。 單例模式一般體現在類宣告中,單例的類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。 適用場合: 需要頻繁的進行建立和銷燬的物件; 建立物