虛擬內存技術原理解析

虛擬內存技術原理解析

1. 它將主存看成是一個存儲在磁盤空間上的地址空間的高速緩存,主存中只保存活動區域,並根據需要在磁盤和主存之間來回傳送數據。
2. 它爲進程提供了一致的地址空間,簡化了內存管理。
3. 它保護了每個進程的地址空間不被其他進程破壞。

Process

1. 對cpu的分時使用
2. 每個進程都有自己的獨立的虛擬內存空間。(虛擬內存的概念)

下圖爲如何將Process中的地址映射到物理內存。

mapping模塊專門用於地址映射(將虛擬地址轉換成物理地址),process無需關心具體到怎麼取數據,可參考下圖中的Indirection介紹。

現代操作系統的虛擬內存包括物理內存和磁盤存儲空間。

直接尋址和間接尋址

在解釋間接尋址和直接尋址前引入一個更抽象的概念,在計算機系統的很多方面都有使用(DNS),“Indirection”

無虛擬內存CPU尋址

計算機的主存可以看做是一個由 M 個連續的字節大小的單元組成的數組。每個字節都有一個唯一的物理地址(Physical Address,PA)。第一個字節的地址爲 0,接下來的地址爲 1,以此類推。CPU 訪問內存的最簡單的方式是使用物理尋址(physical addressing)。

虛擬內存操作系統CPU尋址

這裏的MMU是一個很複雜的地址管理器(Memory ManagerMent Unit),將虛擬地址轉換成物理地址。這裏的MainMeMory包括內存空間和磁盤空間。

現代操作系統內存結構

計算機存儲結構

原理解析

Q1: 爲什麼需要L1 cache和L2 cache

  1. cache 構造是SRAM,而主內存構造是DRAM,在讀取速度上SRAM要遠遠快於DRAM(x10)。(SRAM/DRAM區別後文會講解)
  2. cache的單位存儲空間的價格要遠遠高於主內存
  3. CACHE,是一種特殊的內存。因爲主內存速度不夠快,用少量的特別快的但特別昂貴的內存來做緩存加速。就是cache。
  4. 緩存(cached)是把讀取過的數據保存起來,重新讀取時若命中(找到需要的數據)就不要去讀硬盤了,若沒有命中就讀硬盤。其中的數據會根據讀取頻率進行組織,把最頻繁讀取的內容放在最容易找到的位置,把不再讀的內容不斷往後排,直至從中刪除。通過這種方式來加速cpu的工作。

Q2: 虛擬地址(VA)如何轉換成物理地址(PA)空間

虛擬內存的存儲單元爲page(一般爲4~8Kb)
同任何緩存一樣,虛擬內存系統必須有某種方法來判定一個虛擬也是否緩存在 DRAM 的某個地方。如果命中緩存,那麼虛擬內存系統還必須確認這個虛擬頁存在哪個物理頁中。如果沒有命中緩存,那麼虛擬內存系統必須判斷虛擬頁存放在磁盤的哪個位置,在物理內存中選擇一個犧牲頁,並將虛擬頁從磁盤複製到 DRAM,替換這個犧牲頁。

這些功能由軟硬件聯合提供,包括操作系統軟件,MMU 中的地址翻譯硬件和一個存放在物理內存中叫頁表(page table)的數據結構,頁表將虛擬頁映射到物理頁。每次地址翻譯硬件將一個虛擬地址轉換成物理地址時都會讀取頁表。

上圖展示了一個頁表的基本結構,頁表就是一個頁表條目(Page Table Entry,PTE)的數組。虛擬地址空間中的每個頁在頁表中都有一個 PTE。在這裏我們假設每個 PTE 是由一個有效位(Valid bit)和一個 n 位地址字段組成的。有效位表明了該虛擬頁當前是否被緩存在 DRAM 中。如果有效位爲 1,那麼地址字段就表示 DRAM 中相應的物理頁的起始位置,這個物理頁緩存了該虛擬頁。如果有效位爲 0,那麼一個 null 地址表示這個虛擬頁還未被分配,否則對應的這個地址就指向該虛擬頁在磁盤上的起始位置。

