os內(nèi)存的疑問(wèn)
如果一個(gè)對(duì)象大于4kb,一頁(yè)是4k的情況下這個(gè)對(duì)象會(huì)占據(jù)多個(gè)頁(yè),在頁(yè)表中有多個(gè)頁(yè)表項(xiàng)。
疑問(wèn)1:那么os在訪問(wèn)這個(gè)對(duì)象時(shí)是如何取到全部的頁(yè)?
疑問(wèn)2:寫(xiě)時(shí)拷貝時(shí)對(duì)這個(gè)對(duì)象所在內(nèi)存的修改,觸發(fā)寫(xiě)保護(hù)中斷時(shí)os又是如何知道該拷貝多個(gè)頁(yè)還是單個(gè)頁(yè)?
疑問(wèn)1:那么os在訪問(wèn)這個(gè)對(duì)象時(shí)是如何取到全部的頁(yè)?
疑問(wèn)2:寫(xiě)時(shí)拷貝時(shí)對(duì)這個(gè)對(duì)象所在內(nèi)存的修改,觸發(fā)寫(xiě)保護(hù)中斷時(shí)os又是如何知道該拷貝多個(gè)頁(yè)還是單個(gè)頁(yè)?
全部評(píng)論
感謝老哥回答,那關(guān)于小林coding關(guān)于 “Redis 大 Key 對(duì)持久化有什么影響?“中提到的大key在aof重寫(xiě)或者rdb時(shí) fork子進(jìn)程,當(dāng)主進(jìn)程對(duì)redis大key進(jìn)行了寫(xiě),此時(shí)寫(xiě)時(shí)拷貝COW也只是拷貝修改的一頁(yè)嗎,但是小林的回復(fù)是會(huì)拷貝整個(gè)大key,而不是一個(gè)頁(yè)?
1: 操作系統(tǒng)如何訪問(wèn)一個(gè)跨多頁(yè)的對(duì)象?
當(dāng)一個(gè)對(duì)象大于頁(yè)的大小(例如4KB),且跨越多個(gè)頁(yè)時(shí),操作系統(tǒng)通過(guò)維護(hù)一個(gè)連續(xù)的虛擬地址空間來(lái)訪問(wèn)這個(gè)對(duì)象。每個(gè)頁(yè)在虛擬地址空間中會(huì)有一個(gè)對(duì)應(yīng)的頁(yè)表項(xiàng)。操作系統(tǒng)和硬件協(xié)作,使用頁(yè)表將虛擬地址映射到物理地址。當(dāng)訪問(wèn)跨頁(yè)對(duì)象時(shí),操作系統(tǒng)通過(guò)虛擬地址連續(xù)性,結(jié)合頁(yè)表項(xiàng)中的映射信息,將虛擬地址轉(zhuǎn)換為物理地址,從而能夠訪問(wèn)到對(duì)象的全部?jī)?nèi)容。
虛擬內(nèi)存管理: 操作系統(tǒng)使用虛擬內(nèi)存管理機(jī)制,將程序的地址空間分隔成多個(gè)虛擬頁(yè)。每個(gè)虛擬頁(yè)通過(guò)頁(yè)表映射到物理內(nèi)存中的頁(yè)框。
連續(xù)虛擬地址空間: 即便物理上非連續(xù),操作系統(tǒng)確保對(duì)象在虛擬地址空間中占據(jù)連續(xù)的地址。這意味著,從程序的視角看,對(duì)象是存儲(chǔ)在一個(gè)連續(xù)的內(nèi)存區(qū)域內(nèi)。
頁(yè)表和TLB: 操作系統(tǒng)和處理器一起使用頁(yè)表和轉(zhuǎn)換后援緩沖器來(lái)高效地將虛擬地址轉(zhuǎn)換為物理地址。當(dāng)程序訪問(wèn)一個(gè)對(duì)象時(shí),它使用對(duì)象的虛擬地址。處理器自動(dòng)查找頁(yè)表或TLB來(lái)找到對(duì)應(yīng)的物理地址。
2: 寫(xiě)時(shí)拷貝時(shí)的處理機(jī)制
寫(xiě)時(shí)拷貝,是一種優(yōu)化策略,用于節(jié)約內(nèi)存和減少拷貝操作。當(dāng)多個(gè)進(jìn)程共享相同的物理內(nèi)存頁(yè)時(shí),這些頁(yè)被標(biāo)記為只讀。如果一個(gè)進(jìn)程嘗試寫(xiě)入這些只讀頁(yè),會(huì)觸發(fā)一個(gè)寫(xiě)保護(hù)中斷。操作系統(tǒng)響應(yīng)這個(gè)中斷,決定是拷貝單個(gè)頁(yè)還是多個(gè)頁(yè)。
中斷處理: 當(dāng)寫(xiě)操作觸發(fā)寫(xiě)保護(hù)中斷時(shí),操作系統(tǒng)的中斷處理程序會(huì)被調(diào)用。它會(huì)檢查觸發(fā)寫(xiě)操作的虛擬地址,確定哪個(gè)虛擬頁(yè)需要被復(fù)制。
頁(yè)的拷貝: 對(duì)于寫(xiě)時(shí)拷貝,操作系統(tǒng)通常僅拷貝被寫(xiě)入的那個(gè)頁(yè),而不是整個(gè)對(duì)象占用的所有頁(yè)。這是因?yàn)槊總€(gè)頁(yè)表項(xiàng)獨(dú)立管理各自的虛擬頁(yè)到物理頁(yè)的映射。因此,只有當(dāng)對(duì)具體某個(gè)虛擬頁(yè)進(jìn)行寫(xiě)操作時(shí),操作系統(tǒng)才會(huì)為該虛擬頁(yè)創(chuàng)建一個(gè)新的物理頁(yè),并更新頁(yè)表項(xiàng)以反映這一變化。
優(yōu)化: 操作系統(tǒng)可以通過(guò)各種機(jī)制(如頁(yè)表項(xiàng)的屬性)來(lái)識(shí)別和跟蹤哪些頁(yè)是共享的,哪些已經(jīng)被拷貝。這樣,即使對(duì)象跨越多個(gè)頁(yè),操作系統(tǒng)也只在必要時(shí)拷貝修改的頁(yè),而不是整個(gè)對(duì)象的所有頁(yè)。
相關(guān)推薦
點(diǎn)贊 評(píng)論 收藏
分享
點(diǎn)贊 評(píng)論 收藏
分享
04-01 15:01
北京郵電大學(xué) Java 點(diǎn)贊 評(píng)論 收藏
分享

點(diǎn)贊 評(píng)論 收藏
分享