为什么Linux内核称为“映像”?


62

我经常听到人们将Linux内核称为Linux内核映像,而且我似乎无法在任何搜索引擎上找到关于为何将其称为映像的答案。

当我想到一个图像时,我只能想到两件事:磁盘的副本或照片。确定地狱不是照片图像,为什么将其称为图像?


10
它也可以是RAM区域的副本(对于内核来说是恕我直言)
Romeo Ninov

Answers:


60

Unix引导过程仅具有(有限)智能加载程序(重定位,加载库等)的功能。因此,初始程序是一张精确的映像,存储在磁盘上,该映像需要将其加载到内存中并“调用”以使内核运行。

仅添加了很多以后的事情,例如(解压缩),尽管现在有了更强大的引导加载程序,但映像名称却卡住了。


1
压缩和解压缩与所谓的“图像”无关。就像过去一样,它仍然被加载到内存中的特定点并直接调用。中间的引导加载程序也一直存在。内核本身仍然是一个映像,已加载到内存中的特定点并直接调用。
phyrfox

正是因为如此,OP才使IMO感到困惑。他图像的压缩版本不再看起来像图像(如果以未压缩的方式查看),因此不称为图像。但是内核仍然称为映像。
Anthon 2015年

TBH不确定您对它的由来是否正确,但是您的解释太有意义了,我不得不赞成。IMHO压缩图像仍然是图像。检索图像的方式无关紧要。这是一张图片。它可以清楚地说明您在说什么,这也许是最重要的。
akostadinov

有趣。因此,如果我有一个javascript文件,其中包含一个对象的文本,该对象的文本包含一堆类似于内核的函数,并通过XMLHttpRequest加载它并进行评估,则在NodeJS端使用NodeJS服务器通过请求与之交互,我可以称其为javascript文件内核图像:O
德米特里(Dmitry)

31

图像一词也有一个定义“一个文件,其中包含产生实时工作副本所需的所有信息”。


3
这是一个明确的术语,避免了像“ binary”,“ executable”,“ program”,……这样的术语来指代磁盘上的实际映像。
汤玛斯(Thomas)

3
图像是内存的快照。
ikegami 2015年

2
不完全是-我需要足够的信息来(重新)创建完整的系统状态。如果内存转储足以满足要求,那么我就有隐性知识(起始地址,初始系统状态);如果这还不够,我就不会将内存转储称为image
Simon Richter 2015年

20

这并不意味着“映像”只是磁盘的1:1副本。正如照片表示现实准确,因为它在拍摄时被,可执行程序(或内核)的图像表示的状态,在那里它可以在系统存储器中加载(或解压缩)的程序完全相同,因为它是和然后控制它。然后,该程序可以以一致的方式从该状态开始运行。因此,Linux内核映像是Linux内核的映像(状态图),在将控制权交给它之后便能够自行运行。

如今,引导程序从硬盘的文件系统(需要驱动程序)中加载此类映像,并用其替换自身,从而对其进行控制。计算机的启动过程会执行几次,直到操作系统最终运行。这称为链加载。或者,如果较小的程序(链式)加载了更复杂的程序,则称为bootstrapping

BIOS加载也是图像的引导加载程序,例如boot.img在的情况下调用grub。那boot.img不是文件(如果安装了grub);它是主引导记录(MBR)中零件的名称。如果将其转储到文件中,则它将是文件形式的映像,而不是原始写入磁盘,而是原始写入文件。这也是最早状态的表示(图像),在此状态下grub它本身可以加载其余部分。grub然后具有自己的机制,即如何通过加载其他图像来完全加载自身。这是由表示不同阶段grub。之后,引导加载程序通过将自身替换为该文件的提取内容来加载内核映像。


7

古代历史。术语“图像”来自于Digital Equipment Corporation的旧术语,用于“编译器”->“链接器”的输出。该文件是通过解释代码等通过链接器创建的图像,以使您的设计成为可执行的“图像”。


1
如果您添加了参考链接,我会
赞成

请参阅Digital Equipment Corporation的“ RSX-11M +系统参考手册”
DEC1981

5

在数学上,核是某个映射图像的子集的逆图像,该子集等于共域中的恒等元。我敢肯定,这些名称是从数学概念衍生而来的,因为它们在数学的各个领域都有着重要的联系。考虑到Unix是在学术环境中派生的,因此使用这些词的内核和映像可能是相同的。

如果您有一个表示“完整”操作系统的某种级别信息的集合,并且该信息也构成一个组,则可以在该集合上定义组同态或基本上映射到其他大小不同的集合,只要原始集合他们“尊重”原始组合的结构。您可以看到将集合映射到较小的集合或某个集合的子集(其中子集较小)可能是有利的。

图像-组同态的图像以及一般的函数和映射,只是某些集合的一个子集,实际上是将其元素映射到该集合的子集。该功能可能不会映射到每个单个元素,并且这些元素不会包含在图像中。

内核-基本上,原始集中的元素仅映射到图像,但仅映射到图像中的identity元素。基本上,映射为0的元素就像图像中的东西。

如果图像的尺寸小于原始图像,则可以看到多个项目必须映射到一个元素。因此,例如,内核中可能有多个映射到图像的元素,我们已经知道它们都必须映射为0。

我们可以看到,如果我们选择原始集合为二进制或1和0的有限序列,并且选择共域(映射到)也是二进制序列,则可以并且仅当合适的组结构构造此类事物可以定义(这一点很深,与提出的问题无关)。

因此,我们可以完全确定地看到操作系统的“内核”和“映像”已完全定义并具有数学意义。独立于术语的其他用法。


基本上,内核可以是os的“精简”版本,或者是os的重要组成部分,可以是“抽象的”,然后只要该地图是内射同态并且已知,就可以计算出整个图像而不必四处旅行整个图像。看起来数据争用的一种方法是该术语的“内核”和“图像”的来源。但实际上它们源自众所周知的数学概念。
元帅工艺

3
嗨,元帅。最好通过编辑而不是添加评论来改善您的帖子。
Anthony Geoghegan

4
我相信内核的计算用途来自“ 螺母的中央(通常是可食用的)部分,尤其是在除去硬壳之后。 ”(请参阅wiktionary)-它是操作系统的较小内部;剥离所有“外层”(GUI,命令外壳,可加载的驱动程序)之后,它是使/以某种有用的方式操作硬件所需的(大约)最低限度的部分。
TripeHound

哇,哇 没有依据的猜测。TripeHound正确。元帅的手艺刚刚猜到。
2015年

修改您的“相当确定性” :)
hobbs 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.