操作系统从头开始

时间:2010-09-04 18:35:43

标签: python operating-system

我被要求在我的大学为我的操作系统课程选择一个项目。我想到了在Python中从头开始创建操作系统的想法。

我有一些限制:

  1. 我只有3个月。
  2. 我想用Python做。
  3. 我每周可以说20-30个小时。
  4. 我想知道,这个想法有多可行?就像我可以在多大程度上建造同样的东西。我会很高兴,如果我能运行一个基本版本(运行一些非常基本的应用程序的东西。)是否可能有给定的限制?

    是否有一本书可以帮助我像指南一样? (不需要用于python,我只需要一个指南来告诉我应该如何制作操作系统)

    如果这个想法不可行,有人能告诉我,我需要多少才能缩小我的想法?

    非常感谢任何帮助!

10 个答案:

答案 0 :(得分:16)

将此缩小很多。我建议你看看你想要做的一小部分操作系统,也许是并行处理。没有可行的方法可以在500小时内编写整个操作系统,只需5000小时。真正的问题是本科课程还是研究生课程?答案将极大地反映出需要通过的内容。

<强> 添加
抓住一本关于您感兴趣的操作系统主题的书,并专心关注这个主题3个月,您可能只是生产出一些好的东西。操作系统看起来似乎没有在外面做太多,但想到这一点,Windows有大约5000万行代码。

答案 1 :(得分:9)

您的教授是否需要项目中的“低级”组件?例如,任何涉及硬件或指令架构的东西。如果是这样,您的教授将不允许您在Py​​thon中执行该项目。该项目必须用C语言和汇编语言编写。你总是会努力修改Linux内核。

然而,现在操作系统不再局限于低级别方面。虚拟化,数据库,并行化都建立在操作系统之上。如果您的教授是“老学校”,那么他/她可能不会认为这些新主题是操作系统的一部分。因此,您可能需要向您的教授提供一些示例创意并寻求澄清。

有人建议,是否进入低级别,完全取决于教授的教育目标。

  1. 教授基本的并发编程结构,例如事件,信号量和互斥。这可以通过编写一些多线程应用程序来教授。作为OS类的目标,它可以说太容易了。然而,这实际上是你从课堂上获得的最“有市场”的技能。
    • 此主题的变体是教授如何“使用”特定风格的OS API。
  2. 教授如何编写有效使用操作系统的应用程序。这可能需要您在“模拟OS项目”中实现一些入门级OS相关算法(例如,在Java或Python中,也可以在C ++中)。每个方面都可以在单独的项目/模拟器中进行研究,而无需使用完整的操作系统。
    • 例如,要教授如何有效地使用文件缓存,有必要让学生使用简单的算法来玩“玩具”文件缓存。
  3. 教授操作系统的硬件方面(包括它的丑陋),即它如何与指令集架构和硬件I / O交互。这通常是通过“嵌入式系统”完成的,带有一个小型原型板。
  4. 教授现代操作系统中使用的真实算法。这将需要大量的纸张读取,以及在真正的Linux内核中实现非平凡的算法。这个水平适合研究生学习。
  5. 一个好的项目将包括以下一个或多个:

    • 输入/输出
    • 存储
      • 决定缓存/预测要预加载的内容
    • 本地或远程启动/管理/记录任务(进程,线程或Python函数)
    • 管理资源
      • 要求每个流程估计将使用多少峰值内存,并在整个执行过程中定期报告“进度”百分比,然后可以将它们一起用于估算资源使用情况
    • 通信
    • 并发

    不直接与硬件交互但仍然是好项目的项目将是:

    1. 如果您的项目提供操作系统的抽象,那么将在您的项目“内部”运行的应用程序
      • 换句话说,“应用程序”完全依赖于您的“操作系统项目”来实现其I / O,存储,任务管理,资源和通信需求
    2. 您的项目可以很好地(高效,可衡量地)使用真实操作系统(Windows,Linux等)
    3. 然后,无论使用何种语言,它都是一个很好的操作系统项目。

      我建议您实现自己的memcached,map-reduce或简单的版本控制系统作为好的项目示例。

      已编辑:已删除ranting

