我只是想知道,我们可以在没有操作系统的机器上执行程序吗?
另外,听说Linux内核是用C语言写的,而且内核在开机的时候运行,所以我就想知道,不先编译,电脑是怎么理解这种语言的?
我只是想知道,我们可以在没有操作系统的机器上执行程序吗?
另外,听说Linux内核是用C语言写的,而且内核在开机的时候运行,所以我就想知道,不先编译,电脑是怎么理解这种语言的?
简而言之,是的。
Linux 仍然是在裸机上运行的机器代码中的软件程序。虽然您可以在没有操作系统的情况下执行软件程序,但您的程序将需要实现用于在不同程度上与计算机中的各种硬件进行通信的所有代码 - 例如将数据输出到显示器,解释来自键盘的输入/鼠标/网卡等(一些非常低级的东西是由计算机组件中的固件实现的,但其余的则必须由您的程序来实现)。这使得编写完全没有操作系统的东西非常耗时且困难。
来自维基百科:
计算机首次开机时,ROM 或 RAM 中没有操作系统。计算机必须首先执行存储在 ROM 中的小程序以及访问非易失性设备所需的最少数据,操作系统程序和数据从这些设备加载到 RAM 中。启动这一系列加载到 RAM 中的小程序称为引导加载程序、引导程序或引导加载程序。这个小型引导加载程序的唯一工作是加载其他数据和程序,然后从 RAM 中执行这些数据和程序。
计算机可以理解 Linux 内核,因为它已经被编译并(通常)存储在磁盘上。引导加载程序为计算机提供了足够的功能来将预编译的内核加载到内存中。
您无需加载整个操作系统即可在计算机上运行程序,您可以编写引导加载程序来启动已编译的程序。您将无法访问任何使程序员生活更轻松的操作系统调用。
linux内核可能是用C编写的。它仍然被编译为机器码。正是这个机器代码在启动期间执行
您还可以编写在引导期间运行的软件。通过这种方式,您可以制作自己的定制操作系统,或者制作自己的定制软件,无需操作系统即可直接运行。但请注意,操作系统为您提供了许多您必须自己制作的功能。诸如驱动程序支持、磁盘 IO 例程、网络堆栈、多任务处理和内存管理之类的事情你必须自己做。
最后:我认为如果人们必须重新启动机器才能运行您的软件,我认为他们不会那么喜欢它。所以我会为操作系统写东西……它让你和用户的生活更轻松。
是的,今天已经为具有几 KB 内存的小型微控制器完成了这项工作。
该程序通常用 C 语言编写并在其他计算机上编译(称为交叉编译),然后作为二进制数据加载到控制器的闪存中。
如果不是在“裸机”机器上运行的软件,那么操作系统是什么?巫毒?XD
第一:当然。你真的不需要一个操作系统来消耗一些周期。
如果您想加载或存储文件或数据、管理输入或输出,您可能需要某种操作系统支持,但这也可以通过直接调用 BIOS 函数来完成:从键盘读取键、写入某些屏幕或 LED 或串行接口。只有当你想运行多个程序,或者处理来自外部的中断、资源冲突等时,你才会迫切需要一个操作系统。
第二:内核编译成机器码,在开机时执行。运行内核时不涉及 C。如果在内核或“裸机”中,C 仅有助于编写内核或任何应该运行的程序。
只需查看 32 位之前的任何游戏机。几乎所有这些都没有任何启动代码,只是直接从插入的磁带启动。
理论上,您可以在另一台机器上使用十六进制编辑器来构建引导加载程序。