頁表:從虛擬內存到物理內存的轉換

目錄

引言

虛擬內存

頁表

單級頁表

頁表項

單級頁表的不足

二級頁表

四級頁表

快表TLB

結語


引言

一個系統中,CPU和內存是被所有進程共享的,而且一個系統中往往運行著多個進程。如果一個進程不小心寫了另一個進程的內存,那么被寫入的進程可能會發生一些迷惑行為。

虛擬內存

一個進程,只有在它運行起來的時候才知道它實際占用哪塊內存,程序員在寫代碼的時候是無法確定的。為了實現獨立編址,既不考慮內存是否能容納整個程序,也不考慮程序最終是在內存中的什么位置,大佬們突發奇想,能不能等到程序運行時,才為每一個程序分配一定的運行空間,由地址轉換部件將編程時的地址轉換成實際物理內存中的地址呢??當然可以!于是,就引入了虛擬內存技術。

關于什么是虛擬內存,舉個例子:假設你開了一家“超能快遞公司”,但真實的倉庫(物理內存)只有一塊很小的場地(比如100㎡)。不過你打廣告說:“我們有10個足球場大的貨架空間!(虛擬內存)” —— 吸引無數顧客(程序)來寄送快遞。

說白了虛擬內存本質上就是騙程序,讓每個程序以為自己獨占整個內存。它有以下幾個優勢:

1)?內存隔離與保護:每個程序擁有獨立的虛擬地址空間,避免程序間直接訪問彼此內存。

2)?簡化編程模型:程序員無需關心物理內存的實際分配情況。

頁表

頁表是操作系統內存管理中的核心數據結構,用于實現虛擬地址到物理地址的轉換。它由操作系統的內存管理單元MMU來維護。每個進程都有自己的頁表,頁表實際上還對內存起到了保護的作用,在虛擬地址到物理地址轉換的頁表項里,設置了權限位,如果權限不夠,我們是拿不到對應的物理地址的,這對內核的數據起到了保護的作用。關于頁表項的權限位后面再詳細介紹。

可以先通過上面這張圖在腦海里建立一個虛擬地址到物理地址轉換的模型,后面我們在持續填充細節。?

單級頁表

單級頁表的地址轉換過程:

首先介紹一下虛擬地址的格式:它由兩部分組成,一部分是頁號,另一部分是頁內偏移。頁號是用來找到頁表中的頁表項,頁表就是一個連續的空間,頁號就是要找頁表項在頁表中的偏移量,相當于數組下標。頁內偏移,是指在物理內存頁中的偏移,單個物理內存頁也是連續的,也可以把它看做一個數組,頁內偏移當做下標。

CR3:它是個寄存器,在進程創建的時候初始化,用來存放當前進程的頂級頁表起始地址。

?CPU發出要訪問的虛擬地址后,可以通過虛擬地址中的頁號加上CR3中存放的頁表起始地址定位到相應的頁表項,一個頁表項的大小是固定的,為4個字節。頁表項里存放著對應物理內存頁起始地址,然后在結合虛擬地址中的頁內偏移,即可得到完整的物理地址,定位到相應位置上。

頁表項

1)P:對應的物理內存頁是否在內存中。1表示在內存中,0表示不在。如果不在,就會出發缺頁中斷,把對應的數據換入內存。

2)RW:表示該進程對該內存頁具有的讀寫權限。1表示具有讀寫權限,0表示具有只讀權限。

3)US:值為0表示該物理內存只有內核才能訪問,值為1表示用戶空間的進程也可以訪問。

4)PWT:值為1表示CPU的cache中數據發生修改后,采用全寫的方式進行同步,為0表示采用寫回的方式進行同步。

5)PCD:表示對應的物理內存頁是否可以緩存在CPU的cache中,1表示不可以,0表示可以。

6)A:表示對應的物理內存最近是否被訪問過。1表示被訪問過,0表示沒有。CPU的內存管理單元MMU會經常檢查該位置,來判斷對應的物理內存頁是否活躍,作為換入換出的依據。

后面幾個就不介紹了~

單級頁表的不足

有了上面的認識,我們知道:一個頁表項大小為4B,它可以映射一張大小為4KB物理內存頁,一張頁表的大小也是4KB,包含1024個頁表項。

這樣一算,一張頁表可以映射4MB的物理內存。那么32位系統下,內存大小為4GB,就需要1024張頁表。一張頁表4KB,那么一共就是需要4MB的物理內存來存放1024張頁表。但是,隨著系統的運行,很難找到這么一大片的連續空間。更要命的是,每個進程都需要有自己獨立的頁表,就更難找到這么多塊連續的4MB內存空間了。進程一旦多起來,這也是一筆不小的開銷呀~

但是,話又說回來,有必要進程一啟動就給它分配4MB的內存空間去存放那么多張頁表嗎?

