作業系統 記憶體管理(概念)

2021-07-12 04:55:38 字數 4265 閱讀 3114

對於計算機系統而言,作業系統充當著基石的作用,它是連線計算機底層硬體與上層應用軟體的橋梁,控制其他程式的執行,並且管理系統相關資源,同時提供配套的系統軟體支援。對於專業的程式設計師而言,掌握一定的作業系統知識比不可少,因為不管面對的是底層嵌入式開發,還是上層的雲計算開發,都需要使用到一定的作業系統相關知識。

常見的記憶體管理方式有塊式管理、頁式管理、段式和段頁式管理。

(1)塊式管理:把主存分為一大塊一大塊的,當所需的程式片段不在主存時就分配一塊主存空間,把程式片段load入主存,就算所需的程式片段只有幾個位元組也只能把這一塊分配給它。這樣會造成很大的浪費,平均浪費了50%的記憶體空間,但是易於管理。

(2)頁式管理:把主存分為一頁一頁的,每一頁的空間要比一塊一塊的空間小很多,這種方法的空間利用率要比塊式管理高很多

(3)段式管理:把主存分為一段一段的,每一段的空間又要比一頁一頁的空間小很多,這種方法在空間利用率上又比頁式管理高得多,但是也有另外乙個缺點。乙個程式片段可能會被分為幾十段,這樣很多時間就會被浪費在計算每一段的實體地址上。

(4)段頁式管理:結合了段式管理和頁式管理的優點。把主存先分成若干段,每個段又分成若干頁。段頁式管理每取一護具,要訪問3次記憶體。

頁是資訊的物理單位,分頁是為了實現離散分配方式,以消減記憶體的外零頭,提高記憶體的利用率;或者說,分頁僅僅是由於系統管理的需要,而不是使用者的需要。

段是資訊的邏輯單位,它含有一組其意義相對完整的資訊。分段的目的是為了能更好地滿足使用者的需要。頁的大小固定且由系統確定,把邏輯位址劃分為頁號和頁內位址兩部分,是由機器硬體實現的,因而乙個系統只能有一種大小的頁面。段的長度卻不固定,決定於使用者所編寫的程式,通常由編譯程式在對源程式程序編輯時,根據資訊的性質來劃分。

分頁的作業位址空間是一維的,即單一的線性空間,程式設計師只需利用乙個記憶符,即可表示一位址。分段的作業位址空間是二維的,程式設計師在標識乙個位址時,既需給出段名,又需給出段內位址。

虛擬記憶體簡稱虛存,是計算機系統記憶體管理的一種技術。它是相對於物理記憶體而言的,可以理解為「假的」記憶體。它使得應用程式認為它擁有連續可用的記憶體(乙個連續完整的位址空間),允許程式設計師編寫並允許比實際系統擁有的記憶體大得多的程式,這使得許多大型軟體專案能夠在具有有限記憶體資源的系統上實現。而實際上,它通常被分割成多個物理記憶體碎片,還有部分暫時儲存在外部磁碟儲存器上,在需要時進行資料交換。虛存比實存有以下好處:

(1) 擴大位址空間。無論段式虛存,還是頁式虛存,或是段頁式虛存,定址空間都比實存大。

(2)記憶體保護。每個程序執行在各自的虛擬記憶體位址空間,互相不能干擾對方。另外,虛存還對特定的記憶體位址提供寫保護,可以防止**或資料被惡意篡改

(3)公平分配記憶體。採用了虛存之後,每個程序都相當於有太陽大小的虛存空間。

(4)當程序需要通訊時,可採用虛存共享的方式實現。

不過,使用虛存也是有代價的,主要表現在以下幾個方面:

(1)虛存的管理需要建立很多資料結構,這些資料結構要占用額外的記憶體

(2)虛擬位址到實體地址的轉換,增加了指令的執行時間

(3)頁面的換入換出需要磁碟i/o,這是很耗時間的。

(4)如果一頁中只有一部分資料,會很浪費記憶體。

