- 論壇徽章:
- 2
|
第2章
2.3節(jié)需要理解的點(diǎn):
*重要數(shù)據(jù)結(jié)構(gòu):http://www.72891.cn/thread-4137565-1-1.html
***** 物理空間管理(描述系統(tǒng)“可供”,struct_page、zone_struct、pglist_data結(jié)構(gòu)) *****
*地址映射過程中,Linux內(nèi)核做了什么、CPU做了什么
內(nèi)核設(shè)置好PGD、PT、GDT、LDT等相關(guān)寄存器,CPU就能找到最終地址(木偶(CPU),木偶身上的線(寄存器),通過操作線,能使木偶做出不同的動作)
*pte_t、pmd_t、pgd_t定義成結(jié)構(gòu),類型檢查更嚴(yán)格
*了解pte低12位中包含的9個標(biāo)志位含義,P標(biāo)志位為1,其它標(biāo)志位才有意義
__mk_pte(page_nr, pgprot)宏
set_pte(pteptr, pteval)宏
*物理頁面?zhèn)}庫mem_map[],系統(tǒng)初始化時根據(jù)物理內(nèi)存大小建立的page結(jié)構(gòu)數(shù)組
*mem_map[]劃分為區(qū)間(管理區(qū)):ZONE_DMA(專供DMA使用及原因)、ZONE_NORMAL、ZONE_HIGHMEM(超過1GB的物理地址空間)
*mem_map[]、ZONE、free_area_t、page層次關(guān)系
*pte前20位的值,即為在mem_map[]中的下標(biāo),*4KB則為物理頁面起始地址
pte_page(x)宏
virt_to_page(kaddr)宏
*pte為0,表示尚未建立映射,因?yàn)?下標(biāo)頁面有特殊作用,是不會被映射到的
pte不為0,P標(biāo)志為0,表示已建立映射,但頁面已經(jīng)不在內(nèi)存(交換到磁盤)
*均質(zhì)存儲結(jié)構(gòu)UMA、非均質(zhì)存儲結(jié)構(gòu)NUMA
*管理NUMA的結(jié)構(gòu)pglist_data,封裝了node_zone[MAX_NR_ZONE](相當(dāng)于一個mem_map[],用node_mem_map指向),另外包含分配策略,由于zones指針不一定非要指向本模塊的管理區(qū),所以不用疑惑數(shù)字0x100
***** 虛擬空間管理(描述進(jìn)程“需求”,vm_area_struct、mm_struct結(jié)構(gòu)) *****
*mm_struct結(jié)構(gòu)為一個進(jìn)程虛擬空間的全部描述,包含多個vm_area_struct結(jié)構(gòu)成員,每個vm_area_struct結(jié)構(gòu)代表連續(xù)、屬性相同的一段地址區(qū)間
用戶進(jìn)程虛擬地址->物理地址轉(zhuǎn)換是經(jīng)過分段、分頁映射的,所以PGD、PMD、PT為mm_struct和struct_page的橋梁
*函數(shù)
struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr); // 找addr在mm中對應(yīng)的vm_area_struct區(qū)間
void insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vmp);
void __insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vmp); // 將vmp區(qū)間添加到mm
*AVL算法 |
|