溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux如何實現(xiàn)虛擬內(nèi)存

發(fā)布時間:2022-11-11 09:46:06 來源:億速云 閱讀:142 作者:iii 欄目:建站服務器

今天小編給大家分享一下linux如何實現(xiàn)虛擬內(nèi)存的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

虛擬內(nèi)存的實現(xiàn)需要建立在離散分配的內(nèi)存管理方式的基礎(chǔ)上,實現(xiàn)方法有3種:1、請求分頁存儲管理方式;2、請求分段存儲管理方式;3、段頁式存儲管理方式。不管哪種方式,都需要有一定的硬件支持:1、一定容量的內(nèi)存和外存;2、頁表機制(或段表機制),作為主要的數(shù)據(jù)結(jié)構(gòu);3、中斷機構(gòu),當用戶程序要訪問的部分尚未調(diào)入內(nèi)存,則產(chǎn)生中斷;4、地址變換機構(gòu),邏輯地址到物理地址的變換。

1. 虛擬內(nèi)存概述

傳統(tǒng)存儲管理方式同時將多個進程保存在內(nèi)存中以便允許多道程序設計。它們都具有以下兩個共同的特征:

  • 一次性: 作業(yè)必須一次性全部裝入內(nèi)存后,方能開始運行。這會導致兩種情況發(fā)生:
    1)當作業(yè)很大,不能全部被裝入內(nèi)存時,將使該作業(yè)無法運行;
    2)當大量作業(yè)要求運行時,由于內(nèi)存不足以容納所有作業(yè),只能使少數(shù)作業(yè)先運行,導致多道程序度的下降。

  • 駐留性: 作業(yè)被裝入內(nèi)存后,就一直駐留在內(nèi)存中,其任何部分都不會被換出,直至作業(yè)運行結(jié)束。運行中的進程,會因等待 I/O 而被阻塞,可能處于長期等待狀態(tài)。

因此,許多在程序運行中不用或暫時不用的程序(數(shù)據(jù))占據(jù)了大量的內(nèi)存空間,而一些需要運行的作業(yè)又無法裝入運行,顯然浪費了寶貴的內(nèi)存資源。

1.1 虛擬存儲器的定義和特征

基于局部性原理,在程序裝入時,可以將程序的一部分裝入內(nèi)存,而將其余部分留在外存,就可以啟動程序執(zhí)行。在程序執(zhí)行過程中,當所訪問的信息不在內(nèi)存時,由操作系統(tǒng)將所需要的部分調(diào)入內(nèi)存,然后繼續(xù)執(zhí)行程序。另一方面,操作系統(tǒng)將內(nèi)存中暫時不使用的內(nèi)容換出到外存上,從而騰出空間存放將要調(diào)入內(nèi)存的信息。

這樣,由于系統(tǒng)提供了部分裝入、請求調(diào)入和置換功能后(對用戶完全透明),給用戶的感覺是好像存在一個比實際物理內(nèi)存大得多的存儲器,稱為虛擬存儲器

虛擬存儲器的大小由計算機的地址結(jié)構(gòu)決定,并非是內(nèi)存和外存的簡單相加。

虛擬存儲器有以下三個主要特征:

  • 多次性:無需在作業(yè)運行時一次性地全部裝入內(nèi)存,而是允許被分成多次調(diào)入內(nèi)存運行。

  • 對換性:無需在作業(yè)運行時一直常駐內(nèi)存,而是允許在作業(yè)的運行過程中,進行換進和換出。

  • 虛擬性:從邏輯上擴充內(nèi)存的容量,使用戶所看到的內(nèi)存容量,遠大于實際的內(nèi)存容量。

1.2 虛擬內(nèi)存技術(shù)的實現(xiàn)

虛擬內(nèi)存中,允許將一個作業(yè)分多次調(diào)入內(nèi)存

釆用連續(xù)分配方式時,會使相當一部分內(nèi)存空間都處于暫時或“永久”的空閑狀態(tài),造成內(nèi)存資源的嚴重浪費,而且也無法從邏輯上擴大內(nèi)存容量。