根據程序的局部性原理,程序不會在一上來就要訪問所有內存,相反進程對于內存的訪問表現出明顯的傾向性,更傾向于訪問最近訪問過的地址周圍的一些數據。最近訪問過的地址以及它周圍的數據很可能通過同一張頁表就可以找到。

因為單級頁表存在的一些不足,頁表開始向多級頁表演進。

二級頁表

二級頁表就是在單級頁表的基礎上,增加了一個目錄結構。

?相較于單級頁表來說,地址轉換的時候要多一層,同時虛擬地址中也要多保存一級頁號。

一張一級頁表中,也同樣有1024個頁表項,一個頁表項映射一張二級頁表,一張二級頁表映射4MB物理內存。那么一張一級頁表就可以映射4GB的內存。原來單級頁表需要4MB,現在優化到4KB。只有一級頁表常駐在內存中,二級頁表存在磁盤上,根據需要進行換入和換出。

四級頁表

深刻理解了單級頁表和二級頁表以后,其實四級頁表也一樣,在虛擬地址上多了幾級頁號,然后進行地址轉換的時候要多走幾層。

PGD:全局頁目錄 ????????PUD:上層頁目錄????????PMD:中間頁目錄????????PTE:頁表項?

快表TLB

快表,本質上就是MMU的一個緩存,緩存常用頁表項以加速地址轉換。

CPU發出虛擬地址后,MMU首先去快表中查找是否存在對應的頁表項,如果存在就直接返回對應的物理地址,然后通過該地址去緩存中找到對應的數據,然后將數據傳入CPU。以上是快表緩存命中的情況,通過這一過程,也就了解了什么是快表以及它的作用何在了。

結語

頁表的設計永遠需要在「空間效率」、「查詢速度」和「靈活性」之間找到動態平衡,沒有完美的方案,只有適合場景的取舍。

推薦閱讀:https://www.cnblogs.com/binlovetech/p/17571929.html


感謝支持~?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906916.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906916.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906916.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

互聯網大廠Java求職面試:短視頻平臺大規模實時互動系統架構設計

互聯網大廠Java求職面試:短視頻平臺大規模實時互動系統架構設計 面試背景介紹 技術總監(嚴肅臉): 歡迎來到我們今天的模擬面試,我是技術部的李總監,負責平臺后端架構和高可用系統設計。今天我們將圍繞一個…

網絡段、主機段、子網掩碼

子網掩碼把 IP 切割成了網絡段和主機段兩部分。同一網段下的不同主機之間可以互通網絡。 掩碼 IPV4 默認情況下 IP 地址 192.168.0.x 可以分配 256 個主機地址(不考慮首尾兩個特殊的地址時)。 假設我們只需要用到 8 個主機,就可以借助子網掩…

從零搭建SpringBoot Web 單體項目2、SpringBoot 整合數據庫

系列文章 從零搭建SpringBoot Web單體項目【基礎篇】1、IDEA搭建SpringBoot項目 從零搭建 SpringBoot Web 單體項目【基礎篇】2、SpringBoot 整合數據庫 目錄 一、項目基礎環境說明 二、數據庫整合流程 1. 添加 MyBatis-Plus 相關依賴(pom.xml) 2…

4款頂級磁力下載工具,速度提升器,可以變下變播

今天給大家帶來一些超給力的磁力下載工具,速度飛快,最高可達20MB/s,而且還能邊下邊播! 下載鏈接:夸克網盤分享(點擊藍色字體自行保存下載) 一、柚子下載 柚子下載界面干凈,沒有廣…

怎樣判斷服務器網絡質量的狀態?

服務器存儲著企業的重要數據信息,服務器的網絡質量會影響到用戶訪問數據信息的速度,也決定著網站頁面是否會出現卡頓或頁面崩潰的情況,那我們對于服務器中網絡質量的狀態該如何進行判斷呢? 服務器的網絡狀態通常是指服務器與外部網…

零基礎入門Selenium自動化測試:自動登錄edu郵箱

🌟 Selenium簡單概述一下 Selenium 是一個開源的自動化測試工具,主要用于 Web 應用程序的功能測試。它能夠模擬用戶操作瀏覽器的行為(如點擊按鈕、填寫表單、導航頁面等),應用于前端開發、測試和運維領域。 特點 跨…

day36 python神經網絡訓練

目錄 一、數據準備與預處理 二、數據集劃分與歸一化 三、構建神經網絡模型 四、定義損失函數和優化器 五、訓練模型 六、評估模型 在機器學習和深度學習的實踐中,信貸風險評估是一個非常重要的應用場景。通過構建神經網絡模型,我們可以對客戶的信用…

如何確定是不是一個bug?

在軟件測試過程中,我們經常會遇到一些異常現象,但并非所有異常都是Bug。如何準確判斷一個問題是否屬于Bug?本文將從Bug的定義、判定標準、常見誤區和實戰技巧四個方面展開,幫助測試工程師提高Bug判定的準確性。 1. Bug的定義:什么情況下算Bug? 一個Bug(缺陷)通常指軟件…

