软件可以在裸机上执行吗?

时间:2010-01-20 08:14:06

标签: c linux-kernel machine-code

我只是想知道,我们可以在没有操作系统的机器上执行程序吗?

此外,我听说Linux内核是用C语言编写的,内核是在启动过程中运行的,所以我只是想知道计算机如何在没有编译的情况下理解该语言?

8 个答案:

答案 0 :(得分:10)

简而言之,是的。

Linux仍然是一个在机器代码中运行在裸机上的软件程序。虽然您可以在没有操作系统的情况下执行软件程序,但您的程序将需要实现所有用于与计算机中的各种硬件进行通信的代码 - 例如:将数据输出到显示器,解释键盘/鼠标/网卡等的输入。(一些非常低级的东西是由计算机组件中的固件实现的,但是你的程序必须实现其余部分)。这使得编写完全没有操作系统的内容非常耗时且困难。

答案 1 :(得分:10)

来自维基百科:

首次启动计算机时,它在ROM或RAM中没有操作系统。计算机必须首先执行存储在ROM中的小程序以及访问非易失性设备所需的最少数据,操作系统程序和数据从该非易失性设备加载到RAM中。 启动此加载到RAM序列的小程序称为引导加载程序,引导程序或引导加载程序。这个小型引导加载程序的唯一工作是加载其他数据和程序,然后从RAM执行。

计算机可以理解Linux内核,因为它已经被编译并存储(通常)在磁盘上。引导加载程序为计算机提供了足够的功能,可以将预编译的内核加载到内存中。

您不需要加载整个操作系统来在计算机上运行程序,您可以编写一个引导程序来启动您编译的程序。您将无法访问任何使程序员更轻松的操作系统调用。

答案 2 :(得分:8)

Linux内核可能用C语言编写。它仍然编译为机器码。这是在启动期间执行的机器代码

您还可以编写在引导期间运行的软件。这样您就可以制作自己的自定义操作系统,或者制作自己的自定义软件,无需操作系统即可直接运行。请注意,操作系统为您提供了许多功能,您必须自己制作。像你必须自己做的驱动程序支持,磁盘IO例程,网络堆栈,多任务处理和内存管理等。

最后:如果他们不得不重启机器以运行您的软件,我认为人们不会那么喜欢它。因此,我会选择编写一个操作系统...它可以让您和用户更轻松。

答案 3 :(得分:8)

是的,现在已经完成了具有几KB内存的小型微控制器。

该程序通常用C语言编写,并在其他计算机上编译(称为交叉编译),然后作为二进制数据加载到控制器的闪存中。

答案 4 :(得分:4)

如果没有在“裸机”上运行的软件,操作系统是什么?巫毒? XD

答案 5 :(得分:2)

第一:当然。你真的不需要操作系统只是为了燃烧一些周期。

如果要加载或存储文件或数据,可能需要某种操作系统支持, 管理输入或输出,但这也可以直接调用BIOS功能: 从键盘读取密钥,写入某个屏幕或LED或串行接口。 只有当你想运行多个程序或处理来自外部的中断时, 冲突的资源等等,那么你将迫切需要一个操作系统。

第二:内核被编译为机器代码,在引导期间执行。没有 C在运行内核时涉及。 C只能帮助编写内核或任何程序 应该运行,如果在内核或“裸机”。

答案 6 :(得分:1)

只需看看32位之前的任何游戏机。几乎所有人都缺少任何启动代码,只需直接从插入的盒式磁带启动。

答案 7 :(得分:0)

理论上,你可以在另一台机器上使用十六进制编辑器构建 bootloader。