第182章 操作系统计划(下) (第2/3页)
2位的,所以它还有一个功能――将系统从16为的实模式跳转进入32为的保护模式。(电脑刚启动的时候是16为的,被称为实模式rm)
电脑刚启动的时候,程序的指针ip是指向bios程序的,所以首先执行的是bios系统(这是一个固化在flash芯片中的小程序),它负责监测系统的所有资源,并把状态,如内存大小、硬盘有多少等等,存入内存中指定的位置,在bios的最后,它会检查所有可以启动的磁盘设备,如果找到要启动的磁盘(bios中的启动顺序)的第0磁道,第一个扇区的511和512字节写着0x55和0xaa数据(可启动标志),bios就会将该扇区的512字节内容复制进内存的0x7c00处,并跳转到该处执行。这也就是为什么所有磁盘(包括软盘和硬盘)的第0磁道的第一扇区为启动扇区的原因,如果该扇区出现了物理损坏,那么这个磁盘将永远无法作为启动盘使用。
简单说来,bootloader程序的作用就是充当中间联络人,将操作系统“请”到内存当中去执行。
由于许毅用的编译器是gcc,而gcc并不能直接生成16为的代码,所以许毅只能用汇编语言来编写这个bootloader了,等机器进入32位的保护模式之后,许毅再用c语言来开发其他内核代码。
实际上,有了这个程序,就能够将系统启动了。可以在里面直接通过中断来操作显卡,例如直接往显存地址中移进去一个字母“b”,显示器中就会打印出这个字母,这相当于是一个最为简单的操作系统了,只不过这个操作系统能够完成的功能非常简单,只是在显示器中显示一个字母b而已。但是,这个就已经可以在裸机上成功运行了。要想再复杂一点,就是另外编写内核代码,用一个跳转语句,跳到内核代码的入口地址,这样就可以进入其他操作了。(通常是一个大循环,这样除非是人工退出,不然它就会一直这样运行着)
许毅已经有这样的简单系统的编写经验,所以现在编写起来也是轻车熟路的,一路编写下来,基本上没有遇到什么大的阻碍,只是偶尔有些地方忘记了一些细节,到网络上查了相关资料就搞定了。
只有见到实在的东西才能够调动大家的积极性。
许毅最后不但在里面实现了文件系统,还完成了最基本的图形界面,支持ps/2鼠标, 另外还支持符合indos标准的16为bmp格式,支持标准101键盘,中英点阵字库和800600的16为色显模式,最后,许毅甚至在里面实现了一个简单的推箱子游戏(就是一个十字型的窗口,一个小人在中间四周都是箱子)
许毅在虚拟机中运行着这个小型操作系统,四步完成那个推箱子游戏,心中颇有成就感。
总得来说,这个操作系统已经初具雏形,文件系统、内存管理、中断调用、gdt、idt等等
(本章未完,请点击下一页继续阅读)
『加入书签,方便阅读』