OSNEWS中文版重点推荐:业余操作系统开发第一部分:你准备好了吗?

今日来自OSNEWS中文版(osnewscn.mezoka.com)关于这个大会的最新消息,转载请注明出处:

最近一年我一直忙于我 的迷你操作系统项目,并且我经常回头总结我完成了哪些工作,想想一开始最难的事情是什么。结论之一是,从技术角度看,虽然有很多关于操作系统开发的文档可 以参考,但是更重要的应该在项目管理方面。 也就是说,怎样从模糊概念“我想编写一个操作系统”精确到你想达到什么目标,要么在你碰壁时就决定停止前进。这篇系列文章旨在让那些对爱好操作系统开发的 人们回归正确的轨道,同时在脑海中留下这方面的东西。 

你目前正在阅读的的文章目的是帮助你回答一个问题比较简单,但非常重要的问题: 你真的准备开发操作系统?对一些爱好者来说实际上是高要求,浪费时间,同时回报太晚的工作。许多业余操作系统项目最终抵达一条死胡同,慢慢被它的创造者遗 弃,因为他们不能足够理解方向在哪里,并且所写的代码设计不良,也不能有效维护,或者当需要花费大量时间开始小小的malloc() 工作时就不知所措而屈服了。
试图开发业余操作系统的一些糟糕理由

•我将带来下一代计算革命:简单地说:不会。答案长点就是:把自己视为一个小的研究团队。你可以让一些东西更有序,当然这只是在小规模的情况下。没有大规模的支持,你的产品不会大规模分销。是的,你不能为了吸引更多的观众而模拟一个现有的操作系统。

•我想精通一门编程语言,需要一些挑战性的练习:有些人试图通过操作系统开发来学习一种新的编程语言,认为为了真正理解语言需要挑战。这也不是一个好主意。

———-首先,通过操作系统开发之外的世界学习编程比通过操作系统开发学习语言更简单些,你不应该高估自己承受挫折和压力的的能力。

———-其次,由于是新的语言,你会犯更多的错误,而且低层开发比应用程序层的那些错误更难调试。如果是应用程序层,你可以通过小巧的工具,比如GDB和Valgrindthose来帮助你。

——— -第三,因为你不会真正学习到程序语言本身,而只是学习到它的一个子集。 整个标准库不能使用,除了一些像C一样工作的语言之外,许多程序语言的特点是需要一个有时你不能提供的实时支持。举例来说:C + +异常和虚函数表,C# 和Java的垃圾收集器( garbage collectors )和实时指针检查, Pascal Object的动态数组和字符串… 这里和这里都有更多细节。

总之,编写代码是个很难的事情。当你编写代码的时候,受代码所限你并不能真正学会那种编程语言。不要这样做。

• 实现一个新内核复杂的可怕,但有一条更容易的道路。我就将采用Linux源代码,并且调整到直到我得到一个我需要的操作系统, 这不会那么难:可能我是第一个通过展示main.c 文件将你引入Linux源代码的人。你的第一个任务是定位实际的主要函数位置。你的第二个任务是理解每个提到的函数位置,理解它应该做什么。你的第三个任 务是花时间理解这一切。

正如你现在应该明白,离开了丰富的知识,要修改一个现成的,老的代码库真的很难很难。 代码重复使用是一个非常崇高的目标,它有许多优点,但现在你必须明白,这不会让你的生活变得更简单,而是让它变得更坏,因为你不但要了解整个内核开发,而且代码库的所有细节你都要看。

• 我不想对Linux/Windows/Mac OS X中的X详加叙述, 这些完全需要重新做:所有的现代操作系统都有自己的怪异模式,特别是桌面更是体现之一,这是毫无疑问的。另一方面,如果对他们的抱怨相对较小,你真的应该 考虑贡献补丁以修复相关项目,如果这个方法失败就只有重写失败的组件。

•我正在寻找一份令人兴奋的工作:比照. 我将带来下一代计算革命: 除非你在一个操作系统研究室就职,否则你很难从你编写的操作系统获得金钱,因为很长一段时间它没有得到实际应用。(这可能会维持很长一段时间)。
试图开发业余操作系统的一些很好的理由

