freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

freebsd虛擬內(nèi)存vm系統(tǒng)設(shè)計(jì)原理(編輯修改稿)

2025-06-12 19:52 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ructure)組織的塊的位映射表 (bitmap)。這有效地使交換區(qū)的分配和釋放成為一個(gè) O(1)的操作。整個(gè)基數(shù)樹(shù)位映射表也是預(yù)先分配的,這防止了在內(nèi)存不足時(shí)的交換操 作中分配新的內(nèi)核內(nèi)存。畢竟,在內(nèi)存不足時(shí)系統(tǒng)將趨于使用交換區(qū),而我們應(yīng)該避免在此時(shí)分配內(nèi)存,以預(yù)防出現(xiàn)死鎖。最后,為了減少碎片,基數(shù)樹(shù)適合于一次分配大的連續(xù)快,而跳過(guò)小的碎片組。我還沒(méi)有完成增加 分配線索指針 的最后步驟,它能夠讓以后的分配更容易得到連續(xù)的空間,或至少保證引用的局部性,但我保證類似的修改能夠完成。 由于 VM 系統(tǒng)使用所有可用的內(nèi)存作為磁盤(pán)緩存,因此通常很少有真正空閑的頁(yè)。 VM 系統(tǒng)的正常運(yùn)轉(zhuǎn)依賴于正確地選擇沒(méi)有在用的頁(yè),并為新的分配重用它們的能力。選擇好的頁(yè)面淘汰算法可能是 VM 系 統(tǒng)中唯一的一項(xiàng)最重要的功能,因?yàn)槿绻倪x擇不好,那么 VM 系統(tǒng)可能不得不再次完成從磁盤(pán)獲得頁(yè)的工作,這將嚴(yán)重降低系統(tǒng)性能。 我們究竟希望在關(guān)鍵路徑中承受多少開(kāi)銷,以防止釋放掉不該釋放的頁(yè) ?每一次錯(cuò)誤的選擇都將耗去成百上千的 CPU 周期,以及相關(guān)進(jìn)程的可以被察覺(jué)的停頓,因此我們希望容忍大量的開(kāi)銷,以確保選擇了正確的那頁(yè)。這是為什么在內(nèi)存資源承受重壓時(shí),為什么 FreeBSD 總趨向于提供更好的性能的主要原因。 頁(yè)面淘汰算法建立在過(guò)去內(nèi)存頁(yè)的使用歷史上。為了獲得這一歷史資料,系統(tǒng)得益于絕大多數(shù)硬件頁(yè)表中提供的 頁(yè)在用 位。 在任何情況下,頁(yè)在用位總是在 VM 系統(tǒng)在該位置位后的某一時(shí)刻被復(fù)位。它表示頁(yè)仍然被活躍地使用著。如果 VM 系統(tǒng)遍歷頁(yè)表時(shí)頁(yè)的這個(gè)位處于復(fù)位狀態(tài),則標(biāo)識(shí)它沒(méi)有被活躍地使用。通過(guò)周期性地檢測(cè)這個(gè)位,使用歷史 (以計(jì)數(shù)器為形式 )就能夠被獲得。當(dāng) VM 系統(tǒng)隨后需要釋放一些頁(yè)時(shí),這個(gè)歷史將成為檢測(cè)最佳候選頁(yè)的基石。 如果系統(tǒng)中沒(méi)有頁(yè)在用位怎么辦 ?對(duì)于那些不提供這一特性的平臺(tái)來(lái)說(shuō),系統(tǒng)實(shí)際上模擬一個(gè)頁(yè)在用位。它解除映射或保護(hù)頁(yè),從而在頁(yè)再次被訪問(wèn)時(shí)強(qiáng)制產(chǎn)生一個(gè)中斷。當(dāng)中斷發(fā)生時(shí),系統(tǒng)簡(jiǎn)單地標(biāo)記頁(yè)在用,并解除保護(hù)從而讓頁(yè)可以被使用。由于如此僅僅檢測(cè)頁(yè)是否在用的代價(jià)過(guò)于昂貴,因此這一技術(shù)通常用來(lái)查找進(jìn)程需要某一頁(yè)時(shí)必須交換的頁(yè)。 FreeBSD 使用一系列頁(yè)隊(duì)列,以更好地校正對(duì)頁(yè)的選擇,同時(shí)確認(rèn)何時(shí)改過(guò)的頁(yè)應(yīng)被換出到備用存儲(chǔ)器中。由于頁(yè)表在 FreeBSD 中是動(dòng)態(tài)的實(shí)體,因此,從使用頁(yè)的進(jìn)程中解除一頁(yè)的映射沒(méi)有任何代價(jià)。當(dāng)候選頁(yè)被 通過(guò)頁(yè)使用計(jì)數(shù)器選出時(shí),這部分的工作也就完成了。系統(tǒng)必須區(qū)分那些干凈的 (clean)頁(yè)和改過(guò)的 (dirty)頁(yè),干凈的頁(yè)可以在任何時(shí)候被釋放,而改過(guò)的頁(yè)則必須首先寫(xiě)盤(pán)。當(dāng)候選頁(yè)被發(fā)現(xiàn)時(shí),如果它被改過(guò),則放進(jìn)非活躍 (inactive)隊(duì)列;如果它是干凈的,則直接放入緩存隊(duì)列。一個(gè)基于改過(guò)和干凈頁(yè)比例的獨(dú)立的算法決定何時(shí)非活躍隊(duì)列中改過(guò)的頁(yè)必須被寫(xiě)盤(pán)。一旦這些都完成了,已經(jīng)寫(xiě)盤(pán)的頁(yè)就從非活躍隊(duì)列挪到緩存隊(duì)列。此時(shí),在緩存隊(duì)列中的頁(yè)仍然可以通過(guò)一次 VM 中斷以相對(duì)較低的代價(jià)重新激活。不過(guò),在緩存隊(duì)列中的頁(yè)都被認(rèn)為是 可以馬上釋放 的,并將按照 LRU(最近最少用到 )的規(guī)則在系統(tǒng)需要分配新的內(nèi)存時(shí)被替換掉。 注意, FreeBSD VM 系統(tǒng)嘗試將干凈和改過(guò)的頁(yè)分開(kāi)這一點(diǎn)非常重要,原因非常簡(jiǎn)單 避免進(jìn)行不需要的寫(xiě)入操作 (這將消耗 I/O 帶寬 ),當(dāng)內(nèi)存子系統(tǒng)不承受重壓時(shí),它也不在不同的頁(yè)隊(duì)列之間無(wú)理由地移動(dòng)頁(yè)。這是為什么你在一些系統(tǒng)上使用 systatvm 命令時(shí)看到很低的緩存隊(duì)列計(jì)數(shù)和很高的活動(dòng)隊(duì)列計(jì)數(shù)的原因。當(dāng) VM 系統(tǒng)承受重壓時(shí),它將進(jìn)行努力以維持不同的頁(yè)面隊(duì)列在一個(gè)被證明是最有效的級(jí)別運(yùn)作。一個(gè)存留了幾年的神話是, Linux 在防止換出方面比 FreeBSD 更好,然而這是錯(cuò)誤的。實(shí)際在 FreeBSD 中發(fā)生的事情是,它主動(dòng)地?fù)Q出不用的頁(yè),以給磁盤(pán)緩存提供更多的空間,而 Linux 則將不用的頁(yè)保留在主存中,而給緩存和進(jìn)程頁(yè)剩下更少的內(nèi)存。當(dāng)然,我并不保證今天的Linux 系統(tǒng)依然如此。 發(fā)生一次 VM 中斷的代價(jià)并不一定昂貴,如果相關(guān)的頁(yè)已經(jīng)在主存中,那么它可以被簡(jiǎn)單地映射到進(jìn)程中。然而,如果把所有的工作一次完成就不一樣了。比較常見(jiàn)的例子是類似 ls(1)或 ps(1)這樣的程序一遍又一遍地執(zhí)行。如果程序的二進(jìn)制映像被映射到 內(nèi)存中,而沒(méi)有映射進(jìn)頁(yè)表,那么所有被程序訪問(wèn)的頁(yè)將在每次運(yùn)行程序時(shí)引發(fā)缺頁(yè)中斷。當(dāng)請(qǐng)求的頁(yè)已經(jīng)在 VM 緩存中存在時(shí),這顯然不是必需的,因此 FreeBSD 將嘗試從 VM 緩存中先行組裝進(jìn)程的頁(yè)表。目前FreeBSD 還沒(méi)有做到的是在 exec 時(shí)進(jìn)行寫(xiě)時(shí)預(yù)復(fù)制 (precopyonwrite)。例如,當(dāng)你在執(zhí)行 vmstat 1 時(shí)運(yùn)行 ls(1)程序,就會(huì)注意到它總是引發(fā)特定數(shù)量的缺頁(yè)中斷,即使一次又一次地執(zhí)行。此外還有填零中斷,而不是程序代碼中斷 (它預(yù)先產(chǎn)生中斷 )。將在 exec 或 fork 時(shí)復(fù)制的頁(yè)的情況可能更容易研究。 缺頁(yè)中斷中的很大一部分是填零中斷。通常你可以通過(guò) vmstats 的輸出觀察到這一點(diǎn)。在進(jìn)程訪問(wèn) BSS 區(qū)域時(shí)會(huì)發(fā)生這種中斷。 BSS 區(qū)域預(yù)期被填充零,但 VM 系統(tǒng)在進(jìn)程實(shí)際訪問(wèn)它之前并不為它分配內(nèi)存。當(dāng)發(fā)生中斷時(shí), VM 系統(tǒng)不僅需要分配新的頁(yè),而且它還必須被清零。為了優(yōu)化清零操作, VM 系統(tǒng)有能力對(duì)頁(yè)進(jìn)行預(yù)清零,并對(duì)它們進(jìn)行標(biāo)記,進(jìn)而在發(fā)生清零中斷時(shí)直接請(qǐng)求這些頁(yè)。預(yù)清零在 CPU 空閑的任何時(shí)候,只要系統(tǒng)中的預(yù)清零頁(yè)面不足時(shí),通過(guò)減少內(nèi)存緩存來(lái)完成。這是 VM 系統(tǒng)中優(yōu)化關(guān)鍵路徑時(shí)增加復(fù)雜度的很好的例子。 頁(yè)表優(yōu)化是 FreeBSD VM 設(shè)計(jì)中最有爭(zhēng)議的部分,它們看來(lái)在大量使用mmap()時(shí)過(guò)于緊張。我認(rèn)為這實(shí)際上是絕大多數(shù) BSD 系統(tǒng)的一個(gè)特性,盡管我并不十分清楚它是何時(shí)被引入的。有兩項(xiàng)主要的優(yōu)化。首先是硬件頁(yè)表不包含回歸狀態(tài),但可以被在任何時(shí)候丟棄,而只付出很小的管理代價(jià)。然后是,系統(tǒng)中每一個(gè)活動(dòng)頁(yè)表項(xiàng)有一個(gè)控制的 pv_entry 結(jié)構(gòu)附著于 vm_page 結(jié)構(gòu)上。FreeBSD 能夠簡(jiǎn)單地在這些映射上迭代,而在 Linux 中,則
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1