Що відбувається, коли Ви запускаєте програму після завантаження системи?^1

Коли операційна система повністю завантажилася, але користувач ще не запустив жодної програми, комп’ютер можна уявити собі у вигляді зоопарку з процесів (себто програм), кожен з яких чекає, щоб почати щось робити. Всі вони чикають на події^2 . Подією може бути натиск Вами кнопки на клавіатурі чи рух мишкою. Або, якщо машина підєднана до мережі, подією також може бути пакет даних, що прийшов з мережі.

Ядро — один з процесів. Це — особливий тип процесу, бо він контролює всі інші користувацькі процеси^3 , і є, як правило, єдиним процесом, котрий має прямий доступ до апаратури комп’ютера. Фактично, користувацькі процеси повинні робити спеціальні запити до ядра, коли вони потребують, наприклад, отримати сигнал з клавіатури, написати щось на екрані, читати чи писати дані на диск, тобто робити будь-які дії, що виходять за межі звичайних обчислень чи ганяння бітів по оперативній пам’яті. Такі запити називають системними викликами^4 .

Здебільшого операції з транспорту даних (т.зв. операції вводу/виводу)^5 проходять через ядро, отож воно може розумно планувати операції і оберігати процеси від наступання однин на одного. Є тільки декілька спеціальних процесів, яким дозволено знехтувати дбайливою опікою ядра і здійснювати прямий доступ до портів вводу/виводу комп’ютера. Графічний сервер X — типовий приклад такого процесу.

Програми можна запускати двома способами: через графічний сервер X, або через командну оболонку. Досить часто користувачі роблять і те, і інше: вони запускають емулятор терміналу, котрий симулює старомодну текстову консоль у вікні графічної системи, і дає можливість користуватись запущеною у ньому командною оболонкою. Детальніше про графічну систему Х трохи згодом. А зараз трішки про команди.

Оболонка – це інтерпретатор UNIX-команд, котрі ви будете вводити; вона називається оболонкою тому, що оточує вас і приховує роботу ядра. Це дуже важлива особливість UNIX-систем, що оболонка та ядро є різними програмами, що взаємодіють через відносно невеликий набір системних викликів. Вона дає можливість заводити кілька оболонок, задовольняючи різні смаки та підходи до організації роботи.

Стандартна оболонка, після того як Ви зареєструвались у системі, виведе повідомлення на зразок «каталог $». Зараз ми не будемо говорити про синтаксис оболонки та про інші речі, котрі ви бачите на своєму дисплеї. Замість того ми спробуємо зрозуміти, що зараз відбувається з точки зору вашого комп’ютера.

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

Дозвольте порадити вам ввести стандартну для всіх Юніксів команду «ls», іншими словами викликати програму, котра відображає вміст каталогу.

Оболонка розуміє, що ви хочете запустити виконуваний код, котрий знаходиться в файлі «/bin/ls». Вона здійснює системний виклик, просячи ядро запустити новий дочірній процес^6 із файлу «/bin/ls». Тоді оболонка засинає, чекаючи, поки ls завершить свою роботу.

Коли «/bin/ls» зробить свою справу, вона повідомляє ядру про закінчення своєї роботи через формування системного виклику exit. Ядро дає відбій ls, і повертає до роботи оболонку. Та видає чергове запрошення і чекає на чергову команду для виконання.

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

Коли користувач запускає програми через сервер X, а не з оболонки (тобто через меню чи значки на стільниці), інші програми, зв’язані з сервером X, будуть поводитись, як оболонка під час запуску програми. Деталі цього процесу не є суттєвими, натомість важливим моментом є одна річ: сам сервер X, навідміну від командної оболонки, не засинає, поки дочірня програма працює. Замість того, він стає посередником між програмою і користувачем, передаючи програмі сигнали з клавіатури та мишки і виконуючи її запити із виводу зображення на екран.