阅读时间:2015年10月27日20:00/21:17
阅读技巧:略读全书,细读书中细节
读书笔记:
打开内核文件:
打开boot文件:
打开head.s文件
head.s 程序在被编译后,会被连接成 system 模块的最前面开始部分,这也就是为什么称其为头部 (head)程序的原因。从这里开始,内核完全都是在保护模式下运行了。heads.s 汇编程序与前面的语法 格式不同,它采用的是 AT&T 的汇编语言格式,并且需要使用 GNU 的 gas 和 gld 1 进行编译连接。因此请 注意代码中赋值的方向是从左到右。
这段程序实际上处于内存绝对地址 0 处开始的地方。这个程序的功能比较单一。首先是加载各个数 据段寄存器,重新设置中断描述符表,共 256 项,并使各个表项均指向一个只报错误的哑中断程序。然 后重新设置全局描述符表。接着使用物理地址 0 与 1M 开始处的内容相比较的方法,检测 A20 地址线是否 已真的开启(如果没有开启,则在访问高于 1Mb 物理内存地址时 CPU 实际只会访问(IP MOD 1Mb)地址 处的内容),如果检测下来发现没有开启,则进入死循环。然后程序测试 PC 机是否含有数学协处理器芯 片(80287、80387 或其兼容芯片),并在控制寄存器 CR0 中设置相应的标志位。接着设置管理内存的分 页处理机制,将页目录表放在绝对物理地址 0 开始处(也是本程序所处的物理内存位置,因此这段程序 将被覆盖掉),紧随后面放置共可寻址 16MB 内存的 4 个页表,并分别设置它们的表项。最后利用返回指 令将预先放置在堆栈中的/init/main.c 程序的入口地址弹出,去运行 main()程序。
阅读心得:感觉看了几天书后,先开始读不懂,现在感觉每个文件夹是的大的系统,然后小文件就是一个小小的程序,把文件看成是一个小小的系统就会很好的理解书中所写的内容。