久久天天躁狠狠躁夜夜躁,国产精品入口福利,97久久精品人人爽人人爽蜜臀 ,中文字幕国产精品一区二区

當(dāng)前位置首頁(yè) > 信息公告

操作系統(tǒng)的顯存是怎樣被進(jìn)程使用的?

更新時(shí)間:2023-11-09 文章作者:佚名 信息來(lái)源:網(wǎng)絡(luò)整理 閱讀次數(shù):

你們好,我是TT。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

對(duì)于計(jì)算機(jī)軟件的正常運(yùn)作,顯存(Main)所發(fā)揮作用的重要性不言而喻。無(wú)論是處在“幕后”的操作系統(tǒng),還是坐落“臺(tái)前”的用戶應(yīng)用程序,它們?cè)谶\(yùn)行時(shí)就會(huì)將所需數(shù)據(jù)從c盤等外部?jī)?chǔ)存器轉(zhuǎn)移至顯存。實(shí)際上,顯存和CPU芯片上的L1、L2等高速緩存,一齊構(gòu)成了計(jì)算機(jī)中用于支撐程序高效運(yùn)行的緩存系統(tǒng)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

這篇內(nèi)容,我會(huì)先從整體的視角瞧瞧顯存在計(jì)算機(jī)系統(tǒng)中的作用,之后再一起探究進(jìn)程是怎樣在操作系統(tǒng)的控制下與計(jì)算機(jī)顯存交互的。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

計(jì)算機(jī)內(nèi)部的緩存系統(tǒng)3MO物理好資源網(wǎng)(原物理ok網(wǎng))

一般,文件會(huì)被儲(chǔ)存在容量較大的c盤中。但c盤作為一種提供數(shù)據(jù)持久化儲(chǔ)存的設(shè)備,采用了機(jī)械式的數(shù)據(jù)輪詢形式,這就促使它未能匹配CPU在完成相關(guān)操作時(shí),所需數(shù)據(jù)在訪問速率上的要求。而顯存則以快于c盤幾萬(wàn)甚至十幾萬(wàn)倍的讀寫效率,承當(dāng)起了與CPU直接交互的重?fù)?dān)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

但隨著摩爾定理的不斷應(yīng)驗(yàn),CPU與顯存三者在數(shù)據(jù)訪問效率的“供需關(guān)系”上又出現(xiàn)了問題。因而,現(xiàn)代計(jì)算機(jī)通過(guò)在這三者之間引入更多讀寫速率更快,容量卻更小的高速緩存層,并基于局部性原理,讓CPU常常使用到的數(shù)據(jù)可以被更快地再度訪問。通過(guò)這些方法,由L1、L2等片上高速緩存,以及顯存組成的緩存系統(tǒng),便成為了計(jì)算機(jī)中用于承載應(yīng)用運(yùn)行時(shí)數(shù)據(jù)的主要部件。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

網(wǎng)上有一個(gè)非常形象的反例,描述了顯存在整個(gè)計(jì)算機(jī)系統(tǒng)中的“地位”:假定你作為負(fù)責(zé)人,每天都在一間專屬辦公室里處理各類事務(wù)。辦公室外有一個(gè)碩大的檔案柜,上面儲(chǔ)存著你有權(quán)限接觸的所有辦公材料。當(dāng)每一次須要處理某個(gè)具體事務(wù)時(shí),你就會(huì)首先將須要的相關(guān)材料一次性地從檔案柜中全部揀選下來(lái),并將它們陳列在書房上,之后再繼續(xù)進(jìn)行處理。而隨著時(shí)間的推移,這些常常被翻閱的、相關(guān)性較強(qiáng)的材料會(huì)被擺放在距離你手邊較近的位置,而相關(guān)性較弱的材料則會(huì)被置于較遠(yuǎn)的位置。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

將這個(gè)反例類比到計(jì)算機(jī),你會(huì)發(fā)覺三者之間有著類似的行為模式。每一個(gè)程序的機(jī)器代碼(事務(wù))在可以被CPU(負(fù)責(zé)人)正常執(zhí)行前,操作系統(tǒng)都須要先將它們從c盤(檔案柜)“搬移”到顯存(書房)中。而隨著程序的不斷運(yùn)行,這些被常常訪問的數(shù)據(jù)便會(huì)被儲(chǔ)存到較高級(jí)別的緩存(較近位置)中。相反,不常用的數(shù)據(jù)則會(huì)被儲(chǔ)存在較低級(jí)別的緩存(較遠(yuǎn)位置),甚至留駐在顯存中。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

