最近阅读了一大堆介绍操作系统的书,终于也小有所成,感觉写操作系统是件很简单的事
写操作系统,就不得不从引导开始
电脑在按下开关之后经过一连串的Reset...CPU就会运行BIOS(这个就不多说了),在POST(加电自检,Power On Self Test)后,BIOS就会按CMOS里的引导设备顺序为序(eg:硬盘,软盘,USB Device,LAN...)开始读每个设备的引导扇区(0面0磁道1扇区,简单来说就是第一扇区),假如找到一个以(0x)55 AA结尾,且大小为512B(字节)的执行码,就会将它当成MBR(Master Boot Record,主引导记录)加载到内存的0000:7c00处,并跳转到0000:7c00处开始执行,最后将控制权交给它,这时候操作系统将开始运行
所以一般的操作系统一般都会有Boot.s||Boot.asm一个汇编码文件(Linux为Boot.s,GAS(GNU Assembler,GNU汇编器)编译)这就是MBR,一般来说会编译成Bin(Binary,二进制文件),也有编译成Com(Command,区别于www.XXXX.com,事实上后者是HTML)的
由于是加载到0000:7c00,所以Boot.asm第一句一般为
ORG 7c00h
或
ORG 0x7c00
(h和0x都表示16进制)它告诉编译器加载到7c00处
过来
Mov ax,cs
Mov ds,ax
初始一下
过来就要进入保护模式了(现如今的操作系统都用保护模式了,这应该是启动时完成的第一个工作,为了增强性能,详情自行Google)
首先是GDT(全局描述符表,Global Descriptor Table)