引文:构想根据《30天自制操作系统》以及《ORANGE’S:一个操作系统的实现》初步实现一个操作系统。
回想第一次看到《30天自制操作系统》这本书时,就被这快餐般的标题深深吸引了,我无法想象如此复杂有内涵的内容能在30天就弄出来,直到我花了一个多月看到这本书的第9天时,我放弃了。
然而这次。
对不起,我是认真的!
以下开始正文,都是个人浅见,如有错误,欢迎斧正。
操作系统如何自己运行起来?
首先,机器自动读取磁盘的第一个扇区(512字节),并载入到内存的0x7c00位置,然后执行第一个扇区的代码,这段代码会读取磁盘后续的扇区到内存,接着跳转到引导文件,由引导文件继续启动操作系统。
这里有几点说明,并不是所有的第一个扇区都是引导扇区,因为他有个特殊的标记,以0x55aa结尾,为什么是0x55aa?还是让我们先看下为什么要载入到内存的0x7c00位置,因为答案都是一样的,龟腚!
先开个头,以后的棋一步一步下。
先说几句题外话:回想第一次看到《30天自制操作系统》这本书时,就被这快餐般的标题深深吸引了,我无法想象如此复杂有内涵的内容能在30天就弄出来,直到我花了一个多月看到这本书的第9天时,我放弃了。
然而这次。
对不起,我是认真的!
以下开始正文,都是个人浅见,如有错误,欢迎斧正。
操作系统如何自己运行起来?
首先,机器自动读取磁盘的第一个扇区(512字节),并载入到内存的0x7c00位置,然后执行第一个扇区的代码,这段代码会读取磁盘后续的扇区到内存,接着跳转到引导文件,由引导文件继续启动操作系统。
这里有几点说明,并不是所有的第一个扇区都是引导扇区,因为他有个特殊的标记,以0x55aa结尾,为什么是0x55aa?还是让我们先看下为什么要载入到内存的0x7c00位置,因为答案都是一样的,龟腚!
下面是《30天自制操作系统》引导扇区的代码,略作修改,并且加了大量注释,让我们RTFSC!
CYLS EQU 10 ; 定义变量,将要读取的柱面数量
ORG 0x7c00 ; 指明程序载入到内存的地址,7c00是魔法数字,人为规定的,没什么道理好讲
; 以下这段是标准的FAT12格式软盘用的代码
JMP entry ; 跳到下面执行入口entry
DB 0x90 ; 写一个字节,DW是写2个字节,DD是写4个字节
DB "HARIBOTE" ; 启动区的名称,必须8字节
DW 512 ; 每个扇区的大小,必须512字节
DB 1 ; 簇的大小,必须1个扇区
DW 1 ; FAT的起始位置,通常从第一个扇区开始
DB 2 ; FAT的个数,必须为2
DW 224 ; 根目录大小,通常为224