因此,虛擬內(nèi)存的實現(xiàn)需要建立在離散分配的內(nèi)存管理方式的基礎(chǔ)上。虛擬內(nèi)存的實現(xiàn)有以下三種方式:

  • 請求分頁存儲管理

  • 請求分段存儲管理

  • 段頁式存儲管理

不管哪種方式,都需要有一定的硬件支持。一般需要的支持有以下幾個方面:

  • 一定容量的內(nèi)存和外存。

  • 頁表機制(或段表機制),作為主要的數(shù)據(jù)結(jié)構(gòu)。

  • 中斷機構(gòu),當用戶程序要訪問的部分尚未調(diào)入內(nèi)存,則產(chǎn)生中斷。

  • 地址變換機構(gòu),邏輯地址到物理地址的變換。

連續(xù)分配方式:指為一個用戶程序分配一個連續(xù)的內(nèi)存空間。

  • 固定分區(qū)分配:將內(nèi)存空間劃分為若干個固定大小的區(qū)域,在每個分區(qū)中只裝入一道作業(yè),便可以有多道作業(yè)并發(fā)執(zhí)行。缺乏靈活性,會產(chǎn)生大量的內(nèi)部碎片,內(nèi)存的利用率很低

  • 動態(tài)分區(qū)分配:根據(jù)進程的實際需要,動態(tài)地為之分配內(nèi)存空間。作業(yè)裝入內(nèi)存時,把可用內(nèi)存分出一個連續(xù)區(qū)域給作業(yè),且分區(qū)的大小正好合適作業(yè)大小的需要。會產(chǎn)生很多外部碎片。

linux如何實現(xiàn)虛擬內(nèi)存

離散分配方式:將一個進程分散地裝入到許多不相鄰的分區(qū)中,便可充分地利用內(nèi)存。

分頁存儲的概念:

  • 頁面、頁框和塊。進程中的塊稱為頁或頁面(Page),具有頁號;內(nèi)存中的塊稱為頁框(Page Frame,頁框=內(nèi)存塊=物理塊=物理頁面),具有頁框號。外存也以同樣的單位進行劃分,直接稱為塊(Block)。進程在執(zhí)行時需要申請主存空間,就是要為每個頁面分配主存中的可用頁框,這就產(chǎn)生了頁和頁框的一一對應。各個頁面不必連續(xù)存放,可以放到不相鄰的各個頁框中。

  • 地址結(jié)構(gòu):前一部分為頁號P,后一部分為頁內(nèi)偏移量W。地址長度為32 位,其中0~11位為頁內(nèi)地址,即每頁大小為4KB;12~31位為頁號,地址空間最多允許有2^20頁。

  • 頁表。為了便于在內(nèi)存中找到進程的每個頁面所對應的物理塊,系統(tǒng)為每個進程建立一張頁表,記錄頁面在內(nèi)存中對應的物理塊號,頁表一般存放在內(nèi)存中。在配置了頁表后,進程執(zhí)行時,通過查找該表,即可找到每頁在內(nèi)存中的物理塊號??梢?,頁表的作用是實現(xiàn)從頁號到物理塊號的地址映射

linux如何實現(xiàn)虛擬內(nèi)存

2. 請求分頁管理方式實現(xiàn)虛擬內(nèi)存

請求分頁是目前最常用的一種實現(xiàn)虛擬存儲器的方法。

請求分頁系統(tǒng)建立在基本分頁系統(tǒng)基礎(chǔ)之上,為了支持虛擬存儲器功能而增加了請求調(diào)頁功能和頁面置換功能。

在請求分頁系統(tǒng)中,只要求將當前需要的一部分頁面裝入內(nèi)存,便可以啟動作業(yè)運行。
在作業(yè)執(zhí)行過程中,當所要訪問的頁面不在內(nèi)存時,再通過調(diào)頁功能將其調(diào)入,同時還可以通過置換功能將暫時不用的頁面換出到外存上,以便騰出內(nèi)存空間。

