使用的代码包为cosmos14395.zip,如下把COSMOS里程碑1简称为COSMOS MS1或 MS1 COSMOS
申请:因为本篇内容涉及的技术的东西太多,小弟水平有限,若有思想认识上的错误,欢迎你们指正。
对于IBM-PC兼容机的硬件启动流程我目前理解是这样的:通电->BIOS初始化与自检->CPU初始化->加载硬盘的0磁道0柱面1扇区的内容进内存并开始执行这一部分的内容。到此,硬件的过程—注意是硬件--就走完了,剩下的就都交给0磁道0柱面1扇区的程序来执行,这里面的东西就是咱们程序员要作的东西了。
这里若是没有操做系统的话,那么从0磁道0柱面1扇区开始执行的程序就是咱们本身写的程序,但这样一次只能执行一个,很浪费硬件资源,若是要换别的程序的话还得从新启动一次硬件,因此咱们但愿这个首先执行的程序能够一直运行,而后再向这个程序发出命令,让这个程序来执行咱们想要执行的程序,这样就能够不用重启硬件就能运行多个程序了,慢慢地这个咱们对其发出命令让其运行别的程序的程序就变成了咱们所谓的操做系统了。
随着操做系统的发展,现代操做系统的通常都须要作如下工做:
1. 进程管理
2. 内存管理
3. IO管理
4. 文件系统管理
(以上为参考《操做系统的设计与实现》一书)
对于咱们此次要分析的COSMOS MS1,那么他实现了以上哪些功能呢,严格来讲都没实现(第一个里程碑版本嘛,能运行就能够了),要说的话能够说实现了一些IO管理上的功能,如向显示器上输出字符和相应键盘输入。下面经过一副图来讲一下COSMOS
MS1操做系统(即PC机软件部分)的启动过程:linux
再说明一下,本版本使用VS2010编译以后彷佛没法正常运行,这里是我我的的理解:里程碑1的程序仍是VS2008的项目,若是使用VS2010的朋友在打开项目以后会提示升级,升级完后编译会出现部分没法编译经过的状况,是由于升级以后部分项目升级成使用.net 4.0的框架,而部分项目仍是用的.net 2.0或3.5的framework,当使用.net 2.0或.net 3.5的项目引用了.net 4.0项目的程序集时,是没法经过编译的,这时尽管把这些项目该为使用.net 4.0的framework后能够正常启动进到编译界面,可是编译操做系统的过程当中会出现“未将引用设置到对象”错误,缘由不明………..
好了,了解了流程就直接上代码,跟着代码逐行进行说明,找到Program文件,定位到如下代码git
主要分析一下Kernel.Boot.Default()这个函数干了什么事,前面一大堆理论中关于CPU,内存,IO初始化这些的操做都是在这里面完成的程序员
再看一下Cosmos.Hardware.PC.Global.Init()里面作了什么编程
这样就算是基本完成了,固然,对于不一样的操做系统,初始化的流程可能会不同,这得根据实际的硬件状况来决定。app
以上的初始化函数中大量调用了这个操做:void Write8(UInt16 aPort, byte aData)框架
这个是直接往端口中写入数据,根据IBM-PC兼容机的端口说明,对不一样的端口进行初始化其实就是往相应的端口中写入不一样的数据(但一般都是写入数据0)dom
这里完了以后咱们再跳回到上一层函数,看看Keyboard.Initialize()里面作了什么ide
好了,硬件的设置(初始化)总算完了,让咱们回到最上层的函数看看接下来的是什么。函数
在这以后操做系统的任务就算是基本完成了,剩下的就应该是程序的调度运行的工做了,从源代码中能够看到COSMOS是直接运行了一个猜数的程序,咱们看一下运行截图:工具
好了,COSMOS MS1的启动流程和运行到这里就算是结束了。可是还有几个问题没有解开,好比:System.Console.WriteLine(string)这个函数。对于在.net framework环境下编程的朋友可能尚未意识到,问题在什么地方。
首先System.Console.WriteLine是向显示器上显示字符,可是在咱们刚才的代码中没有看到与显示器设备初始化相关的代码,在.net 环境下之因此可以向显示器上输出字符是由于.net framework在程序启动以前已经进行了这部份相关代码的加载,当程序中遇到System.Console.WriteLine相似的函数调用时,实际上是调用的.net framework中的代码来实现的,这就是为何咱们在编写.net 程序的时候须要引入相应的dll,这些加载代码就在这些dll里面。
可是COSMOS是独立于.net framework来运行的,也就是说COSMOS在运行时是没加载过任何.net framework中的dll,这部分功能的实现COSMOS是经过编写本身的程序库(Plugs)来完成的,这个部分上一篇文章介绍IL2CPU编译器时小小地涉及了一下,更多的内容将在下一遍文章中说明,呵呵(诶呀!谁扔过来的鸡蛋!)
欢迎你们实践学习交流,任何意见和错误都欢迎指出,一块儿学习,共同进步 J
广告时间:欢迎光临小弟的淘宝话费充值小店捧场,呵呵
参考资料:
Intel Vol 3A System Programming Guide Part 1