是否严格要求组装成为操作系统的“最低”部分?

我是一名中级(抽象)程序员,几个月前我开始考虑是否应该减少或增加抽象(我选择减少)。

现在,我想我已经做了大部分关于我需要的“研究”,但仍然有一些问题。

现在,虽然我“无所事事”,我只是加强了我的C技能(买了“K&R C编程朗”),并且我想(感觉舒服之后)开始学习操作系统(如minix)只是为了学习目的,但我有一个想法困在我的脑海里,我真的不知道我是否应该关心。

理论上(我认为,不确定),更高级别的语言不能直接引用硬件(如寄存器,内存位置等),因此基础的“完美语言”将是汇编。

我已经研究过汇编(前一段时间)只是为了看看它是怎么回事(由于本书使用了过时的调试器(对于Linux来说,汇编语言一步一步),我已经停在本书的中间但是从我的内容读过,我不喜欢这门语言。

所以问题很简单:操作系统(引导程序/内核)是否可以在不触及单行程序的情况下进行编程,并且仍然有效?

即使它可以,它也不会是“跨架构”,不是吗? (i386 / arm / mips等…)

感谢您的支持

无需assembly即可完成大量工作。 Linux或NetBSD不必为其运行的众多目标中的每个目标完全重写或修补。 大多数代码都是可移植的,然后是抽象层,在抽象层下面,您可以找到目标特定层。 即使在目标特定层内,大多数代码也不是asm。 我想消除这个错误的想法,为了为设备驱动程序编程寄存器或内存,例如你需要asm,你不要使用asm来做这些事情。 您使用asm 1)处理器具有您无法使用高级语言生成的指令。 或2)高级语言生成的代码太慢。 例如,在ARM中启用或禁用中断,有一条特定的指令用于访问必须使用的处理器状态寄存器,因此需要asm。 但是编程中断控制器都是用高级语言完成的。 第二点的一个例子是你经常在C库中发现memcpy和其他类似的大量使用的库函数是手动编码的,因为它的速度要快得多。

虽然您当然可以在ASM中编写并执行任何操作,但您通常会发现使用高级语言直接访问“硬件(如寄存器,内存位置等)”。 您应该继续重新强化您的C技能,不仅仅是使用K&R书籍,而且还要浏览各种C标准,您可能会发现它会扰乱有多少“实现定义”项目,如位域,如何提升变量大小等等仅仅因为你10年前编写的程序不断编译和使用一个特定品牌的编译器(msvc,gcc等)并不意味着代码干净,便携并且会继续工作。 不幸的是,gcc教会了许多非常糟糕的编程习惯,当他们发现他们在未来十年左右不知道语言并且不得不重做他们如何使用该语言来解决问题时,他们会震惊用户。

您已经在“高级语言不能直接引用硬件”中自己回答了您的问题。

无论您是否想要它,在某些时候,如果您想制作操作系统,您将不得不处理assembly/机器代码。

中断和exception处理程序必须包含一些汇编代码。 因此需要调度程序(如果不是直接,间接)。 和系统调用机制。 和引导程序。

我在过去阅读网站和书籍时学到的是:a)由于我们都知道的原因,许多程序员不喜欢汇编语言。 b)OS的主要编程语言似乎是C甚至是C ++ c)汇编语言可以在用C或C ++分析源代码后用来“加速代码”(实际上语言并不重要)

因此,在某些情况下,中级语言和低级语言的组合是不可避免的。 例如,没有必要加速代码等待用户输入。 如果为一个特定范围的计算机(AMD,INTEL,ARM,DIGITAL-ALPHA,……)构建最短和最快的代码很重要,那么你应该使用汇编程序。 我的看法…