Разница между временем выполнения и ядром? - PullRequest
0 голосов
/ 10 июля 2019

Я читаю это руководство по докеру:

Важно отметить, что контейнеры Docker не работают на своих собственных виртуальных машинах, а используют общее ядро ​​Linux. По сравнению с виртуальными машинами контейнеры используют меньше памяти и меньше ЦП.

Однако для Docker требуется среда выполнения Linux. Реализации на не-Linux платформах, таких как macOS и Windows 10, используют одну виртуальную машину Linux. Контейнеры используют эту систему.

и мне интересно, в чем разница между ядром Linux и временем выполнения Linux.

Определение ядра, которое я нашел:

Ядро - самый низкий уровень операционной системы. Ядро является основной частью операционной системы и отвечает за перевод команды в нечто, понятное компьютеру.

Определение времени выполнения, которое я нашел:

Время выполнения - это когда программа работает (или является исполняемой). То есть, когда вы запускаете программу, запущенную на компьютере, она запускается для этой программы. В некоторых языках программирования определенные многократно используемые программы или «подпрограммы» создаются и упаковываются как «библиотека времени выполнения». Эти подпрограммы могут быть связаны и использоваться любой программой, когда она выполняется.

1 Ответ

2 голосов
/ 14 июля 2019

tl; dr: Нет никакой разницы, ядро ​​Linux - это тип среды выполнения.

Длинное объяснение:

Runtimes

Приведенное определение не очень хорошее определение "времени выполнения". В контексте построения программного обеспечения среда выполнения - это программное обеспечение, которое берет созданное вами программное обеспечение, интерпретирует его и выполняет (как правило) инструкция за инструкцией.

Например, когда вы создаете JAR-файлы для Java, они содержат инструкции на языке, называемом «Java bytecode», и среда выполнения, которая выполняет эти инструкции при запуске Java-программы, - это JVM.

Когда вы пишете скрипт Python, среда выполнения, которая выполняет эти инструкции Python, является интерпретатором Python.

ОС и загрузка

Среды выполнения также играют роль загрузки программы из файлов в форму, которую можно интерпретировать.

Когда вы создаете программу на C, она компилируется в машинный код, который не интерпретируется никаким программным обеспечением, а напрямую аппаратным обеспечением (ЦП). Такие программы иногда называют «родными». Однако стандартные библиотеки C обычно не поставляются в комплекте с вашим программным обеспечением, они должны независимо присутствовать на компьютере, на котором выполняется ваш код, и их также иногда называют «средой выполнения C», отчасти потому, что они содержат загрузочный код каждой программы C .

Даже такие нативные программы компилируются в собственный исполняемый формат (тот, который используется в Linux, называется ELF), и ядро ​​ОС должно знать, как читать этот формат в инструкции и загружать их так, чтобы процессор мог интерпретировать и выполнить их. Таким образом, операционные системы также являются средами выполнения. (Обратите внимание, что хотя ядро ​​ОС является основной программой ОС, часто другие программы также являются частью этой среды выполнения, например динамические компоновщики.)

Как вы можете видеть, среды выполнения часто складываются: у вас может быть аппаратное обеспечение Intel x86 с ядром MacOS под управлением программы гипервизора под управлением виртуальной машины Linux с JVM.

Docker Runtime

Теперь все образы докеров, с которыми вы столкнетесь, основаны на Linux. Все нативные программы, установленные в этих образах, включая среды выполнения, такие как JVM и интерпретатор Python, являются нативными программами, скомпилированными для Linux (то есть исполняемыми файлами ELF).

Когда вы запускаете Docker-контейнер в Linux, должны произойти две вещи:

Во-первых, Docker должен настроить контейнер (Настройка таких вещей, как наложение файловых систем и групп управления).

Во-вторых, докеру нужно каким-то образом получить некоторые из исполняемых файлов (ELF) (например, JVM или вашу собственную программу на C) в контейнере для запуска.

Обе эти вещи хранятся в категории «загрузка программы», за которую отвечает среда выполнения.

Linux - единственное ядро ​​операционной системы, которое имеет все эти функции - оверлейные файловые системы, группы управления и загрузку ELF - которые используются докером.

Например, MacOS, эти технологии не существуют (AFAICT), и поэтому для запуска контейнера Docker Docker должен запускать свои контейнеры внутри виртуальной машины Linux, которая функционирует как среда выполнения, которая может загружать образы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...