為了實現(xiàn)請求分頁,系統(tǒng)必須提供一定的硬件支持。除了需要一定容量的內(nèi)存及外存的計算機系統(tǒng),還需要有頁表機制、缺頁中斷機構(gòu)、地址變換機構(gòu)。

2.1 頁表機制

請求分頁系統(tǒng)的頁表機制不同于基本分頁系統(tǒng),請求分頁系統(tǒng)在一個作業(yè)運行之前不要求全部一次性調(diào)入內(nèi)存。

因此在作業(yè)的運行過程中,必然會出現(xiàn)要訪問的頁面不在內(nèi)存的情況,如何發(fā)現(xiàn)和處理這種情況是請求分頁系統(tǒng)必須解決的兩個基本問題。為此,在請求頁表項中增加了四個字段,分別為:

請求分頁系統(tǒng)中的頁表項
頁號物理塊號狀態(tài)位 P訪問字段 A修改位 M外存地址
  • 狀態(tài)位 P:用于指示該頁是否已調(diào)入內(nèi)存,供程序訪問時參考。

  • 訪問字段 A:用于記錄本頁在一段時間內(nèi)被訪問的次數(shù),或記錄本頁最近己有多長時間未被訪問,供置換算法換出頁面時參考。

  • 修改位 M:標識該頁在調(diào)入內(nèi)存后是否被修改過。

  • 外存地址:用于指出該頁在外存上的地址,通常是物理塊號,供調(diào)入該頁時參考。

2.2 缺頁中斷機構(gòu)

在請求分頁系統(tǒng)中,每當所要訪問的頁面不在內(nèi)存時,便產(chǎn)生一個缺頁中斷,請求操作系統(tǒng)將所缺的頁調(diào)入內(nèi)存。

此時應將缺頁的進程阻塞(調(diào)頁完成喚醒),如果內(nèi)存中有空閑塊,則分配一個塊,將要調(diào)入的頁裝入該塊,并修改頁表中相應頁表項;若此時內(nèi)存中沒有空閑塊,則要淘汰某頁(若被淘汰頁在內(nèi)存期間被修改過,則要將其寫回外存)。

缺頁中斷作為中斷同樣要經(jīng)歷,諸如保護CPU環(huán)境、分析中斷原因、轉(zhuǎn)入缺頁中斷處理程序、恢復CPU環(huán)境等幾個步驟。但與一般的中斷相比,它有以下兩個明顯的區(qū)別:

  • 在指令執(zhí)行期間產(chǎn)生和處理中斷信號,而非一條指令執(zhí)行完后,屬于內(nèi)部中斷。

  • 一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁中斷。

2.3 地址變換機構(gòu)

請求分頁系統(tǒng)中的地址變換機構(gòu),是在分頁系統(tǒng)地址變換機構(gòu)的基礎(chǔ)上,為實現(xiàn)虛擬內(nèi)存,又增加了某些功能而形成的。

linux如何實現(xiàn)虛擬內(nèi)存
請求分頁中的地址變換過程

在進行地址變換時,先檢索快表

  • 若找到要訪問的頁,便修改頁表項中的訪問位(寫指令則還須重置修改位),然后利用頁表項中給出的物理塊號和頁內(nèi)地址形成物理地址。

  • 若未找到該頁的頁表項,應到內(nèi)存中去查找頁表,再對比頁表項中的狀態(tài)位P,看該頁是否已調(diào)入內(nèi)存,未調(diào)入則產(chǎn)生缺頁中斷,請求從外存把該頁調(diào)入內(nèi)存。

頁表指出邏輯地址中的頁號與所占主存物理塊號的對應關(guān)系。頁式存儲管理在用動態(tài)重定位方式裝入作業(yè)時,要利用頁表做地址轉(zhuǎn)換工作。


快表(TLB,Translation Lookaside Buffer)就是存放在高速緩沖存儲器的部分頁表。作為當前進程頁表的Cache,它的作用與頁表相似,但加快了地址映射速度,提高了訪問速率。

