Чому операційна система та ядро ​​обробляються окремо в 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.