起初 神创造天地。
地是空虚混沌.渊面黑暗. BIOS运行在水面上。
神说、要有mbr、就加载了mbr。
神看mbr是好的、就用mbr加载了kernel。
神称mbr为引导程序、称kernel为内核.有晚上、有早晨、这是头一日。
用课余时间重新拾起JOS,作为一个码农通过了解不同技术层面的机制对自己的技术水平提高非常大,而JOS作为一个MIT的开放课程,可让我们从一无所有构造一个自己的操作系统,这无疑是学习OS的一个非常好的方法。
然而不可否认,操作系统本身是非常复杂的,即使是一个简化过的、只有基本功能的OS,里面的代码也够我研究好久,所以我在学习之余写这么几篇博客,当作学习笔记。
我使用的是6.828版本。地址http://pdos.csail.mit.edu/6.828/2011/schedule.html
1、环境搭建
(1)建立一只ubuntu11.10虚拟机,刚做好的系统是裸系统并,没有装任何东西。
(2) 装git,vim,cscope,qemu,eclipse(本来想用vim+cscope看代码的,结果因为本人太低端,vim还是玩不转,所以又装了eclipse用来看代码)
2、start
首先让我们从lab1开始,lab1的目的也就是让我们熟悉一下os的启动过程,所以这篇笔记也就不拘泥于里面的excerise了而直接尝试去理解里面的代码。
先按lab1的pdf里的说明将jos的代码git下来:
git clone http://pdos.csail.mit.edu/6.828/2011/jos.git lab
然后拖到eclipse里,我们就可以阅读代码了。
通过讲义(或者是经验)我们知道,当计算机加电,首先会把bios加载进内存执行,然后bios从硬盘加载mbr,之后由mbr来加载操作系统或者grab之类的东西。
那么这个过程我们就会面临很多问题
(1)bios加载进了内存的什么地方?
直接上图不解释:
+------------------+ <- 0xFFFFFFFF (4GB) | 32-bit | | memory mapped | | devices | | | /\/\/\/\/\/\/\/\/\/\ /\/\/\/\/\/\/\/\/\/\ | | | Unused | |