Kernel 运行时和内核之间的区别?

Kernel 运行时和内核之间的区别?,kernel,runtime,Kernel,Runtime,我正在阅读docker教程: 需要注意的是,Docker容器不在它们自己的虚拟机中运行,而是共享一个Linux内核。与虚拟机相比,容器使用更少的内存和CPU 但是,Docker需要Linux运行时。在非Linux平台(如macOS和Windows 10)上的实现使用单个Linux虚拟机。容器共享这个系统 我想知道linux内核和linux运行时之间有什么区别 我找到的内核定义: 内核是操作系统的最低级别。内核是操作系统的主要部分,负责将命令转换为计算机可以理解的内容 我找到的运行时定义: 运行时

我正在阅读docker教程:

需要注意的是,Docker容器不在它们自己的虚拟机中运行,而是共享一个Linux内核。与虚拟机相比,容器使用更少的内存和CPU

但是,Docker需要Linux运行时。在非Linux平台(如macOS和Windows 10)上的实现使用单个Linux虚拟机。容器共享这个系统

我想知道linux内核和linux运行时之间有什么区别

我找到的内核定义:

内核是操作系统的最低级别。内核是操作系统的主要部分,负责将命令转换为计算机可以理解的内容

我找到的运行时定义:

运行时是指程序正在运行(或可执行)的时间。也就是说,当您启动在计算机中运行的程序时,它是该程序的运行时。在某些编程语言中,某些可重用程序或“例程”被构建并打包为“运行时库”。这些例程可以链接到任何正在运行的程序并由其使用


tl;dr:没有区别,Linux内核是一种运行时

详细解释:

运行时 引用的定义不是“运行时”的很好定义。在软件构建上下文中,运行时是指软件接受您构建的软件,解释它,并(通常)逐条指令执行它

例如,当您为Java构建jar文件时,它们包含一种称为“Java字节码”的语言中的指令,当Java程序运行时执行这些指令的运行时是JVM

编写Python脚本时,执行这些Python指令的运行时是Python解释器

操作系统和加载 运行时还可以将程序从文件加载到可以解释的表单

当你用C语言构建一个程序时,它被编译成机器代码,而不是由任何软件解释,而是由硬件(CPU)直接解释。这类程序有时被称为“本机”。然而,C标准库通常不与软件捆绑在一起,它们必须独立地存在于运行代码的机器上,有时也被称为“C运行时”,部分原因是它们包含每个C程序的引导代码

即使这样的本机程序也被编译成本机可执行格式(Linux使用的格式称为ELF),操作系统内核必须知道如何将该格式读入指令,并以CPU可以解释和执行的方式加载指令。因此,操作系统也是运行时。(请注意,虽然操作系统内核是操作系统的主程序,但通常其他程序也是此运行时的一部分,例如动态链接器。)

如您所见,运行时通常是堆叠的:您可以让运行MacOS内核的Intel x86硬件运行运行运行JVM的Linux虚拟机的虚拟机监控程序

Docker运行时 现在,您将遇到的所有docker映像都是基于Linux的。这些映像中安装的所有本机程序,包括JVM和Python解释器等运行时,都是为Linux编译的本机程序(即ELF可执行文件)

在Linux中运行docker容器时,需要发生两件事:

首先,docker需要设置一个容器(设置覆盖文件系统和控制组)

其次,docker需要以某种方式让容器中的一些(ELF)可执行文件(例如JVM或本地容器化C程序)运行

这两件事都在“程序加载”类别下归档,这是运行时的责任

Linux是唯一一个操作系统内核,它具有docker所使用的所有这些特性——覆盖文件系统、控制组和ELF加载


例如,在MacOS上,这些技术不存在(AFAICT),因此为了运行docker容器,docker需要在Linux虚拟机中运行其容器,该虚拟机作为可加载图像的运行时运行。

tl;dr:没有区别,Linux内核是一种运行时

详细解释:

运行时 引用的定义不是“运行时”的很好定义。在软件构建上下文中,运行时是指软件接受您构建的软件,解释它,并(通常)逐条指令执行它

例如,当您为Java构建jar文件时,它们包含一种称为“Java字节码”的语言中的指令,当Java程序运行时执行这些指令的运行时是JVM

编写Python脚本时,执行这些Python指令的运行时是Python解释器

操作系统和加载 运行时还可以将程序从文件加载到可以解释的表单

当你用C语言构建一个程序时,它被编译成机器代码,而不是由任何软件解释,而是由硬件(CPU)直接解释。这类程序有时被称为“本机”。然而,C标准库通常不与软件捆绑在一起,它们必须独立地存在于运行代码的机器上,有时也被称为“C运行时”,部分原因是它们包含每个C程序的引导代码

即使这样的本机程序也被编译成本机可执行格式(Linux使用的格式称为ELF),操作系统内核必须知道如何将该格式读入指令,并以CPU可以解释和执行的方式加载指令。因此,操作系统也是运行时。(请注意,虽然操作系统内核是操作系统的主程序,但通常其他程序也是此运行时的一部分,例如动态链接器。)

如您所见,运行时通常是堆叠的:您可以让运行MacOS内核的Intel x86硬件运行运行运行Lin的虚拟机监控程序