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

當前位置首頁 > 信息公告

操作系統的顯存是怎樣被進程使用的?

更新時間:2023-11-09 文章作者:佚名 信息來源:網絡整理 閱讀次數:

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

對于計算機軟件的正常運作,顯存(Main)所發揮作用的重要性不言而喻。無論是處在“幕后”的操作系統,還是坐落“臺前”的用戶應用程序,它們在運行時就會將所需數據從c盤等外部儲存器轉移至顯存。實際上,顯存和CPU芯片上的L1、L2等高速緩存,一齊構成了計算機中用于支撐程序高效運行的緩存系統。3MO物理好資源網(原物理ok網)

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

計算機內部的緩存系統3MO物理好資源網(原物理ok網)

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

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

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

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

然而,對計算機而言,程序與顯存之間的交互細節遠比“辦公室日常”要復雜得多。現代操作系統會同時執行十幾個甚至幾十個程序。因而,怎么從有限的顯存中合理地為它們分配所需資源,并同時兼具安全性、高效性,便成為須要考慮的首要問題。3MO物理好資源網(原物理ok網)

現代計算機通過名為“虛擬顯存”的機制,做到了這一點。下邊,我們來進一步瞧瞧這個機制的具體工作原理。3MO物理好資源網(原物理ok網)

虛擬顯存機制3MO物理好資源網(原物理ok網)

顧名思義,虛擬顯存()對應于數學顯存()。其中,后者是由操作系統具象下來的一個概念,它在前者的基礎之上進行了一層具象,以幫助運行于其上的應用程序合理地分配顯存什么是物理內存虛擬內存,并管理顯存使用。3MO物理好資源網(原物理ok網)

因而,如下邊的代碼所示什么是物理內存和虛擬內存,我們在應用程序中復印出的各類表針值,它們實際上都對應于虛擬顯存中的某個地址,而非實際的化學顯存地址(,PA)。這種地址被稱為“虛擬地址(,VA)”。所有程序可以使用的虛擬地址則構成了虛擬地址空間(VAS)。3MO物理好資源網(原物理ok網)

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

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

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

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

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

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

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

CPU在訪問顯存中的數據時,會利用其芯片上名為“內存管理單元(MMU)”的硬件,首先將虛擬地址動態翻譯為對應的數學地址,之后再進行實際的數據獲取。你可以通過右圖來直觀地理解這個過程。3MO物理好資源網(原物理ok網)

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

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

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

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

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

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

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

VAS中的數據布局3MO物理好資源網(原物理ok網)

將上圖中的信息進行歸類,我們可以得到如右圖所示的Linux進程在VAS內的統一數據布局結構。這兒我依據類別,將不同的數據用不同的顏色進行了標明。而且,為了便捷你找到這兩個圖之間的顯存段對應關系,我將上圖中的一些關鍵性地址信息也選擇性地標明在了右圖中。3MO物理好資源網(原物理ok網)

總的來看,Linux進程VAS中的數據,根據地址由低到高的次序,可以被分為下邊這幾個主要部份。3MO物理好資源網(原物理ok網)

可以看見,得益于虛擬顯存機制的具象,進程可以使用完全統一、獨立的顯存數據布局,而不用考慮那些數據在真實化學顯存中的具體儲存細節。這么,虛擬顯存機制到底是怎么對化學顯存進行管理的呢?接出來我們具體瞧瞧。3MO物理好資源網(原物理ok網)

使用頁表維護虛擬頁狀態3MO物理好資源網(原物理ok網)

為了保證效率,操作系統一般會以“頁”為單位,來在c盤與顯存之間傳遞數據。而實際上,它也正是通過為每一個進程提供獨立的“頁表”結構,來維護VAS中的虛擬頁在對應化學顯存中的映射狀態的。3MO物理好資源網(原物理ok網)

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

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

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

當CPU須要訪問某個虛擬地址上的數據時,一般會發生以下兩種情況:3MO物理好資源網(原物理ok網)

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

