是否可以在不使用一行C/C++代码的情况下编写整个操作系统?
编辑:再添加到列表 - 程序集
是的,不是.
首先,重要的是要记住,无论您的选择语言是什么,最终编译产品都是汇编语言(或更准确地说,机器代码).甚至解释器(例如cpython解释器)也最终将脚本转换为机器代码.
但这可能是过于技术性的,并且错过了你问题的核心:
"我可以用更高级的语言编写操作系统吗?"
对此的答案既是个人的,也是技术上的.
首先,个人方面:如果还不知道如何使用汇编语言和C语言编写操作系统,那么您绝对没有尝试过操作系统设计的业务.
通常那些刚接触编程的人会有这样的问题,因为他们想做一些像编写新操作系统一样酷的东西,而不需要学习甚至尝试这样一个项目所需的全部知识.他们想知道更高级别的语言是否可以绕过所有那些混乱的研究.
所以,如果,在你的心中,这就是你所追求的,那就停下来吧.停止,停止,停止.善于做某事很难.没有捷径.准备卷起你的袖子,并获得一些腕管综合征.
这并不排除遵循最终OS设计的途径!如果这是你的热情,那就从顶部开始,逐步向下.获取有关网络协议,内存管理,线程等的书籍,解决每个主要子系统并充分了解它.如果你不能使用旧的,你不能写一个新的!
然后阅读有关操作系统设计和实现的书籍,直到您梦想过程管理方法.
请记住,必要的知识量(不仅仅是计算机操作,而是像API这样的社会结构)是巨大的.这是一个漫长的旅程,也是一个有益的旅程.如果你像我一样真的喜欢这种工艺,你会很高兴你花时间,即使你从未真正写过操作系统.
现在,技术答案.您将需要一个引导加载程序,并且必须使用汇编语言编写.毕竟,您的处理器不知道C#.在引导加载程序阶段之后,您可以使用您想要的任何语言编写操作系统代码,并且它将运行,假设您的语言可以编译为机器代码二进制文件(而不是字节码!)
然而,即使在我们当前的"周期过剩"计算环境中,操作系统也必须精简且高效,而且几乎不可能在更高级别的语言中实现,在解释语言中更是如此.
有可能,您需要编写自己的编译器/解释器,将该语言作为操作系统的核心组件.该核心编译器可能只允许该语言的受限子集(并且您通过在受限制的子语言中编写更强大的编译器来进行引导).否则表现将非常糟糕.
但所有这些都非常复杂,对这些问题的真正讨论需要您可能目前缺乏的深度知识.但是如果你有这样做的动力,你可以很容易地改变它,然后我很乐意整天讨论方法!
如果它让你感觉更好,我确实知道写一个操作系统,我仍然围着做白日梦,试图弄清楚我可以通过python编写多少操作系统.;)
是.使用汇编程序.我会用Forth.Genera是由Lisp编码的符号系统制作的操作系统.C主要用于因为它是可信的,我们知道它是如何工作的.并且宇宙中的每个CPU都存在c编译器.c的编译器很容易构建.
**Symbolics在互联网上注册了第一个域名.(趣味事实)
当然.您可以使用纯汇编程序或选择其他高级语言.
但是你通常不想这样做.因为现代操作系统中所需的汇编代码量相当低.操作系统中的大多数代码都不需要那么低的级别.
C提供了一个很好的中间抽象级别,它仍然允许编写相当低级的代码,而不必处理汇编程序开发人员需要处理的所有细节.
编辑:一旦从等式中删除装配,它就会变得复杂得多.设置一个不错的操作系统需要执行几个机器代码指令,这些指令根本没有用高级语言表示(因为它们非常非常特定于机器).理论上你可以在二进制blob中生成纯机器代码并从高级语言跳转到该位置,但我认为这是作弊,因为你必须首先想出那个二进制blob.
是的,MenuetOS是仅使用汇编程序编写的操作系统的示例.
由于您似乎对汇编程序不感兴趣,另请参阅JNode(一种用Java编写的操作系统)和Singularity(一种用C#编写的操作系统).
有许多尝试来创建JVM的硬件实现.当然,这种硬件的操作系统将用Java编写.请参阅例如:http://www.jopdesign.com/
此外诺基亚的S40似乎是用Java开发的主要.