linux中什麼是pfn
在linux中,pfn全名為“page frame number”,是物理記憶體區域編號。 「page frame」是針對實體記憶體而言的,把實體記憶體分成一個個的page size的區域,並且給每一個page編號,而這個編號就是PFN。
本教學操作環境:linux5.9.8系統、Dell G3電腦。
1、什麼是page frame?
作業系統最重要的作用之一就是管理電腦系統中的各種資源,做為最重要的資源:內存,我們必須管理起來。在linux作業系統中,實體記憶體是依照page size來管理的,具體page size是多少是和硬體以及linux系統配置相關的,4k是最經典的設定。因此,對於物理內存,我們將其分成一個個按page size排列的page,每一個物理內存中的page size的內存區域我們稱為page frame。我們針對每一個物理的page frame建立一個struct page的資料結構來追蹤每一個實體頁面的使用情況:是用於內核的正文段?還是用於進程的頁表?是用於各種file cache還是處於free狀態…
每一個page frame有一個一一對應的page資料結構,系統中定義了page_to_pfn和pfn_to_page的巨集用來在page frame number和page資料結構之間進行轉換,具體如何轉換是和memory modle相關,我們會在第三章詳細描述linux kernel中的3種記憶體模型。
2、什麼是PFN?
對於一個電腦系統,其整個實體位址空間應該是從0開始,到實際系統能支援的最大物理空間為止的一段位址空間。在ARM系統中,假設實體位址是32個bit,那麼其實體位址空間就是4G,在ARM64系統中,如果支援的實體位址bit數目是48個,那麼其實體位址空間就是256T。當然,實際上這麼大的實體位址空間並不是都用於內存,有些也屬於I/O空間(當然,有些cpu arch有自己獨立的io address space)。因此,記憶體所佔據的實體位址空間應該是一個有限的區間,不可能涵蓋整個實體位址空間。不過,現在由於記憶體越來越大,對於32位元系統,4G的實體位址空間已經無法滿足記憶體的需求,因此會有high memory這個概念,後續會詳細描述。
PFN是page frame number的縮寫,所謂page frame,就是針對實體記憶體而言的,把實體記憶體分成一個個的page size的區域,並且給每一個page 編號,這個編號就是PFN。假設實體記憶體從0位址開始,那麼PFN等於0的那個頁幀就是0位址(物理位址)開始的那個page。假設實體記憶體從x位址開始,那麼第一個頁幀號碼就是(x>>PAGE_SHIFT)。
PFN的值範圍是 0----(memory size >> 12)。
但是由於物理記憶體映射的關係,物理記憶體的0位址對應到系統上並不是物理位址的0。例如:s3c2440上,記憶體的位址是從0x30000000開始的。當連接ram後,ram的0位址在s3c2440看來,就是0x30000000. 所以在系統中 pfn的值 應該等於 (physical address - memory base address) >> 12 。
但是linux中,用的又都是虛擬位址,所以要先將 virtual address轉換成 physical address 才行。所以在linux中有個巨集定義 將核心線性空間的虛擬位址和pfn轉換:
#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT) //__pa() 将虚拟地址转化成物理地址 #define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT)
所以pfn在linux核心中應該對應的是頁幀號。可以透過簡單的轉換找到對應的實體位址。
每個物理上的頁,內核給與之分配了一個描述符來描述: page。 pfn可以和page轉換:
#define page_to_pfn __page_to_pfn #define pfn_to_page __pfn_to_page
所有的page結構存放在mem_map中,方便進行管理。
由於linux是將實體記憶體分成4K大小的頁來進行管理的。所以在軟體上也會設定MMU進行配對對應。後面敘述。
linux將4G的虛擬空間分成了使用者空間和核心空間。使用者空間是0---3G,核心空間是3G---4G。從核心空間可以存取到使用者空間,但是從使用者空間必須透過系統呼叫來能存取核心空間。
相關推薦:《Linux影片教學》
以上是linux中什麼是pfn的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。