然而,對(duì)計(jì)算機(jī)而言,程序與顯存之間的交互細(xì)節(jié)遠(yuǎn)比“辦公室日?!币獜?fù)雜得多。現(xiàn)代操作系統(tǒng)會(huì)同時(shí)執(zhí)行十幾個(gè)甚至幾十個(gè)程序。因而,怎么從有限的顯存中合理地為它們分配所需資源,并同時(shí)兼具安全性、高效性,便成為須要考慮的首要問題。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

現(xiàn)代計(jì)算機(jī)通過(guò)名為“虛擬顯存”的機(jī)制,做到了這一點(diǎn)。下邊,我們來(lái)進(jìn)一步瞧瞧這個(gè)機(jī)制的具體工作原理。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

虛擬顯存機(jī)制3MO物理好資源網(wǎng)(原物理ok網(wǎng))

顧名思義,虛擬顯存()對(duì)應(yīng)于數(shù)學(xué)顯存()。其中,后者是由操作系統(tǒng)具象下來(lái)的一個(gè)概念,它在前者的基礎(chǔ)之上進(jìn)行了一層具象,以幫助運(yùn)行于其上的應(yīng)用程序合理地分配顯存什么是物理內(nèi)存虛擬內(nèi)存,并管理顯存使用。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

因而,如下邊的代碼所示什么是物理內(nèi)存和虛擬內(nèi)存,我們?cè)趹?yīng)用程序中復(fù)印出的各類表針值,它們實(shí)際上都對(duì)應(yīng)于虛擬顯存中的某個(gè)地址,而非實(shí)際的化學(xué)顯存地址(,PA)。這種地址被稱為“虛擬地址(,VA)”。所有程序可以使用的虛擬地址則構(gòu)成了虛擬地址空間(VAS)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

#3MO物理好資源網(wǎng)(原物理ok網(wǎng))

