Внутрішній пристрій Лінукс. Книга «Внутрішній пристрій Linux

Внутрішній пристрій LinuxБраян Уорд

(Поки що оцінок немає)

Назва: Внутрішній пристрій Linux

Про книгу «Внутрішній пристрій Linux» Брайан Уорд

Операційна система Linux - це гідна альтернатива Windows, деякі версії якої не зовсім зручні і занадто важкі для ресурсів комп'ютера. Браян Уорд написав приголомшливу книгу-самовчитель, яка підійде всім охочим познайомитися з цією системою та її багатими можливостями практично з нуля. Читати книгу “Внутрішній пристрій Linux” рекомендується тим, хто хоче вникнути у всі механізми ядра Linux, зрозуміти його внутрішній пристрій та філософію. Для поверхневого вивчення принципів роботи та перенесення шаблонних схем з однієї операційної системи на іншу ця праця не підійде.

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

Комп'ютерна праця "Внутрішній пристрій Linux" дуже деталізована і розбита на 17 розділів. У перших чотирьох розділах автор розповідає про загальні поняття цієї системи та про принцип її роботи: про влаштування ядра та оболонки, основні команди та структуру каталогів, про функціональність файлових та дискових систем. Далі йде більше інформація про початок роботи з цією системою: як відбувається завантаження ядра Linux і запуск простору користувача. У наступних розділах більш поглиблено розглядаються робочі процеси Linux та використання його ресурсів. Крім того, Браян Уорд торкнувся питань програмування сценаріїв оболонки та роботи з мовою C. Від загального матеріалу автор поступово заглиблюється в деталі, які становлять інтерес для розробників програмного забезпечення.

Книга не тільки є оглядом системи Linux, але й містить практичні завдання, які дозволять читачеві створити свій користувальницький простір і придбати вміння та навички роботи в цій оболонці.

Браян Уорд підніс матеріал доступною мовою з безліччю прикладів та пояснень. Книга добре структурована і може використовуватися як довідник. Автор підтверджує, що оболонка Linux - це зручно і функціонально, розкриває можливості, як можна підлаштувати її під свої запити. Для тих, кому цікавий пристрій тих чи інших програм, ця книга буде чудовою знахідкою, адже вона розкриває механізми комп'ютерних процесів, демонструє причинно-наслідкові зв'язки між ними.

На нашому сайті про книги сайт ви можете завантажити безкоштовно без реєстрації або читати онлайн книгу «Внутрішній пристрій Linux» Брайан Уорд у форматах epub, fb2, txt, rtf, pdf для iPad, iPhone, Android та Kindle. Книга подарує вам масу приємних моментів та справжнє задоволення від читання. Придбати повну версію ви можете у нашого партнера. Також, у нас ви знайдете останні новини з літературного світу, дізнаєтесь про біографію улюблених авторів. Для письменників-початківців є окремий розділ з корисними порадами та рекомендаціями, цікавими статтями, завдяки яким ви самі зможете спробувати свої сили в літературній майстерності.

Скачати безкоштовно книгу «Внутрішній пристрій Linux» Брайан Уорд

У форматі fb2: Завантажити
У форматі rtf: Завантажити
У форматі epub: Завантажити
У форматі txt:

Книжка, яку ви тримаєте в руках, вже стала бестселером на Заході. Вона описує всі тонкощі роботи з операційною системою Linux, системне адміністрування, глибокі механізми, які забезпечують низькорівневий функціонал Linux. На сторінках цієї книги ви отримаєте базові знання про роботу з ядром Linux і принципи правильної експлуатації комп'ютерних мереж. У книзі також порушуються питання програмування сценаріїв оболонки та поводження з мовою С, висвітлюються теми захисту інформації, віртуалізації та інші незамінні речі.

Рівні та шари абстракції в операційній системі Linux

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

В операційній системі Linux три основні рівні. В основі розташовані апаратні засоби. Вони включають пам'ять, а також один або кілька центральних процесорів (CPU), що виконують обчислення та запити на читання з пам'яті та запис до неї. Такі пристрої, як жорсткі диски та мережні інтерфейси, також належать до апаратних засобів.

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

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

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

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

Теоретично неконтрольований користувальницький процес не здатний завдати істотної шкоди системі. В дійсності все залежить від того, що саме ви вважаєте «істотною шкодою», а також від особливих привілеїв даного процесу, оскільки деяким процесам дозволено робити більше, ніж іншим. Наприклад, чи може процес користувача повністю знищити дані на жорсткому диску? Якщо належним чином налаштувати дозволи, то зможе, і вам це виявиться вкрай небезпечним. Для запобігання цьому існують захисні заходи, і більшість процесів просто не дозволять сіяти смуту подібним чином.

Основні команди та структура каталогів

Цей розділ є довідником з команд та утиліт операційної системи Unix. Ймовірно, ви вже знаєте більшість цих команд, але для підкріплення впевненості, особливо щодо структури каталогів. Тут представлений вступний матеріал, на який я буду посилатися протягом усієї книги.

Чому йтиметься про команди Unix? Хіба ця книга не про те, як працює Linux? Так, звичайно ж, про це, але в самій серцевині Linux закладено систему Unix.