上圖所示中一共有 8 個虛擬頁和 4 個物理頁的頁表,4 個虛擬頁 VP1, VP2, VP4, VP7 當前被緩存在 DRAM 中,VP0 和 VP5 還未被分配,而剩下的 VP3 和 VP6 已經被分配了,但是當前未被緩存。

  1. 假如讀取頁表中的第三頁時,因爲頁表中指向物理內存,所以可以直接讀取。
  2. 假如讀取頁表中的第四頁時,由於該頁數據在磁盤中,所以產生缺頁中斷,由缺頁中斷程序負責將vp3中的數據複製到物理內存中,假如是pp3。(將不經常使用的頁內容替換爲vp3數據)。然後修改頁表中的數據(這時頁表中原本指向pp3的數據指向了磁盤空間),這樣就能成功的加載數據了。
    缺頁處理完成後,內存預覽

Q3: 使用磁盤內存作爲內存映射一部分的優缺點:

1. 使用虛擬內存最大的優點就是擴充物理內存。
(磁盤速度是內存速度的1/10000 級別、內存空間有限而磁盤空間很大,x100級別)
2. 它爲進程提供了一致的地址空間,簡化了內存管理。
3. 它保護了每個進程的地址空間不被其他進程破壞。

帶來的問題:大量的缺頁中斷會影響性能
當我們瞭解了虛擬內存的運作機制之後,是不是覺得虛擬內存的效率會很低呢?因爲頁面沒有命中的代價非常大。是不是擔心虛擬內存會影響程序的性能呢?其實虛擬內存運作的非常好。它充分利用了局部性( locality )的原理。

在程序整個運作過程中,程序引用的不同頁面的總數可能超出了物理內存的總大小,但是局部性原則可以保證在任意時刻,程序將趨向於在一個較小的活動頁面(active page)集合上工作,這個集合被稱作工作集(working set)或者常駐集合(resident set)。在程序初始開銷之後也就是將工作集頁面調入主存,接下來對這個工作集的訪問會產生命中,這樣就不會產生額外的磁盤消耗。
如果程序有良好的時間局部性,那麼虛擬內存將工作的非常好。如果程序沒有良好的時間局部性也就是工作集的大小超出了主存的大小,那麼程序將會進入一個稱作 抖動(thrashing)的狀態,這個時候頁面將不斷地換進換出,程序會出現性能問題。

Q4: 進程地址空間爲什麼能夠相互獨立與共享

上圖可以看出每個進程有連續的虛擬內存地址,但是對於的物理內存並不是連續的。
內存獨立: 我們只需要保證,物理頁不能被兩個進程同時使用
內存共享: 部分物理頁可以被多個進程訪問,同時可以分配讀寫權限。

ROM/RAM

1. ROM和RAM指的都是半導體存儲器,ROM是Read Only Memory的縮寫,RAM是Random Access Memory的縮寫。
2. ROM在系統停止供電的時候仍然可以保持數據,而RAM通常都是在掉電之後就丟失數據,典型的RAM就是計算機的內存。

因爲本片討論的內存技術,所以這裏重點介紹一下 SRAM和DRAM

SRAM

1. 利用寄存器來存儲信息,所以一旦掉電,資料就會全部丟失.
2. 只要供電,它的資料就會一直存在,不需要動態刷新,所以叫靜態隨機存儲器。
3. 造價高(用於Cache)

DRAM

1. 屬於RAM,掉電後數據會丟失
2. 利用MOS管的柵電容上的電荷來存儲信息,一旦掉電信息會全部的丟失,由於柵極會漏電,所以每隔一定的時間就需要一個刷新機構給這些柵電容補充電荷,並且每讀出一次數據之後也需要補充電荷,這個就叫動態刷新,所以稱其爲動態隨機存儲器。
2. 一般用於內存

參考:
ram/rom
vitual memory
視頻課程已分享到文檔雲
鏈接:https://pan.baidu.com/s/1LnCDNJUoNck_qZTp7_LmGA
提取碼:mc21

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章