在我看来,程序员(尤其是 Comp. Sci. grads)试图解决的最常见的过于雄心勃勃的项目是构建自己的操作系统。(尝试创建自己的编程语言 + 编译器可能更常见,但远没有那么雄心勃勃。)
对于那些(像我一样)愚蠢到尝试尝试的人:除了庞大的规模之外,您在尝试从头开始创建自己的操作系统时遇到的最大问题或意外障碍是什么?
编辑:一个很棒的操作系统问题:操作系统开发入门有哪些资源?
在我看来,程序员(尤其是 Comp. Sci. grads)试图解决的最常见的过于雄心勃勃的项目是构建自己的操作系统。(尝试创建自己的编程语言 + 编译器可能更常见,但远没有那么雄心勃勃。)
对于那些(像我一样)愚蠢到尝试尝试的人:除了庞大的规模之外,您在尝试从头开始创建自己的操作系统时遇到的最大问题或意外障碍是什么?
编辑:一个很棒的操作系统问题:操作系统开发入门有哪些资源?
能够从实际经验中说话(AROS,最大的障碍是:
所以如果你打算编写自己的操作系统,你应该考虑这个:
去过也做过。至少对我来说,最大的障碍是设备驱动程序。对操作系统内核进行编码是“有趣的部分”,但是如果不能进行 I/O(至少是磁盘、键盘、视频、网络),它就毫无用处。今天,如果我再次有时间和意愿参与这样的项目,我可能会瞄准 Xen VM 而不是原始硬件——如果没有别的原因,那么因为它隐藏了 x86 和硬件的许多丑陋特质。Xen 提供了一个很好的统一的、独立于硬件的 I/O 设备视图,并且仍然给您足够的自由来玩“有趣的”操作系统部分(mm、进程管理、同步、中断等)。
最大的路障?我认为这是当您发现规范中有多少差距以及各种实现中有多少错误时。
说真的,即使您拥有所有组件的所有规格(即 USB、DMA、IRQ、您的 CPU ......),您也会发现 a) 有些东西没有指定(即如果您发送某个序列到您的 USB 设备)和 b)有些东西只是被窃听了,您需要解决它们(即英特尔和 AMD 发布的 CPU 勘误表中详细说明的 CPU 中的数十个错误)
我不知道现代操作系统中有多少错误解决方法,但由于 Linux 和 *BSD 是开源的,它们的驱动程序会告诉你很多,即这个. 并期望得到像这样的一些严重的负面副作用。
所以,是的,如果您尝试编写操作系统,请准备好诅咒硬件制造商并开始对现代 PC 的质量失去信心 :-)
我认为现在很多本来是优秀程序员的人都不知道他们对计算机的工作原理知之甚少。您需要认真掌握基础知识才能让机器从磁盘引导您的操作系统,而如今这种类型的知识传播得非常少。现在你也找不到关于它的书架。
有趣的是,几周前我问了一个关于 SO 的问题,其中涉及 10 到 15 年前严肃 PC 编程的基础知识类型,一位评论者说他们认为这是一个硬件问题。
我根本没有敲他们,但我认为这是对技能如何变化的有趣反思。
我认为到目前为止,最大的障碍是用户——在你构建了大部分工作系统之前,你不太可能拥有任何用户。没有用户,您就没有功能请求、错误报告,因此动力有限。但是,即使您确实构建了一个可以工作的操作系统,也不能保证您会获得用户群,除非您能找到一个吸引人们的钩子 - 是什么让您的操作系统与众不同,让人们愿意尝试测试版,坚持下去当几乎没有任何工作应用程序移植到它时,等等。
您可能有兴趣查看SkyOS - 它主要由单个开发人员(现在是一个小型开发团队)开发。维基百科的文章也有很好的总结。我认为这是一个很好的例子,说明如何可以承担如此艰巨的任务并取得相当好的结果。他们用 SkyOS 做了一些有趣的事情,看到这在很大程度上来自一个人在业余时间的努力,这特别酷。
编写操作系统会遇到与其他大型软件项目相同的问题。
它缺乏明确定义的目标,并且由于缺乏经验而存在时间表/估计问题。
程序员首先创建一个“hello world”类型的操作系统也是有用的,这样他/她就可以学习操作系统开发背后的概念,然后可以专注于开发操作系统(而不是学习操作系统概念)。