从头开始的操作系统

2024-05-12 08:58:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我被要求为我大学的操作系统课程选择一个项目。我突然想到用Python从头开始制作一个操作系统。

我有几个限制:

  1. 我只有3个月。
  2. 我想用Python来做。
  3. 我可以每周投入20-30个小时。

我想知道,这个想法有多可行?就像我能在建筑上走多远一样。如果我可以运行一个基本版本(运行一些非常基本的应用程序),我会非常高兴的。在给定的限制下,这可能吗?

有没有一本书可以帮助我成为指导方针?(不必是python,我只需要一个指南来告诉我应该如何制作操作系统)

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

非常感谢您的帮助!


Tags: 项目版本应用程序指南大学课程小时我会
3条回答

你的教授在这个项目中需要一个“低级”的部分吗?例如,处理硬件或指令体系结构的任何东西。如果是的话,你的教授不会允许你用Python做这个项目。项目必须用C和汇编语言编写。您将一直致力于修改Linux内核。

然而,现在的操作系统已经不再局限于底层。虚拟化、数据库、并行化都是建立在操作系统之上的。如果您的教授是“老派”,那么他/她可能不认为这些新主题是操作系统的一部分。所以,你可能需要给你的教授带来一些样本想法,并寻求澄清。

是否像一些人建议的那样进入低水平,完全取决于教授的教育目标。

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

一个好的项目包括一个或多个:

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

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

  1. 如果你的项目提供了一个操作系统的抽象到将在你的项目中运行的应用程序
    • 换句话说,“应用程序”完全依赖于您的“操作系统项目”来满足它们的I/O、存储、任务管理、资源、通信需求
  2. 您的项目很好地(高效、可测量地)使用了真实的操作系统(Windows、Linux等)

那么无论使用哪种语言,它都将是一个好的操作系统项目。

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

编辑:删除ranting

我不明白你怎么能用Python编写操作系统。在启动过程中,您至少需要本地代码来加载解释器,更不用说硬件通信、驱动程序等,如果在裸机上运行当前的Python解释器,所有这些几乎都是不可能完成的。我也在考虑,如果你知道你需要移植一个给定的Python解释器来编译和运行,而不需要底层的操作系统,这只会让你忙上一段时间。

你雄心勃勃是好事,但我真的认为你连基本的操作系统都完成不了,更不用说“一些非常基本的应用程序正在运行”。

把这个缩小很多。我建议您查看一个非常小的操作系统,可能是并行处理。没有可行的方法可以在500小时内编写整个操作系统,只需5000小时。真正的问题是这是本科还是研究生课程?这个问题的答案将极大地反映出我们需要通过什么。

添加
找一本关于操作系统的书,让你感兴趣,并专注于这个话题3个月,你可能只会产生一些好的东西。操作系统看起来在外部做得不多,但想想看,Windows有大约5000万行代码。

相关问题 更多 >