Arm linux記憶體管理(4)

2021-06-06 06:12:56 字數 1390 閱讀 5111

摘於毛德操《嵌入式系統》

那麼,這些資料結構怎樣發揮作用的呢?特別是,arm-linux核心怎樣根據這些資料結構建立起位址對映呢?

1、從系統的初始化說起。系統引導以後,cpu進入核心的總入口,即**段的起點stext.在stext中,cpu首先從自身讀出cpu的型號及其所在的機型,把有關的資訊存放在processor_id和machine_arch_type兩個全域性變數中,然後就轉入start_kernel()。

asmlinkage void __init start_kernel(void){

......

setup_arch(&command_line);

這個函式的**與具體的cpu機型有關,主要在系統初始化階段完成一下操作:

對於mmu,乙個具體的頁面目錄就是一種具體的對映,可是對核心則還需要有一些附加的資訊。從核心的角度,一種具體的對映是通過乙個mm_struct資料結構加以描述和管理的,其中核心的mm_struct資料結構init_mm有著特殊的重要性:

struct mm_struct init_mm = init_mm(init_mm);

#define init_mm(name) \

{準確的說法應該是核心執行緒的mm_struct資料結構,或核心執行緒的對映,這是因為在這個對映中不包含任何使用者空間的對映。系統中所有的核心執行緒都共享同乙個對映,那就是init_mm。特別的,核心執行緒init的mm_struct資料結構就是init_mm。

每個程序或執行緒都有個程序控制塊,這裡面就有個指標mm指向自己的mm_struct資料結構。而mm_struct結構中,則有個指標pgd指向它的首層頁面目錄。

arm linux記憶體分段的分析

4gb的空間分段管理,每段1mb,共4k段,顯然每段需要一定記憶體開銷來描述該 段虛擬位址到實體地址的對映及該段的其他特性。規定以4位元組來描述每段,則4k段需要4k 4 16kb位元組的開銷來描述整個記憶體分 段的特性.我們把這連續的16kb位元組稱為頁表,如下圖所示.其中每行的4位元組稱為乙個頁...

arm linux虛擬記憶體布局

開始位置 結束位置 使用0xffff8000 0xffffffff 用於 copy user page clear user page。在sa11xx和xscale平台,用於建立乙個迷你快取對映 0xffff4000 0xffffffff armv6及以後的cpu cache混淆 0xffff100...

4 動態記憶體管理

動態記憶體管理必要性 我們先看一下程式棧空間申請的陣列的空間有什麼特點?正是需要在程式執行期間,動態的開闢調整和維護管理記憶體空間的需求才導致動態記憶體管理的必要性,動態申請的空間是在堆空間上的2 動態記憶體管理的相關函式 malloc free calloc realloc mallocrequi...