中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux中pfn是什么意思

發布時間:2022-03-24 12:15:52 來源:億速云 閱讀:793 作者:小新 欄目:建站服務器

這篇文章將為大家詳細講解有關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中pfn是什么意思”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正宁县| 得荣县| 延寿县| 西华县| 新津县| 澄江县| 资源县| 龙川县| 高密市| 隆德县| 汕头市| 睢宁县| 丹凤县| 德庆县| 太白县| 怀远县| 南陵县| 日土县| 额济纳旗| 加查县| 肇东市| 城口县| 东台市| 安仁县| 平邑县| 山西省| 罗定市| 刚察县| 老河口市| 高州市| 龙州县| 田林县| 新密市| 东源县| 闽清县| 新河县| 崇信县| 平凉市| 噶尔县| 石阡县| 长沙市|