41.虚拟存储器以及相关算法
虛擬存儲器,又有人叫虛擬內存。很容易大家就會把它當做硬件看待。
所以我們先給虛擬存儲器定性。
虛擬存儲器是計算機系統內存管理的一種技術,它使得應用程序認為它擁有連續的可用的內存(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理內存碎片,還有部分暫時存儲在外部磁盤存儲器上,在需要時進行數據交換。
虛擬存儲器并不是硬件,而是一種技術。
那么它的作用是什么呢?上面的話說的很抽象。但是通俗講就是虛擬出一塊內存,簡直就是無中生有。我們知道主存的大小不大,而且比較貴。所以有的時候會出現內存不夠用的情況,這個時候虛擬內存就起作用了。它把硬盤上劃出了一塊地方,用障眼法告訴CPU,這是內存,你拿去用吧。
那這個時候我們就很好奇障眼法是怎么實現的呢?它是怎么騙CPU的呢?
這個時候我們先講講內存是怎么分配給程序的?
一般有兩種分配方式:
1.連續分配 2.非連續分配
1.連續分配管理(會出現碎片):
①.單一連續分配
劃分成系統區和用戶區 只能用于單用戶單任務。
②.固定分區分配
劃分多分固定分區。 單個作業進入單個分區,會出現內部碎片。
③.動態分區分配
作業進入內存時才劃分,大小剛好適應,會出現外部碎片
那問題來了,我們第一輪可以直接就分,很簡單,但是有作業完成時釋放內存后,就不是規則了,該怎么分配呢?于是就有了一下幾種算法
a.首次適應算法(從頭到尾找,有合適的就動態劃分)
b.循環首次適應算法(不是每次都從頭開始,而是從上次分配結束的地方開始)
c.最佳適應算法(按從小到大順序,找到了就用)
d.最壞適應算法(按從大到小順序,找到了就用)
④.動態重定位分區分配
基本跟動態分區一致,區別就是在動態分區上加了一個緊湊的功能,在運用程序找不到足夠大的內存使用的時候,把內存緊湊后給應用使用。
2.非連續分配管理:
①基本分頁存儲管理方式
進程:頁;內存:頁框(塊)。
邏輯地址:頁號+頁偏移量
物理地址:內存上真正的地址
頁表:邏輯地址和物理地址的映射表
這個時候有一個問題,程序員關注的都是邏輯地址,那么CPU訪問一個邏輯地址需要訪問多次內存呢?
答案是兩次,第一次先訪問內存的頁表,找出對應的物理地址,再次訪問對應的物理地址。我們也知道cpu速度比內存速度快,所以訪問內存會降低cpu的利用率,那么怎么減少訪問內存的次數呢?
這個時候有一個概念:TLB 旁路翻譯緩存或者叫快表
作用是什么呢?TLB是在cpu上的緩存,只存放經常用到的頁表。那么我們訪問的邏輯地址能夠在cpu的TLB上找到對應的物理地址,那么我們只需要訪問一次內存就可以了 。那找不到怎么辦?
找不到這個時候就是另外的算法了。cpu會訪問內存,然后把這個頁表放到TLB里。這時候訪問內存的次數是2次。
頁的大小一般是固定的,是由系統決定的。一般是4K
②基本分段存儲管理方式
段:段內是連續的,不同段間不要求連續。
邏輯地址:段號和段內偏移量
跟頁不一樣的地方是:因為段的大小不一樣,頁的大小是一樣的。
所以 分頁的地址空間就相當于一個y=kx+b函數,兩個值就會對應一個物理地址。也就是說是一維的(一條直線)。
但是段就沒有這么一個K(k不同),所以找一個地址空間,就相當于在一個平面上找,所以就是二維的。
段表
段可以共享。
③段頁式管理方式
頁式存儲管理能有效地提高內存利用率,而分段存儲管理能反映程序的邏輯結構并有利于段的共享。
分頁管理方式是從計算機的角度考慮設計的,以提高內存的利用率,提升計算機的性能, 且分頁通過硬件機制實現,對用戶完全透明;而分段管理方式的提出則是考慮了用戶和程序員,以滿足方便編程、信息保護和共享、動態增長及動態鏈接等多方面的需要。
段頁式:段里再分頁。
邏輯地址:段號 頁號和頁內偏移量
講完這么多,我們回來講講障眼法把。
這里的障眼法就算配非連續分配管理方式。
CPU要用到某一個內存空間時,看是否是在內存上,如果是在內存里,那么直接用。如果不是,而是在硬盤上,那么這個時候就需要把內存勻出一塊,然后把硬盤的數據放進去。然后CPU即能用了。
也許有人會問?那么要是一直都不在內存,那豈不是累死了,一直換。但是我們考慮到局部性原理進行交換,就能減少交換數量。
那把內存的哪部分跟硬盤數據交換呢?這個時候就有相關算法
頁面置換算法:
1.FIFO 2.LRU 3.LFU 4.CLOCK置換 5.第二次置換
總結
以上是生活随笔為你收集整理的41.虚拟存储器以及相关算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 40.简述操作系统中调用过程?
- 下一篇: 42.存储器管理应具有的功能?