软件可以在裸机上执行吗? [复制]

Posted

技术标签:

【中文标题】软件可以在裸机上执行吗? [复制]【英文标题】:Can software be executed in bare metal machine? [duplicate] 【发布时间】:2011-01-07 04:15:40 【问题描述】:

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

另外,听说Linux内核是用C语言写的,而且在开机的时候会运行一个内核,所以我想知道计算机不经过编译是如何理解这种语言的?

【问题讨论】:

一台可以启动 Linux 或 Windows 的机器没有任何亮点。它需要一个 Bios @nobugz:是什么让您认为 BIOS 不是“软件”?我的意思是,大多数 BIOS 芯片都是可刷写的,所以如果我真的想重写它,我可以...... 这就是我的意思。 “裸”的反义词。 @nobugz:但是 BIOS 软件,在裸机上运行。每台计算机总是有一些东西在裸机上运行。每一个。每一次。 @caramel1991,他们说“闪存”是因为 BIOS 存储在一种称为闪存的非易失性存储设备中。在此之前,它被存储在一个名为 EPROM 的非易失性设备中,该设备可以被擦除和重新编程,但需要一个明亮的紫外线灯来进行擦除,并需要一个单独的编程设备来写入。 FLASH 是一项相当大的改进,因为它可以在系统内擦除和重新编程。 【参考方案1】:

来自***:

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

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

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

【讨论】:

引导加载程序“软件”。【参考方案2】:

简而言之,是的。

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

【讨论】:

【参考方案3】:

是的,今天它已用于具有几 KB 内存的小型微控制器。

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

【讨论】:

【参考方案4】:

Linux 内核可能是用 C 编写的。它仍然被编译为机器码。在启动过程中执行的正是这个机器代码

您还可以编写在引导期间运行的软件。通过这种方式,您可以制作自己的定制操作系统,或者制作自己的定制软件,无需操作系统即可直接运行。但请注意,操作系统为您提供了许多您必须自己制作的功能。诸如驱动程序支持、磁盘 IO 例程、网络堆栈、多任务处理和内存管理之类的事情您必须自己完成。

最后:如果人们必须重新启动机器才能运行您的软件,我认为他们不会那么喜欢它。所以我会写一个操作系统...它让你和用户的生活更轻松。

【讨论】:

用户可以使用虚拟化(事实上,许多 DRM 支持者被不依赖主机操作系统的想法所吸引——“可信计算”倡议)。 当然,你也不能完全信任硬件...... DRM 是不可能的。 也就是说,像windows这样的每个操作系统都是一个软件??那么在操作系统创建的前一天呢??并且引导加载程序需要用汇编低级语言编写吗??跨度> 是的,操作系统也是一个软件。它是一个软件,它允许其他软件一起运行并使用它的功能。 至于创建操作系统之前的日子:您以某种方式手动将程序加载到内存中并告诉计算机从位置 0 开始执行。(这仍然是它今天所做的,但它的事情开始执行是引导程序)【参考方案5】:

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

【讨论】:

不知道 voodoo,但 Windows肯定在某个地方做了一些死灵术。【参考方案6】:

第一:当然。你真的不需要一个操作系统来消耗一些周期。

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

2nd:内核编译成机器码,在开机时执行。没有 运行内核时涉及 C。 C 仅有助于编写内核或任何程序 如果在内核或“裸机”中,它应该运行。

【讨论】:

【参考方案7】:

只要看看 32 位之前的任何游戏机。几乎所有这些都没有任何启动代码,只是直接从插入的磁带启动。

【讨论】:

轻微修正:虽然有些游戏机缺少任何类型的内部 ROM,包括有史以来最出色的游戏机(雅达利 2600),但说它们“几乎所有”都有是不准确的。 Intellivision、Odyssey2、Bally Astrocade 和 Atari 7800 都早于 32 位时代,并且有一个内部引导 ROM(都从内部 ROM 开始执行代码,即使有些在确认磁带存在之前跳转到磁带空间)跨度> 【参考方案8】:

理论上,您可以在另一台机器上使用十六进制编辑器构建引导加载程序。

【讨论】:

以上是关于软件可以在裸机上执行吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

linux中把一个包解压(tar)安装成功后那些软件安装在啥位置,那个解压包时产生的文件夹可以删除吗?

操作系统的初步认识(Operation System,OS)

软件定时器的特性

软件定时器的特性

我可以将 SIMD 内在函数用于在云上运行的软件吗?

操作系统