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

正文內(nèi)容

freebsd虛擬內(nèi)存vm系統(tǒng)設(shè)計(jì)原理-文庫(kù)吧

2025-04-17 19:52 本頁(yè)面


【正文】 來(lái)管理所有這些對(duì)象。最初的程序二進(jìn)制文件作為 VM 對(duì)象層中的最低部分。寫時(shí)復(fù)制層隨后被放到它頂上,以保持那些頁(yè)在需要時(shí)所產(chǎn)生的副本。如果程序修改了屬于原始文件的數(shù)據(jù)頁(yè), VM 系統(tǒng)將獲得一個(gè)中斷 (fault),并在更高的這層復(fù)制那一頁(yè)。當(dāng)進(jìn)程 fork 時(shí),將產(chǎn)生附加的 VM 對(duì)象層。通過(guò)一個(gè)很基本的例子可以得到更多的感性認(rèn)識(shí)。 fork是所有 *BSD 系統(tǒng)的一個(gè)公共的操作, 因此這一事例將考慮一個(gè)程序開始,然后fork。當(dāng)進(jìn)程開始時(shí), VM 系統(tǒng)創(chuàng)建一個(gè)對(duì)象層,我們稱之為 A: A 表示文件 頁(yè)面可以在需要時(shí)從文件的物理介質(zhì)中換入 (page in)和換出(page out)。從磁盤上換入一部分?jǐn)?shù)據(jù)對(duì)程序來(lái)說(shuō)是很正常的,但我們并不希望頁(yè)面被換出并覆蓋原始的可執(zhí)行文件。 VM 系統(tǒng)因此建立一個(gè)新的層, B,它將由交換空間進(jìn)行物理的維護(hù)。 其后第一次頁(yè)面寫入將導(dǎo)致 B 中創(chuàng)建一個(gè)新的頁(yè),它的內(nèi)容將根據(jù) A 中的對(duì)應(yīng)頁(yè)初始化。所有 B 中的頁(yè)可以與交換設(shè)備換入和換出。當(dāng)程序 fork 時(shí), VM系統(tǒng)創(chuàng)建兩個(gè)新的對(duì)象 層,父進(jìn)程的 C1 和子進(jìn)程的 C2,這兩層都在 B 上: 在這個(gè)例子中,一個(gè) B 中的頁(yè)由父進(jìn)程進(jìn)行了修改,進(jìn)程將得到一個(gè)寫時(shí)復(fù)制中斷,并復(fù)制 C1 中的頁(yè),而 B 中的頁(yè)不會(huì)被觸及?,F(xiàn)在,子進(jìn)程也修改了一些數(shù)據(jù),于是在 C2 中發(fā)生了類似的事情。現(xiàn)在, B 中的原始頁(yè)對(duì)于 C1,C2 都不再可見,因?yàn)?C1 和 C2 都擁有了一份私有的、修改過(guò)的副本;此外,如果 B層并不表示一個(gè) 實(shí)在的 文件的話,它在理論上就可以釋放掉了。然而,釋放B 層中的個(gè)別塊這類優(yōu)化的價(jià)值不高,因?yàn)樗^(guò)于瑣碎,而且是如此的精細(xì)。FreeBSD 并不進(jìn)行這類優(yōu)化?,F(xiàn)在,假定 (就 像通常的情況那樣 ),子進(jìn)程調(diào)用了 exec(),那么當(dāng)前地址空間就被一個(gè)新的文件所表示的空間所代替。在這種情況中, C2 層被釋放: 在這種情況下, B 的子節(jié)點(diǎn)個(gè)數(shù)下降到 1,于是所有對(duì) B 的訪問(wèn)將直接通過(guò)C1 完成。這意味著 B 和 C1 可以被折疊到一起。任何在 B 和 C1 中都存在的頁(yè)在折疊過(guò)程中都將從 B 中刪除。因而,盡管這一油花在前一步驟中不被完成,但我們?nèi)匀豢梢栽?exec()或 exit 時(shí)恢復(fù)那些不再使用的頁(yè)。 這一模型造成了一系列潛在的問(wèn)題。首先,你可能會(huì)得到一個(gè)相對(duì)深的 VM對(duì)象層棧,當(dāng)產(chǎn)生中斷時(shí),這將造成掃描時(shí)間的增加,并 浪費(fèi)內(nèi)存。深的層在進(jìn)程 fork 并再次 fork 的時(shí)候 (無(wú)論父進(jìn)程還是子進(jìn)程 )產(chǎn)生。其次,那些不可能再次被訪問(wèn)的頁(yè)可能逐步在 VM 對(duì)象棧中積累。我們的最后一個(gè)例子將是,當(dāng)父進(jìn)程和子進(jìn)程都修改了同一頁(yè),它們都擁有了那一頁(yè)的私有副本,而 B 中的原始頁(yè)將不可能被訪問(wèn)到時(shí), B 中的這一頁(yè)將被釋放。 FreeBSD 通過(guò)一種被稱作 全覆蓋特例 的特殊優(yōu)化來(lái)解決深層問(wèn)題。這一情況發(fā)生于,當(dāng) C1 或 C2 產(chǎn)生了足夠的寫時(shí)復(fù)制中斷,并完全包含了 B 中的所有頁(yè)面時(shí)。以 C1 達(dá)到這一情況為例。 C1 現(xiàn)在可以完全繞過(guò) B,因此,我們不再采用 C1→ B→ A 和 C2→ B→ A 的訪問(wèn)方式,相反,我們將采用 C1→ A 和 C2→ B→ A。不過(guò),另一方面,我們觀察到現(xiàn)在 B 只有 1 個(gè)引用 (C2),因此我們可以將 B 與C2 折疊到一起。最終的結(jié)果是, B 可以被整個(gè)刪除,因而我們有 C1→ A 和 C2→A。通常情況下, B 將包括大量的頁(yè)面,而無(wú)論是 C1 還是 C2 都不能完全地蓋住它。如果此時(shí)我們?cè)俅?fork,并創(chuàng)建一組 D 層,那么,就非常有可能 D 層最終完全覆蓋 C1 或 C2 中遠(yuǎn)小的數(shù)據(jù)集。同樣的優(yōu)化將在圖中的任意一點(diǎn)工作,而最終結(jié)果將是即使在經(jīng)常進(jìn)行 fork 的機(jī)器上, VM 對(duì)象棧也基本上不會(huì)超過(guò) 4層。無(wú)論父進(jìn)程 和子進(jìn)程是否進(jìn)行 fork,無(wú)論子進(jìn)程是否進(jìn)行層疊的 fork,上述結(jié)論都是正確的。 某些不可能被訪問(wèn)的頁(yè)面可能依然存在,如果 C1 和 C2 都不能完全覆蓋 B。由于我們的其他優(yōu)化,這已經(jīng)不知造成問(wèn)題,因此我們將允許這樣的頁(yè)面存在。如果系統(tǒng)內(nèi)存不足,則這些頁(yè)面將被換出,消耗一些交換空間,但不會(huì)包括其他的工作了。 VM 對(duì)象模型的好處是 fork()非常快,因?yàn)椴⒉恍枰獙?shí)際進(jìn)行寫操作。缺點(diǎn)是 VM 對(duì)象層相對(duì)復(fù)雜,這略微減慢了缺頁(yè)中斷的處理,而且,需要額外的內(nèi)存來(lái)管理 VM 對(duì)象結(jié)構(gòu)。 FreeBSD 的優(yōu)化證明這些問(wèn)題完全可以被忽略, 從而實(shí)際上不存在什么缺陷。 私有的數(shù)據(jù)頁(yè)在開始時(shí),要么是寫時(shí)復(fù)制頁(yè),要么是按需清零頁(yè)。當(dāng)發(fā)生修改,并因此進(jìn)行賦值時(shí),頁(yè)背后的對(duì)象 (通常是一個(gè)文件 )將不能再被作為 VM系統(tǒng)需要重用一頁(yè)時(shí)頁(yè)的可靠副本。這時(shí)將用到交換區(qū) (swap)。交換區(qū)被分配作為內(nèi)存的一個(gè)輔助存儲(chǔ)區(qū),它不能被用作其他目的。 FreeBSD 只有在真的需要時(shí)才分配交換管理結(jié)構(gòu)。但是,交換管理結(jié)構(gòu)在歷史上是存在問(wèn)題的。 在 FreeBSD 中,交換管理結(jié)構(gòu)預(yù)先分配一個(gè)數(shù)組,它包括了需要較緩存儲(chǔ)的整個(gè)對(duì)象 哪怕那個(gè)對(duì)象中只有很少的頁(yè)是基于 交換區(qū)的。當(dāng)映射大的對(duì)象,或者一個(gè)有大的運(yùn)行尺寸 (RSS)的進(jìn)程 fork 時(shí),這會(huì)造成內(nèi)核內(nèi)存碎片問(wèn)題。此外,為了保持對(duì)交換空間的追蹤,內(nèi)核內(nèi)存中將保存一個(gè) 空洞表 ,這也趨于嚴(yán)重地產(chǎn)生碎片。由于 洞表 是一個(gè)線性表,交換分配和釋放性能不是最優(yōu)的,每頁(yè) O(n)。此外,它也要求在交換區(qū)釋放進(jìn)程時(shí)進(jìn)行內(nèi)核內(nèi)存分配,而這將造成內(nèi)存不足時(shí)的死鎖。由于采用的交錯(cuò)算法,由空洞產(chǎn)生的問(wèn)題變得更為嚴(yán)重。同時(shí),在非連續(xù)地分配內(nèi)存時(shí),交換區(qū)塊映射很快就會(huì)變得充滿碎片。內(nèi)核內(nèi)存也必須在發(fā)生換出 (swapout)時(shí)很快地分配交換區(qū)管 理結(jié)構(gòu)。顯然,這些都有很大的改善余地。 在 FreeBSD 中,我整個(gè)地重寫了交換子系統(tǒng)。通過(guò)這次重寫,交換區(qū)結(jié)構(gòu)被通過(guò)一個(gè)散列表 (hash table)而不再通過(guò)線性數(shù)組來(lái)分配,這帶來(lái)了固定的分配尺寸和更好的粒度控制。取代原先使用線性鏈表來(lái)追蹤預(yù)留交換空間的是,現(xiàn)在的系統(tǒng)使用一個(gè)包含空閑區(qū)域線索的采用基數(shù)樹結(jié)構(gòu) (radix tree st
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1