固件和中间件的关系和区别是什么?
维基百科说
固件是持久性内存和存储在其中的程序代码和数据的组合。 [1] 包含固件的设备的典型示例是嵌入式系统(如交通灯、消费电器和数字手表)、计算机、计算机外围设备、移动电话和数码相机。这些设备中包含的固件为设备提供控制程序。
中间件是计算机软件,它为软件应用程序提供超出操作系统可用服务的服务。可谓“软件胶水”。 [1] 中间件使软件开发人员可以更轻松地执行通信和输入/输出,因此他们可以专注于应用程序的特定目的。
我仍然不明白它们在硬件、高级软件、操作系统等方面的角色差异。
例如,
BIOS 固件不是中间件吗?
操作系统的引导加载程序是固件、中间件还是某种软件?
CPU 固件的指令集是不是中间件?
是否有一些中间件而不是固件?
设备驱动程序与固件和中间件的关系和区别是什么?
谢谢!
固件和中间件是简单的行业术语,用于描述一组特定的“某些代码”。
固件(如 wiki 所述)“通常”表示“通常”用汇编或 C 编写的“通常”在硬件上运行的软件。
“on/the”表示该软件驻留在永久存储介质(如某种小型闪存)上,该介质直接连接到该软件要控制的硬件。之所以称为“固件”,是因为它是专门为运行硬件而设计的软件。
我也经常引用这个词,因为科技行业有一种可怕的习惯,即创造术语然后扭曲它们,这样没人能知道这个词的真正意图是什么。“嵌入式编程”是一个很好的当前示例;虽然该术语通常指的是开发本质上是固件的程序员(即低级 ASM/C 硬件开发人员),但此后该术语已演变为包括 Android 开发人员(即可以在 Java 和 C 级别操作的 Linux/内核开发人员) )。我不是在抨击任何类型的开发人员或开发实践(我自己做了很多这样的开发),只是指出科技行业喜欢滥用词语。
中间件是这个词的另一个例子;虽然我还没有听说或看到“固件”用于硬件级代码以外的任何东西,但我已经看到中间件用于从固件到 .NET/Java 的所有内容。中间件是一个通用术语,(作为开发人员)您通常可以从上下文中解读其意图,因为我已经看到它被滥用了太多次;所以直接回答你:
我仍然不明白它们在角色上的区别,相对于硬件、高级软件、操作系统等。 固件是驻留在某个硬件上并运行所述硬件的软件(代码转换为二进制格式)。中间件可用于表示与硬件(或与此相关的另一件软件)交互的 API/库。
BIOS 固件不是中间件吗? 根据您对此的看法,可能两者兼而有之。从技术上讲,BIOS 是固件(它是专门用于运行其所在硬件的软件,即主板),但如果您的意图是以某种方式直接与硬件交互(就像操作系统一样),则 BIOS '可能是中间件,因为您不必“编写”自己的 BIOS 和硬件例程,这就是滥用“中间件”的地方,但在经典中,没有 BIOS 不是中间件。
操作系统的引导加载程序是固件、中间件还是某种软件? 操作系统的引导加载程序是一段代码,位于 BIOS(或其他基本硬件子系统)和更高级别的系统(通常是操作系统)之间,它告诉低级系统(即 BIOS)操作系统在引导介质上的位置。通常来说,引导加载程序通常位于存储介质的特定位置(例如前几百个字节或更多字节),并且 BIOS 知道(由于行业标准)在哪里“寻找”引导加载程序,此时引导加载程序将接管做它被写入要做的事情(通常是引导操作系统)。
引导加载程序不是固件,但在技术上可以驻留在固件中,并且就它是“中间件”而言,这可能是或否取决于“您”对“中间件”是/应该是什么的看法,尽管在中间件的经典中,我不会考虑引导加载程序中间件,因为它不会为我提供任何更简单的上下文(除非我正在编写操作系统)。
CPU 固件的指令集是不是中间件? CPU 的指令集更像是应用程序编程接口 (API)(“可以”被视为一种中间件),它不是固件,因为 CPU(中央处理单元本身)没有任何东西'跑步'; CPU 指令集是软件“编译”为(汇编)的内容,然后 CPU 会“理解”如何运行。
是否有一些中间件而不是固件? 是的; 几乎您能想到的任何软件框架(例如 .NET 或 Java 库)都可以被视为一种中间件,因为它们为程序员提供了一种“更轻松”的方式来与计算机的各个方面进行交互。例如,使用 Java,您可以打开一个文件并写入其中,并让该代码在任何支持 Java 的系统上“工作”。由于某些 Java API 允许您使用几行代码与跨不同系统的文件进行交互,因此可以将其视为一种“中间件”形式,因为开发人员不必为每个不同的系统(Linux/Windows/ Apple 等)与硬盘驱动器的文件系统和操作系统交互。
设备驱动程序与固件和中间件的关系和区别是什么? 设备驱动程序是位于操作系统级别的软件(通常作为“已安装”库),它告诉操作系统“如何”与所述设备交互。例如,当您安装最新的视频驱动程序时,您正在安装操作系统“使用”与实际视频卡本身进行通信的软件。视频卡本身有固件,它知道如何解释操作系统提供给它的信息(因为驱动程序)并用它做它想做的事情(例如绘制一个窗口或游戏精灵)。
设备驱动程序可以被视为中间件(同样取决于您对此的看法),因为它位于操作系统/硬件和任何想要通过操作系统使用硬件的人之间。
轶事:在我的行业经验中,我发现“中间件”的意思是“网络服务”或类似的东西(至少使用该术语的人的含义是什么),尽管我也见过/听说过(误会) ) 用于许多职位发布和面试,表示从 API 和库(如 Boost 或 Spring)到 C++ STL 甚至 C# 本身(语言本身,而不是 .NET)的各种事物。
我希望能有所帮助。
归档时间: |
|
查看次数: |
23364 次 |
最近记录: |