物理內存相關
1. typedef struct { unsigned long pgprot;}pgprot_t; 頁面保護結構
2. _ _mk_pte(page_nr,pgprot); 計算頁面表項的內容
3. set_pte(pteptr,pteval);頁面表項的值,填到頁面表項中去
4. #define pte_none(x) (!(x).pte_low) 是否建立頁面映射
5. pte_present(x) 0表示物理頁面不再內存中 下面的幾個函數當該函數返回1的時候有意義Pte_young, pte_write等
6. #define pte_page(x) (mem_map+((unsigned long)(((x).pte_low>>PAGE_SHIFT))))找到mem_map數據結構 mem_map是全局變量 相當於一個物理頁面數組
7. #define virt_to_page(kaddr)(mem_map+(__pa(kaddr)>>PAGE_SHIFT)) 虛擬地址到page結構的轉換函數
8. page:物理頁面描述結構 mem_map_t 其中的page_list鏈入swapper_space;page_lru鏈入active_list
9. free_area_struct 空閒區間 free_area_t
10. 管理區:zone_struct, zone_t zone_t->offset 該分區再mem_map中的起始頁面號
11. 存儲節點的引入是由於NUMA的一如,是最高層機構,存儲節點至少有兩個管理區
Typedef struct pglist_data {…}pg_data_t
虛擬內存相關
1. 虛存區間 vm_area_struct ,變量名通常爲vma
2. Vm_area_struct中的vm_mm指向一個mm_struct數據結構,變量名通常爲mm;mm->segments爲指向該進程的局部段描述符表LDT
3. Find_vma()找到一個包含addr的虛存頁面
4. Insert_vm_struct向進程的虛擬頁面隊列中插入一個虛存頁面(linux內核的鏈表插入全採用的是雙重指針的思想)
5. Swap_info_struct 相當於page結構
6. Swap_entry_t 相當於pte_t結構
7. SWP_TYPE(x) 頁面所在的文件
8. SWP_OFFSET(x)頁面在文件中的偏移
9. SWP_ENTRY(type,offset)獲得swap_entry_t
10. List_entry(隊列A,隊列元素B,元素中的某成員C) 從隊列中A(隊列是由B組成)中找到C所在的B結構對象。
11. Derect_reclaim是否分配單個頁面,PF_MEMALLOC是否分配頁面的特權進程
12. 將page由活躍變爲不活躍的標準1、首先是活躍的 2、普通文件的page->count<2 頁面文件的page->count<3 3、不能用作ramdisk
13. 一個kswaped進程的兩個任務:1、斷開部分頁面的映射 2、不活躍的頁面寫出
14. Refill_active的兩個任務: 1、將active_list中的部分放入inactive_list 2、掃描進程,將合適進程的mm換出
15. Slab:kmem_cache_t是slab隊列的控制結構,指針firstnotfull指向隊列頭時,它不指向任何一個slab,表示這個slab隊列由不含存在空想對象的slab。
16. 函數slab_bufctl(slabp)改變字段free的值,使它指向下一個空閒隊列序號
17. 當隊列中的firstnotfull指向隊列頭時,kmem_cache_grow()分配增加一個slab
18. Vm_struct數據結構是一個單鏈隊列,它是內核爲自己保持一個虛存區間的隊列
19. 系統調用brk(),向內核申請空間
20. 進程的數據段包括了所有分配的數據控件,包括爲全局變量和生命爲static的局部變量
21. Brk()分配空間,動態分配區底部邊界上推,也可用來釋放歸還空間
22. Do_munmap 釋放空間
23. File->f_op->mmap,建立從該類文件到虛存區間的映射操作
24. Inode->i_mapping 它指向一個address_space數據結構
25. Address_space->a_ops 指向一個 address_space_operations數據結構