Головна » як » Що таке ядро ​​Linux і що він робить?

    Що таке ядро ​​Linux і що він робить?


    З більш ніж 13 мільйонами рядків коду, ядро ​​Linux є одним з найбільших відкритих проектів у світі, але що таке ядро ​​і для чого він використовується?

    Так що ж таке ядро?

    Ядро - це найнижчий рівень легко замінного програмного забезпечення, який взаємодіє з апаратним забезпеченням вашого комп'ютера. Вона відповідає за взаємодію всіх ваших додатків, які працюють у режимі користувача, аж до фізичних апаратних засобів, і дозволяє процесам, відомим як сервери, отримувати інформацію один від одного за допомогою взаємодії між процесами (IPC).

    Різні типи ядер

    Є, звичайно, різні способи побудови ядра і архітектурних міркувань при побудові одного з нуля. Загалом, більшість ядер входить до трьох типів: монолітний, мікроядерний і гібридний. Linux є монолітним ядром, в той час як OS X (XNU) і Windows 7 використовують гібридні ядра. Давайте зробимо короткий тур по трьом категоріям, щоб ми могли піти більш детально пізніше.


    Зображення на попкорн у верхній частині міста

    Мікроядро
    Мікроядро приймає підхід лише до того, що він має: процесор, пам'ять і IPC. Практично все інше в комп'ютері можна розглядати як аксесуар і можна обробляти в режимі користувача. Мікроядра мають переваги переносимості, оскільки вони не повинні турбуватися, якщо ви зміните відеоадаптер або навіть вашу операційну систему, доки операційна система все ще намагається отримати доступ до апаратних засобів так само. Мікроядра також мають дуже малий розмір, як для пам'яті, так і для простору встановлення, і вони, як правило, є більш безпечними, тому що у спеціальному режимі працюють лише специфічні процеси, які не мають високих дозволів як режим супервізора..

    Плюси

    • Переносимість
    • Невеликий розмір інсталяції
    • Малий розмір пам'яті
    • Безпека

    Мінуси

    • Апаратне забезпечення більш абстрактно через водії
    • Обладнання може реагувати повільніше, оскільки драйвери знаходяться в режимі користувача
    • Процеси повинні чекати в черзі, щоб отримати інформацію
    • Процеси не можуть отримати доступ до інших процесів без очікування

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

    Плюси

    • Більш прямий доступ до апаратних засобів для програм
    • Легше спілкуватися між процесами
    • Якщо ваш пристрій підтримується, він повинен працювати без додаткових установок
    • Процеси реагують швидше, оскільки не існує черги за процесорним часом

    Мінуси

    • Великий монтажний слід
    • Великий обсяг пам'яті
    • Менш безпечно, тому що все працює в режимі супервізора


    Зображення через schoschie на Flickr

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

    Плюси

    • Розробник може вибирати і вибирати те, що виконується в режимі користувача і що працює в режимі супервізора
    • Менше встановлюють площу, ніж монолітне ядро
    • Більш гнучкі, ніж інші моделі

    Мінуси

    • Може страждати від того ж процесу відставання, як мікроядро
    • Драйвери пристроїв повинні керуватися користувачем (як правило)

    Де файли ядра Linux?

    Файл ядра в Ubuntu зберігається в папці / boot і називається vmlinuz-версії. Назва vmlinuz походить з світу unix, де вони називали свої ядра просто "unix" ще в 60-х роках, тому Linux почав називати своє ядро ​​"linux", коли він був розроблений в 90-х роках..

    Коли віртуальна пам'ять була розроблена для спрощення багатозадачності, "vm" була поміщена в передній частині файлу, щоб показати, що ядро ​​підтримує віртуальну пам'ять. На деякий час ядро ​​Linux називалося vmlinux, але ядро ​​стало занадто великим, щоб поміститися в доступну завантажувальну пам'ять, так що зображення ядра було стиснене, а закінчення x було змінено на z, щоб показати, що він стиснутий з zlib стисненням. Ця ж сама компресія не завжди використовується, часто замінюється на LZMA або BZIP2, а деякі ядра просто називаються zImage.

    Нумерація версій буде у форматі A.B.C.D, де A.B, ймовірно, буде 2.6, C буде вашою версією, а D - вашими виправленнями або виправленнями.

    У папці / boot також будуть інші дуже важливі файли під назвою initrd.img-version, system.map-version та config-version. Файл initrd використовується як невеликий диск RAM, який витягує і виконує фактичний файл ядра. Файл system.map використовується для керування пам'яттю до того, як ядро ​​повністю завантажиться, а конфігураційний файл повідомляє ядро ​​про те, які параметри та модулі завантажуватимуться у зображення ядра, коли воно збирається..

    Архітектура ядра Linux

    Оскільки ядро ​​Linux є монолітним, воно має найбільший розмір і найскладніший за інші типи ядер. Це була особливість дизайну, яка перебувала під дебатами в перші дні Linux і все ще несе в собі деякі недоліки дизайну, що монолітні ядра притаманні.

    Одна річ, яку розробники ядра Linux зробили для того, щоб обійти ці недоліки, полягала в тому, щоб створити модулі ядра, які можна було завантажувати і вивантажувати під час виконання, тобто ви могли додавати або вилучати функції вашого ядра на льоту. Це може виходити за межі простого додавання функцій апаратного забезпечення до ядра, включаючи модулі, які запускають серверні процеси, такі як віртуалізація на низькому рівні, але він також може дозволити замінити все ядро ​​без необхідності перезавантаження комп'ютера в деяких випадках.

    Уявіть собі, якщо ви можете перейти на пакет оновлень Windows, не потребуючи перезавантаження ...

    Модулі ядра

    Що робити, якщо Windows має всі встановлені драйвери, і ви просто повинні були включити потрібні драйвери? Це по суті те, що модулі ядра роблять для Linux. Модулі ядра, також відомі як завантажуваний модуль ядра (LKM), мають важливе значення для підтримки функціонування ядра з усіма вашими апаратними засобами, не споживаючи всієї доступної пам'яті..

    Модуль зазвичай додає функціональні можливості базового ядра для таких пристроїв, файлових систем і системних викликів. LKM мають розширення файлу .ko і зазвичай зберігаються в каталозі / lib / modules. Через їхню модульну природу ви можете легко налаштувати ядро, встановивши модулі для завантаження або не завантаження під час запуску з командою menuconfig або шляхом редагування файлу / boot / config, або ви можете завантажувати та вивантажувати модулі на ходу з modprobe команду.

    Модулі сторонніх і закритих джерел доступні в деяких дистрибутивах, як Ubuntu, і можуть бути не встановлені за замовчуванням, оскільки вихідний код модулів недоступний. Розробник програмного забезпечення (наприклад, nVidia, ATI, серед інших) не надає вихідний код, а створює власні модулі та компілює необхідні файли .ko для розповсюдження. Хоча ці модулі є безкоштовними, як у пиві, вони не є вільними, як у мові, і тому не входять до деяких дистрибутивів, тому що супроводжуючі відчувають, що він "заважає" ядру, надаючи не вільне програмне забезпечення.

    Ядро не є магічним, але це абсолютно необхідно для будь-якого комп'ютера, який працює належним чином. Ядро Linux відрізняється від ядра OS X і Windows, оскільки воно включає драйвери на рівні ядра і робить багато речей підтриманими «з коробки». Сподіваємося, ви дізнаєтеся трохи більше про те, як ваше програмне та апаратне забезпечення працює разом і які файли потрібно завантажувати.

    Kernel.org
    Зображення на ingridtaylar