頁表如何將虛擬位址轉換為實體地址
分頁記憶體管理和分段式記憶體管理
記憶體位址的構成:段起始位址+段內偏移
段表—有很多的段表項(物理段的起始位址)
通過位址中的段號去段表中找到段表項,通過段表項中的物理段起始位址加上位址中的段內偏移獲取到實體地址
分頁式記憶體管理:
記憶體位址的構成:頁號+頁內偏移
頁表—有很多頁表項
通過位址中的頁號去頁表中找到頁表項,通過頁表項中的物理頁號加上頁內偏移獲取到物理地
快表存放在高速緩衝區中
當頁表過大時二級頁表出現
1)、需求:是資訊的物理單位,分頁是為了實現離散分配方式,以減少記憶體的碎片,提高記憶體的利用率。或者說,分頁僅僅是由於系統管理的需要,而不是使用者的需要。段是資訊的邏輯單位,它含有一組其意義相對完整的資訊。分段的目的是為了更好地滿足使用者的需要。一條指令或乙個運算元可能會跨越兩個頁的分界處,而不會跨越兩個段的分界處。
2)、大小:頁大小固定且由系統決定,把邏輯位址劃分為頁號和頁內位址兩部分,是由機器硬體實現的。段的長度不固定,且決定於使用者所編寫的程式,通常由編譯系統在對源程式進行編譯時根據資訊的性質來劃分。
3)、邏輯位址表示:頁式系統位址空間是一維的,即單一的線性位址空間,程式設計師只需利用乙個識別符號,即可表示乙個位址。分段的作業位址空間是二維的,程式設計師在標識乙個位址時,既需給出段名,又需給出段內位址。
4)、比頁大,因而段表比頁表短,可以縮短查詢時間,提高訪問速度。
位址對映過程中,若在頁面中發現所要訪問的頁面不在記憶體中,則產生缺頁中斷。當發生缺頁中斷時,如果作業系統記憶體中沒有空閒頁面,則作業系統必須在記憶體選擇乙個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。
opt最佳置換演算法(opt)(理想置換演算法):從主存中移出永遠不再需要的頁面;如無這樣的頁面存在,則選擇最長時間不需要訪問的頁面。於所選擇的被淘汰頁面將是以後永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。
先進先出置換演算法(fifo):是最簡單的頁面置換演算法。這種演算法的基本思想是:當需要淘汰乙個頁面時,總是選擇駐留主存時間最長的頁面進行淘汰,即先進入主存的頁面先淘汰。其理由是:最早調入主存的頁面不再被使用的可能性最大。
最近最久未使用(lru)演算法:這種演算法的基本思想是:利用區域性性原理,根據乙個作業在執行過程中過去的頁面訪問歷史來推測未來的行為。它認為過去一段時間裡不曾被訪問過的頁面,在最近的將來可能也不會再被訪問。所以,這種演算法的實質是:當需要淘汰乙個頁面時,總是選擇在最近一段時間內最久不用的頁面予以淘汰。
class
lrucache
intget
(int key)
else
}void
put(
int key,
int value)
_list.
push_front
(make_pair
(key,value));
_hashmap[key]
= _list.
begin()
;}else
}private
:list
int,
int>> _list;
size_t _capacity;
unordered_map<
int,list
int,
int>>
::iterator> _hashmap;
};
頁面置換演算法
常用的頁面置換演算法有三種 先進先出演算法fifo first in first out 該演算法的基本思想是首先淘汰那些駐留在主存時間最長的頁面。最近最久未用演算法 lru 該演算法的基本思想是 如果某一頁被訪問了,那麼它很可能馬上又被訪問 反之,如果某一頁很久沒被訪問,那麼最近也不會再訪問。lr...
頁面置換演算法
include using namespace std int process 100 頁面佇列 int memory 3 塊數 int optqueue 100 opt演算法的佇列 int fifoqueue 100 fifo演算法佇列 int lruqueue 100 lru演算法佇列 int ...
頁面置換演算法
位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體選擇乙個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。常見的置換演算法有 1 最佳置換演算法 opt 理想置換演算法 這是一種理想情況下的頁...