前后花了两年多时间才完成了自己的第一个真正的操作系统设计。这是一个运行在32位的x86处理器上的多进程操作系统。
怎么说呢,时间拖得有点长。中间停顿了一年多的时间,忙别的事情了。最近才把这个事情做完。最后的成果大概是这个样子。
看起来是一个很简单的系统,提供一shell。用户可能在shell中输入命令执行,命令即可以是shell内部自带的命令,也可是磁盘上的命令。功能上看起来是比较单一的,主要原因是没什么应用,所以看起来好像什么都做不了。不过,最后我还是想法增加了一个贪吃蛇的游戏。
用工具统计了一下,整体的代码量大概如下:
做完这个东西,感觉还是蛮有成就感的,也觉得很好玩。记得在读书的时候从图书馆书架上找到了一本Linux 0.11内核代码的分析,不过很遗憾,当时水平限制一直没有看懂。到了工作几年后,从事地也只是嵌入式开发方面的工具,写的也只是嵌入式方面的小型操作系统内核,非常简单的一个东西。Linux 0.11一直不敢去看,怕看不懂。
直到最近两年前,才再去做这块东西,想着可能去研究下。但是直接看Linux 0.11内核源码分析的书还是比较麻烦的,因为搭建调试环境是一件不容易的事情,相关的工具也是比较老的了,所以一直懒得去搭。另外Linux 0.11里的代码有些不是那么好理解,大段的汇编代码,有些C代码用了不直观的写法,所以学起来也费劲。
后面就想:为什么不自己写一个呢?于是就自己琢磨着去写,同时参考了网上的一些其它系统的资料,自己搭建了开发环境。最后终于鼓捣出了一个比较完美的开发环境,就是用vscode+gdb/gdb+qemu。这样的组合,可以使得我在Windows下只需要按F5键就可以对内核进行调试。
在这样的开发环境下,我就能专注地写代码本身。前前后后花了不少时间,终于写出了这个目前具备初步雏形的系统。当然,在开发过程中,遇到的问题点还是很多的。既有来自于硬件的,也有来自于软件的。经过努力,最终这些问题都被克服了。
由于这个系统比较大,很难用文章写明其中的逐步设计过程。因此,接下来的一系列文章中,我会以一个极微缩版的操作系统为基础,介绍编写操作系统中重要的知识点,如CPU的x86保护模式、系统调用等关键性的知识。理解了这些知识之后,就可以操作系统的基本运行原理有基础的了解,为开发自己的操作系统打下基础。
此外,我也将自己开发完整操作系统的过程制作成了课程,发布在了CSDN平台上,如果有兴趣可以关注:https://download.csdn.net/course/detail/37116