Linux | 從虛擬地址到物理地址

前言

? ? ? ? 本章主要講解虛擬地址是怎么轉化成物理地址的,以及頁表相關知識;本文環境默認為32位機器下;如果你連什么是虛擬地址都不知道可以先看看下面這篇文章;

Linux | 進程地址空間-CSDN博客

一、概念補充

頁表:是一種數據結構,與硬件MMU配合可以將虛擬地址轉化成物理地址,頁表中主要建立虛擬地址與物理地址之間的映射;

頁框:我們將真實物理內存以4KB為單位進行劃分,其中每一個4KB我們稱為一個頁框;

頁框號:識別頁框的編號;

知識回顧:?

????????之前我們講解磁盤文件時,我們說過,通常進行一次IO的大小通常為4KB,即使你只修改1字節也是以4KB為單位將數據先加載進內存中;實際上,也正是加載進內存的空閑頁框中;我們的磁盤文件也是以4KB進行劃分;

? ? ? ? 我們還說過我們的一個可執行程序在編譯后形成可執行程序,這個可執行程序實際上已經在內部進行分段,分好了虛擬地址空間了;我們可以直接使用編譯好的虛擬地址;

二、地址轉化過程

????????前面我們說過我們的物理內存會以4KB分為一個又一個頁框;而操作系統是否需要維護這些頁框呢?答案當然也是肯定的,我們可以將我們的頁框用一種結構體描述起來,然后用數組維護這些頁框,這樣就有一個頁框數組了,數組下標可作為頁框號;假設一個為4GB的物理內存,可以有多少個頁框呢?我們不難計算,4GB = 4 * 1024 * 1024 * 1024 Byte;

一個頁框為4KB = 4 * 1024;兩者相除,大約就是1024*1024,約一百萬個;我們便可以用

struct page[1000000]; 即可表示所有物理內存中所有頁框;

????????首先我要講解的是我們的虛擬地址通過頁表+MMU將我們的虛擬地址轉換成物理內存中的物理地址,若我們頁表中沒有物理內存中的地址,而是只有磁盤中的地址,此時是因為我們的數據沒有被加載進磁盤,可能之前發生或換出或本來沒有加載進磁盤內;這是我們在物理內存中申請一塊空閑的頁框,我們找到空閑的頁框后,我們將磁盤文件加載進指定的頁框,同時我們也在頁表上進行更新,將新映射的物理內存地址填上去;這個過程也就是我們常說的缺頁中斷

? ? ? ? 如果按上面的結構來看,頁表中的每個條目記錄一個虛擬地址映射一個物理地址,此時我們一共則需要 4 * 1024 * 1024 * 1024條記錄(假設物理內存有4G);假設一條記錄需要10個字節,那么一個頁表的大小就需要40G;而我們的頁表也是存在物理內存中呀!這顯然是不可能存的下的,就算存的下也不可能消耗這么多內存資源存頁表,況且一個進程就有一張用戶級頁表;計算機中絕對不止有一個進程;

? ? ? ? 此時,我們用另一種思路,我們頁表中將虛擬地址的32個比特位分開看;其中前10位我們一起看,作為頁目錄的索引來找到二級頁表,然后接著10位用來查找頁框號,最后12個比特位用來記錄頁內偏移;如下圖所示;

? ? ? ? 我們來計算一下,頁目錄最多有2^10,也就是1024條目錄,對應著最多有1024個二級頁表;每個二級頁表也最有有2^10條目錄,每條目錄對應一個頁框號,所有二級頁表可以表示2^10 * 2^10 個頁框,而我們的4GB內存最多也只有 2^20 個頁框,剛好一一對應;最后12個比特位可以表示0到2^12 - 1,而2^12正好也就是4KB;也正好吻合;設頁表每一條目為10字節,計算最大的情況下,總大小為 頁目錄大小(2^10 * 10 = 10KB)+ 所有二級目錄大小(2 ^ 10 * 2 ^ 10 * 10 = 10MB);其中10KB可忽略,總大小最多為10M;這個大小比我們第一種方案要小了很多很多,這也是我們Linux下采用的方案;

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

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

