fireaway7 发表于 2014-05-06 09:16

《LINUX内核源代码情景分析》第2章笔记

本帖最后由 fireaway7 于 2014-05-06 09:19 编辑

第2章
2.1节需要理解的点:
*线性地址->物理地址,经过页面目录和页面表两层映射,可以节省页面表所占用的空间(相当于可以装1L水的桶和可以装10ml的100个杯子,大部分时候我们外出是不会带1L水的)
*Linux内核的MMU采用三层映射(页面目录PGD、中间目录PMD、页面表PT,最终找到PTE),因为他面对的不仅仅是32位CPU,可能还有64位的(相当于公司规模越大,层次越多)
*三层映射情况下,线性地址->物理地址过程
*内核是软件,是模型;CPU MMU是硬件,是具体,对i386来说,要跳过PMD,或者如果CPU支持,可以设置PAE模式
*include/asm-i386/pgtable-2level.h
#define PMD_SHIFT   22
#define PTRS_PER_PMD1   // 2^0,中间目录大小为0,骗两层映射的CPU
*面对两层映射的CPU硬件时,Linux内核欺骗PMD,从线性地址->物理地址过程
* 0xC0000000~0xFFFFFFFF |系统空间(共享)
                                        |
               0x0~0xBFFFFFFF |用户空间(独立),...
                                        |
*PAGE_OFFSET宏,以及__pa(x)、__va(x),虚拟地址与物理地址转换不是要段映射,页映射的麽,啥时候变这麽简单了
参考:http://www.educity.cn/linux/461538.html
       http://bbs.chinaunix.net/thread-4137431-1-1.html
__PAGE_OFFSET宏的意义有待确定
*给CR3赋值新进程PGD位置,切换进程
*GDT第0、1个描述项不用,第2、3个描述项用于内核代码段和数据段,第4、5项用于当前进程的代码段和数据段。每个进程需要在GDT中占2个描述项用于指向LDT和TSS,所以系统中最大进程数是4090

Godbach 发表于 2014-05-06 09:34

回复 1# fireaway7
感谢分享。


   

fireaway7 发表于 2014-05-06 09:38

写的乱七八糟的,自己做个笔记,谢谢你的赞 :wink: 。


   

beyondfly 发表于 2014-05-08 19:52

感谢lz分享
页: [1]
查看完整版本: 《LINUX内核源代码情景分析》第2章笔记