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