从头编写一个操作系统有多难

这是一种不可能完成的任务。

一个人不能完成,一个公司也不能完成。

首先,你的操作系统是准备模仿Linux还是Windows?先模仿再超越是我们惯用的方法。现代人构建操作系统的方法,一般是在Linux的内核上,进行各种风骚的操作。增加图形界面,增加新的硬件驱动。连Google这样大的公司,在推出Android的时候,也没有重新编写一个操作系统,而是在Linux的基础上进行改装。

从系统的核心说起,你的操作系统准备支持几种CPU?Intel的和AMD的都要支持吗?Arm处理器是否也要支持?还是准备制造自己的CPU?那更是一个浩大无比的工程。我们知道,现在的处理器是从以前8位的进化到16位,进化到32位,再进化到64位。那么,你的系统是否还要兼容以前32位的程序?或者说,干脆不兼容世界上已有的任何程序?那么这样的系统还有什么用处呢?

除非你准备把所有的硬件都重新设计一遍,否则你的操作系统就必然要模仿Linux,或者在linux的基础上开发。或者你有办法弄到Windows的源代码,在windows的基础上开发。看看Windows走过的路,你就会知道开发操作系统这条路是多么的艰辛:先有了Dos,然后是Win95,Win98,Win200,WinXP...Win8,Win10。人们一直在抱怨Windows的不稳定,有Bug,但人们一直在用。所以,你开发新的操作系统,必须有足够多的人来使用,帮你反馈系统中有什么Bug,然后再修补,再提高。希望一下子构建一个操作系统,能够媲美WinXP都不是一件简单的事情。要知道,XP已经是近20年前的系统了。你要在很短的时间内把别人20年走过的路重新走一遍,这是多么的不现实。

操作系统要干些什么呢?首先,要和键盘鼠标打交道。那么,你们团队里就要有人了解键盘和鼠标如何驱动。单单驱动键盘都不是一件容易的事情,按键发出的信息如何送到系统内,系统对此作出什么反应?鼠标按下的时候,看似是单击,但可能已经发出了成百上千次点击信号,你的系统怎样分辨出这是一次单击还是拖动?如果你的系统还要在平板电脑和手机上使用,那么,用户点击触摸屏的操作是否也要支持?你的团队里还要有人懂得触摸屏如何驱动。

然后要和显示器打交道。现代的操作系统不可能是单纯的字符界面。那么你要在显示器上显示图形。你的团队中要有人精通显示器如何驱动。如果用显卡,显卡的驱动由厂商提供,那么问题来了:你的操作系统还没做出来,厂商怎么会知道如何为你的系统写驱动呢?所以最早的驱动,必然是你的团队的人自己编写。

CPU要访问内存的数据。那么你的内存怎样管理?不同的程序都在同时执行,怎样保证各自使用各自的内存?有些程序要使用系统内的同一个组件,那么你的系统怎样分辨出谁在使用?你是否要使用线程、进程的概念?是否要使用c语言来编写底层的系统?如果还是用c语言,那么c语言所有的陷阱你都要遇到,不止一次,而是会千百次、上万次的遇到。程序依然在该溢出的时候溢出,毫不客气。资源依然回在该锁死的时候锁死,毫不手软。也就是说,前人经历的所有坑,你都要经历一遍,再把它们依次填平。

数据要存储在硬盘或者U盘上,那么,你的团队里要有人懂得如何编写硬盘和U盘的管理程序。硬盘的扇区划分是否要分的和以往有不同?文件怎样存储在硬盘上,才能条理整齐,同时读写高效?是否要支持权限管理?是否要加密和解密?是否要保护系统文件?要知道,Linux系统下的“rm -rf /* ”删库跑路已经不是一个说说而已的笑话,而是真实发生过很多次的事情。假如你的系统模仿Linux,是否连这个最脆弱的特征也要模仿?外部存储器的容量越来越大,从最早的1.44M软盘到现在几个T的硬盘,其间经历了些什么?你的团队全部要经历一遍吗?从最早的MBR到现在的gpt,经历的不是简单的磁盘分区表变化而已。多少位的机器,能够访问多大的存储,不是人们简单的设定,也并非当时的人没有能力编写大容量硬盘访问程序的能力。历史必须完整的重演一遍,你才能知道其中的技术含量。

不光这些,单单识别一下外设都不是一件容易的事情:你插一个东西到USB接口上,现在一个简单的任务是:识别这是个啥?可能是键盘,鼠标,U盘,手写笔,移动硬盘,打印机,手机...你的操作系统要能识别出来吧?然后找到驱动,让设备正常运行起来。

网络接口,用户界面,硬件驱动,操作系统的每一件事情都是相当艰深的课题......

你的系统要使用汉字吗?那么GB2312,GBK,GB18030都要能按照次序兼容吧?UTF8是否也要兼容?这里面的坑有多深?你Google/百度一下“乱码”,就可以发现数以万计的记录。这些记录都是别人经历过坑。

如果你在Linux的基础上开发,请大胆的说出来,像Google公司那样,不要害羞,这不丢脸。请不要像当年的汉芯一样,拿别人的东西随便mark一下,就说是自己的东西,这样才丢了全国人民的脸。

从头编写一个操作系统是很难很难的事情。单靠一两家公司是不可能实现的。要想成功,只有一种方法可行:拿出当年制造原子弹的决心和勇气,举全国人民之力,召集全世界优秀的人才,先制造出自己的芯片,然后编写自己的系统,软件硬件一起搞,从硬件的层面就支持汉字,让人们用起来,在反馈中改进和提高。

你可能感兴趣的:(从头编写一个操作系统有多难)