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


9

Якщо мова йде про будь-яку операційну систему Linux, включаючи Ubuntu, люди схильні розрізняти терміни ядро та операційну систему . Це правильно для Windows та сімейства OS X, але чому так поширений серед Linux-спільноти? Чи є спосіб оновити ядро ​​ОС, не оновлюючи саму ОС? Або навпаки? Якщо так, як це може бути корисним?


3
Просто: свобода. Свобода створювати власну версію того, що вам здається потрібним. Ядро? Раковина? Настільний. Дій.
— Рінцвінд

6
Тому що вони є окремими? З тієї ж причини, чому менеджер вікон обробляється окремо від X-сервера (оскільки вони окремі), і чому оболонку обробляють окремо від емулятора терміналу (оскільки вони теж окремі). Тепер, якщо ви запитаєте, чому вони були розроблені саме так ...
— user253751

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

@MSalters Менеджер вікон у Windows трохи складний, так; однак, якщо хтось насправді хоче запустити X у Windows, існує багато способів вирішити це. Найпростішим для сторонніх, мабуть, буде серверний "емулятор" поверх існуючого менеджера вікон, хоча я не маю уявлення, наскільки добре це могло б скласти карту (востаннє, коли я бачив X внутрішніх справ, я не дуже сподівався). Я б не затримував дихання - мені це не здається так, як ніби багато людей цікавили, що X працює на Windows.
— Луань

Відповіді:


12

Вся система GNU / Linux побудована за допомогою модульного підходу. Ви можете в основному оновити ( замінити взагалі) один модуль, не торкаючись інших. Модуль, про який йде мова, може бути завантажувачем, ядром, оболонкою, командою, робочим середовищем, додатком GUI, будь-яким іншим ...

Звичайно, це правда, доки ти вмієш правильно керувати залежностями. У наборі дистрибутивів навколо Ubuntu APT використовується для автоматичного вирішення залежностей.

Ви можете встановити іншу версію ядра за допомогою команди:

sudo apt install linux-image-<version>

Поки APT дозволяє, ви маєте можливість перезавантажувати та використовувати вибрану версію ядра, будь то загальна, низька затримка тощо. Або ви самостійно будуєте версію ядра, наприклад, Linux в режимі реального часу та використовуєте її в поточній системі .


Дякую велике, але чи буде це послідовно? Скажімо, Ubuntu 14.04 LTS має версію ядра 3.19.0, а у випадку оновлення ядра це вже не 14,04 LTS, правда? Тож якщо я спробую пізніше оновити всю систему, або вбудований механізм оновлення (Software Updater) принесе мені нову версію, чи буде про неї відомо про оновлену версію ядра? Чи може він перевіряти модулі окремо і вносити лише необхідні зміни, не впливаючи на вже оновлені модулі?
— Вітер снів

1
Див. Пакети.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

Виправте мене;) тому я дізнаюся щось нове :)
— Равексіна

3
sudo apt upgradeтакож буде оновлено ядро, якщо доступні нові версії. sudo apt full-upgradeдобре прибере пакетики, що asudo apt upgradeробити не буде.
— Soren A

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

1
Я більш досвідчений із команди apt, після короткого дослідження, здається, що ваша відповідь правильна зараз, aptі вирішуйтеapt-get щось інше, дивіться hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -команда /… . Отже, деякі знання для нас обох ...
— mook765

3

По-перше, кілька уточнень, тому що я думаю, ви не розумієте, як виникли системи GNU / Linux. Несіть мене, якщо для вас це не нове:

"Kernel" - це не просто інша програма, яка працює, але це частина ОС, що забезпечує базові функції: якщо ви хочете запустити програму (скажімо, введіть "ls" у командному рядку), двійковий файл повинен бути завантажений. з диска (який включає деякі операції з файловою системою для його знаходження та деяку обробку файлів для його читання), тоді створюється "середовище процесів": присвоюється пам'ять, видається номер процесу і т. д. і т.д. (FS, зчитування з файлу, ...) обробляються системними бібліотеками, але останні - це функції ядра. У деякому сенсі ядро ​​"є ОС", а все інше - це лише прикраса навколо нього.

"Linux" насправді (тільки!) Ядро, в якому немає інших частин ОС. Лінус Торвальдс почав писати його, взявши ядро ​​ОС Ендрю Таненбаума MINIX і доповнивши його таким чином, щоб воно було повнокровним і справжнім працездатним ядром. На сьогоднішній день є Лінус (та багато інших, хто сприяє / зробив свій внесок), які розробляють це ядро. Це ядро ​​все ще дуже схоже на UNIX, але НЕ ядро ​​UNIX.

"GNU" почалася як ініціатива "покращити" багато загальних команд UNIX. Я не буду обговорювати, чи вдалося їм це чи ні, але вони, безумовно, написали багато програмного забезпечення і одного разу мали колекцію корисних програм. Вони навіть почали розробляти власне ядро ​​ОС (HURD), яке багато в чому базувалося на UNIX, але напевно було іншим. Але по сьогоднішній день HURD перебуває в ранньому розвитку та навряд чи працює. "GNU" btw. скорочено "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 Kernel, проти HURD Kernel), і, поки ABI не зачіпається, ніколи не вносите жодної зміни в користувальницький світ ... Ще в той час, коли справжньому чоловікові довелося будувати ядро ​​з джерел, ви могли пройти кілька таких змін, щоб отримати шалену веб-камеру USB щоб працювати ... Тепер, з модульним ядром, вам просто потрібно встановити модуль, і ви отримаєте абсолютно новий світ ядра, причому ABI (іноді) поширюється на нові функції ...

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

Інша річ, на яку можна замислитися, ви можете (і це досить просто) створити власний, спеціальний, єдиний у своєму роді дистрибутив GNU / Linux. Отримайте ядро, кілька простих сценаріїв, кілька додатків, і ви налаштовані. Це просто так (подивіться на дистрибутиви OpenWRT GNU / Linux; для мережевих передач весь дистрибутив відповідає 16Mb або так далі).


"різка межа (ABI)." Я думаю, ти маєш на увазі API. ABI - це відсутність кращого терміна, кодовий апаратний інтерфейс. API з іншого боку - це інтерфейс коду до коду.
— Сем

1

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.