为什么EOS操作系统从软盘启动时要使用boot.bin和loader.bin这两个程序?
在IDE环境启动执行EOS操作系统时,会将boot.bin、loader.bin和kernel.dll三个二进制文件写入软盘镜像文件中,然后让虚拟机来执行软盘中的EOS操作系统。
仅使用其中一个是不能运行的。
Boot程序的功能是:在Boot程序执行的过程中,CPU始终处于实模式状态。Boot程序利用BIOS提供的int 0x13中断服务程序读取软盘FAT12文件系统的根目录,在根目录中搜寻loader.bin文件。如果Boot程序找到了loader.bin文件,会继续利用int 0x13功能将整个loader.bin文件读入从地址0x1000起始的物理内存,最后跳转到0x1000处开始执行 Loader程序,Boot程序的使命到此结束。
Loader程序的功能是:Loader程序的任务和Boot程序很相似,同样是将其它的程序加载到物理内存中,这次加载的是EOS内核。接下来Loader程序从软盘的根目录中将内核文件kernel.dll载入物理内存0x10000处。然后Loader程序会启动分页机制,将物理内存最开始的约1/8(最小4M)映射到虚拟地址0x80000000处,这样kernel.dll就位于虚拟内存0x80010000处了,这正好是kernel.dll的运行基址。在Loader程序对内核文件进行节对齐操作后,Loader程序就可以跳转到kernel.dll的入口点继续执行,从而将控制权交给内核,Loader程序的使命到此结束。
如果将loader.bin的功能移动到boot.bin文件中,则boot.bin文件的大小仍然能保持小于512字节。 Boot程序的大小被限制在一个软盘扇区(512字节)之内,所以必须非常短小,除了加载并执行Loader程序之外不做任何其它事情。
答:在IDE环境启动执行EOS操作系统时,会将boot.bin、loader.bin和kernel.dll三个二进制文件写入软盘镜像文件中,然后让虚拟机来执行软盘中的EOS操作系统。
仅使用其中一个是不能运行的。
Boot程序的功能是:在Boot程序执行的过程中,CPU始终处于实模式状态。会继续利用int 0x13功能将整个loader.bin文件读入从地址0x1000起始的物理内存,最后跳转到0x1000处开始执行 Loader程序,Boot程序的使命到此结束。
Loader程序的功能是:Loader程序的任务和Boot程序很相似,同样是将其它的程序加载到物理内存中,这次加载的是EOS内核。然后Loader程序会启动分页机制,将物理内存最开始的约1/8(最小4M)映射到虚拟地址0x80000000处,这样kernel.dll就位于虚拟内存0x80010000处了,这正好是kernel.dll的运行基址。
如果将loader.bin的功能移动到boot.bin文件中,则boot.bin文件的大小仍然能保持小于512字节。 Boot程序的大小被限制在一个软盘扇区(512字节)之内,所以必须非常短小,除了加载并执行Loader程序之外不做任何其它事情。