Тут ви зустрінете слово Unix частіше, ніж слово Linux, оскільки отримані відомості можна відразу застосувати до Solaris, BSD та інших систем, пов'язаних з Unix. Я спробував піти від розгляду зайвого числа розширень інтерфейсу користувача, специфічних для Linux, не тільки заради того, щоб у вас з'явився міцний фундамент для використання інших систем, але і тому, що такі розширення досить нестабільні. Ви зможете адаптувати нові випуски системи Linux швидше, якщо знатимете основні команди.

Як відбувається завантаження ядра Linux

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

  1. Система BIOS або прошивка завантаження завантажують та запускають завантажувач системи.
  2. Завантажувач системи шукає образ ядра на диску, завантажує їх у пам'ять і запускає.
  3. Ядро виконує ініціалізацію пристроїв та їх драйверів.
  4. Ядро монтує кореневу файлову систему.
  5. Ядро запускає команду init із ідентифікатором процесу1. Ця точка є початком простору користувача.
  6. Команда init приводить у дію інші системні процеси.
  7. У певний момент команда init запускає процес, що дозволяє вам увійти до системи. Зазвичай це відбувається наприкінці чи незадовго до закінчення завантаження системи.

Тут розглянуті кроки з першого до четвертого, основну увагу приділено завантажувачам ядра та системи. В главе6 продовжується розповідь про завантаження простору користувача.

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

Введення в програмне забезпечення для компіляції коду мовою C

Більшість загальнодоступних пакетів сторонніх розробників програмного забезпечення для Unix постачаються у вигляді вихідного коду, який можна скомпонувати та встановити. Однією з причин для цього є така кількість різних версій і архітектур Unix (і самої Linux), що було б важко створити двійкові пакети для всіх можливих комбінацій платформ. Ще одна важлива причина полягає в тому, що широке розповсюдження вихідного коду в Unix спільноті надихає користувачів на виправлення помилок у програмне забезпечення та внесення нових функцій, наповнюючи змістом термін «відкритий вихідний код».

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

Linux зазвичай забезпечує прості способи оновлення найважливіших частин системи, таких як команди в каталозі /bin, а однією надзвичайно важливою властивістю систем є те, що вони зазвичай дуже швидко усувають проблеми захисту. Однак, не чекайте, що ваша версія забезпечить вас усім необхідним без вашої участі. Ось кілька причин, з яких може знадобитися самостійно встановити певні пакети:

  • щоб контролювати параметри конфігурації;
  • щоб встановити програмне забезпечення туди, куди вам необхідно. Можна навіть встановити кілька різних версій одного пакета;
  • щоб керувати версією, яку ви встановлюєте. У дистрибутивах системи не завжди присутня остання версія всіх пакетів, особливо які стосуються додаткового ПЗ (такого як бібліотеки Python);
  • щоб краще розуміти, як працює пакет.

Веб-сервери та програми

Linux є популярною системою для веб-серверів, а правлячим монархом серед серверів додатків Linux є Apache HTTP Server (який зазвичай називають просто Apache). Іншим веб-сервером, про який ви часто чутимете, є Tomcat (це також проект розробників Apache); він забезпечує підтримку Java-додатків.

Самі собою веб-сервери виконують небагато: вони можуть зберігати файли, і у цьому все. Кінцевою метою більшості веб-серверів, таких як Apache, є надання платформи для використання веб-додатків. Наприклад, проект Wikipedia побудований на пакеті MediaWiki, який можна використовувати, щоб організувати власний wikiпроект. Системи керування контентом на кшталт WordPress та Drupal дозволяють вам створювати власні блоги та мультимедійні сайти. Всі ці програми базуються на мовах програмування, які особливо добре виявляють себе в Linux. Так, наприклад, системи MediaWiki, WordPress та Drupal написані мовою PHP.

Будівельні блоки, з яких складені веб-додатки, є великою мірою модульними, тому легко додавати власні розширення та створювати додатки за допомогою таких фреймворків, як Django, Flask та Rails, які надають засоби для поширених веб-інфраструктур і функцій, наприклад, використання шаблонів, керування багатьма користувачами та підтримка баз даних.

Download from free file storage

Resolve the captcha to access the links!

У нас вийшла книга Брайна Уорда, яка вже стала бестселером на Заході. Вона описує всі тонкощі роботи з операційною системою Linux, системне адміністрування, глибокі механізми, які забезпечують низькорівневий функціонал Linux. На сторінках цього видання ви отримаєте базові знання про роботу з ядром Linux та принципи правильної експлуатації комп'ютерних мереж. У книзі також порушуються питання програмування сценаріїв оболонки та поводження з мовою С, висвітлюються теми захисту інформації, віртуалізації та інші незамінні речі.

Кому слід читати книгу

Інтерес до пристрою операційної системи Linux може бути викликаний різними причинами. Професіонали у сфері інформаційно-технологічного обслуговування, а також розробники програмного забезпечення для Linux знайдуть у цій книзі практично все, що необхідно знати, щоб використовувати операційну систему якнайкраще. Дослідники та студенти, яким найчастіше доводиться підлаштовувати систему під себе, знайдуть тут практичні пояснення того, чому все влаштовано саме так, а не інакше. Є ще «витівники» - користувачі, яким подобається проводити час за комп'ютером заради розваги, вигоди або й того й іншого одразу. Хочете дізнатися, чому деякі речі працюють, а інші – ні? Вам цікаво, що станеться, якщо щось змінити? Тоді ви належите до «витівників».