由于采用頁表做地址轉(zhuǎn)換,讀寫內(nèi)存數(shù)據(jù)時CPU要訪問兩次主存(查詢頁表、訪問目的地址)。

有了快表,有時只要訪問一次高速緩沖存儲器,一次主存,這樣可加速查找并提高指令執(zhí)行速度。

3. 頁面置換算法

進程運行時,若其訪問的頁面不在內(nèi)存而需將其調(diào)入,但內(nèi)存已無空閑空間時,就需要從內(nèi)存中調(diào)出一頁程序或數(shù)據(jù),送入磁盤的對換區(qū)。

選擇調(diào)出頁面的算法就稱為頁面置換算法。好的頁面置換算法應有較低的頁面更換頻率,也就是說,應將以后不會再訪問或者以后較長時間內(nèi)不會再訪問的頁面先調(diào)出。

3.1 最佳置換算法(OPT)

最佳(Optimal, OPT)置換算法所選擇的被淘汰頁面將是以后永不使用的,或者是在最長時間內(nèi)不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。

但由于人們目前無法預知進程在內(nèi)存下的若千頁面中哪個是未來最長時間內(nèi)不再被訪問的,因而該算法無法實現(xiàn),但最佳置換算法可以用來評價其他算法。

假定系統(tǒng)為某進程分配了三個物理塊,并考慮有以下頁面號引用串:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1

進程運行時,先將7, 0, 1三個頁面依次裝入內(nèi)存。進程要訪問頁面2時,產(chǎn)生缺頁中斷,根據(jù)最佳置換算法,選擇第18次訪問才需調(diào)入的頁面7予以淘汰。然后,訪問頁面0時,因為已在內(nèi)存中所以不必產(chǎn)生缺頁中斷。訪問頁面3時又會根據(jù)最佳置換算法將頁面1淘汰……依此類推。從圖中可以看出釆用最佳置換算法時的情況。

利用最佳置換算法時的置換圖
訪問頁面70120304230321201701
物理塊17772
2
2

2

2


7

物理塊2
000
0
4

0

0


0

物理塊3

11
3
3

3

1


1

缺頁否











可以看到,發(fā)生缺頁中斷的次數(shù)為9,頁面置換的次數(shù)為6。

3.2 先進先出(FIFO)頁面置換算法

優(yōu)先淘汰最早進入內(nèi)存的頁面,亦即在內(nèi)存中駐留時間最久的頁面。

該算法實現(xiàn)簡單,只需把調(diào)入內(nèi)存的頁面根據(jù)先后次序鏈接成隊列,設置一個指針總指向最早的頁面。但該算法與進程實際運行時的規(guī)律不適應,因為在進程中,有的頁面經(jīng)常被訪問。

利用FIFO置換算法時的置換圖
訪問頁面70120304230321201701
物理塊17772
224440

00

777
物理塊2
000
333222

11

100
物理塊3

11
100033

32

221
缺頁否




利用FIFO算法時進行了 12 次頁面置換,比最佳置換算法正好多一倍。

FIFO算法還會產(chǎn)生當所分配的物理塊數(shù)增大而頁故障數(shù)不減反增的異?,F(xiàn)象,這是由 Belady于1969年發(fā)現(xiàn),故稱為Belady異常,如下表所示。

訪問頁面123412512345
物理塊11114445

55
物理塊2
222111

33
物理塊3

33322

24
缺頁否



增加物理塊數(shù)后對比
物理塊1*1111

555544
物理塊2*
222

211115
物理塊3*

33

332222
物理塊4*


4

444333
缺頁否

只有FIFO算法可能出現(xiàn)Belady異常,而LRU和OPT算法永遠不會出現(xiàn)Belady異常。

3.3 最近最久未使用(LRU)置換算法

最近最久未使用(LRU,Least Recently Used)置換算法選擇最近最長時間未訪問過的頁面予以淘汰,它認為過去一段時間內(nèi)未訪問過的頁面,在最近的將來可能也不會被訪問。

