MSTR10总结

      MSTR是《自己动手写嵌入式操作系统》的源码,又名"Hello China"。MSTR包括BootSect.bin、RealInit.bin、MiniKer.bin和Master.bin四部分。MSTR的加载设备为软盘,但是没有设计软盘格式,镜像的加载都是直接从固定扇区中加载的。

      BootSect.bin为512字节,固化在软盘的启动扇区。它首先将自身从0x07c0移动到0x9f00,然后跳转到新映像的相关位置开始执行。先显示相关信息,然后将RealInit.bin、MiniKer.bin和Master.bin三部分载入内存。这三部分保存在软盘中,从第三扇区开始(第二扇区保留),将被原样加载到其实位置为0x1000的内存区域。加载完毕后跳转到RealInit.bin处开始执行。

      RealInit.bin显示相关信息后,开始初始化CRT、KEYBOARD、DMA、8259、CLOCK和系统参数。然后开启20号地址线,装载gdt,显示相关信息,关中断,进入保护模式。然后跳转到MiniKer.bin处开始执行。目前对硬件的初始化保留未用,默认的gdt有两个——4GB的平坦代码段和4GB的平坦数据段。

      Miniker.bin首先将自身和Master.bin从0x2000搬运到0x100000处(由于此时20号地址线已开,可以访问到0x100000以上的内存了)。然后装载新的gdt,它的所有段都是平坦模式的,包括代码段、数据段、堆栈段、附加段和视频段。接着初始化相关的段寄存器,填充相关的idt并装载,然后初始化8259a,开中断,最后跳转到Master.bin处开始执行。Miniker.bin中包含了一个显示驱动程序和一个键盘驱动程序,供Master.bin直接调用。

      MiniKer.bin由VC++生成的DLL文件处理后得到,它首先跳转到__init函数,在其内部首先关中断,清屏,设置键盘驱动回调函数,然后创建内核对象并初始化,如lpVirtualMemoryMgr、KernelThreadManager、System、PageFrameManager、MemoryManager、IOManager和DeviceManager。接着创建空闲线程和Shell线程,然后初始化内核对象DeviceInputManager,设置时钟中断回调函数,开启中断,进入死循环。此后Shell线程已经开始工作,由它负责和用户交互。

      MSTR建立了完善的多线程工作环境、虚拟内存管理机制、中断处理机制和设备管理机制。实现了线程的同步与互斥,本地对管理;实现了总线驱动架构(目前支持PCI和ISA总线)和设备驱动架构,使得硬件设备的扩充及驱动程序的编写都十分方便;封装了若干系统调用API,为应用程序的开发提供了方便。然而MSTR没有实现进程,没有提供任何方式的存储保护;MSTR的镜像固化在软盘的指定扇区中,阻碍了自身的扩展。

你可能感兴趣的:(Linux)