Необхідні умови

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

Як читати книгу

Коли йдеться про технічні теми, донести всі необхідні знання – непросте завдання. З одного боку, читач ув'язує у зайвих подробицях і важко засвоює суть, оскільки людський розум просто не може одночасно обробити велику кількість нових понять. З іншого - відсутність подробиць призводить до того, що читач отримує лише невиразне уявлення про предмет і не готовий до засвоєння подальшого матеріалу.

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

Як влаштовано цю книгу

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

У більшості перших розділів (крім розділу 2) активно задіяно ядро ​​системи Linux, але в міру просування книги ви будете працювати і у своєму просторі користувача. Якщо ви не розумієте, про що автор зараз говорить, не турбуйтеся, пояснення будуть надані у розділі 1. Матеріал викладається по можливості без прив'язки до будь-якого дистрибутива системи. Було б нудно описувати всі варіанти системи, тому Уорд спробував розповісти про дві основні сімейства дистрибутивів: Debian (включаючи Ubuntu) та RHEL/Fedora/CentOS. Упор зроблено на серверні версії та версії для робочих станцій. Представлені також впроваджені системи, наприклад, Android та OpenWRT, але вивчення відмінностей цих платформ надається вам.

Що нового у другому виданні

Перше видання цієї книги стосувалося головним чином користувача боку роботи в системі Linux. Основна увага була приділена влаштуванню її частин та тому, як змусити їх функціонувати. Тоді багато елементів системи було важко встановити і коректно налаштувати.

Завдяки наполегливій праці розробників ПЗ та творців дистрибутивів Linux ситуація змінилася. Уорд переглянув матеріал першого видання у пошуках оновлень: особливу увагу приділив процесу завантаження системи та тому, як вона керує обладнанням, а також видалив застарілий матеріал (наприклад, докладне пояснення процесу друку), щоб розширити розгляд ролі ядра системи Linux у кожному дистрибутиві. Ви, мабуть, взаємодієте з ядром набагато частіше, ніж самі про це здогадуєтеся, і автор спеціально наголосив на моментах, коли це буває.

Уорд також змінив послідовність подачі матеріалу в книзі, щоб він відповідав інтересам та потребам сучасних читачів. Єдине, що не змінилося – це обсяг книги.

Автор хотів забезпечити вас відомостями, які знадобляться для швидкого початку роботи. Їхнє засвоєння вимагатиме деяких зусиль, проте Уорд не має наміру робити з вас «важкоатлетів», щоб ви змогли подолати цю книгу. Коли ви будете розуміти найважливіші моменти, викладені тут, вам не важко знайти подробиці і розібратися в них.

Автор вилучив деякі історичні деталі, які були у першому виданні, головним чином, щоб сконцентрувати вашу увагу. Якщо ви цікавитеся системою Linux та її ставленням до історії системи Unix, зверніться до книги Пітера Салуса (Peter H. Salus) The Daemon, Gnu та Penguin (Reed Media Services, 2008) - в ній розказано про те, як розвивалося використовуване нами програмне забезпечення.

Докладніше з книгою можна познайомитися на

Браян Уорд

Внутрішній пристрій Linux

Перекладач С. Черніков

Технічний редактор Н. Грінчик

Літературний редактор О. Андрійович

Художники О. Барцевич, В. Шимкевич

Коректори Т. Кур'янович, Є. Павлович

Верстка О. Барцевич

Браян Уорд

Внутрішній пристрій Linux. – СПб.: Пітер, 2015.

ISBN 978-5-496-01952-1

© ТОВ Видавництво "Пітер", 2015

Всі права захищені. Ніяка частина цієї книги не може бути відтворена в будь-якій формі без письмового дозволу власників авторських прав.

Передмова

Я написав цю книгу, будучи впевненим у тому, що для успішної ефективної роботи ви повинні розуміти, як влаштовано та функціонує програмне забезпечення вашого комп'ютера.

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

Інтерес до пристрою операційної системи Linux може бути викликаний різними причинами. Професіонали у сфері інформаційно-технологічного обслуговування, а також розробники програмного забезпечення для Linux знайдуть у цій книзі практично все, що необхідно знати, щоб використовувати операційну систему якнайкраще. Дослідники та студенти, яким найчастіше доводиться підлаштовувати систему під себе, знайдуть тут практичні пояснення того, чому все влаштовано саме так, а не інакше. Є ще «витівники» - користувачі, яким подобається проводити час за комп'ютером заради розваги, вигоди або й того й іншого одразу.

Хочете дізнатися, чому деякі речі працюють, а інші – ні? Вам цікаво, що станеться, якщо щось змінити? Тоді ви належите до «витівників».

Необхідні умови

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

Коли йдеться про технічні предмети, донести всі необхідні знання – непросте завдання. З одного боку, читач ув'язує у зайвих подробицях і важко засвоює суть, оскільки людський розум просто не може одночасно обробити велику кількість нових понять. З іншого - відсутність подробиць призводить до того, що читач отримує лише невиразне уявлення про предмет і не готовий до засвоєння подальшого матеріалу.

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

Практичний підхід