Lombok與Jackson實現高效JSON序列化與反序列化

引言 在Java開發中,處理JSON數據是常見需求,而Jackson作為廣泛使用的JSON庫,能夠高效地將Java對象與JSON互相轉換。然而,傳統的POJO(Plain Old Java Object)需要手動編寫大量樣板代碼(如getter…

論文閱讀:PURPLE: Making a Large Language Model a Better SQL Writer

論文地址:PURPLE: Making a Large Language Model a Better SQL Writer 摘要 大語言模型(LLM)技術在自然語言到 SQL(NL2SQL)翻譯中扮演著越來越重要的角色。通過大量語料訓練的 LLM 具有強大的自然語言理解能力和基本…

【圖像大模型】ControlNet:深度條件控制的生成模型架構解析

ControlNet:深度條件控制的生成模型架構解析 一、核心原理與技術突破1.1 基礎架構設計1.2 零卷積初始化1.3 多條件控制機制 二、系統架構與實現細節2.1 完整處理流程2.2 性能指標對比 三、實戰部署指南3.1 環境配置3.2 基礎推理代碼3.3 高級控制參數 四、典型問題解…

【從0到1搞懂大模型】chatGPT 中的對齊優化(RLHF)講解與實戰(9)

GPT系列模型的演進 chatgpt系列模型演進的重要節點包含下面幾個模型(當然,這兩年模型發展太快了,4o這些推理模型我就先不寫了) (Transformer) → GPT-1 → GPT-2 → GPT-3 → InstructGPT/ChatGPT(GPT-3.5) → GPT-4 下面介紹一…

2025年AEI SCI1區TOP,改進麻雀搜索算法MSSA+建筑三維重建,深度解析+性能實測

目錄 1.摘要2.麻雀搜索算法SSA原理3.整體框架4.改進SSA算法5.結果展示6.參考文獻7.代碼獲取8.讀者交流 1.摘要 對現有建筑進行高質量的三維重建對于其維護、修復和管理至關重要。圖像采集中的有效視角規劃會顯著影響基于攝影測量的三維重建質量。復雜的建筑結構常常導致傳統視…

鴻蒙開發:如何實現列表吸頂

前言 本文基于Api13 列表吸頂功能,在實際的開發中有著很大的作用,比如可以讓列表層級之間更加分明,減少一定程度上的視覺混亂,由于吸頂的標題會隨著滾動固定在頂部,可以讓用戶無需反復滑動回頂部確認分組位置&#xff…

使用Zotero的RSS訂閱功能快速了解感興趣領域最新文章

文章目錄 寫在前面中文期刊的RSS訂閱英文期刊的RSS訂閱回到Zotero有啥用? 寫在前面 作為一名研究生或者科研工作者,肯定需要經常檢索自己研究領域的最新文獻,相比于不定期的去各大數據庫檢索文獻,借助RSS訂閱功能則更加便捷。 R…

Windows安裝Docker Desktop開啟 Kubenetes制作并部署本地鏡像

1、安裝Docker Desktop docker desktop官方下載鏈接,下載后一路點下來安裝就好了。 2、制作本地鏡像 跟著docker步驟制作鏡像,需要先配置docker 鏡像源,因為網絡問題 {"builder": {"gc": {"defaultKeepStorage&…

嵌入式學習筆記 - freeRTOS 列表,鏈表,節點跟任務之間關系

一 下圖說明了 freeRTOS 就緒列表,鏈表,節點跟任務之間關系 一個任務對應一個節點,一個鏈表對應一個優先級,一個任務根據優先級可以插入任何一個鏈表中。 插入函數為,這也是freeRTOS的核心函數,對每個任務…

scikit-learn pytorch transformers 區別與聯系

以下是 scikit-learn、PyTorch 和 Transformers 的區別與聯系的表格形式展示: 特性/庫scikit-learnPyTorchTransformers主要用途傳統機器學習算法深度學習框架預訓練語言模型與自然語言處理任務核心功能分類、回歸、聚類、降維、模型選擇等張量計算、自動微分、神經網絡構建與…

【C/C++】從零開始掌握Kafka

文章目錄 從零開始掌握Kafka一、Kafka 基礎知識理解(理論)1. 核心組件與架構2. 重點概念解析 二、Kafka 面試重點知識梳理三、C 使用 Kafka 的實踐(librdkafka)1. librdkafka 簡介2. 安裝 librdkafka 四、實戰:高吞吐生…

Spyglass:目標文件(.spq)的結構

相關閱讀 Spyglasshttps://blog.csdn.net/weixin_45791458/category_12828934.html?spm1001.2014.3001.5482 預備知識 為了方便檢查,Spyglass向用戶提供Guideware作為檢查參考;Guideware又包含各種方法(Methodology),應用于設計的不同階段&…