相關文章

【性能優化】CPU利用率飆高與內存飆高問題

📫作者簡介:小明java問道之路,2022年度博客之星全國TOP3,專注于后端、中間件、計算機底層、架構設計演進與穩定性建設優化,文章內容兼具廣度、深度、大廠技術方案,對待技術喜歡推理加驗證,就職于…

2023APMCM亞太杯數學建模選題建議及初步思路

大家好呀,亞太杯數學建模開始了,來說一下初步的選題建議吧: 首先定下主基調,本次亞太杯推薦選擇B題。 C題如果想做好,搜集數據難度并不低,并且模型比較簡單,此外目前選擇的人數過多&#xff0c…

java項目之消防物資存儲系統(ssm+vue)

項目簡介 消防物資存儲系統實現了以下功能: 管理員功能: 管理員登陸后,主要模塊包括首頁,個人中心,用戶管理,倉庫管理,物資入庫管理,物資出庫管理,倉庫管理,物資詳情管…

23年下半年軟考成績查詢時間是什么時候?

一、成績查詢時間 2023年下半年軟考成績查詢時間預計2023年12月份公布,成績查詢入口為計算機技術職業資格網(全國統一成績查詢時間,統一查詢入口)。 二、成績查詢方法 登陸中國計算機技術職業資格網,點擊“成績查詢”…

7-9 jmu-python-班級人員信息統計

7-9 jmu-python-班級人員信息統計 分數 15 作者 鄭如濱 單位 集美大學 輸入a,b班的名單,并進行如下統計。 輸入格式: 第1行::a班名單,一串字符串,每個字符代表一個學生,無空格,可能有重復字符。 第2行:&am…

WPF實戰項目十六(客戶端):備忘錄接口

1、新增IMemoService接口&#xff0c;繼承IBaseService接口 public interface IMemoService : IBaseService<MemoDto>{} 2、新增MemoService類&#xff0c;繼承BaseService和IMemoService接口 public class MemoService : BaseService<MemoDto>, IMemoService{pub…

DRF-通用分頁器(PageNumberPagination):ListModelMixin可以使用的通用分頁器

一、ListModelMixin 和GenericAPIView源碼 ListModelMixin 是一個單一功能類&#xff0c;必須配合GenericAPIView&#xff08;或其子類&#xff09;來一起使用&#xff0c;才能完成其視圖的功能 class ListModelMixin:"""List a queryset."""d…

騰訊云點播小程序端上傳 SDK

云點播是專門應對上傳大視頻文件的。 騰訊云點播文檔&#xff1a;https://cloud.tencent.com/document/product/266/18177 這個文檔比較簡單&#xff0c;實在不行&#xff0c;把demo下載下來&#xff0c;一看就明白了&#xff0c;然后再揉一下挪到自己的項目里。完事。 getSign…

芯知識 | 混音播報語音芯片的優勢:革新音頻應用的新力量

隨著科技的進步&#xff0c;語音芯片在各個領域的應用越來越廣泛。而在眾多語音芯片中&#xff0c;混音播報語音芯片以其獨特的優勢&#xff0c;正逐漸成為音頻應用領域的翹楚。本文將重點探討混音播報語音芯片的優勢及其在現代科技應用中的價值。 一、混音播報語音芯片概述 …

element-vue實現網頁鎖屏功能

1.寫一個鎖屏頁面&#xff0c;這里比較簡單&#xff0c;自己定義一下,需要放到底層HTML中哦&#xff0c;比如index.html <div id"appIndex"><el-dialog title"請輸入密碼解鎖屏幕" :visible.sync"lockScreenFlag" :close-on-click-mod…

力扣236. 二叉樹的最近公共祖先(java DFS解法)