Для роботи вам знадобиться комп'ютер із операційною системою Linux. Можливо, ви віддасте перевагу віртуальній установці - для перевірки більшої частини матеріалу даної книги я користувався додатком VirtualBox. Ви повинні мати права доступу superuser (root), хоча в основну частину часу слід використовувати обліковий запис звичайного користувача. Ви працюватимете головним чином у командному рядку, вікні терміналу або у віддаленому сеансі. Якщо ви нечасто працювали в цьому середовищі, нічого страшного, з розділу 2 ви дізнаєтесь про це докладніше.

Як правило, команди виглядатимуть так:

Введіть текст, виділений жирним шрифтом; звичайним шрифтом показаний текст у відповідь, який видасть машина. Символ $ є запрошенням для користувача зі звичайним обліковим записом. Якщо ви побачите як запрошення символ #, слід працювати в обліковому записі superuser (докладніше про це - розділ 2).

Як влаштовано цю книгу

На початку книги дається огляд системи Linux, а потім пропонується ряд практичних завдань з інструментами, які вам знадобляться для подальшої роботи в системі. Далі ви детально вивчите кожну частину системи, починаючи з керування обладнанням і закінчуючи конфігурацією мережі, дотримуючись звичайного порядку, в якому відбувається запуск системи. І нарешті, ви отримаєте уявлення про деякі деталі працюючої системи, освоїте кілька важливих навичок, а також познайомитеся з інструментами програмістами.

У більшості перших розділів (крім розділу 2) активно задіяно ядро ​​системи Linux, але в міру просування книги ви будете працювати і у своєму просторі користувача. Якщо ви не розумієте, про що я зараз говорю, не турбуйтеся, пояснення будуть надані в розділі 1.

Матеріал викладається по можливості без прив'язки до будь-якого дистрибутиву системи. Було б нудно описувати всі варіанти системи, тому я спробував розповісти про два основні сімейства дистрибутивів: Debian (включаючи Ubuntu) та RHEL/Fedora/CentOS. Упор зроблено на серверні версії та версії для робочих станцій. Представлені також впроваджені системи, наприклад, Android та OpenWRT, але вивчення відмінностей цих платформ надається вам.

Що нового у другому виданні

Перше видання цієї книги стосувалося головним чином користувача боку роботи в системі Linux. Основна увага була приділена влаштуванню її частин та тому, як змусити їх функціонувати. Тоді багато елементів системи було важко встановити і коректно налаштувати.

Завдяки наполегливій праці розробників ПЗ та творців дистрибутивів Linux ситуація змінилася. Я переглянув матеріал першого видання у пошуках оновлень: особливу увагу приділив процесу завантаження системи та тому, як вона керує обладнанням, а також видалив застарілий матеріал (наприклад, докладне пояснення процесу друку), щоб розширити розгляд ролі ядра системи Linux у кожному дистрибутиві. Ви, мабуть, взаємодієте з ядром набагато частіше, ніж самі про це здогадуєтеся, і я спеціально наголосив на моментах, коли це буває.

Я також змінив послідовність подачі матеріалу у книзі, щоб він відповідав інтересам та потребам сучасних читачів. Єдине, що не змінилося – це обсяг книги.

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

Я вилучив деякі історичні деталі, які були у першому виданні, значною мірою щоб сконцентрувати вашу увагу. Якщо ви цікавитеся системою Linux та її ставленням до історії системи Unix, зверніться до книги Пітера Салуса (Peter H. Salus) The Daemon, the Gnu, and the Penguin(Reed Media Services, 2008) - в ній розказано про те, як розвивалося програмне забезпечення, яке ми використовуємо.

Поточна сторінка: 1 (загалом у книги 30 сторінок) [доступний уривок для читання: 17 сторінок]

Браян Уорд

Внутрішній пристрій Linux

Перекладач С. Черніков

Технічний редактор Н. Грінчик

Літературний редактор О. Андрійович

Художники О. Барцевич, В. Шимкевич

Коректори Т. Кур'янович, Є. Павлович

Верстка О. Барцевич

Браян Уорд

Внутрішній пристрій Linux. - СПб.: Пітер, 2015.

ISBN 978-5-496-01952-1

© ТОВ Видавництво "Пітер", 2015

Всі права захищені. Ніяка частина цієї книги не може бути відтворена в будь-якій формі без письмового дозволу власників авторських прав.

Передмова

Я написав цю книгу, будучи впевненим у тому, що для успішної ефективної роботи ви повинні розуміти, як влаштовано та функціонує програмне забезпечення вашого комп'ютера.

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

Інтерес до пристрою операційної системи Linux може бути викликаний різними причинами. Професіонали у сфері інформаційно-технологічного обслуговування, а також розробники програмного забезпечення для Linux знайдуть у цій книзі практично все, що необхідно знати, щоб використовувати операційну систему якнайкраще. Дослідники та студенти, яким найчастіше доводиться підлаштовувати систему під себе, знайдуть тут практичні пояснення того, чому все влаштовано саме так, а не інакше. Є ще «витівники» – користувачі, яким подобається проводити час за комп'ютером заради розваги, вигоди або й того й іншого одразу.

Хочете дізнатися, чому деякі речі працюють, а інші – ні? Вам цікаво, що станеться, якщо щось змінити? Тоді ви належите до «витівників».

Необхідні умови

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

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

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

