Почему в Linux операционная система и ядро ​​рассматриваются отдельно? [закрыто]

Когда дело доходит до любой операционной системы Linux, включая Ubuntu, люди склонны различать термины ядро ​​ и операционная система . Это верно для Windows и семейства OS X, но почему это так широко распространено среди Linux-сообщества? Есть ли способ обновить ядро ​​ОС без обновления самой ОС? Или наоборот? Если да, то как это может быть полезно?

9
задан 16 October 2017 в 00:08

5 ответов

Целая система GNU/Linux создается с помощью модульного подхода. Можно главным образом обновить ( замена в целом) единственный модуль без касающихся других. Рассматриваемый модуль может быть загрузчиком, ядром, оболочкой, командой, настольной средой, приложением GUI, whatever†¦

, Конечно, это верно, пока Вы можете управлять зависимостями правильно. В наборе дистрибутивов вокруг Ubuntu APT используется для разрешения зависимостей автоматически.

можно установить другую версию ядра с помощью команды:

sudo apt install linux-image-<version>

, пока APT позволяет его, необходимо смочь перезагрузить и использовать выбранную версию ядра, быть этим универсальный, lowlatency и т.д., Или Вы создаете версию ядра сами, например, Linux В реальном времени, и используете его с Вашей существующей системой.

12
ответ дан 23 November 2019 в 04:47

Во-первых, несколько пояснений, потому что я чувствую, что вы не понимаете, как появились системы GNU / Linux. Потерпи меня, если для тебя в этом нет ничего нового:

«Ядро» - это не просто еще одна программа, которая запускается, а часть операционной системы, предоставляющая базовые функции: если ты хочешь запустить программу (скажем, , вы вводите «ls» в командной строке) двоичный файл должен быть загружен с диска (который включает в себя некоторые операции с файловой системой для его обнаружения и некоторую обработку файла для его чтения), затем создается «среда процесса»: память назначается Выдается номер процесса и т. д. и т. д. Все предыдущие действия (FS, чтение из файла, ...) обрабатываются системными библиотеками, но последние являются функциями ядра. В некотором смысле ядро ​​«является ОС», а все остальное - просто украшение вокруг него.

«Linux» на самом деле (только!) - ядро ​​без других частей ОС. Линус Торвальдс начал писать, взяв ядро ​​операционной системы MINIX на основе шаблона Эндрю Таненбаумса и завершив его, чтобы оно стало полноценным и реально работоспособным ядром. По сей день есть Линус (и многие другие, которые внесли / внесли свой вклад), которые развивают это ядро. Это ядро ​​все еще очень похоже на UNIX, но НЕ на ядро ​​UNIX.

«GNU» начал как инициативу, чтобы «улучшить» многие распространенные команды UNIX. Я не буду обсуждать, преуспели они или нет, но они определенно написали много программного обеспечения и в какой-то момент имели набор служебных программ. Они даже начали разрабатывать собственное ядро ​​ОС (HURD), которое было основано главным образом на UNIX, но определенно отличалось. Но по сей день HURD находится на ранней стадии разработки и вряд ли является рабочим решением. "GNU" между прочим сокращение от «GNU (is) Not UNIX» - они пытались преодолеть некоторые (предполагаемые или реальные) ограничения UNIX с целью создания преемника UNIX (опять же: я не хочу вступать в дискуссию, если они преуспели или нет - мне все равно, "лучше" или "хуже", но это определенно другое!).

Итак, с набором инструментов, в которых отсутствует ядро, и в ядре, в котором отсутствует набор инструментов, было естественным явлением соединить эти два: GNU / Linux был создан.

Тем не менее, чтобы иметь работающую (и работоспособную) ОС, вам нужно больше, чем просто ядро ​​и набор инструментов: вам нужна система управления пакетами, вам нужны процедуры установки, вам нужны конфигурации шаблонов, вам нужно ....

Несколько разных людей (или их групп) пришли к такому выводу и использовали комбинацию GNU / Linux для создания системы GNU / Linux по своему вкусу, добавив в точности то, о чем я говорил выше: они создали менеджер пакетов, система упаковки, процедуры установки и многое другое. Эти разные группы (соответственно, результаты их усилий) являются тем, чем являются различные распределения. Сегодня существует три разных менеджера пакетов (подходящих для Debian и производных систем, таких как * ubuntu, rpm для RedHat и производных систем, таких как Fedora, CentOS и др., Pacman для ArchLinux), но все они просто управляют пакетами программного обеспечения, которое (по сути) то же самое: то, что вызывается, когда вы запускаете "ls" или "df" и т. д. в системе Debian или RHEL-системе, происходит из разных пакетов, но по сути это GNU-версия "ls" - (" Программа df "-), просто по-разному упакованная.

Таким образом, «в принципе» вы можете обновить ядро ​​в одиночку, как это делали люди, создавшие дистрибутив из разных версий всего программного обеспечения, о котором я говорил выше.