答案 2 :(得分:2)

我不认为您可以用Python编写操作系统。你需要本机代码来至少在启动时加载一个解释器,更不用说硬件通信,驱动程序等了,在裸机上运行时,鉴于当前的Python解释器,所有这些都几乎是不可能完成的。我也在思考你是否意识到你必须将一个给定的Python解释器移植到没有底层操作系统的情况下进行编译和运行,而这只会让你忙碌一段时间。

你雄心勃勃很好,但老实说,我认为你甚至无法完成基本操作系统,更不用说“一些非常基本的应用程序正在运行”。

答案 3 :(得分:1)

你可能不能在一个学期内完成这个任务。

如果你想在类似的东西上挥杆,请阅读由Per Brinch Hansen和他在加州理工学院的学生建造的Solo操作系统。他们在Concurrent Pascal中编写了全部内容,这是由Brinch Hansen开发的Pascal衍生物。

Solo的来源可以在Brinch Hansen的"Architecture of Concurrent Programs"中找到。 (链接到整本书的PDF)你的教授应该有一份副本。你的大学图书馆应该有一份副本。有时,副本会出现在亚马逊上。

或者你可以做一个版本的Brinch Hansen的RC4000 Nucleus。 (谷歌是你的朋友。)

答案 4 :(得分:1)

您可以使用十多年前的概念,在您指定的时间范围内编写一个小型嵌入式系统操作系统。与小型嵌入式操作系统相比,许多较新的操作系统需要更复杂的调度和内存管理启发式算法;设计一个完整的现代操作系统不是一个实用的单人项目,但人们可能能够用它的某个子系统做一些有趣的事情。我个人认为闪存文件系统还有一些改进空间,但我不知道你的教授会怎么想。你的教授真的在寻找什么?

答案 5 :(得分:1)

在我们的大学,我们有操作系统课程,我们也应该在linux上开发一些东西。不是整个OS。我们为linux做了自己的调度策略和文件系统。但是这将在C中完成,因为linux在C中。

答案 6 :(得分:0)

我知道......这个想法非常有气泡。即使我有这种经历(一段时间:p)。

但是当你深入研究它时,你才意识到你刚刚说了多么大的话。我不花钱说你不能制作操作系统。因为我相信保持无法实现的梦想。这样做可能有助于您更快地学习。

无论如何,PYTHON?呐。去找C.

  • 阅读(原则):系统流程 &安培;服务。
  • 写(代码):练习&amp;习惯了 编码。使用语言作为工具,而不是 一项技能。
  • 学习(从错误中):这是 最好的事。如果你有一个操作系统 你学习frm dem。

但我建议不要浪费你的3个月,谷歌搜索如何在3个月内创建一个操作系统&amp;宁 还做一些事情,比如说你正在尝试的工作是小菜一碟。 例如:http://linuxologist.com/1-general/create-your-own-linux-distro/ 即使这个标题也是误导和令人沮丧的。

所有这一切。祝你好运:)

答案 7 :(得分:0)

了解其他人在操作系统领域所做的工作。除了上面提到的书籍之外,下载vanilla linux内核源码并开始探索它:http://www.kernel.org/。 Robert Love关于Linux内核Linux内核开发的书将为您提供内核所涉及的所有部分的精彩概述。

一个重要的亮点是O(1)调度程序如何在新内核中工作,因为调度只是编写操作系统时发生的众多主要问题之一。

答案 8 :(得分:0)

使用Python 开发操作系统是可能的。但是,您可能希望选择C或汇编,因为这些语言开发了巨大的代码库。

答案 9 :(得分:0)

大声笑,它让我想起了这个

http://www.getacoder.com/projects/programming_c_87390.html

制作像Windows,Mac或Linux这样的完整操作系统与制作MMORPG一样困难。

也许您应该制作最简单的操作系统,让您成功启动并运行一些简单的命令行脚本,如DOS工作方式,但在Python中运行Python。