Практичний підхід

Для роботи вам знадобиться комп'ютер із операційною системою Linux. Можливо, ви віддасте перевагу віртуальній установці – для перевірки більшої частини матеріалу даної книги я користувався програмою VirtualBox. Ви повинні мати права доступу superuser (root), хоча в основну частину часу слід використовувати обліковий запис звичайного користувача. Ви працюватимете головним чином у командному рядку, вікні терміналу або у віддаленому сеансі. Якщо ви нечасто працювали в цьому середовищі, нічого страшного, з розділу 2 ви дізнаєтесь про це докладніше.

Як правило, команди виглядатимуть так:

Введіть текст, виділений жирним шрифтом; звичайним шрифтом показаний текст у відповідь, який видасть машина. Символ $ є запрошенням для користувача зі звичайним обліковим записом. Якщо ви побачите як запрошення символ #, слід працювати в обліковому записі superuser (докладніше про це – розділ 2).

Як влаштовано цю книгу

На початку книги дається огляд системи Linux, а потім пропонується ряд практичних завдань з інструментами, які вам знадобляться для подальшої роботи в системі. Далі ви детально вивчите кожну частину системи, починаючи з керування обладнанням і закінчуючи конфігурацією мережі, дотримуючись звичайного порядку, в якому відбувається запуск системи. І нарешті, ви отримаєте уявлення про деякі деталі працюючої системи, освоїте кілька важливих навичок, а також познайомитеся з інструментами програмістами.

У більшості перших розділів (крім розділу 2) активно задіяно ядро ​​системи Linux, але в міру просування книги ви будете працювати і у своєму просторі користувача. Якщо ви не розумієте, про що я зараз говорю, не турбуйтеся, пояснення будуть надані в розділі 1.

Матеріал викладається по можливості без прив'язки до будь-якого дистрибутиву системи. Було б нудно описувати всі варіанти системи, тому я спробував розповісти про два основні сімейства дистрибутивів: Debian (включаючи Ubuntu) та RHEL/Fedora/CentOS. Упор зроблено на серверні версії та версії для робочих станцій. Представлені також впроваджені системи, наприклад, Android та OpenWRT, але вивчення відмінностей цих платформ надається вам.

Що нового у другому виданні

Перше видання цієї книги стосувалося головним чином користувача боку роботи в системі Linux. Основна увага була приділена влаштуванню її частин та тому, як змусити їх функціонувати. Тоді багато елементів системи було важко встановити і коректно налаштувати.

Завдяки наполегливій праці розробників ПЗ та творців дистрибутивів Linux ситуація змінилася. Я переглянув матеріал першого видання у пошуках оновлень: особливу увагу приділив процесу завантаження системи та тому, як вона керує обладнанням, а також видалив застарілий матеріал (наприклад, докладне пояснення процесу друку), щоб розширити розгляд ролі ядра системи Linux у кожному дистрибутиві. Ви, мабуть, взаємодієте з ядром набагато частіше, ніж самі про це здогадуєтеся, і я спеціально наголосив на моментах, коли це буває.

Я також змінив послідовність подачі матеріалу у книзі, щоб він відповідав інтересам та потребам сучасних читачів. Єдине, що не змінилося – це обсяг книги.

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

Я вилучив деякі історичні деталі, які були у першому виданні, значною мірою щоб сконцентрувати вашу увагу. Якщо ви цікавитеся системою Linux та її ставленням до історії системи Unix, зверніться до книги Пітера Салуса (Peter H. Salus) The Daemon, the Gnu, and the Penguin(Reed Media Services, 2008) – в ній розказано про те, як розвивалося програмне забезпечення, яке ми використовуємо.

Примітка про термінологію

В даний час точаться суперечки про найменування деяких елементів операційних систем. У них залучено навіть саму назву системи Linux – як вона повинна називатися: Linux чи GNU/Linux (щоб відобразити застосування деяких елементів проекту GNU)? У книзі я намагався використовувати найвживаніші і наскільки можна найменш громіздкі назви.

Подяки

Дякую всім, хто допомагав мені у роботі над першим виданням. Це Джеймс Дункан (James Duncan), Дуглас Н. Арнольд (Douglas N. Arnold), Білл Феннер (Bill Fenner), Кен Хорнстайн (Ken Hornstein), Скотт Діксон (Scott Dickson), Ден Ерліх (Dan Ehrlich), Фелікс Лі ( Felix Lee), Скотт Шварц (Scott Schwartz), Грегорі П. Сміт (Gregory P. Smith), Ден Саллі (Dan Sully), Керол Джурадо (Karol Jurado) та Джина Стіл (Gina Steele). У цьому виданні я особливо вдячний Жорді Гутьєрресу Хермозо (Jordi Gutierrez Hermoso) за чудове технічне рецензування; його пропозиції та уточнення неоціненні. Дякую також Домініку Пулену (Dominique Poulain) та Дональду Керону (Donald Karon) за швидкий відгук на ранніх стадіях роботи, а також Сіньчжу Шей (Hsinju Hsieh), який терпляче працював зі мною над переробкою цієї книги.

Я хотів би також подякувати своєму редактору розвитку Білла Поллока (Bill Pollock) і випускаючого редактора Лорел Чан (Laurel Chun). Серена Янг (Serena Yang), Елісон Ло (Alison Law) та всі співробітники видавництва No Starch Press, як завжди, чудово виконали свою роботу під час підготовки нового видання книги.

