日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )

發布時間:2025/6/17 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、虛擬地址空間布局架構
  • 二、用戶虛擬地址空間劃分





一、虛擬地址空間布局架構



646464 位的 Linux 操作系統中 , " ARM64 架構 "不支持 646464 位的虛擬地址 , 最大只支持 484848 位的虛擬地址 , 646464 位地址太大 , 并不需要那么大的內存空間 ;

" ARM64 架構 " 中 , Linux 系統的 " 內核虛擬地址 “” 用戶虛擬地址 " 是等同的 ;

  • 用戶虛擬地址 : 0x 0000 0000 0000 0000 ~ 0x 0000 FFFF FFFF FFFF , 484848 位有效地址 ;
  • 內核虛擬地址 : 0x FFFF 0000 0000 0000 ~ 0x FFFF FFFF FFFF FFFF , 484848 位有效地址 ;





二、用戶虛擬地址空間劃分



Linux 操作系統 進程 的 " 用戶虛擬空間 " 起始地址 000 ;

" 用戶虛擬空間 " 的大小為 TASK_SIZE , 該值與 處理器 架構 有關 , 不同的處理器 , 定義的 TASK_SIZE 宏不同 ;

  • 323232 位處理器 定義的 TASK_SIZE 宏為 TASK_SIZE_32 , 該值為 0x100000000\rm 0x1000000000x100000000 字節 , 大約 4GB ;
#define TASK_SIZE_32 UL(0x100000000)
  • 646464 位處理器 定義的 TASK_SIZE 宏為 TASK_SIZE_64 該值為 2VA_BITS\rm 2^{VA\_BITS}2VA_BITS 字節 ;
#define TASK_SIZE_64 (UL(1) << VA_BITS)

在 Linux 內核源碼的 LINUX-4.12\arch\arm64\include\asm\memory.h#86 中 , 定義了 TASK_SIZE 與 TASK_SIZE_64 宏 ;

VA_BITS 是編譯內核時 , 選擇的 " 虛擬地址空間 " 的地址位數 ,


TASK_SIZE 與 TASK_SIZE_64 宏 相關源碼如下 :

/** PAGE_OFFSET - the virtual address of the start of the linear map (top* (VA_BITS - 1))* KIMAGE_VADDR - the virtual address of the start of the kernel image* VA_BITS - the maximum number of bits for virtual addresses.* VA_START - the first kernel virtual address.* TASK_SIZE - the maximum size of a user space task.* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area.*/ #define VA_BITS (CONFIG_ARM64_VA_BITS) #define VA_START (UL(0xffffffffffffffff) << VA_BITS) #define PAGE_OFFSET (UL(0xffffffffffffffff) << (VA_BITS - 1)) #define KIMAGE_VADDR (MODULES_END) #define MODULES_END (MODULES_VADDR + MODULES_VSIZE) #define MODULES_VADDR (VA_START + KASAN_SHADOW_SIZE) #define MODULES_VSIZE (SZ_128M) #define VMEMMAP_START (PAGE_OFFSET - VMEMMAP_SIZE) #define PCI_IO_END (VMEMMAP_START - SZ_2M) #define PCI_IO_START (PCI_IO_END - PCI_IO_SIZE) #define FIXADDR_TOP (PCI_IO_START - SZ_2M) #define TASK_SIZE_64 (UL(1) << VA_BITS)#ifdef CONFIG_COMPAT #define TASK_SIZE_32 UL(0x100000000) #define TASK_SIZE (test_thread_flag(TIF_32BIT) ? \TASK_SIZE_32 : TASK_SIZE_64) #define TASK_SIZE_OF(tsk) (test_tsk_thread_flag(tsk, TIF_32BIT) ? \TASK_SIZE_32 : TASK_SIZE_64) #else #define TASK_SIZE TASK_SIZE_64 #endif /* CONFIG_COMPAT */

源碼路徑 : LINUX-4.12\arch\arm64\include\asm\memory.h#86

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【Linux 内核 内存管理】虚拟地址空间布局架构 ① ( 虚拟地址空间布局架构 | 用户虚拟地址空间划分 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。