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

正文內(nèi)容

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

2025-05-23 19:52 本頁面
 

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