Від видавництва

Ваші зауваження, пропозиції та питання надсилайте на адресу електронної пошти [email protected](Видавництво «Пітер», комп'ютерна редакція).

Ми будемо раді дізнатися про вашу думку!

На сайті видавництва http://www.piter.com ви знайдете детальну інформацію про наші книги.

1. Загальна картина

На перший погляд, сучасна операційна система, наприклад Linux, є досить складною і складається з великої кількості частин, які одночасно функціонують і взаємодіють один з одним. Так, веб-сервер може обмінюватися даними із сервером бази даних, який, у свою чергу, використовує спільну бібліотеку, яку використовують багато інших програм. Як же це все працює?

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

Якщо ви ведете машину, вам необхідно знати більше. Вам потрібно вивчити елементи керування (наприклад, кермо і педаль газу), а також засвоїти, що слід робити у разі несправності.

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

Розробники програмного забезпечення користуються абстракцією як інструмент при створенні операційних систем та додатків. Є безліч термінів для абстрагованих розділів комп'ютерного ПЗ, до них входять підсистема, модульі пакет. Однак ми будемо застосовувати в цьому розділі термін компонентоскільки він простий. При створенні програмного компонента, як правило, розробників не сильно турбує внутрішня структура інших компонентів, проте їм все ж таки доводиться думати про те, які компоненти і як вони можуть використовувати.

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

1.1. Рівні та шари абстракції в операційній системі Linux

Використання абстракцій для поділу комп'ютерних систем на компоненти спрощує їхнє розуміння, але не приносить користі, якщо відсутня структура. Ми упорядкуємо компоненти у вигляді шарів або рівнів. Шар,або рівень,– це спосіб класифікації (або групування) компонентів відповідно до їх розташування між користувачем та апаратними засобами. Браузери, ігри тощо розташовані на верхньому шарі; на нижньому шарі ми бачимо пам'ять комп'ютера: нулі та одиниці. Операційна система займає найбільше верств між цими двома.

В операційній системі Linux три основні рівні. На рис. 1.1 показані рівні, і навіть деякі компоненти всередині кожного їх. В основі розташовані апаратні засоби. Вони включають пам'ять, а також один або кілька центральних процесорів (CPU), що виконують обчислення та запити на читання з пам'яті та запис до неї. Такі пристрої, як жорсткі диски та мережні інтерфейси, також належать до апаратних засобів.

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

Процеси – запущені програми, якими управляє ядро, – разом становлять верхній рівень системи, що називається простором користувача.

Примітка

Більш точним терміном, ніж «процес», є термін «користувацький процес», незалежно від того, чи взаємодіє користувач із цим процесом безпосередньо. Наприклад, всі веб-сервери працюють як процеси користувача.

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

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

Мал. 1.1.Загальна структура операційної системи Linux

Теоретично неконтрольований користувальницький процес не здатний завдати істотної шкоди системі. Насправді все залежить від того, що саме ви вважаєте «суттєвою шкодою», а також від особливих привілеїв даного процесу, оскільки деяким процесам дозволено робити більше, ніж іншим. Наприклад, чи може процес користувача повністю знищити дані на жорсткому диску? Якщо належним чином налаштувати дозволи, то зможе, і вам це виявиться вкрай небезпечним. Для запобігання цьому існують захисні заходи, і більшість процесів просто не дозволять сіяти смуту подібним чином.

1.2. Апаратні засоби: оперативна пам'ять

З усіх апаратних засобів комп'ютера оперативна пам'ятьє, мабуть, найважливішим. У своїй «сирій» формі оперативна пам'ять – це лише величезне сховище для послідовності нулів і одиниць. Кожен нуль або одиниця називається бітом. Саме тут розташовуються запущене ядро ​​та процеси – вони є лише великими наборами бітів. Всі вхідні та вихідні дані від периферійних пристроїв проходять через оперативну пам'ять у вигляді наборів бітів. Центральний процесор просто оперує з пам'яттю: він зчитує з неї інструкції та дані, а потім записує дані назад на згадку.

Вам часто зустрічатиметься термін «стан», який буде відноситися до пам'яті, процесів, ядра та інших частин комп'ютерної системи. Строго кажучи, стан – це якесь упорядковане розташування бітів. Наприклад, якщо в пам'яті знаходяться чотири біти, то послідовності 0110, 0001 та 1011 представляють три різні стани.

Якщо взяти до уваги те, що процес може легко складатися з мільйонів біт у пам'яті, часто простіше використовувати абстрактні терміни, говорячи про стани. Замість опису стану із застосуванням бітів ви кажете про те, що сталося або відбувається в даний момент. Наприклад, ви можете сказати «даний процес очікує на вхідні дані» або «процес виконує другий етап процедури запуску».

ПРИМІТКА

Оскільки для опису стану зазвичай використовуються абстрактні поняття, а чи не реальні біти, для позначення будь-якого фізичного розміщення бітів застосовується термін «образ».

1.3. Ядро

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

Ядро відповідає за управління завданнями у чотирьох основних областях системи.

Процеси.Ядро відповідає за те, яким процесам дозволено доступ до центрального процесора.

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

Драйвери пристроїв.Ядро виступає як інтерфейс між апаратними засобами (наприклад, жорстким диском) та процесами. Як правило, керування апаратними засобами виконується ядром.

Системні викликиіпідтримка.Зазвичай процеси використовують системні виклики взаємодії з ядром.

Тепер ми коротко розглянемо кожну з цих областей.

ПРИМІТКА

Подробиці про роботу ядра ви можете дізнатися з книг Operating System Concepts («Основні принципи операційних систем»), 9 видання, автори: Авраам Зільбершатц (Abraham Silberschatz), Пітер Б. Гелвін (Peter B. Galvin) і Грег Генн (Greg Gagne) (Wiley, 2012) та Modern Operating Systems («Сучасні операційні системи»), 4-те видання, автори: Ендрю С. Таненбаум (Andrew S. Tanenbaum) та Герберт Бос (Herbert Bos) (Prentice Hall, 2014).

1.3.1. Управління процесами

Управління процесамиописує запуск, зупинку, поновлення та припинення роботи процесів. Поняття, які стоять за процесами запуску та припинення процесів, досить прості. Трохи складніше описати те, як процес використовує центральний процесор у нормальному режимі роботи.

У будь-якій сучасній операційній системі кілька процесів функціонують «одночасно». Наприклад, в той же час ви можете запустити на комп'ютері браузер і відкрити електронну таблицю. Проте насправді все не так, як виглядає: процеси, які відповідають за ці додатки, як правило, не запускаються вточностів один час.

Розглянемо систему з одним центральним процесором. Його можуть використовувати кілька процесів, але в кожний конкретний момент часу лише один процес може насправді застосовувати процесор. Насправді кожен процес використовує процесор протягом малої частки секунди, та був припиняється; після цього інший процес застосовує процесор протягом малої частки секунди; далі настає черга третього процесу тощо. буд. Дія, у якому будь-який процес передає іншому процесу управління процесором, називається перемиканням контексту.

Кожен період – квант часу– надає процесу достатньо часу для виконання суттєвих обчислень (і, звичайно, процес часто завершує своє поточне завдання протягом одного кванта). Оскільки кванти часу настільки малі, людина їх не сприймає і їй здається, що в системі одночасно виконується кілька процесів (така можливість відома під назвою «багатозадачність»).

Ядро відповідає за перемикання контексту. Щоб зрозуміти, як це працює, уявимо ситуацію, в якій процес запущено в режимі користувача, але квант часу закінчується. Ось що при цьому відбувається.

1. Процесор (реальний апаратний засіб) перериває поточний процес, спираючись на внутрішній таймер, перемикається в режим ядра і повертає йому керування.

2. Ядро записує поточний стан процесора та пам'яті, які будуть потрібні для відновлення щойно перерваного процесу.

3. Ядро виконує будь-які завдання, які могли з'явитися протягом попереднього кванта часу (наприклад, збирання даних або операції введення/виведення).

4. Тепер ядро ​​готове до запуску іншого процесу. Воно аналізує список процесів, готових до запуску, і вибирає якийсь із них.

5. Ядро готує пам'ять нового процесу, а потім готує процесор.

6. Ядро повідомляє процесору, скільки триватиме квант часу нового процесу.

7. Ядро переводить процесор у режим користувача і передає процесору керування.

Перемикання контексту дає відповідь на важливе питання: колипрацює ядро? Відповідь така: ядро ​​працює міжвідведеними для процесів квантами часу, коли відбувається перемикання контексту.

У системі з кількома процесорами справа трохи складніше, оскільки ядру немає необхідності припиняти управління поточним процесором, щоб дозволити запуск будь-якого процесу на іншому процесорі. І тим не менше, щоб отримати максимальну користь з усіх доступних процесорів, ядро ​​все ж таки надходить (і може застосувати певні хитрощі, щоб отримати додатковий процесорний час).

1.3.2. Управління пам'яттю

Оскільки ядро ​​має керувати пам'яттю під час перемикання контексту, воно має цю складну функцію. Робота ядра складна, оскільки необхідно враховувати такі умови:

Ядро повинно мати власну область пам'яті, до якої не можуть отримати доступ користувальницькі процеси;

Кожному процесу користувача необхідна своя область пам'яті;

Будь-який процес користувача не повинен мати доступ до області пам'яті, призначеної для іншого процесу;

Користувальницькі процеси можуть спільно використовувати пам'ять;

Деякі ділянки пам'яті для процесів користувача можуть бути призначені тільки для читання;

Система може застосовувати більше пам'яті, ніж її є, задіявши як допоміжний пристрій дисковий простір.

У ядра є помічник. Сучасні процесори містять модуль керування пам'яттю(MMU), що активізує схему доступу до пам'яті під назвою «Віртуальна пам'ять». При використанні віртуальної пам'яті процес не звертається до пам'яті безпосередньо з її фізичного розташування в апаратних засобах. Натомість ядро ​​налаштовує кожен процес таким чином, немов у його розпорядженні знаходиться вся машина. Коли процес отримує доступ до пам'яті, модуль MMU перехоплює такий запит і застосовує карту адрес пам'яті, щоб перевести місце пам'яті, отримане від процесу, у фізичне положення пам'яті на комп'ютері. Однак ядро ​​все ж таки має ініціалізувати, постійно підтримувати та змінювати цю карту адрес. Наприклад, під час перемикання контексту ядро ​​має змінити карту після процесу, що відпрацював, і підготувати його для наступного.

Примітка

Реалізація картки адрес пам'яті називається таблицею сторінок.

Про те, як стежити за продуктивністю пам'яті, ви дізнаєтеся з розділу 8.

1.3.3. Драйвери пристроїв та керування ними

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

1.3.4. Системні виклики та підтримка

Існують і інші типи функцій ядра, доступні для процесів користувача. Наприклад, системні викликивиконують спеціальні завдання, які користувальницький процес не може виконати добре поодинці або взагалі не може впоратися з ними. Так, всі дії, пов'язані з відкриттям, читанням та записом файлів, залучають системні дзвінки.

Два системні виклики – fork() та exec() – важливі для розуміння того, як відбувається запуск процесів:

Fork(). Коли процес здійснює виклик fork(), ядро ​​створює практично ідентичну копію цього процесу;

Exec(). Коли процес здійснює виклик exec( program), ядро ​​запускає програму program, яка замінює поточний процес.

За винятком процесу init (глава 6), Усепроцеси користувача в системі Linux починаються як результат виклику fork(), і в більшості випадків здійснюється виклик exec(), щоб запустити нову програму, а не копію існуючого процесу. Простим прикладом є будь-яка програма, яку ви запускаєте з командного рядка, наприклад, команда ls, що показує вміст каталогу. Коли ви вводите команду ls у вікні терміналу, запущена всередині вікна терміналу оболонка здійснює виклик fork(), щоб створити копію оболонки, а потім ця нова копія оболонки виконує виклик exec(ls), щоб запустити команду ls. На рис. 1.2 показано послідовність процесів та системних викликів для запуску таких програм, як ls.

Мал. 1.2.Запуск нового процесу

ПРИМІТКА

Системні дзвінки зазвичай позначаються за допомогою круглих дужок. У прикладі, показаному на рис. 1.2 процес, який запитує ядро ​​про створення іншого процесу, повинен здійснити системний виклик fork(). Таке позначення походить від способу написання викликів у мові програмування C. Щоб зрозуміти цю книгу, вам не обов'язково знати мову C. Пам'ятайте лише про те, що системний виклик – це взаємодія між процесом та ядром. Більше того, у цій книзі спрощено деякі групи системних викликів. Наприклад, виклик exec() означає ціле сімейство системних викликів, що виконують подібне завдання, але відрізняються програмною реалізацією.

Ядро також підтримує процеси користувача, функції яких відрізняються від традиційних системних викликів. Найвідомішими з них є псевдовлаштування. З погляду користувальницьких процесів, псевдовлаштування виглядають як звичайні пристрої, але реалізовані вони виключно програмним чином. По суті, формально вони не повинні перебувати в ядрі, але вони все ж таки присутні в ньому з практичних міркувань. Наприклад, пристрій, який генерує випадкові числа (/dev/random), було б складно реалізувати з необхідним ступенем безпеки за допомогою процесу користувача.

примітка

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

1.4. Простір користувача

Область оперативної пам'яті, яку ядро ​​відводить для процесів користувача, називається простором користувача. Оскільки процес є лише станом (чи чином) у пам'яті, простір користувача звертається також до пам'яті за всією сукупністю запущених процесів. Вам також може зустрітися термін «Дільниця користувача» (userland), який застосовується замість простір користувача.

Більшість реальних дій системи Linux відбувається у просторі користувача. Незважаючи на те, що всі процеси з точки зору ядра є однаковими, вони виконують різні завдання для користувачів. Системні компоненти, які представляють процеси користувача, організовані у вигляді елементарної структури – сервісного рівня (або шару). На рис. 1.3 показаний приблизний набір компонентів, пов'язаних між собою та взаємодіючих із системою Linux. Прості служби розташовані на нижньому рівні (ближче до ядра), сервісні програми знаходяться в середині, а програми, з якими працює користувач, розташовані вгорі. Малюнок 1.3 є вкрай спрощеною схемою, оскільки показано лише шість компонентів, але ви можете помітити, що верхні компоненти знаходяться найближче до користувача (інтерфейс користувача і браузер); компоненти середнього рівня мають у своєму розпорядженні поштовий сервер, який використовує браузер; у нижній частині є кілька малих компонентів.

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

Рисунок 1.3 лише приблизно відображає пристрій простору користувача. Насправді у просторі користувача немає правил. Наприклад, більшість програм та служб записують діагностичні повідомлення, які називаються журналами. Більшість програм використовує стандартну службу syslog для запису повідомлень до журналу, але деякі вважають за краще вести журнал самостійно.

Мал. 1.3.Типи процесів та взаємодій

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

1.5. Користувачі

Ядро Linux підтримує традиційну концепцію користувача системи Unix. Користувач– це сутність, яка може запускати процеси і мати файли. З користувачем пов'язано Ім'я користувача. Наприклад, у системі може бути користувач billyjoe. Однак ядро ​​не працює з іменами користувачів, натомість воно ідентифікує користувача за допомогою простого числового ідентифікатора користувача(У розділі 7 розповідається, як ідентифікатори зіставляються з іменами користувачів).



Подібні публікації