物理内存相关
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数据结构