操作系统,看起来是一个十分高大上的话题。其实,我们自己也可以尝试着捣鼓一个,这其实不是想象的那么困难,只是自己不知道怎么做而已。
相比你已经知道了从计算机上电之后,操作系统加载直至出现鼠标,登录,显示出桌面这个过程。如果不知道,那也没关系,笔者为你简单介绍一下这个过程。
上电之后,计算机主板的BIOS会进行一系列的检查(包括检查内存、硬盘等等),假设一切检查正常通过,那么,接下来BIOS会在内存中设定一些程序(一些简单的驱动程序),然后,BIOS读取启动设备的引导扇区,加载引导程序,执行。然后,引导程序负责了后面加载操作系统的内核(或者是一个loader,再由loader加载内核)。之后,内核开始运行。。。后面暂不涉及。我们现在关注第一个程序——引导扇区部分。
引导扇区,简单来说(在这里)就是启动驱动器的第一个扇区(512字节大小)并且其最后两个字节分别是 0x55,0xAA,这样,BIOS就会认为它是一个引导扇区并尝试加载运行。那么,我们只要将我们的程序写入到第一个扇区,并以 0x55,0xAA两个字节结尾,那么就可以用来启动我们的计算机了。
不过,这里还有一个问题,就是我们的引导扇区会被加载到哪里。在BIOS加载引导扇区的时候,会将其加载到内存的0x7c00处,然后开始执行该处代码。那么,我们在写代码的时候,也应该假设我们的程序会被加载到0x7c00方可得出正确的结果。
好了,我们开始写一个引导扇区吧。
首先准备一些工具:nasm(汇编语言编译器),bochs(模拟器,可以理解为虚拟机。笔者使用的是2.1版本),以及floppywriter(笔者自己写的