- 论坛徽章:
- 2
|
第2章
2.3节需要理解的点:
*重要数据结构:http://bbs.chinaunix.net/thread-4137565-1-1.html
***** 物理空间管理(描述系统“可供”,struct_page、zone_struct、pglist_data结构) *****
*地址映射过程中,Linux内核做了什么、CPU做了什么
内核设置好PGD、PT、GDT、LDT等相关寄存器,CPU就能找到最终地址(木偶(CPU),木偶身上的线(寄存器),通过操作线,能使木偶做出不同的动作)
*pte_t、pmd_t、pgd_t定义成结构,类型检查更严格
*了解pte低12位中包含的9个标志位含义,P标志位为1,其它标志位才有意义
__mk_pte(page_nr, pgprot)宏
set_pte(pteptr, pteval)宏
*物理页面仓库mem_map[],系统初始化时根据物理内存大小建立的page结构数组
*mem_map[]划分为区间(管理区):ZONE_DMA(专供DMA使用及原因)、ZONE_NORMAL、ZONE_HIGHMEM(超过1GB的物理地址空间)
*mem_map[]、ZONE、free_area_t、page层次关系
*pte前20位的值,即为在mem_map[]中的下标,*4KB则为物理页面起始地址
pte_page(x)宏
virt_to_page(kaddr)宏
*pte为0,表示尚未建立映射,因为0下标页面有特殊作用,是不会被映射到的
pte不为0,P标志为0,表示已建立映射,但页面已经不在内存(交换到磁盘)
*均质存储结构UMA、非均质存储结构NUMA
*管理NUMA的结构pglist_data,封装了node_zone[MAX_NR_ZONE](相当于一个mem_map[],用node_mem_map指向),另外包含分配策略,由于zones指针不一定非要指向本模块的管理区,所以不用疑惑数字0x100
***** 虚拟空间管理(描述进程“需求”,vm_area_struct、mm_struct结构) *****
*mm_struct结构为一个进程虚拟空间的全部描述,包含多个vm_area_struct结构成员,每个vm_area_struct结构代表连续、属性相同的一段地址区间
用户进程虚拟地址->物理地址转换是经过分段、分页映射的,所以PGD、PMD、PT为mm_struct和struct_page的桥梁
*函数
struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr); // 找addr在mm中对应的vm_area_struct区间
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区间添加到mm
*AVL算法 |
|