Problem: 236. 二叉樹的最近公共祖先 文章目錄 題目描述思路解題方法復雜度Code 題目描述 給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先。 百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個節點 p、q&#xff0c;最近公共祖先表示為一個節點 x&am…

Android逆向一-frida操作

系列文章目錄 第一章 frida操作 文章目錄 系列文章目錄前言一、兩種模式二、frida命令行執行及參數三、frida使用python執行四、動靜態域調用1. 靜態域調用2.動態域調用 五. 遠程rpc調用六. 補充總結 前言 熟悉frida操作&#xff0c;hook手機app的關鍵位置進行逆向操作 一、…

芯知識 | Flash可更換聲音語音芯片—引領音頻IC技術革新的新篇章

隨著科技的飛速發展&#xff0c;人們對于電子產品的音頻性能要求越來越高。在這種背景下&#xff0c;Flash可更換聲音語音芯片應運而生&#xff0c;成為音頻技術領域的一顆璀璨明星。本文將詳細介紹Flash可更換聲音語音芯片的特點、優勢以及應用場景&#xff0c;展望其在未來科…

【Docker】從零開始:10.registry搭建私有倉庫

【Docker】從零開始&#xff1a;10.registry搭建私有倉庫 為什么要使用私有倉庫關于Docker Registry基于容器搭建registry私有倉庫1.下載鏡像2. 啟動鏡像3.修改系統配置文件4.下載ubuntu鏡像&#xff0c;修改名稱3.提交鏡像4.查看鏡像 本地搭建私有倉庫(目前編譯報錯找不到包&a…

【管理運籌學】背誦手冊(五)| 動態規劃

五、動態規劃 基本概念 階段&#xff08;Stage&#xff09;&#xff1a;將所給問題的過程&#xff0c;按時間或空間特征分解成若干相互聯系的階段&#xff0c;以便按次序去求解每階段的解&#xff0c;常用字母 k k k 表示。 狀態&#xff08;State&#xff09;&#xff1a;…

java實現連接linux(上傳文件,執行shell命令等)

1 導入pom <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency> 2 編寫配置類 package com.budwk.app.atest;import com.budwk.app.common.config.AppExceptio…

計算機網絡之網絡層

一、概述 主要任務是實現網絡互連&#xff0c;進而實現數據包在各網絡之間的傳輸 1.1網絡引入的目的 從7層結構上看&#xff0c;網絡層下是數據鏈路層 從4層結構上看&#xff0c;網絡層下面是網絡接口層 至少我們看到的網絡層下面是以太網 以太網解決了什么問題&#xff1f; 答…

【Python 千題 —— 基礎篇】刪除列表值

題目描述 題目描述 刪除列表的指定值。有一個列表 [1, 3, 5, 2, 44, 1, 9, 10, 32] &#xff0c;請使用 for 循環刪除該列表中與 [44, 1, 9] 列表相同的值&#xff0c;并輸出該列表。 輸入描述 無輸入。 輸出描述 輸出操作后的列表。 示例 示例 ① 輸出&#xff1a; …

記錄:通過day.js獲取兩個日期相差的時間,并轉化為年月日的格式

day.js這個日期庫真的是很不錯的日期庫&#xff0c;足夠滿足日常的開發需求。 Day.js中文網 (fenxianglu.cn) 需求&#xff1a;獲取兩個日期相差的時間&#xff0c;轉化為年月日的形式&#xff1b;話不多少&#xff0c;直接放代碼 import dayjs from "dayjs"; imp…

計算機網絡之應用層

一、概述 引入目的&#xff1a; 為了方便用戶去使用&#xff1b; 該如何方便用戶使用網絡呢&#xff0c;即怎樣幫助用戶使用網絡&#xff1f; 1.用戶需要知道網絡資源所在的位置 2.網絡上資源一定是在資源子網的主機上 3.資源子網上的主機&#xff0c;在通信子網中用IP地…