該算法為每個頁面設置一個訪問字段,來記錄頁面自上次被訪問以來所經(jīng)歷的時間,淘汰頁面時選擇現(xiàn)有頁面中值最大的予以淘汰。

LRU頁面置換算法時的置換圖
訪問頁面70120304230321201701
物理塊17772
2
4440

1
1
1

物理塊2
000
0
0033

3
0
0

物理塊3

11
3
3222

2
2
7

缺頁否







LRU性能較好,但需要寄存器和棧的硬件支持,開銷更大。

LRU是堆棧類的算法。理論上可以證明,堆棧類算法不可能出現(xiàn)Belady異常。FIFO算法基于隊列實現(xiàn),不是堆棧類算法。

3.4 時鐘(CLOCK)置換算法

LRU算法的性能接近于OPT,但是實現(xiàn)起來比較困難,且開銷大;FIFO算法實現(xiàn)簡單,但性能差。所以操作系統(tǒng)的設計者嘗試了很多算法,試圖用比較小的開銷接近LRU的性能,這類算法都是CLOCK算法的變體。

簡單的CLOCK算法是給每一幀關(guān)聯(lián)一個附加位,稱為使用位。當某一頁首次裝入主存,以及后續(xù)被訪問時,使用位被置為1。

對于頁替換算法,用于替換的候選幀集合看做一個循環(huán)緩沖區(qū),并且有一個指針與之相關(guān)聯(lián)。當某一頁被替換時,該指針被設置成指向緩沖區(qū)中的下一幀。

當需要替換一頁時,操作系統(tǒng)掃描緩沖區(qū),以查找第一個使用位為0的一幀。每當遇到一個使用位為1的幀時,操作系統(tǒng)就將該位重新置為0;如果所有幀的使用位均為1,則指針在緩沖區(qū)中完整地循環(huán)一周,把所有使用位都置為0,并且停留在最初的位置上,替換該幀中的頁。由于該算法循環(huán)地檢查各頁面的情況,故稱為CLOCK算法,又稱為最近未用(Not Recently Used, NRU)算法。

CLOCK算法的性能比較接近LRU,而通過增加使用的位數(shù)目,可以使得CLOCK算法更加高效。在使用位used的基礎(chǔ)上再增加一個修改位modified,則得到改進型的CLOCK置換算法。

每一幀都處于以下四種情況之一:

  • 最近未被訪問,也未被修改(u=0, m=0)。

  • 最近被訪問,但未被修改(u=1, m=0)。

  • 最近未被訪問,但被修改(u=0, m=1)。

  • 最近被訪問,被修改(u=1, m=1)。

算法執(zhí)行如下操作步驟:

  • 從指針的當前位置開始,掃描幀緩沖區(qū)。在這次掃描過程中,對使用位不做任何修改。選擇遇到的第一個幀(u=0, m=0)用于替換。

  • 如果第1步失敗,則重新掃描,查找(u=0, m=1)的幀。選擇遇到的第一個這樣的幀用于替換。在這個掃描過程中,對每個跳過的幀,把它的使用位設置成0。

  • 如果第2步失敗,指針將回到它的最初位置,并且集合中所有幀的使用位均為0。重復第1步,并且如果有必要,重復第2步。這樣將可以找到供替換的幀。

改進型的CLOCK算法優(yōu)于簡單CLOCK算法之處在于替換時首選沒有變化的頁。由于修改過的頁在被替換之前必須寫回,因而這樣做會節(jié)省時間。

4. 頁面分配策略

4.1 駐留集大小

對于分頁式的虛擬內(nèi)存,在準備執(zhí)行時,不需要也不可能把一個進程的所有頁都讀取到主存,因此,操作系統(tǒng)必須決定讀取多少頁。也就是說,給特定的進程分配多大的主存空間,這需要考慮以下幾點:

  • 分配給一個進程的存儲量越小,在任何時候駐留在主存中的進程數(shù)就越多,從而可以提高處理機的時間利用效率。

  • 如果一個進程在主存中的頁數(shù)過少,盡管有局部性原理,頁錯誤率仍然會相對較高。

  • 如果頁數(shù)過多,由于局部性原理,給特定的進程分配更多的主存空間對該進程的錯誤率沒有明顯的影響。