•我想实验新的操作系统: 你有关于操作系统自己的想法,并且你在现有操作系统市场中找不到?业余操作系统开发可能是一种尝试方法,你可以实现你的想法,看看是否它在实践中也能使用。

• 我现在在语言方面很有经验,并且正在寻找编程挑战,或者想知道我的电脑最低水平怎样:操作系统开发确实在很大程度上都能做到。 ,你将学习怎样在比文字显示设备调试软件更难的情况下调试软件, 学习到在没有标准库或者任何形式的辅助下怎样做,为什么有这么多人对这个X86的架构,它在你的电脑运作良好,因为来自供应商的文档太糟了。

•我一直都在操作系统上工作,知道它的代码库好,但却有许多抱怨:如果处理这些抱怨将意味着重大变化,那种软件不兼容,你可能除了付出别无选择,虽然本文中描述的方式对操作系统开发不是一个完全有效的途径(另一途径当然比从零开始编写一个全新的操作系统更有价值)。

•我想直接打补丁或者并行部分可对操作系统的改变实在太大:可以肯定的一点是在启动一个新项目是最佳选择。如果你认为你也需要这样,那么欢迎来到俱乐部。

• 我正在寻找一个激动人心的业余爱好:当然,这取决于你怎样定义“激动”,但如果你准备充分,操作系统开发可以说是地球上最令人兴奋的业余爱好之一 。这有点类似于养育子女或种植植物: 当然,这很慢,有时它触及你的神经,让你感觉非常吃力不讨好。但这会让成功的感觉更好。另外,自己可以完全控制电脑的行为,拥有对硬件的绝对权力是极其有 乐趣的。
那么,你准备好了吗?

除了问题阶段,为了在这条路上获得成功,这里是一些你必须知道或者快速学习的事情:

•通用计算机科学:你必须熟悉并能流利地处理二进制和十六进制数字,布尔逻辑,数据结构(数组,连接,哈希表等),和排序算法。

• 计算机系统结构:你应该知道的台式电脑全部内部组织。 词句 ALU(算术逻辑单元),中断,内存和PCI总线和DMA(直接内存访问)对你应该不会神秘。更多自动化机制像TLB(旁路转换缓冲多级缓存,或分支预测 的知识长远来说是非常宝贵的资产,一旦你试图为性能而优化代码。

•编译器和可执行文件的内部:你必须大致知道在预处理,编译,和连接二进制生成步骤中间要发生什么,并且能找到需要在它的说明中控制的工具链。你还应该了解链接器脚本和可执行文件的内部结构。

• 汇编语言:你必须知道汇编语言是什么,它怎样工作,你必须能够简单地编写汇编程序(玩玩堆栈和寄存器,汇编语言:你必须知道汇编语言是什么,它怎样工作, 你必须能够简单地编写汇编程序(玩玩堆栈和寄存器,加减数,如果实现类似分支)。你可以用其他编程语言编写操作系统的大部分,但有时你需要完成一些代码片 段组合工作。

•C或C++:即使您打算使用另一种编程语言来编写的操作系统,但是为了理解网络上的代码你需要了解C或者C++,因为你会看到操作系统源代码或者其它操作系统开发教程。

• 您的系统编程语言:无论你计划用C#,Java,汇编,BASIC,C语言,C++,Pascal,Erlang或REBOL编写你的操作系统,你应该非 常熟悉它。 其实,你甚至应该访问它的内部结构描述。比如,你应该知道怎样从汇编代码中调用一个用你选择的语言编写的一个函数,你的语言需要什么类型的实时支持,以及 怎样实现它。

(以上清单来自OSdev wiki,可以根据个人经验调整。 )

这部分向导“你准备好了吗?”结束了。如果你完成了这一点,恭喜你!你应该有正确的心态和足够的知识,以开始业余操作系统开发冒险。下一篇文章将解释如何为你的操作系统项目设定的目标和期望,如果你真的想善终这真的是很重要的一步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值