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

正文內(nèi)容

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

2025-05-23 19:52 本頁(yè)面
 

【正文】 FreeBSD 虛擬內(nèi)存 VM 系統(tǒng)設(shè)計(jì)原理 來(lái)源:版權(quán)說(shuō)明:這篇文章原載于 2021 年 1 月的 DaemonNews。這份版本可能包括了 Matt 以及其他作者的更新,以反映 FreeBSD VM 實(shí)現(xiàn)的進(jìn)展。 這個(gè)標(biāo)題實(shí)在是一個(gè)很自負(fù)的說(shuō)法,我的意思是,我正試圖描述整個(gè)FreeBSD VM 系統(tǒng),以一種讓多數(shù)人都能夠接受的方式。在過(guò)去的一年中,我集中精力于 FreeBSD 的主要內(nèi)核子系統(tǒng)中的大量模塊,特別是 VM 和磁盤(pán)交換(Swap)子系統(tǒng),以及相關(guān)的 NFS 代碼。我只是重寫(xiě)了所有代碼中很少的部分。在 VM 領(lǐng)域,我做的最主要的重寫(xiě)是針對(duì)磁盤(pán)交換部分的代碼進(jìn)行的。我的絕大部分工作是清理和維護(hù),其中包括適度的代碼重寫(xiě),而沒(méi)有對(duì) VM 子系統(tǒng)中的算法進(jìn)行大規(guī)模的調(diào)整。 VM 子系統(tǒng)的主要理論基礎(chǔ)沒(méi)有發(fā)生變化,而絕大多數(shù)與VM 相關(guān)的功績(jī)應(yīng) 該歸于 John Dyson 和 David Greenman。與 Kirk 這樣有資歷的學(xué)者不同,我并不想嘗試為每一個(gè)特性標(biāo)記特定的人名,因?yàn)槲医?jīng)常把他們搞錯(cuò)。 在開(kāi)始介紹實(shí)際的設(shè)計(jì)之前,讓我們來(lái)花些時(shí)間來(lái)介紹維護(hù),并讓那些存在已久的代碼基礎(chǔ) (codebase)進(jìn)行現(xiàn)代化的必要性。在編程者的世界中,算法總是趨于比代碼更為重要。同時(shí),作為 BSD 的學(xué)術(shù)傳統(tǒng)的一部分,在開(kāi)始時(shí)就對(duì)算法設(shè)計(jì)加以特別的關(guān)注也恰好符合這一點(diǎn)。在設(shè)計(jì)上給予特別的關(guān)注的結(jié)果通常就是一個(gè)干凈而靈活的代碼基礎(chǔ),它能夠被很容易地修改、擴(kuò)展,或隨著 時(shí)間的推移被替換掉。盡管 BSD 被某些人認(rèn)為是一個(gè) 古舊 的操作系統(tǒng),我們這些為之工作的人則認(rèn)為它更多地是一個(gè) 成熟 的代碼基礎(chǔ),其上的眾多組件被修改、擴(kuò)展甚至替換為現(xiàn)代化的代碼。它正在進(jìn)化,而且,無(wú)論代碼中的某些部分多么地古老, FreeBSD 總在接受新鮮血液。這是 FreeBSD 的一項(xiàng)重要特點(diǎn),而許多人往往忽視了它。程序員能夠犯下的最大錯(cuò)誤是不肯學(xué)習(xí)歷史,而這是許多其他現(xiàn)代操作系統(tǒng)中非常常見(jiàn)的問(wèn)題。 NT 是一個(gè)最好的例子,而其結(jié)果是相當(dāng)可怕的。 Linux 也不同程度地犯下了許多類(lèi)似的錯(cuò)誤 這些錯(cuò)誤足夠在 BSD 開(kāi) 發(fā)者中間,每隔一段時(shí)間就流傳一次笑話。 Linux 的問(wèn)題可以簡(jiǎn)單地歸結(jié)為,缺乏可以用來(lái)比較思想的經(jīng)驗(yàn)和歷史,在不斷的代碼開(kāi)發(fā)過(guò)程中,Linux 團(tuán)隊(duì)可以和 BSD 團(tuán)隊(duì)一樣快捷地找到問(wèn)題所在。而 NT 的開(kāi)發(fā)者,另一方面,重復(fù)地犯下 Unix 幾十年前就已經(jīng)解決掉的錯(cuò)誤,并且花上幾年來(lái)修復(fù)它們,并且一而再、再而三地這樣做。他們最嚴(yán)重的問(wèn)題是 not designed here(此處沒(méi)有進(jìn)行設(shè)計(jì) )和 we are always right because our marketing department says so(我們永遠(yuǎn)是對(duì)的,因?yàn)槲覀兊氖袌?chǎng)部門(mén)這樣說(shuō) )。我認(rèn)為不愿學(xué)習(xí)歷史的人是不能被原諒的。 許多 FreeBSD 設(shè)計(jì)中非常明顯地復(fù)雜的部分,特別是在 VM/Swap 子系統(tǒng)中的那些,是在不同條件下不得不解決的那些性能問(wèn)題的直接結(jié)果。這些問(wèn)題并不是由糟糕的算法設(shè)計(jì)造成的,它們來(lái)自實(shí)際的環(huán)境。在平臺(tái)之間的直接比較中,這些問(wèn)題由于系統(tǒng)資源受到重壓而變得非常明顯。在我描述 FreeBSD 的VM/Swap 子系統(tǒng)的同時(shí),讀者應(yīng)始終在頭腦中保持兩個(gè)重要的概念。首先,高性能的設(shè)計(jì)的重要方面是我們常說(shuō)的 優(yōu)化關(guān)鍵路徑 。這一原則通常的結(jié)果是代碼的膨脹,因?yàn)樗軌蜃岅P(guān)鍵路徑的代碼的性能變得更好。第二,堅(jiān)固的、范型化的設(shè)計(jì)在長(zhǎng)時(shí)間的運(yùn)行中勝過(guò)那些深度最優(yōu)化的設(shè)計(jì)。盡管范型化的設(shè)計(jì)與那些經(jīng)過(guò)深度優(yōu)化的設(shè)計(jì)相比,前者的性能在最初實(shí)現(xiàn)中可能更差,但范型化設(shè)計(jì)能夠更容易地適應(yīng)變化的條件,而過(guò)分深度優(yōu)化的設(shè)計(jì)則無(wú)法適應(yīng),以至于不得不丟棄。任何得以幸存,并在幾年后能夠被維護(hù)的代碼基礎(chǔ),因此都必須從一開(kāi)始就進(jìn)行正確的設(shè)計(jì),即使它的代價(jià)是少量性能上的衰退。 20 年前,人們?cè)J(rèn)為使用匯編語(yǔ)言要好于高級(jí)語(yǔ)言,因?yàn)樗軌虍a(chǎn)生快 10 倍以上的代碼;而今天,上述論點(diǎn)的錯(cuò)誤是非 常明顯的,因?yàn)樗惴ㄔO(shè)計(jì)和編譯技術(shù)的發(fā)展已經(jīng)大大降低了高級(jí)語(yǔ)言與匯編語(yǔ)言的差距。 對(duì)象 開(kāi)始描述 FreeBSD VM 系統(tǒng)的最好方法是從用戶級(jí)進(jìn)程的方面去觀察它。每一個(gè)用戶進(jìn)程可以看到一個(gè)單獨(dú)的、私有的、連續(xù)的虛擬內(nèi)存地址空間,包括多種類(lèi)型的內(nèi)存對(duì)象。這些對(duì)象有不同的特征。程序代碼和數(shù)據(jù)被保存在一個(gè)單獨(dú)的內(nèi)存映射文件 (將要執(zhí)行的二進(jìn)制文件 )中,但程序代碼是只讀的,而數(shù)據(jù)則是寫(xiě)時(shí)復(fù)制的。程序 BSS 是分配的內(nèi)存,而在需要時(shí)它們將被清零,這也被稱(chēng)作按需填零頁(yè)。同時(shí),任何文件都可以被映射到內(nèi)存地址空間,這也是共享 庫(kù) (shared library,Windows 上的動(dòng)態(tài)連接庫(kù)與它類(lèi)似,譯注 )的工作機(jī)制。這類(lèi)映射可以要求其上的修改對(duì)進(jìn)程私有。 fork 系統(tǒng)調(diào)用則是 VM 管理問(wèn)題中更為復(fù)雜的一個(gè)。 從程序的二進(jìn)制數(shù)據(jù)頁(yè) (基本上是寫(xiě)時(shí)復(fù)制頁(yè) )可以看出上述問(wèn)題的復(fù)雜性。程序的二進(jìn)制代碼包括了預(yù)先初始化的數(shù)據(jù)部分,它們?cè)诔跏紩r(shí),從程序文件直接映射出來(lái)。當(dāng)程序被加載到一個(gè)進(jìn)程 VM 空間時(shí),這一區(qū)域被進(jìn)行內(nèi)存映射,隨后由程序代碼本身進(jìn)行維護(hù),讓 VM 系統(tǒng)來(lái)釋放 /重用這些頁(yè),或者從程序文件中重新加載它們。但是,當(dāng)進(jìn)程修改這些數(shù)據(jù)時(shí), VM 系統(tǒng) 必須為進(jìn)程作一份私有的副本。由于私有副本已經(jīng)被改變, VM 系統(tǒng)就不能再釋放他們,因?yàn)槿绻@樣的話,就沒(méi)有辦法把它們重新恢復(fù)了。 你馬上會(huì)注意到,原本簡(jiǎn)單的文件映射變得復(fù)雜了許多。數(shù)據(jù)可能被一頁(yè)一頁(yè)地修改,而文件映射只是一次包含了許多頁(yè)。在進(jìn)程 fork 時(shí),產(chǎn)生的兩個(gè)進(jìn)程 每一個(gè)都擁有私有的地址空間 都必須包括原先進(jìn)程在調(diào)用 fork()之前的所有修改。讓 VM 系統(tǒng)一次制作所有數(shù)據(jù)的副本是愚蠢的,因?yàn)楹芸赡軆蓚€(gè)進(jìn)程中至少有一個(gè)只需要讀它們所在的頁(yè),這使得原先的頁(yè)仍然可以被繼續(xù)使用。私有的頁(yè)被再次標(biāo)記為寫(xiě)時(shí)復(fù)制,因 為每個(gè)進(jìn)程 (無(wú)論是父進(jìn)程還是子進(jìn)程 )都與其他們自己的、在 fork 之后的修改仍然是私有的,而不會(huì)影響另一個(gè)進(jìn)程。 FreeBSD 采用一種分層的 VM 對(duì)象模型
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1