基于這些因素,現(xiàn)代操作系統(tǒng)通常釆用三種策略:

  • 固定分配局部置換:它為每個進程分配一定數(shù)目的物理塊,在整個運行期間都不改變。若進程在運行中發(fā)生缺頁,則只能從該進程在內(nèi)存中的頁面中選出一頁換出,然后再調(diào)入需要的頁面。實現(xiàn)這種策略難以確定為每個進程應分配的物理塊數(shù)目:太少會頻繁出現(xiàn)缺頁中斷,太多又會使CPU和其他資源利用率下降。

  • 可變分配全局置換:這是最易于實現(xiàn)的物理塊分配和置換策略,為系統(tǒng)中的每個進程分配一定數(shù)目的物理塊,操作系統(tǒng)自身也保持一個空閑物理塊隊列。當某進程發(fā)生缺頁時,系統(tǒng)從空閑物理塊隊列中取出一個物理塊分配給該進程,并將欲調(diào)入的頁裝入其中。

  • 可變分配局部置換:它為每個進程分配一定數(shù)目的物理塊,當某進程發(fā)生缺頁時,只允許從該進程在內(nèi)存的頁面中選出一頁換出,這樣就不會影響其他進程的運行。如果進程在運行中頻繁地缺頁,系統(tǒng)再分配若干物理塊給該進程,直至該進程缺頁率趨于適當程度; 反之,若進程在運行中缺頁率特別低,則可適當減少分配給該進程的物理塊。

4.2 調(diào)入頁面的時機

為確定系統(tǒng)將進程運行時所缺的頁面調(diào)入內(nèi)存的時機,可釆取以下兩種調(diào)頁策略:

  • 預調(diào)頁策略:根據(jù)局部性原理,一次調(diào)入若干個相鄰的頁可能會比一次調(diào)入一頁更高效。但如果調(diào)入的一批頁面中大多數(shù)都未被訪問,則又是低效的。所以就需要釆用以預測為基礎(chǔ)的預調(diào)頁策略,將預計在不久之后便會被訪問的頁面預先調(diào)入內(nèi)存。但目前預調(diào)頁的成功率僅約50%。故這種策略主要用于進程的首次調(diào)入時,由程序員指出應該先調(diào)入哪些頁。

  • 請求調(diào)頁策略:進程在運行中需要訪問的頁面不在內(nèi)存而提出請求,由系統(tǒng)將所需頁面調(diào)入內(nèi)存。由這種策略調(diào)入的頁一定會被訪問,且這種策略比較易于實現(xiàn),故在目前的虛擬存儲器中大多釆用此策略。它的缺點在于每次只調(diào)入一頁,調(diào)入調(diào)出頁面數(shù)多時會花費過多的I/O開銷。

4.3 從何處調(diào)入頁面

請求分頁系統(tǒng)中的外存分為兩部分:用于存放文件的文件區(qū)和用于存放對換頁面的對換區(qū)對換區(qū)通常是釆用連續(xù)分配方式,而文件區(qū)釆用離散分配方式,故對換區(qū)的磁盤I/O速度比文件區(qū)的更快。這樣從何處調(diào)入頁面有三種情況:

  • 系統(tǒng)擁有足夠的對換區(qū)空間:可以全部從對換區(qū)調(diào)入所需頁面,以提髙調(diào)頁速度。為此,在進程運行前,需將與該進程有關(guān)的文件從文件區(qū)復制到對換區(qū)。

  • 系統(tǒng)缺少足夠的對換區(qū)空間:凡不會被修改的文件都直接從文件區(qū)調(diào)入(換出時不必寫回)。但對于那些可能被修改的部分,在將它們換出時須調(diào)到對換區(qū),以后需要時再從對換區(qū)調(diào)入。

  • UNIX方式:與進程有關(guān)的文件都放在文件區(qū),故未運行過的頁面,都應從文件區(qū)調(diào)入。曾經(jīng)運行過但又被換出的頁面,由于是被放在對換區(qū),因此下次調(diào)入時應從對換區(qū)調(diào)入。進程請求的共享頁面若被其他進程調(diào)入內(nèi)存,則無需再從對換區(qū)調(diào)入。

