虛擬儲存器

2021-08-19 13:52:18 字數 3234 閱讀 1984

如果沒有虛擬儲存器,可能會帶來這些問題:

1.所有的程序都共享cpu和主存資源。所以當程序太多,太大,而導致記憶體無法容納時,就無法執行該程序。

2.儲存器很容易被破壞,當乙個程式不小心寫了另外乙個程序使用的儲存器時,那麼程序可能就會以一種奇怪的方式而終止。

為了更加有效的管理儲存器且少出錯,就出現了虛擬儲存器。虛擬儲存器為每個程序都提供了乙個大的,一致的,私有的位址空間

虛擬儲存器:將記憶體看成是乙個儲存在磁碟上的位址空間的快取記憶體,在主存中只儲存活動區域,並根據需求在磁碟和主存之間來回傳送資料,通過這種方式,高效的使用了主存;為每乙個程序提供了一致的位址空間,簡化了儲存器的管理;保護了每個程序的位址空間不被其他程序破壞。

實體地址和虛擬定址

計算機系統的主存被組織成為乙個由m個連續的位元組大小的單元組成的陣列。每個位元組都有乙個唯一的實體地址。

例如上圖:根據虛擬位址,cpu通過生成乙個虛擬位址來訪問主存,這個虛擬位址被送到儲存器之前先轉化成適當的實體地址。然後記憶體讀取位址並返回給cpu。

從概念而言,虛擬儲存器被組織為放在磁碟上的n個連續的位元組大小的單元組成的陣列。每個位元組都有乙個唯一的虛擬位址,這個唯一的虛擬位址是作為到陣列的索引的。磁碟上陣列的內容被快取在記憶體中。

頁表(是乙個資料結構):將虛擬頁對映到物理頁。每次位址翻譯硬體將乙個虛擬位址轉換為實體地址時,都會讀取頁表。作業系統負責維護頁表的內容,以及在磁碟與記憶體之間來回傳送頁。

如上圖展示了乙個頁表的基本組織結構。我們看到,頁表就是乙個陣列。頁表中的每一項都是由乙個有效位和乙個n位欄位組成的。有效位表明了該虛擬頁當前是否被快取在物理儲存器中。如果設定了有效位,那麼有效位後面的位址欄位就表示物理儲存器中相應的物理頁的位置,那麼那個相應的物理頁也儲存了該虛擬頁(例如圖中紅色的線段)。如果沒有設定有效位,那麼表示有乙個空位址還沒有被分配(例如圖中表述null的地方)。否則,這個位址就指向磁碟上的虛擬頁的起始位置(例如圖中的藍色線段)。

缺頁:在物理記憶體中找不到的稱為缺頁。結合上面的,例如,當cpu需要vp3時,發現物理儲存器中沒有。此時,位址翻譯就會從頁表中發現vp3的有效位為0,那麼就會觸發乙個缺頁異常。缺頁異常會呼叫核心中的相關的處理程式,該程式會在物理儲存器中選擇乙個犧牲頁,或許就會把vp4給犧牲掉換為vp3(這兒涉及到了排程演算法),vp4就會重新回到磁碟中,而vp3也就存在了物理儲存器中。當異常處理的程式返回時,它會重新啟動之前的指令,該指令就會把虛擬位址重新傳送到位址翻譯硬體中。可是,此時vp3已經存在物理儲存器中了。

但是,當其中缺頁的排程演算法不合理時,儲存器就可能在不停的將頁面進行換進換出,那麼就會出現抖動(顛簸)的現象。

缺頁的排程演算法的介紹:

1.最佳置換演算法.

缺點:缺頁率低;優點:在實際操作中該演算法無法實現.所以可以用它來衡量其他演算法.

下面模擬實現置換的過程:

2.先進先出頁面置換演算法.(fifo)

缺點:缺頁率高;優點:演算法簡單,容易實現.

模擬實現:

3.最近最久未使用演算法.(least recently used)

缺點:對計算機的硬體要求比較高;優點:接近最佳演算法.

模擬演算法實現:

在作業系統中,為每個頁表都提供了乙個單獨的頁表,也就是每個程序都有乙個虛擬位址空間。如下圖所示:

在上圖中,我們發現,不同的程序中有一部分指向了相同的物理儲存器。我們知道,一般情況下,每個程序都有它自己私有的**,資料,堆以及棧區域,是不和其他的程序共享的。通過頁表可以對映到相應的物理儲存器。但是,有些情況下需要共享**和資料的。例如:每個程序都要呼叫相同的系統核心**,而每個c程式也會呼叫標準系統庫中的程式。此時,作業系統就會通過將不同程序中適當的虛擬頁面對映到相同的物理頁面,從而安排多個程序共享這部分**,而不是在每個程序中都包含。

在現在的計算機系統中會提供一些手段來控制對儲存器的訪問。例如:

不允許乙個使用者程序修改它的唯讀區域,不允許使用者程序讀或修改任何核心中的**和資料結構。

不允許使用者程序讀或者寫其他程序的私有儲存器。

不允許使用者程序修改與其他程序共享的虛擬頁面。

為了避免以上的狀況,作業系統就會在程序的頁表中新增一些許可位。例如,新增讀/寫的許可位,當某條指令違反了這些條件時,cpu就會觸發保護故障,將其傳遞給核心中的異常處理程式。unix shell中將這種異常報告為:"段錯誤(segmentation fault)";

乙個程序維護乙個單獨的虛擬位址空間。如下圖所示:

區域:乙個區域就是已經存在著的虛擬儲存器的連續組塊,例如上圖中每乙個框框。每個存在的虛擬頁都儲存在某個區域中,不屬於某個區域的虛擬頁是不存在的,並且不能被程序引用。

核心在系統中為每個程序維護了乙個資料結構——task_struct。task_struct也叫做pcb(程序控制塊)。其中,在task_struct中有乙個mm_struct,它描述了虛擬儲存器當前的狀態。它的裡面包含兩個重要的字段:pgb和mmap.而mmap又指向vm_area_struct鍊錶.而每個vm_area_struct都描述了當前虛擬位址空間的乙個區域.

如上圖所示.

虛擬儲存器

1 虛擬儲存器只是乙個容量非常大的儲存器的邏輯模型,不是任何實際的物理儲存器 2 它借助於磁碟等輔存來擴大主存的容量,使之為更大或更多的程式使用 3 程式的邏輯位址稱為虛擬位址 虛位址 程式的邏輯位址空間稱為虛擬位址空間 4 實體地址 實位址 由cpu位址引腳送出,是用於訪問主存的位址 5 設cpu...

虛擬儲存器

在系統中程序是與其它的程序共享cpu和主存資源的,程序太多就需要太多的儲存器,而且儲存器很容易受到破壞,如果某個程序不小心寫了另乙個程序使用的儲存器,它就會以 完全和程式邏輯無關的令人迷惑的方式失敗。位址空間。特點 1.主存看成是虛擬在磁碟上的位址空間 的快取記憶體,在主存裡只儲存活動區域。2.為每...

虛擬儲存器

1 常規儲存器管理方式的特徵 一次性 即作業在執行前需一次性地全部裝入記憶體。這會導致兩種情況的發生 當作業很大,所要求的記憶體空間超過了記憶體總容量,作業不能全部被裝入記憶體,致使該作業無法執行。在多道程式中,有多個作業要求執行,但由於記憶體容量不足以容納所有這些作業,只能將少數作業裝入記憶體讓它...