<p>你的教授在这个项目中需要一个“低级”的部分吗?例如,处理硬件或指令体系结构的任何东西。如果是的话,你的教授不会允许你用Python做这个项目。项目必须用C和汇编语言编写。您将一直致力于修改Linux内核。</p>
<p>然而,现在的操作系统已经不再局限于底层。虚拟化、数据库、并行化都是建立在操作系统之上的。如果您的教授是“老派”,那么他/她可能不认为这些新主题是操作系统的一部分。所以,你可能需要给你的教授带来一些样本想法,并寻求澄清。</p>
<p>是否像一些人建议的那样进入低水平,完全取决于教授的教育目标。</p>
<ol>
<li>教授基本的并发编程结构,如事件、信号量和互斥锁。这可以通过编写一些多线程应用程序来实现。对于操作系统类来说,这可能太简单了。尽管如此,这实际上是你从课堂上获得的最“有市场”的技能。
<ul>
<li>这个主题的一个变体是教如何“使用”一种特殊风格的OS-API。</li>
</ul></li>
<li>教授如何编写有效使用操作系统的应用程序。这可能需要你在“模拟OS项目”(比如java或Python,也可以C++)中实现一些入门级OS相关算法。每个方面都可以在不同的项目/模拟器中进行研究,而不需要使用成熟的操作系统。
<ul>
<li>例如,为了教学生如何有效地使用文件缓存,有必要使用简单的算法让学生玩“玩具”文件缓存。</li>
</ul></li>
<li>讲授操作系统的硬件方面(包括它的丑陋),即它如何与指令集体系结构和硬件I/O交互。这通常是用“嵌入式系统”完成的,用一个小型的原型板。</li>
<li>教授现代操作系统中使用的真实算法。这将需要大量的书面阅读,以及在真正的Linux内核中实现一个非常重要的算法。这个水平适合研究生学习。</li>
</ol>
<p>一个好的项目包括一个或多个:</p>
<ul>
<li>输入/输出</li>
<li>储存
<ul>
<li>决定缓存什么/预测预加载什么</li>
</ul></li>
<li>本地或远程启动/管理/记录任务(进程、线程或Python函数)</li>
<li>管理资源
<ul>
<li>要求每个进程给出估计将使用多少峰值内存,并在整个执行过程中定期报告“进度”百分比,然后可以一起使用该百分比来估计资源使用情况</li>
</ul></li>
<li>沟通</li>
<li>并发性</li>
</ul>
<p>一个不直接与硬件交互但仍然是好项目的项目将是:</p>
<ol>
<li>如果你的项目提供了一个操作系统的抽象到将在你的项目中运行的应用程序
<ul>
<li>换句话说,“应用程序”完全依赖于您的“操作系统项目”来满足它们的I/O、存储、任务管理、资源、通信需求</li>
</ul></li>
<li>您的项目很好地(高效、可测量地)使用了真实的操作系统(Windows、Linux等)</li>
</ol>
<p>那么无论使用哪种语言,它都将是一个好的操作系统项目。</p>
<p>我建议您实现自己的memcached、map reduce或一个简单的版本控制系统作为良好的项目示例。</p>
<p><em>编辑:删除ranting</em></p>