操作系统原理第九章:虚拟内存
目錄
- 1 虛擬內(nèi)存的背景
- 1.1 局部性原理
- 1.2 虛擬內(nèi)存
- 2 請(qǐng)求調(diào)頁(yè)
- 2.1 頁(yè)面調(diào)入策略
- 3 頁(yè)面置換
- 4 頁(yè)面置換算法
- 4.1 最佳算法(OPT, optimal)
- 4.2 先進(jìn)先出置換算法(FIFO)
- 4.3 最近最久未使用置換算法(LRU)
- 5 幀(頁(yè))分配
1 虛擬內(nèi)存的背景
無(wú)論是分頁(yè)還是分段,程序運(yùn)行的基本要求就是必須全部放入內(nèi)存后方可運(yùn)行,如果進(jìn)程大于內(nèi)存的容量或者內(nèi)存中同時(shí)運(yùn)行多個(gè)進(jìn)程,那么進(jìn)程就無(wú)法執(zhí)行了,解決這個(gè)問題有兩種方法,即覆蓋和動(dòng)態(tài)加載,但是這兩種工作都是由程序員手動(dòng)來(lái)做而且實(shí)現(xiàn)很復(fù)雜。
上面的問題究其本質(zhì)就是內(nèi)存不夠用了,那么很容易想到的就是擴(kuò)充內(nèi)存,可以從物理上擴(kuò)充內(nèi)存容量,但是是受限的,如32位操作系統(tǒng)支持的內(nèi)存最大為4GB,64位操作系統(tǒng)支持的內(nèi)存最大為128GB,并且購(gòu)買內(nèi)存也較為昂貴。那么是否可以從邏輯上擴(kuò)充內(nèi)存容量呢?答案是可以的,本文內(nèi)容就是講解如何從邏輯上擴(kuò)充內(nèi)存。
常規(guī)的存儲(chǔ)方式具有如下特征:
- 一次性:作業(yè)在運(yùn)行前需要一次性的全部裝入內(nèi)存;
- 駐留性:作業(yè)裝入內(nèi)存后,便一直駐留在內(nèi)存中,直到作業(yè)結(jié)束。
正是由于一次性和駐留性,使得程序中暫時(shí)不用的數(shù)據(jù)占用了大量的內(nèi)存空間,從而需要運(yùn)行的作業(yè)無(wú)法裝入內(nèi)存。那么一次性和駐留性是必需的嗎?人們對(duì)程序做了很多的研究發(fā)現(xiàn)程序在執(zhí)行過程中其實(shí)不是要運(yùn)行所有部分:
- 程序通常有處理異常錯(cuò)誤的代碼,很少執(zhí)行
- 數(shù)組、鏈表和表通常分配了比實(shí)際需要更多的內(nèi)存
- 程序的某些選項(xiàng)或特點(diǎn)可能很少使用
- 即使需要完整的程序,也并不是同時(shí)需要所有的程序
通過上述四個(gè)特點(diǎn),我們可以發(fā)現(xiàn)程序運(yùn)行時(shí)往往只運(yùn)行了一部分,這個(gè)特點(diǎn)我們叫做局部性原理。
1.1 局部性原理
局部性原理的定義是在一段時(shí)間內(nèi),程序的執(zhí)行僅局限于某個(gè)部分;相應(yīng)地,它所訪問的存儲(chǔ)空間也局限于某個(gè)區(qū)域內(nèi)。出現(xiàn)局部性原理有如下原因:
- 程序在執(zhí)行時(shí),除了少部分的轉(zhuǎn)移和過程調(diào)用指令外,大多數(shù)仍是順序執(zhí)行的;
- 子程序調(diào)用將會(huì)使程序的執(zhí)行由一部分內(nèi)存區(qū)域轉(zhuǎn)至另一部分區(qū)域,也就是說程序只是從一個(gè)局部跳躍到另一個(gè)局部而已;
- 程序中存在許多循環(huán)結(jié)構(gòu),循環(huán)體中的指令被多次執(zhí)行;
- 程序中還包括許多對(duì)數(shù)據(jù)結(jié)構(gòu)的處理,如對(duì)連續(xù)的存儲(chǔ)空間——數(shù)組的訪問,往往局限于很小的范圍內(nèi)。
因此我們說程序是具有局部性的,局部性主要體現(xiàn)在兩個(gè)方面:
- 時(shí)間局部性: 如果程序中的某條指令一旦執(zhí)行,則不久的將來(lái)該指令可能再次被執(zhí)行;如果某個(gè)存儲(chǔ)單元被訪問,則不久以后該存儲(chǔ)單元可能再次被訪問;產(chǎn)生時(shí)間局限性的典型原因是在程序中存在著大量的循環(huán)操作;
- 空間局部性: 一旦程序訪問了某個(gè)存儲(chǔ)單元,則在不久的將來(lái),其附近的存儲(chǔ)單元也最有可能被訪問。 即程序在一段時(shí)間內(nèi)所訪問的地址,可能集中在一定的范圍內(nèi),其典型原因是程序是順序執(zhí)行的。
1.2 虛擬內(nèi)存
虛擬內(nèi)存是一種允許進(jìn)程部分裝入內(nèi)存就可以執(zhí)行的技術(shù),它基于的原理就是局部性原理,因?yàn)槌绦蚓哂芯植啃?#xff0c;所以只需要把當(dāng)前需要執(zhí)行的程序內(nèi)容裝入內(nèi)存即可,這個(gè)時(shí)候用戶看到的邏輯地址空間就比物理地址空間大,要實(shí)現(xiàn)這個(gè)功能就必須允許頁(yè)面能夠被換入和換出。
如下圖,虛擬內(nèi)存virtual memory顯然是比實(shí)際內(nèi)存physical memory大的,只需要把當(dāng)前要執(zhí)行的部分裝入內(nèi)存即可;用memory map來(lái)映射當(dāng)前哪些部分是要裝入內(nèi)存的,類似頁(yè)表,當(dāng)運(yùn)行到某個(gè)位置的時(shí)候就可以查詢它在內(nèi)存還是在外存;當(dāng)要運(yùn)行新的程序時(shí)或當(dāng)前內(nèi)存不足時(shí)就要和外存進(jìn)行頁(yè)面的換入和換出:
虛擬內(nèi)存具有如下特征:
- 離散性:在內(nèi)存分配時(shí)采用離散的分配方式,是虛擬存儲(chǔ)器的最基本的特征;
- 多次性:一個(gè)作業(yè)被分成多次調(diào)入內(nèi)存運(yùn)行,即在作業(yè)運(yùn)行時(shí)沒有必要將其全部裝入,只須將當(dāng)前要運(yùn)行的那部分程序和數(shù)據(jù)裝入內(nèi)存即可。是虛擬存儲(chǔ)器最重要的特征;
- 對(duì)換性:作業(yè)運(yùn)行過程中信息在內(nèi)存和外存的對(duì)換區(qū)之間換進(jìn)、換出;
- 虛擬性:從邏輯上擴(kuò)充內(nèi)存容量,使用戶所看到的內(nèi)存容量遠(yuǎn)大于實(shí)際內(nèi)存容量。
2 請(qǐng)求調(diào)頁(yè)
實(shí)現(xiàn)虛擬存儲(chǔ)器要解決如下三個(gè)問題 :
- 程序部分運(yùn)行可以嗎? 是可以的,依照程序局部性原理,取出要用的頁(yè),然后裝入內(nèi)存即可;
- 發(fā)現(xiàn)程序不在內(nèi)存時(shí),如何將其裝入后繼續(xù)運(yùn)行? 用請(qǐng)求調(diào)頁(yè)技術(shù),當(dāng)發(fā)生缺頁(yè)時(shí),產(chǎn)生缺頁(yè)中斷,將外存上的頁(yè)調(diào)入內(nèi)存;
- 內(nèi)存無(wú)空間時(shí)怎么辦? 用頁(yè)面置換,將部分頁(yè)面換出內(nèi)存。
2.1 頁(yè)面調(diào)入策略
為能使進(jìn)程運(yùn)行,事先需將一部分要執(zhí)行的程序和數(shù)據(jù)調(diào)入內(nèi)存,有兩種調(diào)頁(yè)的策略:
- 預(yù)調(diào)頁(yè)策略:主動(dòng)的頁(yè)面調(diào)入策略,即把那些預(yù)計(jì)很快會(huì)被訪問的程序或數(shù)據(jù)所在的頁(yè)面,預(yù)先調(diào)入內(nèi)存;這個(gè)策略的性能取決于預(yù)測(cè)的準(zhǔn)確率,預(yù)測(cè)的準(zhǔn)確率不高(50%),主要用于進(jìn)程的首次調(diào)入。也有的系統(tǒng)將預(yù)調(diào)頁(yè)策略用于請(qǐng)求調(diào)頁(yè)。
- 請(qǐng)求調(diào)頁(yè)策略:當(dāng)進(jìn)程在運(yùn)行中發(fā)生缺頁(yè)時(shí),由系統(tǒng)將缺頁(yè)調(diào)入內(nèi)存;目前虛擬存儲(chǔ)器系統(tǒng)大多采用此策略;但在調(diào)頁(yè)時(shí)須花費(fèi)較大的系統(tǒng)開銷,如需頻繁啟動(dòng)磁盤I/O。
請(qǐng)求調(diào)頁(yè)只有在一個(gè)頁(yè)需要的時(shí)候才把它換入內(nèi)存,這是請(qǐng)求調(diào)頁(yè)的好處,或者說是虛擬內(nèi)存的好處。它需要需要很少的I/O,需要很少的內(nèi)存,能夠快速響應(yīng),并且可以支持多用戶。當(dāng)需要某個(gè)頁(yè)的時(shí)候判斷它是否在內(nèi)存中是需要進(jìn)行查閱的,通常存在一個(gè)bit位表示它是不是在內(nèi)存,若不在內(nèi)存中就要調(diào)入內(nèi)存。
在具體實(shí)現(xiàn)的時(shí)候需要對(duì)進(jìn)程頁(yè)表的修改,也需要缺頁(yè)中斷的支持。請(qǐng)求分頁(yè)的頁(yè)表機(jī)制是在純分頁(yè)的頁(yè)表機(jī)制上形成的,由于只將應(yīng)用程序的一部分調(diào)入內(nèi)存,還有一部分仍在磁盤上,故需在頁(yè)表中再增加若干項(xiàng),供程序(數(shù)據(jù))在換進(jìn)、換出時(shí)參考。在請(qǐng)求分頁(yè)系統(tǒng)中的每個(gè)頁(yè)表項(xiàng)如下圖所示:
其中增加的各字段說明如下:
- 狀態(tài)位(存在位P) :用于指示該頁(yè)是否已調(diào)入內(nèi)存,供程序訪問時(shí)參考;
- 訪問字段A:用于記錄本頁(yè)在一段時(shí)間內(nèi)被訪問的次數(shù),或最近已有多長(zhǎng)時(shí)間未被訪問,提供給置換算法選擇換出頁(yè)面時(shí)參考;
- 修改位M:表示該頁(yè)在調(diào)入內(nèi)存后是否被修改過。由于內(nèi)存中的每一頁(yè)都在外存上保留一份副本,因此,若未被修改,在置換該頁(yè)時(shí)就不需將該頁(yè)寫回到外存上,以減少系統(tǒng)的開銷和啟動(dòng)磁盤的次數(shù);若已被修改,則必須將該頁(yè)重寫到外存上,以保證外存中所保留的始終是最新副本;
- 外存地址:用于指出該頁(yè)在外存上的地址,通常是物理塊號(hào),供調(diào)入該頁(yè)時(shí)使用。
完成頁(yè)面調(diào)頁(yè)還需要缺頁(yè)中斷機(jī)構(gòu)的支持,在請(qǐng)求分頁(yè)系統(tǒng)中,每當(dāng)所要訪問的頁(yè)面不在內(nèi)存時(shí),便要產(chǎn)生一缺頁(yè)中斷,請(qǐng)求操作系統(tǒng)將所缺頁(yè)調(diào)入內(nèi)存。與一般中斷的主要區(qū)別在于:
- 缺頁(yè)中斷在指令執(zhí)行期間產(chǎn)生和處理中斷信號(hào),而一般中斷在一條指令執(zhí)行完后檢查和處理中斷信號(hào);
- 缺頁(yè)中斷返回到該指令的開始重新執(zhí)行該指令,而一般中斷返回到該指令的下一條指令執(zhí)行;
- 一條指令在執(zhí)行期間,可能產(chǎn)生多次缺頁(yè)中斷;
下圖是缺頁(yè)中斷的處理過程,現(xiàn)在要加載一個(gè)程序 M,?首先要查詢頁(yè)表,發(fā)現(xiàn)該頁(yè)在頁(yè)表中是 i (invalid),表示不在內(nèi)存,?這個(gè)時(shí)候就產(chǎn)生一個(gè)缺頁(yè)中斷,?操作系統(tǒng)就會(huì)根據(jù)在頁(yè)表中指向的外存的地址找到它,?隨后從外存放入內(nèi)存,放入的時(shí)候要找一個(gè)空閑頁(yè),一旦放進(jìn)去了以后,?頁(yè)表就要更新,此時(shí)中斷就結(jié)束了,?接著就要返回到這個(gè)程序重新執(zhí)行:
上面整個(gè)過程主要是執(zhí)行以下三個(gè)操作:
- 處理缺頁(yè)中斷;
- 從磁盤讀入所需的頁(yè);
- 重新開始被中斷的進(jìn)程。
其中最大的一部分時(shí)間開銷為第二步,即從磁盤讀入所需的頁(yè),因此我們希望減少讀入的次數(shù),也就是降低缺頁(yè)率。
缺頁(yè)率 = 訪問內(nèi)存次數(shù) / 不成功訪問次數(shù)
3 頁(yè)面置換
隨著裝入內(nèi)存的程序越來(lái)越多,內(nèi)存可能會(huì)有裝滿的情況下,這個(gè)時(shí)候如果來(lái)了新的程序想要進(jìn)入內(nèi)存,就必須執(zhí)行頁(yè)面置換,將內(nèi)存中暫不使用的程序先從內(nèi)存調(diào)出到外存。
如下圖的兩個(gè)用戶程序,其中用戶程序1需要載入程序M,用戶程序2需要載入程序B,而此時(shí)M載入到內(nèi)存后,內(nèi)存已經(jīng)滿了,程序B再要裝入內(nèi)存已經(jīng)沒有位置了,所以此時(shí)要將現(xiàn)在內(nèi)存中的某個(gè)程序置換出去。
現(xiàn)在置換有如下幾種方法:
- 終止用戶進(jìn)程:一旦終止用戶進(jìn)程,進(jìn)程就會(huì)釋放內(nèi)存空間,那么內(nèi)存就騰出位置來(lái)了,這種方法的代價(jià)是比較大的;
- 交換進(jìn)程:中級(jí)調(diào)度,釋放其所有幀,降低多道程序的度,這種方法的代價(jià)也是比較大的,因?yàn)槭且哉麄€(gè)進(jìn)程為單位,進(jìn)行的 I/O 操作開銷較大;
- 頁(yè)面置換:以頁(yè)為單位做交換,這種方法的開銷相比是最小的。
頁(yè)面置換的執(zhí)行步驟如下:
- 找到頁(yè)面在磁盤中的位置,找到之后便要把它讀入內(nèi)存,就要找到一個(gè)空閑的幀;
- 若有空閑的幀遍可以直接裝入,若沒有空閑的幀就要選擇一個(gè)頁(yè)調(diào)換出去,同時(shí)修改頁(yè)表,再把頁(yè)面裝入內(nèi)存;
頁(yè)面置換過程如下圖所示,?犧牲當(dāng)前內(nèi)存中的某個(gè)頁(yè), 置換到外存上,?修改頁(yè)表標(biāo)志位,?將頁(yè)面置換進(jìn)內(nèi)存中,?更新頁(yè)表:
可以發(fā)現(xiàn)在頁(yè)面置換過程中,需要兩個(gè)頁(yè)面?zhèn)鬏?#xff0c;一個(gè)換出,一個(gè)換入。但是有時(shí)候只需要一次置換就可以,因?yàn)橛行┏绦蛟趦?nèi)存中并沒有被修改過,所以它不需要換到外存去更新數(shù)據(jù),只用犧牲它,將新調(diào)入的程序覆蓋它即可,這里用到的方法就是前面提到的修改位。
頁(yè)面置換的總的流程圖如下圖所示,圖中的快表指的是聯(lián)想寄存器:
4 頁(yè)面置換算法
在進(jìn)程運(yùn)行過程中,如果發(fā)生缺頁(yè), , 而內(nèi)存中又無(wú)空閑塊時(shí)可以將內(nèi)存中的某一頁(yè)換到磁盤的對(duì)換區(qū)。那么到底選擇調(diào)出哪一個(gè)頁(yè),可以根據(jù)頁(yè)面置換算法來(lái)確定,置換算法的好壞將直接影響系統(tǒng)的性能,不適當(dāng)?shù)乃惴赡軙?huì)導(dǎo)致進(jìn)程發(fā)生 “抖動(dòng)” (Thrashing) 。
抖動(dòng) (Thrashing):如果進(jìn)程分配到的幀數(shù)量小于計(jì)算機(jī)體系結(jié)構(gòu)所要求的最小數(shù)量,那么必須暫停進(jìn)行執(zhí)行。并將其置換出去,使其所有分配幀空閑。這么做的原因就是如果進(jìn)程沒有這些必需的幀,那么很快會(huì)出現(xiàn)缺頁(yè),此時(shí)需置換某個(gè)頁(yè),然而,其所有頁(yè)都在使用,置換出去的頁(yè)立刻又需要置換進(jìn)來(lái),因此,會(huì)不斷的產(chǎn)生缺頁(yè)。這種頻繁的調(diào)頁(yè)行為稱作抖動(dòng) (Thrashing),也叫顛簸。
頁(yè)面置換最大的問題就是到底換哪一個(gè)頁(yè),若換出的某個(gè)頁(yè)很快就又要用到又要換進(jìn)來(lái),這樣的效率是很低的,所以我們希望我們換出的頁(yè)是今后很長(zhǎng)一段時(shí)間內(nèi)不再用到的頁(yè),這樣就能降低系統(tǒng)的缺頁(yè)率,我們來(lái)衡量一個(gè)頁(yè)面置換算法的好壞主要是通過缺頁(yè)率的大小,從理論上講 , 應(yīng)將那些以后不再被訪問的頁(yè)面換出,或把那些在較長(zhǎng)時(shí)間內(nèi)不會(huì)再被訪問的頁(yè)面換出,在實(shí)際的過程中有很多的置換算法能夠接近理論目標(biāo),為什么說是理論上的,因?yàn)槲覀內(nèi)耸遣恢滥男╉?yè)面是要換的。
我們通過運(yùn)行一個(gè)內(nèi)存訪問的特殊序列(訪問序列),計(jì)算這個(gè)序列的缺頁(yè)次數(shù)來(lái)評(píng)估算法。這個(gè)序列我們假定為 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1,后面討論算法時(shí)都會(huì)用到這個(gè)序列。
4.1 最佳算法(OPT, optimal)
最佳算法中被置換的頁(yè)將是之后最長(zhǎng)時(shí)間不被使用的頁(yè),其置換過程如下:
上述過程的缺頁(yè)次數(shù)是 999,置換次數(shù)是 666。這個(gè)算法的缺點(diǎn)就是在實(shí)際過程中,我們并不知道這個(gè)內(nèi)存訪問序列,尤其是在多道批處理系統(tǒng)中,更是無(wú)法預(yù)測(cè),所以最佳算法只是理論上最優(yōu)的算法,現(xiàn)實(shí)中是無(wú)法實(shí)現(xiàn)的,我們通常用它來(lái)衡量其他算法的性能。
4.2 先進(jìn)先出置換算法(FIFO)
先進(jìn)先出置換算法中是按照內(nèi)存先來(lái)先得,先進(jìn)來(lái)的先出去這種方式來(lái)選擇置換的頁(yè),其置換過程如下:
上述過程的缺頁(yè)次數(shù)是 151515,置換次數(shù)是 121212。這個(gè)算法的性能幾乎是比最佳算法差了一倍了,導(dǎo)致性能不好的原因是剛剛換出去的頁(yè),很可能又要被換進(jìn)來(lái),于是增加了缺頁(yè)率,因此有了下面第三種置換算法。
4.3 最近最久未使用置換算法(LRU)
雖然并不知道頁(yè)面未來(lái)的使用情況,但是可以使用離過去最近的情況作為不遠(yuǎn)將來(lái)的近似,可以選擇最近最少使用的頁(yè)進(jìn)行置換,其置換過程如下:
上述過程的缺頁(yè)次數(shù)是 121212,置換次數(shù)是 999。這個(gè)算法的性能顯然比先進(jìn)先出置換算法要好,但是實(shí)現(xiàn)LRU算法需要硬件支持,記錄物理頁(yè)的使用情況。
但是實(shí)際上可能沒有足夠的硬件支持,所以就有了LRU的近似算法,如基于訪問位的算法,二次機(jī)會(huì)算法。
- 訪問位算法:每個(gè)頁(yè)都與一個(gè)位相關(guān)聯(lián),初始值為0,每當(dāng)這個(gè)頁(yè)被訪問的時(shí)候就把這個(gè)頁(yè)置位1,所以在選擇置換的頁(yè)時(shí)就可以看這個(gè)訪問位,看誰(shuí)是未被訪問過的。但是這個(gè)算法有不足的地方就在于我們并不知道這個(gè)置換順序,因?yàn)橛锌赡苡械捻?yè)時(shí)很久都沒有使用過的,有的頁(yè)只是最近未被使用過的,理論上來(lái)說很久未被使用的頁(yè)大概率以后不會(huì)再使用了,而最近未使用的頁(yè)很可能再被使用歐冠。
- 二次機(jī)會(huì)算法 (clock算法):同樣它也需要訪問位的支持,它會(huì)把所有的頁(yè)組成一個(gè)環(huán),同樣未被訪問時(shí),訪問位置0,訪問位就置1,在要置換時(shí),我們以順時(shí)針的方向遍歷這個(gè)環(huán)來(lái)尋找訪問位為0的頁(yè)換出去,若找到訪問位為1的頁(yè),就把它置位0,代表著給它一次機(jī)會(huì),這也是二次機(jī)會(huì)算法名字的由來(lái)。如果所有頁(yè)的訪問位都為1,則此算法退化為FIFO算法。二次機(jī)會(huì)算法執(zhí)行過程如下圖所示:
5 幀(頁(yè))分配
前面提到每個(gè)進(jìn)程要運(yùn)行則必須給它分配一定的內(nèi)存空間,它才能把需要的內(nèi)容放到內(nèi)存去執(zhí)行,那么如何給進(jìn)程分配內(nèi)存空間呢?首先我們要保證給它分配的空間是能夠讓它正常的運(yùn)行的,即保證進(jìn)程正常運(yùn)行所需的最小物理塊數(shù),若系統(tǒng)為某進(jìn)程所分配的物理塊數(shù)少于此值時(shí),進(jìn)程將無(wú)法正常運(yùn)行(頻繁發(fā)生缺頁(yè)),這個(gè)數(shù)目取決于指令的格式、功能和尋址方式。
具體分配多個(gè)頁(yè),有如下的分配方式:
- 平均分配:比如有100個(gè)頁(yè),和5個(gè)進(jìn)程,則每個(gè)進(jìn)程分給20個(gè)頁(yè);
- 按比例分配:根據(jù)每個(gè)進(jìn)程的大小比例來(lái)分配;
- 優(yōu)先分配:根據(jù)優(yōu)先級(jí)而不是大小來(lái)使用比率分配策略。
如果進(jìn)程 PiP_iPi? 產(chǎn)生了一個(gè)缺頁(yè),我們知道這個(gè)時(shí)候需要使用頁(yè)面替換算法來(lái)替換一個(gè)頁(yè)面,所替換頁(yè)面的位置分為如下兩種:
- 全局替換:進(jìn)程在所有的頁(yè)中選擇一個(gè)替換頁(yè)面;一個(gè)進(jìn)程可以從另一個(gè)進(jìn)程中獲得頁(yè)面;
- 局部替換:每個(gè)進(jìn)程只從屬于它自己的頁(yè)中選擇。
所以當(dāng)進(jìn)行全局置換的時(shí)候,進(jìn)程所分配的頁(yè)數(shù)是可以變化的,因?yàn)樗加昧似渌M(jìn)程的頁(yè),因此使用全局置換可能造成其他進(jìn)程的運(yùn)行錯(cuò)誤;當(dāng)進(jìn)行局部置換的時(shí)候,進(jìn)程所分配的頁(yè)數(shù)是固定不變的,因?yàn)樗辉谧约核鶎俚姆秶鷥?nèi)置換。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的操作系统原理第九章:虚拟内存的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统原理第八章:内存管理
- 下一篇: 操作系统原理第十章:文件系统