intmain(void){3MO物理好資源網(wǎng)(原物理ok網(wǎng))

intx=10;3MO物理好資源網(wǎng)(原物理ok網(wǎng))

("%p",&x);//.3MO物理好資源網(wǎng)(原物理ok網(wǎng))

();3MO物理好資源網(wǎng)(原物理ok網(wǎng))

0;3MO物理好資源網(wǎng)(原物理ok網(wǎng))

內(nèi)存虛擬物理是指什么_虛擬內(nèi)存和物理內(nèi)存的合理比例_什么是物理內(nèi)存和虛擬內(nèi)存3MO物理好資源網(wǎng)(原物理ok網(wǎng))

CPU在訪問顯存中的數(shù)據(jù)時(shí),會(huì)利用其芯片上名為“內(nèi)存管理單元(MMU)”的硬件,首先將虛擬地址動(dòng)態(tài)翻譯為對(duì)應(yīng)的數(shù)學(xué)地址,之后再進(jìn)行實(shí)際的數(shù)據(jù)獲取。你可以通過(guò)右圖來(lái)直觀地理解這個(gè)過(guò)程。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

虛擬顯存機(jī)制的一個(gè)最重要特點(diǎn),就是為每一個(gè)應(yīng)用程序進(jìn)程都具象出了獨(dú)立于化學(xué)顯存的虛擬地址空間。這意味著,從進(jìn)程的角度來(lái)看,它可以獨(dú)享整個(gè)計(jì)算機(jī)上的所有顯存。現(xiàn)代操作系統(tǒng)一般采用32或64位地址空間,二者分別擁有2與2個(gè)地址。通過(guò)這些方法,編譯器在建立應(yīng)用時(shí),便不須要考慮各二補(bǔ)碼數(shù)據(jù)段應(yīng)當(dāng)被實(shí)際加載到顯存中的何處,所有應(yīng)用均可使用統(tǒng)一的靜態(tài)文件結(jié)構(gòu)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

例如,在64位Linux系統(tǒng)中,與應(yīng)用代碼相關(guān)的會(huì)從VAS的固定地址處開始加載。而其他內(nèi)容將在滿足一定對(duì)齊要求的情況下,按次序被連續(xù)加載到高地址方向的虛擬顯存中。這樣,無(wú)論是程序在二補(bǔ)碼文件內(nèi)的靜態(tài)視圖,還是被加載到VAS后的運(yùn)行時(shí)視圖,它們都可以在虛擬顯存的隔離下,在表現(xiàn)層有著穩(wěn)定一致的布局。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

而通過(guò)下邊這行命令,我們便可以查看某個(gè)運(yùn)行進(jìn)程的VAS布局情況。注意,其中的“”需要被替換為進(jìn)程對(duì)應(yīng)的ID。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

cat/proc/3MO物理好資源網(wǎng)(原物理ok網(wǎng))

/maps3MO物理好資源網(wǎng)(原物理ok網(wǎng))

這兒,我們嘗試將本小節(jié)開頭處的那種C程序的ID替換到上述命令中。在運(yùn)行該命令后,可以得到如右圖所示的輸出結(jié)果。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

這兒,命令根據(jù)地址由低到高的次序復(fù)印出了進(jìn)程VAS內(nèi),每一塊早已被占用的連續(xù)虛擬顯存地址,對(duì)應(yīng)的映射信息。如最右邊一列所示,這種顯存中的內(nèi)容或是來(lái)自于某個(gè)具體文件(/www//main),或被用作其他用途([heap])。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

VAS中的數(shù)據(jù)布局3MO物理好資源網(wǎng)(原物理ok網(wǎng))

將上圖中的信息進(jìn)行歸類,我們可以得到如右圖所示的Linux進(jìn)程在VAS內(nèi)的統(tǒng)一數(shù)據(jù)布局結(jié)構(gòu)。這兒我依據(jù)類別,將不同的數(shù)據(jù)用不同的顏色進(jìn)行了標(biāo)明。而且,為了便捷你找到這兩個(gè)圖之間的顯存段對(duì)應(yīng)關(guān)系,我將上圖中的一些關(guān)鍵性地址信息也選擇性地標(biāo)明在了右圖中。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

總的來(lái)看,Linux進(jìn)程VAS中的數(shù)據(jù),根據(jù)地址由低到高的次序,可以被分為下邊這幾個(gè)主要部份。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

可以看見,得益于虛擬顯存機(jī)制的具象,進(jìn)程可以使用完全統(tǒng)一、獨(dú)立的顯存數(shù)據(jù)布局,而不用考慮那些數(shù)據(jù)在真實(shí)化學(xué)顯存中的具體儲(chǔ)存細(xì)節(jié)。這么,虛擬顯存機(jī)制到底是怎么對(duì)化學(xué)顯存進(jìn)行管理的呢?接出來(lái)我們具體瞧瞧。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

使用頁(yè)表維護(hù)虛擬頁(yè)狀態(tài)3MO物理好資源網(wǎng)(原物理ok網(wǎng))

為了保證效率,操作系統(tǒng)一般會(huì)以“頁(yè)”為單位,來(lái)在c盤與顯存之間傳遞數(shù)據(jù)。而實(shí)際上,它也正是通過(guò)為每一個(gè)進(jìn)程提供獨(dú)立的“頁(yè)表”結(jié)構(gòu),來(lái)維護(hù)VAS中的虛擬頁(yè)在對(duì)應(yīng)化學(xué)顯存中的映射狀態(tài)的。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

頁(yè)表本身被維護(hù)在化學(xué)顯存中,其內(nèi)部由諸多的“頁(yè)表項(xiàng)(PageTableEntry,PTE)”組成。進(jìn)程VAS中的每位虛擬頁(yè)都對(duì)應(yīng)于頁(yè)表中的某個(gè)PTE,而PTE中則包含有用于描述該虛擬頁(yè)狀態(tài)的諸多數(shù)組。每一次MMU須要將一個(gè)虛擬地址翻譯為化學(xué)地址時(shí),它就會(huì)首先讀取頁(yè)表,以查詢相關(guān)的PTE信息。之后,再依照虛擬地址內(nèi)蘊(yùn)涵的偏斜信息,找到對(duì)應(yīng)頁(yè)中的目標(biāo)位置。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

在簡(jiǎn)化的實(shí)現(xiàn)中,PTE可能由一個(gè)“有效位”字段與一個(gè)“地址”字段組成。其中,有效位用于表明該虛擬頁(yè)是否已被緩存在化學(xué)顯存中。若該位置位,則地址數(shù)組中儲(chǔ)存有該頁(yè)在化學(xué)顯存中的起始位置。而在該位復(fù)位的情況下,若地址數(shù)組為空,則表明該虛擬頁(yè)還未被分配。否則,地址數(shù)組中便保存有虛擬頁(yè)內(nèi)容在c盤上的起始位置。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

什么是物理內(nèi)存和虛擬內(nèi)存_內(nèi)存虛擬物理是指什么_虛擬內(nèi)存和物理內(nèi)存的合理比例3MO物理好資源網(wǎng)(原物理ok網(wǎng))

當(dāng)CPU須要訪問某個(gè)虛擬地址上的數(shù)據(jù)時(shí),一般會(huì)發(fā)生以下兩種情況:3MO物理好資源網(wǎng)(原物理ok網(wǎng))

在第二種情況中,缺頁(yè)異常將會(huì)調(diào)用內(nèi)核中特定的異常處理程序,該程序會(huì)在化學(xué)顯存中選擇一個(gè)頁(yè),以拿來(lái)承載當(dāng)前虛擬地址所對(duì)應(yīng)的數(shù)學(xué)數(shù)據(jù)。其中,對(duì)于空閑頁(yè),內(nèi)核會(huì)直接將虛擬頁(yè)對(duì)應(yīng)的內(nèi)容從c盤拷貝到該化學(xué)頁(yè)中;而對(duì)于非空閑頁(yè),若該頁(yè)早已被更改,則內(nèi)核會(huì)首先將它的內(nèi)容換出,即更新到c盤。之后,再將c盤上的內(nèi)容拷貝至這塊化學(xué)頁(yè)中。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

這兒你可以先暫緩步伐,通過(guò)右圖來(lái)直觀地理解CPU、MMU、頁(yè)表、物理顯存,以及c盤五者之間的協(xié)作關(guān)系。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

頁(yè)表隔離了進(jìn)程的VAS與化學(xué)顯存,致使三者之間的映射關(guān)系顯得愈發(fā)自由。而在這些方法下,當(dāng)不同進(jìn)程使用不同頁(yè)表維護(hù)其各自VAS中虛擬頁(yè)的映射時(shí),多個(gè)進(jìn)程之間便可做到真正的數(shù)據(jù)共享。而我將在29講中介紹的“動(dòng)態(tài)鏈接”技術(shù)便借此為基礎(chǔ)。除了這么,獨(dú)立的VAS與頁(yè)表也促使進(jìn)程之間的私有顯存不會(huì)被互相訪問。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

另外,通過(guò)在PTE中降低用于訪問控制的相關(guān)數(shù)組(如可讀、可寫、可執(zhí)行),CPU可以在程序嘗試非法訪問某塊顯存數(shù)據(jù)時(shí)作出異常響應(yīng)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

使用多級(jí)頁(yè)表壓縮頁(yè)表容積3MO物理好資源網(wǎng)(原物理ok網(wǎng))

然而,里面介紹的一級(jí)頁(yè)表有時(shí)卻可能難以滿足需求。試想,以目前常用的64位地址空間為例,假定頁(yè)大小為已知最大的2MiB,為保證完整映射,每位PTE大小為8字節(jié)。而為了才能在單一頁(yè)表內(nèi)維護(hù)進(jìn)程整個(gè)64位VAS中所有虛擬頁(yè)的信息,這么便須要為其匹配一個(gè)大小為65535GiB的頁(yè)表,而這其實(shí)是不現(xiàn)實(shí)的。因而,現(xiàn)代計(jì)算機(jī)一般會(huì)采用“多級(jí)頁(yè)表”的形式,來(lái)優(yōu)化頁(yè)表的大小。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

多級(jí)頁(yè)表的思路很簡(jiǎn)單。以二級(jí)頁(yè)表為例,假定在一個(gè)32位地址空間中,頁(yè)大小為4KiB,每位PTE大小為4字節(jié)。此時(shí),MMU在進(jìn)行化學(xué)地址查詢時(shí),首先會(huì)依據(jù)虛擬地址中蘊(yùn)涵的虛擬頁(yè)號(hào)信息來(lái)查找一級(jí)頁(yè)表內(nèi)的目標(biāo)PTE,而一級(jí)頁(yè)表中的每位PTE,此時(shí)實(shí)際上負(fù)責(zé)映射VAS中的一個(gè)4MiB的片。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

根據(jù)樹的方式展開,每位一級(jí)頁(yè)表也都對(duì)應(yīng)著一個(gè)獨(dú)立的二級(jí)頁(yè)表,二級(jí)頁(yè)表中的每一個(gè)PTE則負(fù)責(zé)映射當(dāng)前一級(jí)頁(yè)表的4MiB的片中的某個(gè)4KiB的塊。當(dāng)一級(jí)頁(yè)表查詢完畢后,MMU便可得到指向目標(biāo)二級(jí)頁(yè)表的地址。通過(guò)該地址,再聯(lián)合虛擬地址中的另一部份虛擬頁(yè)號(hào)信息,它便可找到目標(biāo)數(shù)據(jù)所在化學(xué)顯存的具體頁(yè)。最后,結(jié)合虛擬地址中的頁(yè)偏斜信息,目標(biāo)數(shù)據(jù)的最終數(shù)學(xué)地址便可被成功地“轉(zhuǎn)換”出來(lái)。你可以通過(guò)右圖來(lái)進(jìn)一步理解上述流程:3MO物理好資源網(wǎng)(原物理ok網(wǎng))

多級(jí)頁(yè)表可以節(jié)約顯存空間的兩個(gè)最重要誘因是:3MO物理好資源網(wǎng)(原物理ok網(wǎng))

實(shí)際上,上述二級(jí)頁(yè)表的使用方式可以被推廣到任意的N級(jí)。但總體來(lái)看,頁(yè)表的級(jí)數(shù)并非越多越好,由于更多的頁(yè)表級(jí)數(shù)也就意味著更長(zhǎng)的化學(xué)地址查詢時(shí)間。目前常見的多級(jí)頁(yè)表為4級(jí),而在IceLake等處理器中,也出現(xiàn)過(guò)5級(jí)頁(yè)表。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

使用TLB加速PTE查詢3MO物理好資源網(wǎng)(原物理ok網(wǎng))

多級(jí)頁(yè)表似乎可以壓縮頁(yè)表占用的顯存量,但用MMU進(jìn)行頁(yè)表的逐級(jí)查詢,這個(gè)過(guò)程也并不是毫無(wú)成本的?,F(xiàn)實(shí)情況中,計(jì)算機(jī)一般會(huì)結(jié)合使用名為“翻譯后備緩沖器(,TLB)”的硬件設(shè)備來(lái)加速這一流程。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

TLB屬于MMU的一部份,它可以推動(dòng)MMU按照虛擬地址查詢PTE的過(guò)程。你可以將TLB理解為一個(gè)簡(jiǎn)單的具有N行M列的矩陣,MMU會(huì)從對(duì)應(yīng)虛擬地址中提取出用于查詢表項(xiàng)的TLB索引與TLB標(biāo)記。這兩個(gè)值可以聯(lián)合上去使用,并定位到TLB中的一個(gè)具體單元格。而此時(shí),若該單元格內(nèi)有值,則MMU可以直接使用該值,來(lái)與虛擬地址中的其他信息一起組成最終的化學(xué)地址。否則,MMU一直須要通過(guò)逐級(jí)查詢頁(yè)表的形式來(lái)獲取目標(biāo)頁(yè)的化學(xué)地址。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

再談共享對(duì)象與私有對(duì)象3MO物理好資源網(wǎng)(原物理ok網(wǎng))

里面,我曾在“使用頁(yè)表維護(hù)虛擬頁(yè)狀態(tài)”一節(jié)的最后提及,利用虛擬顯存機(jī)制,不同進(jìn)程之間可以共享化學(xué)顯存上的同一段數(shù)據(jù)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

這種數(shù)據(jù)在化學(xué)顯存中實(shí)際儲(chǔ)存時(shí),可能并不是連續(xù)的。而利用于頁(yè)表實(shí)現(xiàn)的“虛擬頁(yè)與化學(xué)頁(yè)映射關(guān)系分離”,我們可以確保CPU才能根據(jù)連續(xù)的形式來(lái)使用這種數(shù)據(jù)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

而當(dāng)某個(gè)共享進(jìn)程企圖對(duì)這種共享數(shù)據(jù)進(jìn)行更改時(shí),操作系統(tǒng)便會(huì)通過(guò)“寫時(shí)復(fù)制(Copy-on-write)”的形式,來(lái)將被變更數(shù)據(jù)所在的化學(xué)頁(yè)進(jìn)行復(fù)制,并通過(guò)更改頁(yè)表,來(lái)讓更改進(jìn)程可以私有化這部份數(shù)據(jù)。3MO物理好資源網(wǎng)(原物理ok網(wǎng))

發(fā)表評(píng)論

統(tǒng)計(jì)代碼放這里
主站蜘蛛池模板: 荣昌县| 安福县| 当阳市| 桦南县| 河南省| 永胜县| 南昌县| 闽清县| 浠水县| 汪清县| 福安市| 东光县| 镇赉县| 法库县| 密山市| 鹤庆县| 连平县| 孟津县| 扶风县| 沭阳县| 通渭县| 右玉县| 上思县| 哈巴河县| 青铜峡市| 吴江市| 东源县| 黎川县| 乐清市| 中阳县| 临西县| 南通市| 青浦区| 宾川县| 宜黄县| 都匀市| 怀柔区| 江阴市| 庄浪县| 天峻县| 巴林左旗|