5. 頁面抖動(顛簸)和工作集(駐留集)

5.1 頁面抖動(顛簸)

在頁面置換過程中的一種最糟糕的情形是,剛剛換出的頁面馬上又要換入主存,剛剛換入的頁面馬上就要換出主存,這種頻繁的頁面調(diào)度行為稱為抖動,或顛簸。如果一個進程在換頁上用的時間多于執(zhí)行時間,那么這個進程就在顛簸。

頻繁的發(fā)生缺頁中斷(抖動),其主要原因是某個進程頻繁訪問的頁面數(shù)目高于可用的物理頁幀數(shù)目。虛擬內(nèi)存技術(shù)可以在內(nèi)存中保留更多的進程以提高系統(tǒng)效率。在穩(wěn)定狀態(tài),幾乎主存的所有空間都被進程塊占據(jù),處理機和操作系統(tǒng)可以直接訪問到盡可能多的進程。但如果管理不當,處理機的大部分時間都將用于交換塊,即請求調(diào)入頁面的操作,而不是執(zhí)行進程的指令,這就會大大降低系統(tǒng)效率。

5.2 工作集(駐留集)

工作集(或駐留集)是指在某段時間間隔內(nèi),進程要訪問的頁面集合。經(jīng)常被使用的頁面需要在工作集中,而長期不被使用的頁面要從工作集中被丟棄。為了防止系統(tǒng)出現(xiàn)抖動現(xiàn)象,需要選擇合適的工作集大小。

工作集模型的原理是:讓操作系統(tǒng)跟蹤每個進程的工作集,并為進程分配大于其工作集的物理塊。如果還有空閑物理塊,則可以再調(diào)一個進程到內(nèi)存以增加多道程序數(shù)。如果所有工作集之和增加以至于超過了可用物理塊的總數(shù),那么操作系統(tǒng)會暫停一個進程,將其頁面調(diào)出并且將其物理塊分配給其他進程,防止出現(xiàn)抖動現(xiàn)象。

正確選擇工作集的大小,對存儲器的利用率和系統(tǒng)吞吐量的提高,都將產(chǎn)生重要影響。

6. 總結(jié)

分頁管理方式和分段管理方式在很多地方相似,比如內(nèi)存中都是不連續(xù)的、都有地址變換機構(gòu)來進行地址映射等。但兩者也存在著許多區(qū)別,表3-20列出了分頁管理方式和分段管理方式在各個方面的對比。


分頁分段
目 的頁是信息的物理單位,分頁是為實現(xiàn)離散分配方式,以消減內(nèi)存的外零頭,提髙內(nèi)存的利用率?;蛘哒f,分頁僅權(quán)是由于系統(tǒng)管理的需要而不是用戶的需要是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是為了能更好地滿足用戶的需要
長 度頁的大小固定且由系統(tǒng)決定,由系統(tǒng)把邏輯地址劃分為頁號和頁內(nèi)地址兩部分,是由機器硬件實現(xiàn)的,因而在系統(tǒng)中只能有一種大小的頁面段的長度不固定,決定于用戶所編寫的程序, 通常由編譯程序在對流程序進行編譯時,根據(jù)信息的性質(zhì)來劃分
地址空間作業(yè)地址空間是一維的,即單一的線性地址空間,程序員只需利用一個記憶符,即可表示 一個地址作業(yè)地址空間是二維的,程序員在標識一個地址時,既需給出段名,又需給出段內(nèi)地址
碎 片有內(nèi)部碎片,無外部碎片有外部碎片,無內(nèi)部碎片
”共享“和“動態(tài)鏈接”不容易實現(xiàn)容易實現(xiàn)

以上就是“l(fā)inux如何實現(xiàn)虛擬內(nèi)存”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI