linux ARM64架構用戶空間和內核空間的區分

一、ARM64 架構地址空間的「黃金分割」

ARM64(ARMv8-A)采用?48 位虛擬地址(Linux 默認配置),總空間為?256TB,分為高低兩個 128TB 區域:

1.?地址空間整體布局
虛擬地址空間(48位,256TB)
┌───────────────────────────────────────┐
│            用戶空間(低128TB)         │
│ 0x000000000000 ~ 0x000FFFFFFFFF       │ (低地址段,用戶進程使用)
├───────────────────────────────────────┤
│            保留隔離區                 │
│ 0x010000000000 ~ 0xFFFFEFFFFFFFFFFF   │ (未使用,防止地址越界)
├───────────────────────────────────────┤
│            內核空間(高128TB)         │
│ 0xFFFF00000000 ~ 0xFFFFFFFFFFFFFFFF   │ (高地址段,內核專屬空間)
└───────────────────────────────────────┘
2.?核心劃分依據
  • 分界線0xFFFF00000000(由內核配置CONFIG_ARM64_PAGE_OFFSET決定)
  • 用戶空間:低 128TB,地址最高位為?0b00...(前 16 位為 0)
  • 內核空間:高 128TB,地址最高位為?0b111111...(前 16 位為全 1)

二、圖形化對比:用戶空間 vs 內核空間?

1.?地址范圍與用途對比圖?

          虛擬地址空間(ARM64, 48位)
低地址───────────────────────────────────────高地址
┌───────────────────────────────────────┐
│               用戶空間(128TB)         │
│  ╔══════════════════════════════════╗  │
│  ║  進程A的代碼/數據/堆/棧           ║  │
│  ║  進程B的代碼/數據/堆/棧           ║  │
│  ║  ...                              ║  │
│  ╚══════════════════════════════════╝  │
│                                         │
├───────────────────────────────────────┤
│               內核空間(128TB)         │
│  ╔══════════════════════════════════╗  │
│  ║  內核代碼(.text/.data)          ║  │
│  ║  物理內存映射(memmap)           ║  │
│  ║  設備寄存器映射(ioremap)         ║  │
│  ║  動態分配內存(vmalloc)           ║  │
│  ║  全局內核數據(如task_struct)     ║  │
│  ╚══════════════════════════════════╝  │
└───────────────────────────────────────┘

2.?關鍵差異點對比表

特征用戶空間地址內核空間地址
地址范圍0x000000000000 ~ 0x000FFFFFFFFF0xFFFF00000000 ~ 0xFFFFFFFFFFFFFFFF
最高位標志前 16 位為0b00...(低地址段)前 16 位為0b111111...(高地址段)
訪問權限用戶態受限(僅本進程可訪問)內核態全權限(所有進程共享)
頁表機制每個進程獨立頁表(地址隔離)全局頁表(所有進程共享同一映射)
特權標志頁表項設置PXN=1(用戶態禁止執行)頁表項設置PXN=0(內核態允許執行)
典型場景存儲用戶程序、堆、棧、動態庫存儲內核代碼、設備驅動、物理內存映射

三、技術實現:ARM64 如何隔離兩個空間?

1.?頁表項中的「權限開關」

ARM64 通過?頁表項(PTE)標志位?控制訪問權限,核心標志:

  • PXN(Permission Execute Never)
    • 用戶空間頁表項:PXN=1?→ 用戶態下禁止執行該頁的代碼(防惡意代碼注入)。
    • 內核空間頁表項:PXN=0?→ 內核態下允許執行(如內核函數調用)。
  • UXN(User Execute Never)
    • 用戶空間數據頁:UXN=1?→ 用戶態下禁止執行數據頁(防棧溢出攻擊)。

graph TD
A[用戶態程序訪問地址] --> B{地址 < 0xFFFF00000000 ?}
B -->|是| C[查詢用戶進程頁表]
C --> D{頁表項PXN=1 ?}
D -->|是| E[允許訪問(用戶空間數據/代碼)]
D -->|否| F[觸發頁錯誤(用戶態禁止執行)]
B -->|否| G[觸發頁錯誤(用戶態禁止訪問內核空間)]H[內核態程序訪問地址] --> I{地址 >= 0xFFFF00000000 ?}
I -->|是| J[查詢全局內核頁表]
J --> K[允許訪問(內核態無PXN限制)]
I -->|否| L[查詢用戶進程頁表(需通過copy_from_user)]

3.?實戰代碼:判斷地址所屬空間

// ARM64內核空間起始地址(Linux默認)
#define KERNEL_SPACE_START 0xFFFF00000000ULLbool is_kernel_address(unsigned long addr) {// 檢查地址是否位于高128TB(內核空間)return (addr & 0xFF0000000000ULL) == 0xFF0000000000ULL;
}// 示例:
unsigned long user_addr = 0x12345678ABCDULL;      // 低地址,用戶空間
unsigned long kernel_addr = 0xFFFF12345678ABCDULL; // 高地址,內核空間printf("user_addr屬于%s空間\n", is_kernel_address(user_addr) ? "內核" : "用戶");
// 輸出:user_addr屬于用戶空間

四、64 位 vs 32 位 ARM 地址空間對比?

特征ARM64(48 位)ARM32(32 位,3:1 劃分)
總空間256TB4GB
用戶空間低 128TB(0x000... ~ 0x00F...)低 3GB(0x00000000 ~ 0xBFFFFFFF)
內核空間高 128TB(0xFFF... ~ 0xFFFF...)高 1GB(0xC0000000 ~ 0xFFFFFFFF)
地址標志最高 16 位全 1(內核)/ 全 0(用戶)最高 2 位為 11(內核,如 0xC0000000)
隔離方式物理地址標簽 + PXN/UXN 硬件保護軟件頁表權限 + PAGE_OFFSET 劃分

五、典型場景:進程切換時的地址空間變化?

當用戶態進程通過?syscall?進入內核時:

  1. 地址切換
    • 用戶態棧地址(如0x0000...)→ 內核態棧地址(如0xFFFF...)。
  2. 權限升級
    • CPU 從?EL0(用戶態)?切換到?EL1(內核態),解除 PXN/UXN 限制。
  3. 頁表共享
    • 用戶空間頁表繼續使用,但內核空間通過全局頁表訪問高地址段。

總結:3 步快速區分 ARM64 地址空間

  1. 看最高位:前 16 位是否為?0b111111...(內核空間)或?0b00...(用戶空間)。
  2. 查訪問權限:用戶態程序能否直接訪問(能→用戶空間,否則→內核空間)。
  3. 看上下文:代碼是否運行在內核態(如中斷處理、系統調用),若是則為內核空間地址。

通過這種「地址范圍 + 硬件權限 + 執行環境」的三重判斷,就能準確區分 ARM64 架構下的用戶空間與內核空間地址。

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

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

相關文章

51單片機重要知識點1

1. 在讀IO口狀態前必須先寫該IO口1. 即讓下拉MOS高阻斷路。如&#xff1a; P221; KEYP22; 復位狀態各IO口1的。另外大多數情況都不會IO口即做輸入又做輸出的。設計思想永遠不要復雜化高難度編程&#xff0c;而要簡單明了。 2.

【解析法與幾何法在阻尼比設計】自控

解析法與幾何法在阻尼比設計中的詳細對比 一、解析法&#xff1a;基于數學方程的定量求解 核心思想&#xff1a;通過特征方程與根軌跡條件建立代數關系&#xff0c;直接求解滿足阻尼比要求的系統參數。 1. 適用場景 二階系統或可簡化為二階系統的高階系統&#xff08;主導極…

搭建pikachu靶場

文章目錄 一、pikachu是什么?二、搭建環境1.下載鏈接三、安裝教程phpstudy安裝配置pikachu 靶場安裝配置總結一、pikachu是什么? Pikachu 靶場是一個專門為網絡安全愛好者和學習者設計的 Web 安全靶場。它旨在幫助用戶學習和實踐常見的 Web安全漏洞和攻擊手法。Pikachu 靶場通…

OpenStack Dashboard在指定可用域(Availability Zone)、指定節點啟動實例

通過OpenStack Dashboard在指定可用域&#xff08;Availability Zone&#xff09;中創建實例的完整配置&#xff0c;涵蓋可用域創建、節點管理、關系與限制的詳細步驟&#xff1a; 一、可用域&#xff08;Availability Zone&#xff09;的概念與關系 0.指定域、指定節點、指定…

6.時間序列預測的模型部署

6.1實驗設置和python版的Azure機器學習SDK介紹 6.1.1 WorkSpace 6.1.2 Experiment 6.1.3 Run 6.1.4 Model 6.1.5 ComputeTarget、RunConfiguration和ScriptRunConfig 6.1.6 Image 和 Webservice 6.2 機器學習模型部署 6.3 時間序列預測的解決方案體系結構部署示例 6.3.1 訓練…

加密貨幣:比特幣

比特幣&#xff08;Bitcoin&#xff0c;簡稱BTC是一種去中心化的數字貨幣&#xff0c;由中本聰&#xff08;Satoshi Nakamoto&#xff09;在2008年提出&#xff0c;并于2009年正式推出。它是首個基于區塊鏈技術的加密貨幣&#xff0c;旨在實現點對點的價值傳輸&#xff0c;無需…

【Dv3Admin】應用WSGI啟動配置文件解析

在 Django 項目部署中&#xff0c;WSGI 是連接 Web 服務器與應用的標準接口。它負責接收請求、交由 Django 處理并返回響應&#xff0c;是系統上線運行的基礎組件。理解其作用&#xff0c;有助于掌握項目的啟動流程與部署邏輯。 本文解析 application/wsgi.py 模塊的結構與功能…

aws各類服務器編號

在 AWS 中&#xff0c;服務器實例編號通常由一個字母和數字組合而成&#xff0c;每個字母代表不同的實例系列&#xff0c;數字則表示該系列的不同版本或規格。以下是對常見實例系列編號的解釋&#xff1a; T 系列&#xff08;突發性能型&#xff09; 特點&#xff1a;T 系列實例…

Netty實戰:從核心組件到多協議實現(超詳細注釋,udp,tcp,websocket,http完整demo)

目錄 前言 一、為什么選擇Netty&#xff1f; 二、Netty核心組件解析 三、多協議實現 1. TCP協議實現&#xff08;Echo服務&#xff09; 2. UDP協議實現&#xff08;廣播服務&#xff09; 3. WebSocket協議實現&#xff08;實時通信&#xff09; 4. HTTP協議實現&#x…

MCP出現的意義是什么?讓 AI 智能體更模塊化

AI 智能體現在能做的事情真的很厲害&#xff0c;可以思考、規劃&#xff0c;還能執行各種復雜任務&#xff0c;而且代碼量并不大。這讓開發者看到了一個機會&#xff1a;把那些龐大復雜的代碼庫和 API 拆解成更實用的模塊。 不過要讓這些智能變成現實世界里真正能用的東西&…

【深度剖析】領信卓越:福耀玻璃的數字化轉型(下篇3:階段成效3-打造從功能部件到數據終端躍遷的智能化產品)

在數字經濟持續發展的背景下,企業數字化轉型方案成為實現轉型的關鍵。不同行業內的企業因轉型動機和路徑的差異,其轉型成效也各異。福耀玻璃自1983年創立以來,從一家瀕臨破產的鄉鎮水表玻璃廠蛻變為全球汽車玻璃行業的領軍企業,其發展歷程堪稱中國制造業的典范。創始人曹德…

告別停機煩惱!AWS EC2實例升級的“零中斷”實戰方案

引言&#xff1a; “服務器要升級了&#xff0c;今晚得停機維護...” —— 這句話曾是多少運維工程師的“噩夢”&#xff0c;也是業務部門最不愿聽到的通知。在追求極致用戶體驗和7x24小時業務連續性的今天&#xff0c;停機窗口已成為難以承受之重。尤其是在云時代&#xff0c…

奇葩的el-checkbox-group數組賦值

背景。自定義表單。多選組件封裝。當選項被多選后&#xff0c;el-checkbox-group中v-model的值以數組形式存儲了選中的內容。奇葩問題。存儲的值時label屬性。而渲染時需要使用插值單獨將選項的名稱渲染出來。而在el-checkbox標簽中:label要賦值option.value很別扭。 <temp…

【Python系列PyCharm實戰】ModuleNotFoundError: No module named ‘sklearn’ 系列Bug解決方案大全

【Python系列Colab實戰】ModuleNotFoundError: No module named ‘sklearn’ 系列Bug解決方案大全 一、摘要 在使用 Jupyter、PyCharm 或 Google Colab 進行機器學習開發時&#xff0c;導入 sklearn&#xff08;scikit-learn&#xff09;相關模塊時&#xff0c;常會遇到一系列…

小白的進階之路系列之十六----人工智能從初步到精通pytorch綜合運用的講解第九部分

從零開始學習NLP 在這個由三部分組成的系列中,你將構建并訓練一個基本的字符級循環神經網絡 (RNN) 來對單詞進行分類。 你將學習 如何從零開始構建循環神經網絡NLP 的基本數據處理技術如何訓練 RNN 以識別單詞的語言來源。從零開始學自然語言處理:使用字符級 RNN 對名字進行…

MySQL在ubuntu下的安裝

前言&#xff1a; 安裝與卸載中&#xff0c;用戶全部進行切換為root ,一旦安裝&#xff0c;普通用戶也是可以進行使用 初期聯系mysql時不進行用戶的管理&#xff0c;直接使用root 進行即可&#xff0c;盡快適應mysql語句&#xff0c;后面進行學了用戶管理再考慮新建普通用戶。&…

低代碼技術實戰:從 0 到 1 構建高效業務流程應用

引言 在當今競爭激烈的商業環境中&#xff0c;企業迫切需要簡化運營并提高效率。低代碼技術作為一種新興的解決方案&#xff0c;正逐漸成為企業實現這一目標的有力工具。它能夠將繁瑣的手工業務流程轉化為數字資產和應用程序&#xff0c;為企業帶來諸多優勢。本文將詳細介紹低…

RPGMZ游戲引擎 如何手動控制文字顯示速度

直接上代碼 const _Window_Base_prototype_initialize Window_Base.prototype.initialize;Window_Base.prototype.initialize function(rect) {_Window_Base_prototype_initialize.call(this, rect);this.文字速度緩沖 0;}; this.文字速度緩沖 0; 進行緩沖 Window_Base…

Leetcode-1750. 刪除字符串兩端相同字符后的最短長度

Problem: 1750. 刪除字符串兩端相同字符后的最短長度1750. 刪除字符串兩端相同字符后的最短長度 1750. 刪除字符串兩端相同字符后的最短長度 思路 雙指針遍歷 解題過程 模擬題目描述的過程&#xff0c;使用指針 l, r 指向首尾兩端。 如果相同就向中心移動。為了盡可能的刪除多…

【mysql】通過information_schema.tables查詢表的統計信息

1 查詢表的統計信息 information_schema.tables 是 MySQL 中的一個系統視圖&#xff0c;包含數據庫中所有表的信息。 如何查詢當前數據庫的所有表信息&#xff1a; SELECT * FROM information_schema.tables WHERE table_schema DATABASE(); 返回的字段有&#xff1a; 字段名…