記憶體碎片是由於多次進行記憶體分配造成的,當進行記憶體分配時,記憶體格式一般為:(使用者使用段)(空白段)(使用者使用段),當空白段很小的時候可能不能提供給使用者足夠需要的空間,可能夾在中間的空白段的大小為5,而使用者需要的記憶體大小為6,這樣會產生很多的間隙造成使用效率的下降,這些很小的空隙叫碎片。

內碎片:分配給程式的儲存空間沒有用完,有一部分是程式不使用,但其他程式也沒法用的空間。內碎片是處於區域內部或頁面內部的儲存塊,占有這些區域或頁面的程序並不使用這個儲存塊,而在程序占有這塊儲存塊時,系統無法利用它,直到程序釋放它,或程序結束時,系統才有可能利用這個儲存塊。。

由於空間太小,小到無法給任何程式分配(不屬於任何程序)的儲存空間是外碎片。外部碎片是處於任何已分配區域或頁面外部的空閒儲存塊,這些儲存塊的綜合可以滿足當前申請的長度要求,但是由於它們的位址不連續或其他原因,使得系統無法滿足當前申請。

內碎片和外碎片是一對矛盾體,一種特定的記憶體分配演算法,很難同時解決好內碎片和外碎片問題,只能根據應用特點進行取捨。。。

虛擬位址是指由程式產生的由段選擇符合段內偏移位址組成的位址。這兩部分組成的位址並沒有直接訪問物理記憶體,而是要通過分段位址的變換處理後才會對應到相應的物理記憶體位址。

邏輯位址指由程式產生的段內偏移位址。有時直接把邏輯位址當成虛擬位址,兩者並沒有明確的界限。。

線性位址是指虛擬位址到物理位址變換之間的中間層,是處理器可定址的記憶體空間(稱為線性位址空間)中的位址。程式**會產生邏輯位址,或者說是段中的偏移位址,加上相應段基址就生成了乙個線性位址。如果啟用了分頁機制,那麼線性位址可以再經過變換產生實體地址。若沒有採用分頁機制,那麼線性位址就是實體地址。

實體地址是指限制cpu外部位址匯流排上的定址物理記憶體的位址訊號,是位址變換的最終結果。

對映是一種多對一的關係,即不同的邏輯位址可以對映到同乙個線性位址上;不同的線性位址也可以對映到同乙個實體地址上。而且,同乙個線性位址在發生換頁以後,也可能被重新裝載到另外乙個實體地址上,所以這種多對一的對映關係也會隨時間發生變化。。

資料可以存放在cpu或者是記憶體中。cpu處理快,但是容量小;記憶體容量大,但是轉交給cpu處理的速度慢。為此需要cache(快取)來做乙個折中。最有可能的資料先從記憶體調入cache,cpu再從cache讀取資料,這樣會快許多。然而,cache中所存放的資料不是100%有用的。cpu從cache總讀取到有用的資料稱為「命中」。

cache替換演算法有隨機演算法、fifo演算法、lru演算法、lfu演算法和opt演算法。

(1)隨機演算法(rand)。隨機演算法就是用隨機數發生器產生乙個要替換的塊號,將該塊替換出去,此演算法簡單、易於實現,而且它不考慮cache塊過去、現在及將來的使用情況。但是由於沒有利用上層儲存器使用的「歷史資訊」、沒有根據訪存的區域性性原理,故不能提高cache的命中率,命中率較低。

(2)先進先出(fifo)演算法。先進先出(first in first out,fifo)演算法是將最先進入cache的資訊塊替換出去。fifo演算法按調入cache的先後決定淘汰的順序,選擇最早調入cache的字塊進行替換,它不需要記錄各字塊的使用情況,比較容易實現,系統開銷小,其缺點是可能會把一些需要經常使用的程式可(如迴圈程式)也作為最早進入cache的塊替換掉,而且沒有根據訪存的區域性性原理,故不能提高cache的命中率。因為最早調入的資訊可能以後還要用到,或者經常要用到,如迴圈程式。此法簡單、方便,利用了主存的「歷史資訊」,但並不能說最先進入的就不經常使用,其缺點是不能正確反映程式區域性性原理,命中率不高,可能出現一種異常現象。

(3)近期最少使用(lru)演算法。近期最少使用(least recently used,lru)演算法是將近期最少使用的cache中的資訊塊替換出去。該演算法較先進先出演算法要好一些,但此法也不能保證過去不常用將來也不常用。

lru演算法是依據各塊使用的情況,總是選擇那個最近最少使用的塊被替換。這種方法雖然比較好地反映了程式區域性性規律,但是這種替換方法需要隨時記錄cache中各塊的使用情況,以便確定哪個塊是近期最少使用的塊。lru演算法相對合理,但實現起來比較複雜,系統開銷較大。通常需要對每一塊設定乙個稱為計數器的硬體或軟體模組,用以記錄其被使用的情況。

實現lru策略的方法有很多種。簡單介紹計數器法、暫存器棧法及硬體邏輯比較對法的設計思路。

計數器法:快取的每一塊都設定乙個計數器。計數器的操作規則如下:

(4)最優替換演算法(opt演算法)。使用最優替換演算法(optimal replacement algorithm)時必須先執行一次程式,統計cache的替換情況。有了這樣的先驗資訊,在第二次執行該程式時便可以用最有效的方式來替換,以達到最優的目的。

前面介紹的幾種頁面替換演算法主要是以主儲存器中頁面排程情況的歷史資訊為依據的,它假設將來主儲存器中的頁面排程情況與過去一段時間內主儲存器中的頁面排程情況是相同的,顯然,這種假設不總是正確的。最好的演算法應該是選擇將來最久不被訪問的頁面作為被替換的頁面,這種替換演算法的命中率一定是最高的,它就是最優替換演算法。

要實現opt演算法,唯一的辦法是讓程式先執行一遍,記錄下實際的頁位址流情況。根據這個頁位址流才能找出當前要被替換的頁面。顯然,這樣做是不現實的。因此,opt演算法只是一種理想化的演算法,然而它也是一種很有用的演算法。實際上,經常把這種演算法用來作為評價其他頁面替換演算法好壞的標準。在其他條件相同的情況下,哪一種頁面替換演算法的命中率與opt演算法最接近,那麼它就是一種比較好的頁面替換演算法。

(5)最少使用演算法(lfu演算法 least frequently used algorithm)。選擇最少訪問的頁面作為被替換的頁面。顯然,這是一種合理的演算法,因為到目前為止最少使用的頁面,很可能是將來最少訪問的頁面。該演算法既充分利用了主存中頁面排程情況的歷史資訊,又正確反映了程式的區域性性。但是,這種演算法實現起來非常困難,它要為每個頁面設定乙個很長的計數器,並且要選擇乙個固定的時鐘為每個計數器定時計數。在選擇被替換頁面時,要從所有計數器中找出乙個計數器值最大的計數器。

作業系統 記憶體管理(概念)

對於計算機系統而言,作業系統充當著基石的作用,它是連線計算機底層硬體與上層應用軟體的橋梁,控制其他程式的執行,並且管理系統相關資源,同時提供配套的系統軟體支援。對於專業的程式設計師而言,掌握一定的作業系統知識比不可少,因為不管面對的是底層嵌入式開發,還是上層的雲計算開發,都需要使用到一定的作業系統相...

作業系統記憶體管理

作業系統記憶體管理 一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於32位程序來說,這個位址空間為4g,因此程序中的位址可以為0x00000000至0xffffffff之間的任何乙個值。其中4g空間中的低區的2g空間留給程序使用,而高區的2g空間則留給系統使用。在windows200...

作業系統記憶體管理

作業系統記憶體管理一 程序的虛擬位址空間 每個程序都被賦予自己的虛擬位址空間,對於 32位程序來說,這個位址空間為 4g,因此程序中的位址可以為 0x00000000 至0xffffffff 之間的任何乙個值。其中 4g空間中的低區的 2g空間留給程序使用,而高區的 2g空間則留給系統使用。在win...