這兒你可以先暫緩步伐,通過右圖來直觀地理解CPU、MMU、頁表、物理顯存,以及c盤五者之間的協作關系。3MO物理好資源網(原物理ok網)

頁表隔離了進程的VAS與化學顯存,致使三者之間的映射關系顯得愈發自由。而在這些方法下,當不同進程使用不同頁表維護其各自VAS中虛擬頁的映射時,多個進程之間便可做到真正的數據共享。而我將在29講中介紹的“動態鏈接”技術便借此為基礎。除了這么,獨立的VAS與頁表也促使進程之間的私有顯存不會被互相訪問。3MO物理好資源網(原物理ok網)

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

使用多級頁表壓縮頁表容積3MO物理好資源網(原物理ok網)

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

多級頁表的思路很簡單。以二級頁表為例,假定在一個32位地址空間中,頁大小為4KiB,每位PTE大小為4字節。此時,MMU在進行化學地址查詢時,首先會依據虛擬地址中蘊涵的虛擬頁號信息來查找一級頁表內的目標PTE,而一級頁表中的每位PTE,此時實際上負責映射VAS中的一個4MiB的片。3MO物理好資源網(原物理ok網)

根據樹的方式展開,每位一級頁表也都對應著一個獨立的二級頁表,二級頁表中的每一個PTE則負責映射當前一級頁表的4MiB的片中的某個4KiB的塊。當一級頁表查詢完畢后,MMU便可得到指向目標二級頁表的地址。通過該地址,再聯合虛擬地址中的另一部份虛擬頁號信息,它便可找到目標數據所在化學顯存的具體頁。最后,結合虛擬地址中的頁偏斜信息,目標數據的最終數學地址便可被成功地“轉換”出來。你可以通過右圖來進一步理解上述流程:3MO物理好資源網(原物理ok網)

多級頁表可以節約顯存空間的兩個最重要誘因是:3MO物理好資源網(原物理ok網)

實際上,上述二級頁表的使用方式可以被推廣到任意的N級。但總體來看,頁表的級數并非越多越好,由于更多的頁表級數也就意味著更長的化學地址查詢時間。目前常見的多級頁表為4級,而在IceLake等處理器中,也出現過5級頁表。3MO物理好資源網(原物理ok網)

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

多級頁表似乎可以壓縮頁表占用的顯存量,但用MMU進行頁表的逐級查詢,這個過程也并不是毫無成本的。現實情況中,計算機一般會結合使用名為“翻譯后備緩沖器(,TLB)”的硬件設備來加速這一流程。3MO物理好資源網(原物理ok網)

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

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

里面,我曾在“使用頁表維護虛擬頁狀態”一節的最后提及,利用虛擬顯存機制,不同進程之間可以共享化學顯存上的同一段數據。3MO物理好資源網(原物理ok網)

這種數據在化學顯存中實際儲存時,可能并不是連續的。而利用于頁表實現的“虛擬頁與化學頁映射關系分離”,我們可以確保CPU才能根據連續的形式來使用這種數據。3MO物理好資源網(原物理ok網)

而當某個共享進程企圖對這種共享數據進行更改時,操作系統便會通過“寫時復制(Copy-on-write)”的形式,來將被變更數據所在的化學頁進行復制,并通過更改頁表,來讓更改進程可以私有化這部份數據。3MO物理好資源網(原物理ok網)

發表評論

統計代碼放這里
主站蜘蛛池模板: 咸宁市| 自贡市| 洛南县| 腾冲县| 宁武县| 黎平县| 朝阳区| 蒲城县| 富顺县| 疏附县| 乌拉特前旗| 柞水县| 莫力| 宁远县| 苍南县| 霍邱县| 怀化市| 淮安市| 大洼县| 仲巴县| 东辽县| 同心县| 晋中市| 英超| 苍溪县| 同江市| 黄陵县| 福海县| 永修县| 长宁区| 克山县| 巴里| 宜城市| 肃宁县| 海宁市| 霍州市| 澎湖县| 盐边县| 桑植县| 安宁市| 儋州市|