从零开始创建操作系统
我在大学的操作系统课程中被要求选择一个项目。我脑海中冒出了一个想法,就是用Python从零开始做一个操作系统。
不过我有一些限制:
- 我只有3个月的时间。
- 我想用Python来做。
- 我每周能投入大约20到30个小时。
我想知道,这个想法可行吗?我能做到什么程度呢?如果能让一个基本版本运行起来(比如能跑几个非常简单的应用),我会非常开心。考虑到这些限制,这个目标能实现吗?
有没有什么书可以作为我的指导?(不一定要是关于Python的,我只需要一本能告诉我怎么做操作系统的指南)
如果这个想法不可行,能不能告诉我应该怎么缩小我的计划?
任何帮助都非常感谢!
11 个回答
我不明白你怎么会觉得可以用Python来写操作系统。你至少需要用原生代码来加载一个解释器,这个过程是在开机时进行的,更不用说和硬件的沟通、驱动程序等等了。现在的Python解释器在没有操作系统的机器上运行几乎是不可能的。我还在想,你是否意识到你需要把某个Python解释器移植过来,让它能在没有操作系统的情况下编译和运行,这光是这件事就会让你忙上一段时间。
你有这样的雄心是好事,但老实说,我觉得你连一个基本的操作系统都完成不了,更别提“运行一些非常基础的应用程序”了。
你的教授是否要求在项目中包含一个“底层”的部分?比如说,涉及到硬件或者指令架构的内容。如果是这样的话,你的教授可能不允许你用Python来做这个项目。这个项目必须用C语言和汇编语言来写。而且你很可能会在修改Linux内核上花很多时间。
不过,现在的操作系统已经不仅仅局限于底层的东西了。虚拟化、数据库、并行处理等都是建立在操作系统之上的。如果你的教授比较“老派”,那么他/她可能不会把这些新话题视为操作系统的一部分。所以,你可能需要带一些示例想法去找教授,寻求进一步的说明。
是否要涉及底层内容,正如一些人所建议的,完全取决于教授的教学目标。
- 教授基本的并发编程构造,比如事件、信号量和互斥锁。这可以通过编写一些多线程应用来实现。虽然这可能被认为是操作系统课程的一个目标太简单,但实际上,这也是你从课程中学到的最“有市场”的技能。
- 这个主题的一个变体是教授如何“使用”特定类型的操作系统API。
- 教授如何编写高效利用操作系统的应用。这可能需要你在一个“模拟操作系统项目”中实现一些入门级的操作系统相关算法(比如用Java或Python,也可以用C++)。每个方面都可以在不同的项目/模拟器中研究,而不需要使用完整的操作系统。
- 例如,为了教授如何高效使用文件缓存,学生需要通过简单的算法来玩弄一个“玩具”文件缓存。
- 教授操作系统的硬件方面(包括它的复杂性),也就是它如何与指令集架构和硬件输入输出进行交互。这通常通过“嵌入式系统”来完成,使用一个小型原型板。
- 教授现代操作系统中使用的真实算法。这需要大量的文献阅读,以及在真实的Linux内核中实现一个非平凡的算法。这个层次适合研究生学习。
一个好的项目应该包含以下一个或多个方面:
- 输入/输出
- 存储
- 决定缓存什么/预测预加载什么
- 启动/管理/记录任务(进程、线程或Python函数),本地或远程
- 管理资源
- 要求每个进程估算其峰值内存使用量,并在执行过程中定期报告“进度”百分比,这样可以一起用来估算资源使用情况。
- 通信
- 并发
一个不直接与硬件交互,但仍然是个好项目的例子是:
- 如果你的项目为将在“内部”运行的应用提供了操作系统的抽象
- 换句话说,这些“应用”完全依赖于你的“操作系统项目”来满足它们的输入输出、存储、任务管理和资源、通信需求。
- 你的项目有效(高效、可测量)地利用了真实的操作系统(Windows、Linux等)。
那么这将是一个好的操作系统项目,无论使用什么语言。
我建议你实现自己的memcached、map-reduce或一个简单的版本控制系统作为好的项目示例。
编辑:删除了无关的内容
把这个目标缩小很多。我建议你先从操作系统中挑一个非常小的部分来做,比如并行处理。你不可能在500小时内写出一个完整的操作系统,更别提5000小时了。真正的问题是,这个项目是本科课程的要求还是研究生课程的要求?这个答案会大大影响你需要做什么才能通过。
补充一下
找一本关于你感兴趣的操作系统主题的书,专心研究三个月,你可能会做出一些不错的东西。操作系统表面上看起来好像没什么,但想想看,Windows大约有5000万行代码呢。