从头开始操作系统[关闭]
Posted
技术标签:
【中文标题】从头开始操作系统[关闭]【英文标题】:Operating System from scratch [closed] 【发布时间】:2011-04-08 07:04:18 【问题描述】:我被要求为我大学的操作系统课程选择一个项目。我对用 Python 从头开始制作操作系统的想法充满了幻想。
我有一些限制:
-
我只有 3 个月的时间。
我想用 Python 来做。
我可以每周投入 20-30 小时。
我想知道,这个想法有多可行?就像我可以在建造中走多远一样。如果我能运行一个基本版本(运行一些非常基本的应用程序的东西),我会非常高兴。在给定的限制下是否可能?
有没有一本书可以像指南一样帮助我? (不需要python,我只需要一个指南来告诉我应该如何制作操作系统)
如果这个想法不可行,谁能告诉我我需要在多大程度上缩小我的想法?
非常感谢任何帮助!
【问题讨论】:
关于用python编写它:你打算在什么机器上运行它?我还没有听说过 python 到本机编译器或支持 python 字节码的芯片...... 另见:Barest Bare Boned Operating System Possible。那里有几个很好的模型建议。 Is it possible to create an operating system using Python?的可能重复 【参考方案1】:缩小很多。我建议您查看您想要做的操作系统的一小部分,也许是并行处理。没有可行的方法可以在 500 小时内编写一个完整的操作系统,只需要 5000 小时。真正的问题是这是本科课程还是研究生课程?答案将极大地反映需要通过什么。
添加 拿一本关于你感兴趣的操作系统主题的书,并专注于它 3 个月,你可能会产生一些好的东西。操作系统可能看起来他们在外面没有做太多,但这样想,Windows 有大约 5000 万行代码。
【讨论】:
Tanenbaum 的书操作系统是必读的。 我有一本上面有恐龙的操作系统书,我现在不记得它的名字了。编辑:操作系统概念 uggh,克服它,编写操作系统不是火箭科学。另外,您可以使用 RISC 处理器来保持理智。 Linux 只有大约 800 万行代码......而且大多数可能只是支持数千种不同类型的硬件...... @Longpoke:Linux只是一个内核,Windows是一个完整的操作系统。 @Alon:好吧,既然你提到了它,内核并不是一个定义非常明确的术语...... OP 应该提到他所说的“操作系统”是什么意思。【参考方案2】:您的教授是否需要项目中的“低级”组件?例如,任何涉及硬件或指令架构的东西。如果是这样,你的教授不会允许你用 Python 做这个项目。该项目必须用 C 和汇编语言编写。而且你总是会致力于修改 Linux 内核。
然而,如今的操作系统不再局限于低级方面。虚拟化、数据库、并行化都建立在操作系统之上。如果您的教授是“老派”,那么他/她可能不会将这些新主题视为操作系统的一部分。因此,您可能需要将一些示例想法带给您的教授并寻求澄清。
是否像一些人建议的那样进入低级,完全取决于教授的教育目标。
-
教授基本的并发编程结构,例如事件、信号量和互斥量。这可以通过编写一些多线程应用程序来教授。可以说,作为 OS 类的目标太容易了。尽管如此,这实际上是你从课堂上获得的最“有市场”的技能。
此主题的一个变体是教授如何“使用”特定风格的 OS API。
教授如何编写有效利用操作系统的应用程序。这可能需要您在“模拟操作系统项目”中实现一些与操作系统相关的入门级算法(例如,在 Java 或 Python 中,也可以在 C++ 中)。每个方面都可以在单独的项目/模拟器中进行研究,而无需使用成熟的操作系统。
例如,为了教授如何有效地使用文件缓存,有必要让学生使用简单的算法来玩“玩具”文件缓存。
教授操作系统的硬件方面(包括它的丑陋),即它如何与指令集架构和硬件 I/O 交互。这通常是通过“嵌入式系统”完成的,带有一个小型原型板。
教授现代操作系统中使用的现实世界算法。这将需要大量的论文阅读,以及在真正的 Linux 内核中实现一个重要的算法。该级别适合研究生学习。
一个好的项目应该包括以下一项或多项:
输入/输出 存储 决定缓存什么/预测预加载什么 在本地或远程启动/管理/记录任务(进程、线程或 Python 函数) 管理资源 要求每个进程估计将使用多少峰值内存,并在整个执行过程中定期报告“进度”百分比,然后可以一起使用这些百分比来估计资源使用情况 通讯 并发一个不直接与硬件交互但仍然是好的项目的项目将是:
-
如果您的项目为将在项目“内部”运行的应用程序提供操作系统的抽象
换句话说,“应用程序”完全依赖您的“操作系统项目”来满足其 I/O、存储、任务管理、资源、通信需求
您的项目很好地(高效、可衡量)使用真实操作系统(Windows、Linux 等)
那么这将是一个很好的操作系统项目,不管使用什么语言。
我建议您实现自己的 memcached、map-reduce 或简单的版本控制系统作为很好的项目示例。
已编辑:删除咆哮
【讨论】:
哈哈,祝你好运,用纯 C 编写操作系统,无需汇编...... @Longpoke:这取决于操作系统的级别。在硬件/指令集架构上运行的操作系统,是的。虚拟页面上的硬件断点,是的。执行保护等DMA,... 是的。控制系统似乎是一个合适的想法,但我不明白你的意思,“如果你的项目为将在项目“内部”运行的应用程序提供操作系统的抽象,”你能解释一下吗?非常感谢您的帮助。 @Sylar:“应用程序”完全依赖您的“操作系统项目”来满足它们对 I/O、存储、任务管理、资源管理、通信的所有需求,并同时执行这些操作.换句话说,就像“应用程序”和真实操作系统之间的中间件。 好的。知道了。非常感谢。非常感谢。【参考方案3】:我不明白你认为如何用 Python 编写操作系统。您需要本机代码来至少在启动期间加载解释器,更不用说硬件通信、驱动程序等,在裸机上运行当前的 Python 解释器时,所有这些几乎不可能完成。我也在考虑您是否知道必须移植给定的 Python 解释器才能在没有底层操作系统的情况下编译和运行,仅此一项就会让您忙碌一段时间。
你有野心很好,但我真的认为你连基本的操作系统都做不完,更不用说“一些非常基本的应用程序正在运行”。
【讨论】:
问题不在于 Python 的局限性。更重要的是在 3 个月内编写操作系统的能力以及该任务面临的问题。 从我读到的内容来看,它说:“我想用 Python [...] 这个想法有多可行?”。在我的书中,用 Python 编写一个完整的操作系统几乎是不可能的,所以也许这值得一提...... 想要和需要是两个截然不同的概念。 已经有很多操作系统是用 Python 编写的,除非你有 Python 字节码处理器,否则你只需要一些引导代码。 我不会说太多。但我愿意承认,我可能应该添加“用纯 Python”编写一个是不可能的(不可能,因为远非实际/疯狂)。唉,当我在我的回答中提到您需要本机代码来启动匹配的 Python 解释器时,我相信我想把这个概念弄清楚。【参考方案4】:你可能不能在一个学期内做到这一点。
如果您想尝试类似的东西,请阅读由 Per Brinch Hansen 和他在加州理工学院的学生构建的 Solo 操作系统。他们用 Concurrent Pascal 编写了整个内容,这是由 Brinch Hansen 开发的 Pascal 派生词。
Brinch Hansen 的"Architecture of Concurrent Programs" 提供了 Solo 的源代码。 (链接是整本书的PDF)你的教授应该有一份副本。你的大学图书馆应该有一份副本。有时,副本会出现在亚马逊上。
或者您可以制作 Brinch Hansen 的 RC4000 Nucleus 版本。 (谷歌是你的朋友。)
【讨论】:
【参考方案5】:您可能会在您指定的时间范围内使用已有十多年历史的概念编写小型嵌入式系统操作系统。许多较新的操作系统需要比小型嵌入式操作系统更复杂的调度和内存管理启发式算法;设计一个完整的现代操作系统不会是一个实际的单人项目,但可以用它的某个子系统做一些有趣的事情。我个人认为闪存文件系统还有一些改进的空间,但我不知道你的教授会怎么想。你的教授真正在寻找什么?
【讨论】:
我的教授。不是在寻找任何具体的东西,他想选择的是自己的想法,但应该是好的。就我个人而言,我想要一些能获得最佳项目的东西。【参考方案6】:在我们的大学里,我们有操作系统课程,我们也应该在 linux 上开发一些东西。不是整个操作系统。我们为 linux 制定了自己的调度策略和文件系统。但这将在 C 中完成,因为 linux 是在 C 中。
【讨论】:
嘿,我也选择了在 Linux 中使用 C 的文件系统项目。你能指点从哪里开始吗?我有点迷茫,我需要了解linux内核吗? 我认为理解整个内核代码是不可行的。取决于你有多少时间。我们有大约 3 周的时间用于文件系统项目,总共有 10 周的时间用于课程。所以在我们实现文件系统之前,我们做了其他项目,这让我们了解了内核。你可以看看 ramfs 和 ext3code。 Linux 书籍将有关于文件系统的章节。你可以关注他们。你需要了解的几件事:超级块、inode 表结构、如何注册文件系统……【参考方案7】:学习其他人在操作系统领域所做的事情。除了上面提到的书籍之外,还可以下载 vanilla linux 内核源代码并开始探索它:http://www.kernel.org/。 Robert Love 的关于 Linux 内核的书,Linux Kernel Development,将为您提供有关内核中涉及的所有部分的一个很好的概述。
一个主要亮点是 O(1) 调度程序在新内核中的工作方式,因为调度只是编写操作系统时发挥作用的众多主要问题之一。
【讨论】:
【参考方案8】:用 Python 开发操作系统是可能的。但是,您可能希望选择 C 或汇编,因为有一个 巨大的 代码库以这些语言开发。
【讨论】:
【参考方案9】:哈哈,这让我想起了这个
http://www.getacoder.com/projects/programming_c_87390.html
制作像 Windows、Mac 或 Linux 这样的完整操作系统就像制作 MMORPG 一样困难。
也许您应该制作最简单的操作系统,让您可以成功启动并运行一些简单的命令行脚本,例如 DOS 的工作原理,但在 Python 中并运行 Python。
【讨论】:
他显然不想制作“完整操作系统”,因为这是一个为期 3 个月的项目……是的,制作内核并通过引导到 Python shell 来演示它会很棒,很好想法:) 链接很好读。为此非常感谢。我会去的。如果我继续这样做,需要那些。因此,如果我按照您所说的进行操作,基本上,操作系统将启动到基于文本的 shell(无 GUI)并在某种程度上执行命令,例如 linux 中的终端和/或 Windows 中的 DOS。正确的?感谢您的帮助【参考方案10】:我知道...这个想法很冒泡。甚至我也有过这种经历(有一段时间:p)。
但是当你真正深入它时,你会意识到你刚才说的一个词有多么大。我不会说你不能制作操作系统。因为我相信保持无法实现的梦想。因为这样做可能会帮助您更快地学习。
无论如何,PYTHON?呐。去C。
读取(原理):系统进程 和服务。 编写(代码):练习和使用 编码。使用语言作为工具,而不是 一项技能。 学习(从错误中):这是 最好的事。如果你有一个操作系统 你从 dem 学习。不过,我建议不要浪费您的 3 个月,而是在谷歌上搜索如何在 3 个月内创建操作系统 还做一些事情,比如说你正在尝试的工作是小菜一碟。 例如:http://linuxologist.com/1-general/create-your-own-linux-distro/ 即使是那个标题也具有误导性和令人沮丧的作用。
说了这么多。祝你好运:)
【讨论】:
也许有人会考虑使用 Java 编写操作系统作为一项独特的挑战 谁知道.....先生。甲骨文吃了太阳。如果他们也咬牙切齿,他们最终可能会在他们的 Solaris 上随 PC 一起发布 Java VM :) 等一下,忘记扔掉甲骨文晚餐的骨头了,去看看吧。 已经有用 Java 和 Python 编写的操作系统... Unununium,python 中唯一的东西。除了网络服务之外,这可能仍然不适用于大多数其他服务。 JavaOS ......显然。但这里的问题是,如果我们要开发它......我肯定会尝试只有当我的愚蠢的 cmets 成真时。【参考方案11】:伙计,这是您一直在寻找的答案:
编写操作系统与编写任何其他应用程序没有什么不同,实际上它比编写任何其他代码要容易得多,因为操作系统是一个全能软件或平台的意义......知道了!
之前的所有答案都非常有用!包括这个在内的所有之前的答案都将帮助您编写您的操作系统。实际上不到三个月。
请尽量客观并摆脱负面答案(那只是思维障碍......)
软件开发人员实际上对他想到的一切都进行了编码! (在我的情况下,我是一名 SUPERB 软件开发人员,直到我发生脑事故并长期缺氧......不想再谈论它了......我受到了创伤......)......
让我们说清楚:
如果您想构建一个操作系统。执行以下操作并从今天开始!:
定义是否要编写 SHELL 或是否要编写 CORE O.S.;
规划操作系统的主要功能、流程等;
选择您要构建的关卡:
非常低级别(需要汇编语言,还需要内存、CPU 和硬件资源知识 - 仅在三个月内就不会获得...哦,不!...)...
中级(这里可以使用STANDARD方案,即C编程语言!);
高级别(这是您可能希望使用 Python 的级别,这意味着您将使用操作系统提供给您的所有相同资源和外壳,无论是任何 Linux 发行版,还是 UNIX(R), Windows(R)、CP/M(R) 或任何其他已知的最新);由于您建造它需要时间,我必须假设您正在完成一项大学工作以赚取学分......但是如果您为公司工作,或者如果您是自雇人士或您自己的 CEO,那么您必须有资源分配给这个项目...我会假设你正在为学术构建它!。
假设您正在编写一个 shell,这将简化您的工作的启动,当您编写 shell 时,您的大脑应该绘制它的真正核心,以及寻址和最低级别的例程...
我想你可能知道 MS(R)-DOS(R)。 3.3 版是 Microsoft(r) Corp 设计和发布的最简单、最丰富(从教学角度讲)的操作系统之一。请发挥创造力,不要克隆它,只是激发你的想法,然后构建你的教授否则最终消费者会欣赏和享受!
别忘了我们正处于图形用户界面的时代,所以不要去发短信,虽然 ASCII 仍然是计算机时代最美丽的表达方式,但你可以同时使用这两种界面。
一旦您从 Top 到 Dowm 进行此操作,您就会发现用高级语言构建例程是多么容易,一旦您构建并调试它,您可能会加快 CORE 操作系统的速度。即:引导、内存管理等……
不要参与处理干扰,否则您可能会立即失去热情!...离开 UNDERGROUND O.S.处理和处理中断。
在不到三个月的时间里,你将拥有你的第一个原型,然后你需要让它运行良好(我的意思是调试它!)。超越自我!。
如果你独自工作,你将需要写一本手册,这需要相当宝贵的时间你不想失去......我的建议(请不要笑,我使用了这种技术,它让今天的 Magnate 赚了数十亿)用纸写下来,手写,所有文档(这是因为您的精细动作协调速度最快!即使它不会等于您的想法的速度它是一个硬拷贝交付给一个高薪的助手输入它一台计算机并对其进行编辑真是太棒了——也许一个带有插图的 .PDF 文件以及一段视频将会使最终消费者的眼睛变得更加敏锐和愉悦!。
请记住,第一个月的构建实际上必须是 BASIC 操作系统必须向用户提供的基本功能的外壳:
命令处理器; 文件目录列表; 创建/编辑和删除文件; 创建/编辑和删除目录; 访问驱动器单元(软盘、光盘、硬盘驱动器、闪存驱动器等...); 通过屏幕更新和显示信息!;我将主要专注于前一个,然后通过创建丰富的例程轻松实现其他任何事情(相信我,这个阶段会让人上瘾,当你达到这个阶段时,你将没有更多的生活,因为你将嫁给这个项目,你永远不会离开它),不要害怕,它会起作用的!
展示您的操作系统,如果您预期的即将到来的资金出现,或者如果您的预期成绩获得您期望的更高评级,您可能希望继续扩大您的项目,然后将其构建成一个更稳固、强大和稳定的应用程序!.
想象一下您自己使用这个平台作为您可能想要使用的任何硬件的原告:机器人、汽车;飞机;遥控;等等……
我知道你会喜欢这个任务,我知道你会很开心!只有真正的程序员才有这种野心!
上帝保佑美国!
知友
【讨论】:
这被不必要的cmets所困扰。以上是关于从头开始操作系统[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥有时我的 openmeetings 服务器实例从头开始运行 [关闭]