<自已动手写操作系统> 学习扎记让操作系统走进保护模式
这一章的比较简短,没有太多的东东,不过内容感觉稍稍有些货不对版,标题是让操作系统走进保护模式,其实大部分内容是在讲述怎么样加载操作系统的Loader到内存.不过思路还是值得记录一下, 引导扇区只有512byte,如果同时加载内核并初始化环境可能不够用,作者中间增加了一个Loader模块,引导扇区负责把Loader加载进内存并把控制权交给它,Loader负责加载内核初始化保护模式环境,并把控制权交给内核,内核开始启动.Loader是个com文件,同时也便于调试.
背景知识点:
CHS模式和LBA模式的转换
CHS模式 (cylinder,head,sector) 是初始的硬盘寻址方法,你要如果要在硬盘上寻找一个扇区,必需要提供柱面号,磁头号和扇区号,如果你了解硬盘的物理结构,这种寻址方法理解还不是太困难。
LBA模式(Logic Block Address) 是一种逻辑寻址,把所有的扇区在逻辑上看成是一个一维数组,顺序编号,这简单多了,现在的硬盘都支持。
CHS到LBA转换公式
#lba = (#c*H + #h) *S + #s -1
#c 是柱面号
#h 是磁头号
#s 是扇区号
H 是每个柱面的磁头数
S 是每个磁道的扇区数
-1 是因为lba 从0开始
LBA到CHS转换通过纯数学都可以推导出来了,
#c = #lba / (S * H)
#h = (#lba/S)% H
#s = #lba % S + 1
书上计算磁头号是公式是 #h = (#lba /S) & 1,这是因为磁头数已知是2, mod 2的结果只可能是0或1,也是就是取决于数二进制的最后一位是0或1,因此只要&1就可以得到磁头数,这算是一种优化了吧。
参考
http://zh.wikipedia.org/wiki/LBA