1. 程式人生 > >作業系統離散儲存方式

作業系統離散儲存方式

儲存分配方式

上一篇部落格筆者談到了儲存器的分配方式包括連續儲存離散儲存。我們再回顧一下那個圖:

上一篇部落格中我們提到聯絡儲存的一些概念,包括:單一連續分配,固定分割槽分配,動態分割槽分配,其中對動態分割槽分配的分配演算法做了介紹。這一次我們繼續來聊一聊離散儲存的幾種方式。之所以出現離散分配方式,是因為連續分配方式會出現“碎片”,造成空間浪費。

離散分配方式分為三種:

  • 分頁儲存管理
  • 分段儲存管理
  • 段頁式儲存管理

一、分頁儲存管理方式

1、分頁結構

分頁儲存方式引出了三個概念,一個叫頁面(在頁表中對應頁號),一個叫物理塊(在頁表中對應塊號),一個叫頁表。

  • 頁面:指的是將程式按邏輯地址空間分成若干個頁,每個頁的大小是相同的,給他們編號得到頁號。
  • 物理塊:指的是將程式的實際實體地址空間分成若干個塊,給他們編號得到塊號。
  • 頁表:系統為每一個程序建立了一張頁面和物理塊的對映表。

結構如下:

這裡我們不妨先分析一下,這樣的結構有哪些優勢和問題。

優勢在於,通過將邏輯地址和實體地址分開劃分,然後設定對映建立聯絡的方式,我們可以實現程式在記憶體上的離散儲存。

劣勢在於,頁面固定的情況下,總會出現程式填不滿完整的一個頁面的情況,那樣也會出現“碎片”現象,我們稱之為“頁內碎片”,同時,增加對映關係也會增加我們的訪問成本。

前人大佬當然也想到了這一點, 大佬們發現如果僅僅採用頁表來對映邏輯地址和實體地址的關係,那麼,在程式執行的過程中CPU每一次存取一個數據的時候,都要先去記憶體訪問頁表,獲得塊號,然後將其與頁內偏移量拼接,形成實體地址;獲得實體地址後再去記憶體處理資料。這樣一來處理速度降低了將近1/2。

這當然不行,於是大佬們提出了“快表”的概念。也就是設立一個處理速度很快的高速緩衝暫存器,用來存放一些當前程式正在訪問的那些頁表項,CPU每次訪問的時候,先去快表裡面找找有沒有“捷徑”,如果有,就直接訪問得到塊號;如果沒有,再去記憶體讀取,讀取後將這個新的被訪問頁表放到快表中;如果快表滿了,那麼就從快表中找出最少使用的頁表和這個新頁表交換,我們稱之為更新快表。

那既然有了新的機制,當然我們也需要一些方法來判斷這個機制是否有用,所以我們引出了訪問記憶體的有效時間的概念,具體的公式和結果比較,大家可以通過《作業系統》等書籍瞭解。

最後,分頁儲存還有一個好處就是頁面是虛擬地址,我們可以設定一層,也可以設定很多層,針對難於找到大的連續空間的記憶體空間來存放頁表的問題,我們就可以使用多級頁表如圖(圖片來源:https://blog.csdn.net/ergouge/article/details/7460058

 

二、分段儲存管理方式

首先我們依然要知道,為什麼要引入分段儲存管理方式,畢竟分頁管理已經可以做到將資料離散存放。引入分段儲存管理的原因,一方面是將程式分成若干個程式段後,可以使程式更直觀;另一方面,分段實現和滿足了資訊共享,資訊保護,資訊動態增長等需要。簡單來說就是方便程式設計。

那麼分段的方式是怎樣的呢?

分段儲存福管理方式中,作業的地址空間被劃分為若干個段,每個段定義了一組邏輯資訊。系統為每一個分段分配一個連續的分割槽。同時引入段表的概念,段表表示了邏輯段和實體地址的對映。

 

三、段頁式儲存管理方式

段頁式儲存管理其實就是把分段和分頁原理結合,即先將使用者程式分成若干個段,然後再將每個段分為若干個頁,併為每一個段賦予一個段名。