作業系統筆記---記憶體管理

來源:互聯網
上載者:User

標籤:


// Pre. 地址綁定

1. 是邏輯地址向物理地址映射的過程

2. 根據映射發生的時間分類:

  • 編譯時間:編譯後,邏輯地址已經映射到物理地址。
  • 載入時:編譯時間候產生可重定位代碼。將程式載入到記憶體時,邏輯地址映射到物理地址,一旦載入記憶體的某個地址,就從此固定不動。如果發生了swap(交換)也要換回原來的地址上。
  • 運行時:進程運行時候可以改變映射的實體記憶體地區。如:進程a、b在記憶體,基址為1000h和2000h,進程c在虛擬記憶體。現swap進程a和c,那麼c進入記憶體,基址為1000h。一段時間後,swap進程a、c,a就重新進入了記憶體,基址為2000h,此時其物理地址相對於上一次已經不同,地址的映射發生在運行時。現在的電腦系統多採用這種方式。


作業系統如何管理記憶體?核心思想就是用好記憶體,那麼怎麼用好記憶體?

------一。記憶體使用量:

1. 要讓exe檔案執行,首先需要建立pcb。記憶體找一段閒置地區,將程式放入到這段地區,將首地址存入pcb

2. pcb把基地址寫入基底位址暫存器

3. 執行的時候,取基底位址暫存器的值,進行地址的重定位,擷取物理地址(運行時重定位)

4. 進程環境切換時,新進程把新的基址(位於pcb)寫入基底位址暫存器,進行更新


5. 動態載入與動態連結

  • 動態載入:將載入延遲到運行時,主體是作業系統。例如子程式只有在被調用的時候才載入到記憶體;
  • 動態連結:將連結延遲到運行時,主體是程式員。例如stub(存根),用來定位適當的記憶體駐留庫程式,或如果該程式不在記憶體時應如何裝入庫。Stub首先檢查所需子程式是否在記憶體中,如果不在,就將子程式裝入記憶體。Stub會用子程式地址來替換自己,並開始子程式。

那麼,是將整個程式都"放入這段地區"嗎?

------二。分段:

1. No,是將進程的各段分別放入記憶體。

2. 因此,pcb裡面存的實際上是進程段表(LDT表),指示每個段的段首地址。



那麼,如何在記憶體劃分空閑地區呢?

------三。分區問題:

1. 固定分區:將記憶體分成多個固定大小的地區,每個分區只能容納一個進程。

2. 可變分區:作業系統記錄空閑分區表和資料分割資料表,記錄哪些記憶體可用(稱之為“孔”)以及哪些記憶體已被佔用,要多少給多少,每次分配記憶體或者釋放記憶體都會對錶更新。

3. 從一組可用孔選擇一個空閑孔的方法(可變分區方式下動態分配儲存問題):

  • 首次適配:分配第一個足夠大的孔
  • 最佳適配:分配最小的足夠大的孔
  • 最差適應:分配最大的孔
4. 片段問題
  • 外部片段:可用記憶體之和能滿足記憶體請求,但是這些記憶體不連續導致不可用,這些空閑塊就是外部片段。
  • 內部片段:作業系統為了節省維護一個(或者一些)很小的孔帶來的開銷,索性將這個(或這些)孔一併分配給某個進程,但是實際上這些小孔並沒有被利用起來。這個(些)孔的就是內部片段。


那麼,如何解決片段問題?
  • 緊縮:移動記憶體內容,修改基底位址暫存器,使空閑空間合并。只適用於動態重定位,開銷大。
  • 分頁:允許進程的物理空間為非連續的。

------四。分頁

1. 把實體記憶體劃分為多個塊,叫做幀;把邏輯記憶體劃分為多個塊,叫做頁。進程的每一個段不是直接放到記憶體的,而是打散成多個頁存入記憶體。為了將來能夠重定位,在程式執行的時候找到物理地址,就引入了頁表的概念,通過頁表查詢進程的第幾頁儲存在記憶體的第幾幀。

2. 頁表的硬體實現方式:

  • 頁表較小時,存到一組專用寄存器。
  • 頁表大時,存入記憶體,這時需要有寄存器用來儲存頁表的基地址。採用這種方案,會導致兩次訪問記憶體。解決兩次訪存的辦法是採用一個硬體緩衝------轉換表緩衝區(TLB)。TLB是一個鍵值對(page<-->frame),儲存頁表的一小部分條目,TLB命中則直接存取對應幀,無效則需要訪問記憶體中的頁表,並將此條目儲存到TLB。圖示TLB機制


3. 分頁環境下的記憶體保護:記憶體保護是通過每個幀相關聯的保護位來實現的,這些位通常儲存在頁表中,如讀寫位、有效無效位。

4. 共用頁,。共用代碼的進程共用某些段,這些段在記憶體的物理幀相同。減少了記憶體的消耗。


5. 為了提高記憶體使用量率,每一頁應該盡量小,這樣會導致頁表太大。由此,給出多級頁表和雜湊頁表的機制。

6. 多級頁表:

  • 二級分頁演算法,將頁表再分頁,類比:某章 -> 該章某節 -> 該節某頁。以為例,p1代表第一層頁表中的位移量,p2代表第二層頁表中的位移量,d代表記憶體的第幾幀。優勢:可以實現頁表的不連續儲存,可以節約記憶體空間。


多級頁表提高了空間效率,但是在時間上,由於多次訪存,造成了耽擱。可用TLB(快表)進行改進。TLB根據局部性原理,儲存的是經常訪問的條目。TLB命中則不需多次訪存,TLB未命中則把對應條目加入或替換進TLB。

7. 雜湊頁表

  • 處理超過32位地址空間的常用辦法
  • 雜湊頁表的條目包括一個鏈表的元素,每個元素有3個域:1)虛擬頁碼 2)物理幀號 3)指向鏈表中下一個元素的指標。其中虛擬頁碼作為雜湊值。(所謂虛擬頁碼,應該就是頁碼、頁號)
  • 演算法主要是憑頁碼得到雜湊值,在雜湊表中獲得對應條目,找到物理幀號。示。








作業系統筆記---記憶體管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.