Но, и это действительно большое НО: потому что есть не только ядро ​​и некоторое дополнительное программное обеспечение, но и много других вещей, о которых следует помнить, таких как инструменты конфигурации системы (systemd, которые используются некоторыми дистрибутивами, а некоторые - нет). ), инструменты управления сетью, такие как NetworkManager, который, в свою очередь, зависит от некоторых версий библиотеки GNOME и т. д. и т. д. - «распространение» - довольно сложная вещь, и есть вероятность, что если вы попытаетесь обновить ядро, то в итоге вы обновляете много других вещей из-за множества взаимозависимостей.

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

Надеюсь, это ответит на ваш вопрос.

3
ответ дан 23 November 2019 в 04:47

Самый простой ответ не имеет ничего общего с Ubuntu; это связано с тем, как построен GNU / Linux. Если вы попытаетесь посмотреть на нее как на разработчика системы, вы увидите два мира, каждый из которых разделен четкой границей (ABI).

Мир ядра, в котором работают низкоуровневые разработчики, - это система сама по себе. В нем есть все, что вы обычно найдете в обычном приложении. Единственное отличие состоит в том, что пользователь - это не тот человек, который пользуется машиной, а мир пользователя. Ядро «приложение» - это посредник, сервер, который использует машину - призрак в оболочке.

Теперь пространство пользователя - это нормальный мир, в который играют обычные пользователи и разработчики. Он имеет жесткие API, правила, файлы и, самое главное, абстрактный детский образ машины, на которой он работает. Поскольку пользователь видит только эту часть, а это составляет 99% от размера дистрибутива, легко назвать ее «Операционная система». Правильная номенклатура - называть это дистрибутивом программного обеспечения, созданным какой-либо сущностью (Canonical, Fedora и т. Д.), Использующим ядро ​​(Linux, HURD, BSD и т. Д.) И построенным с использованием набора инструментов (обычно предоставляемых GNU). ).

Чтобы ответить на ваш вопрос, в GNU / Linux (как и в Windows и OSX, поверьте мне) вы можете изменить ядро, не только версию, но и всю архитектуру (ядро Linux, против ядра HURD), и, до тех пор, пока ABI не затронут, никогда не вносите ни одного изменения в пользовательский мир ... В те времена, когда настоящему человеку приходилось собирать ядро ​​из исходных текстов, вы могли бы выполнить несколько таких изменений, чтобы получить дрянная веб-камера USB для работы ... Теперь, с модульным ядром, вам просто нужно установить модуль, и вы получите совершенно новый мир ядра, с расширением ABI (иногда) с новыми функциями ...

Опять же, то же самое для пользовательского пространства. Когда вы устанавливаете новое приложение, скажем, из репозитория Ubuntu, в 99% случаев вашей главной заботой является совместимость других компонентов пользовательского пространства, а не реального ядра. Бывают случаи, когда версия ядра диктует (через ABI) диапазон вещей, которые можно установить в пользовательском пространстве, но цель (по крайней мере, для разработчиков) состоит в том, чтобы это исчезло ...

Еще одна вещь для размышления: вы можете (и это довольно легко) создать свой собственный, уникальный в своем роде дистрибутив GNU / Linux. Получить ядро, несколько простых скриптов, несколько приложений, и все готово. Это так просто (взгляните на дистрибутивы OpenWRT GNU / Linux, для сетевого оборудования весь дистрибутив умещается в 16 Мб или около того).

3
ответ дан 23 November 2019 в 04:47

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

Также некоторые продвинутые или профессиональные пользователи перекомпилируют ядро, чтобы изменить его поведение в соответствии с их потребностями. В таком случае вы, очевидно, не захотите, чтобы он автоматически заменялся заводской версией при каждом обновлении.

1
ответ дан 23 November 2019 в 04:47

Поскольку Вы знаете, что Ядро является важной частью ОС, в GNU/дистрибутивах Linux можно легко обновить ядро, не касаясь другой части ОС. Однако мы просто обновляем часть нашей ОС.

Операционная система сделана из двух частей, пространства ядра и пространства пользователя.

Таким образом да, можно обновить пространство ядра, не касаясь пространства пользователя, если только новая версия совместима с текущим пространством пользователя.

И об обновлении инструментов пространства пользователя, это - другой да.

Когда Вы работаете:

sudo apt-get upgrade

Если было обновление, доступное для ядра, Вы доберетесь:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

таким образом, Вы только обновляете свое пространство пользователя и когда Вы выполняете что-то как

sudo apt-get dist-upgrade

Вы обновляете все включая ядро.

Для обновления только Ядра до более новой версии используют что-то как:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

для нахождения списка более новых ядер затем установите его как новый пакет, например:

sudo apt install linux-image-4.10.0-14-generic
5
ответ дан 23 November 2019 в 04:47

Другие вопросы по тегам:

Похожие вопросы: