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


9

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


3
Просто: свобода. Свобода создавать свою собственную версию того, что вам нужно. Ядро? Ракушка? Desktop. Действуй.
— Rinzwind

6
Потому что они являются отдельными? По той же причине, по которой оконный менеджер обрабатывается отдельно от X-сервера (потому что они отдельные) и почему оболочка обрабатывается отдельно от эмулятора терминала (потому что они тоже отдельные). Теперь, если бы вы спросили, почему они были разработаны таким образом ...
— user253751

Ubuntu теперь также работает поверх ядра Windows 10, что показывает, что это настоящее разделение. Конечно, Windows не поставляется с X-сервером, который немного усложняет ситуацию, но этого следует ожидать, когда части отсутствуют.
— MSalters

@MSalters Оконный менеджер в Windows немного хитрый, да; однако, если кто-то действительно хочет запустить X в Windows, существует множество способов справиться с этим. Самым простым для постороннего, вероятно, будет серверный «эмулятор» поверх существующего оконного менеджера, хотя я понятия не имею, насколько хорошо это можно отобразить (в последний раз, когда я видел внутренности X, я не очень надеялся). Я бы не задерживал дыхание - мне кажется, что многие люди не хотят, чтобы X работал на Windows.
— Луаан

Ответы:


12

Вся система GNU / Linux построена с использованием модульного подхода. В основном вы можете обновить ( заменить в целом) один модуль, не касаясь других. Рассматриваемый модуль может быть загрузчиком, ядром, оболочкой, командой, средой рабочего стола, приложением с графическим интерфейсом, чем угодно ...

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

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

sudo apt install linux-image-<version>

Пока APT позволяет это делать, вы должны иметь возможность перезагрузить и использовать выбранную версию ядра, будь то универсальная, низкая загрузка и т. Д. Или вы сами создаете версию ядра, например, Real-Time Linux , и используете ее с вашей текущей системой. ,


Большое спасибо, но будет ли это соответствовать? Скажем, Ubuntu 14.04 LTS имеет версию ядра 3.19.0, и в случае обновления ядра это больше не 14.04 LTS, верно? Так что, если я попытаюсь обновить всю систему позже, или встроенный механизм обновления (Software Updater) принесет мне новую версию, узнает ли она об обновленной версии ядра? Может ли модуль проверять модули отдельно и вносить только необходимые изменения, не затрагивая уже обновленные модули?
— Ветер снов

1
См. Packages.ubuntu.com/search?keywords=linux-image для длинного списка версий ядра, которые поддерживает каждая версия Ubuntu. Версия Ubuntu определяется разными вещами из версии ядра, но я не совсем знаю, какие из них ... Если вам это интересно, вы можете задать другой вопрос.
— Мелебиус

1
@AleksandrMedvedev Намного позже я нашел это! Версия Ubuntu указана в файле, /etc/issueкоторый предоставляется base-filesпакетом. Как я уже писал, это не связано с версией ядра.
— Мелебиус

5

Как вы знаете, ядро ​​является важной частью ОС, в дистрибутивах 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

Это определенно не правда.
— mook765

Поправь меня;) чтобы я узнал что-то новое :)
— Ravexina

3
sudo apt upgradeобновит ядро, если появятся новые версии. sudo apt full-upgradeудалит задницу хорошо, что asudo apt upgradeне сделаю.
— Сорен А

Поскольку я сейчас перехожу на новое ядро, это своего рода установка, и при использовании upgradeподкоманды он не устанавливает никаких новых пакетов, а также не удаляет какие-либо пакеты, поэтому мы используем его dist-upgrade. по крайней мере, так apt-getработает;) поэтому я обновил свои команды, чтобы избежать путаницы.
— Равексина

1
У меня больше опыта работы с apt-командой, после небольшого исследования выясняется, что ваш ответ теперь правильный, aptи apt-getчто-то не так, см. Hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -command / ... . Итак, некоторые знания для нас обоих ...
— mook765

3

Сначала несколько пояснений, потому что я чувствую, что вы не понимаете, как появились системы 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" и т. д.,

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

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

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

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


GNU начиналась не с того, чтобы «улучшить» многие распространенные команды UNIX. GNU была операционной системой с самого начала, с целью свободного программного обеспечения в ответ на ограниченную собственность UNIX. Вы можете прочитать больше на их сайте . Они решили перенести все свое программное обеспечение на Linux, потому что к моменту создания Linux у GNU еще не было работающего ядра.
— Ян Эмнас,

3

Самый простой ответ не имеет ничего общего с 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 Мб или около того).


«Острая граница (АБИ)». Я думаю, что вы имеете в виду API. Из-за отсутствия лучшего термина ABI представляет собой интерфейс кода к оборудованию. API, с другой стороны, представляет собой интерфейс код-код.
— Сэм

1

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.