Призначення, еволюція та інтерфейси операційних систем
Коли одночасно працюють браузер, редактор коду й музичний програвач, кожна програма поводиться так, ніби має власний процесор, пам'ять і файли. Насправді апаратні ресурси спільні. Операційна система (ОС) координує їх використання та надає програмам зручні абстракції замість вимоги керувати пристроями безпосередньо.
Цілі лекції
Після опрацювання матеріалу ви зможете:
- пояснювати ОС як менеджер ресурсів і розширену, або віртуальну, машину;
- розрізняти механізм, політику й абстракцію на базових прикладах;
- описувати основні етапи еволюції ОС;
- порівнювати походження та призначення Unix/Linux, BSD, Windows NT і macOS;
- обґрунтовувати вимоги ефективності, надійності, безпеки, зручності й переносності;
- розрізняти CLI, GUI та API і пояснювати їхню взаємодію;
- безпечно визначати базові відомості про поточне середовище.
Передумови
Достатньо знати основні частини комп'ютера: процесор, оперативну пам'ять, накопичувач і пристрої введення-виведення. Корисно вміти відкрити термінал. Адміністративні права не потрібні.
1. Місце ОС у комп'ютерній системі
Комп'ютерну систему зручно розглядати шарами:
- Апаратне забезпечення виконує машинні інструкції, зберігає біти й передає дані.
- Ядро ОС керує процесором, пам'яттю та пристроями й забезпечує захист.
- Системні бібліотеки та служби надають програмам узгоджені операції.
- Прикладні програми розв'язують задачі користувача.
- Користувачі та інші системи взаємодіють із програмами через інтерфейси.
Ядро є центральною привілейованою частиною ОС, але ОС не зводиться лише до ядра. До робочого середовища також належать системні бібліотеки, служби, оболонки, утиліти та засоби керування. Межі поняття залежать від контексту: слово Linux строго позначає ядро, тоді як дистрибутив GNU/Linux містить ядро й великий набір інших компонентів.
2. ОС як менеджер ресурсів
Ресурс - це обмежений компонент, потрібний програмам для виконання. ОС обліковує ресурси, розподіляє їх, захищає від некоректного використання та повертає після завершення роботи.
| Ресурс | Що вирішує ОС | Приклад спостережуваної поведінки |
|---|---|---|
| процесорний час | який потік і як довго виконується | кілька програм реагують на дії користувача одночасно |
| оперативна пам'ять | які ділянки належать процесу | помилка одного процесу не повинна довільно змінити пам'ять іншого |
| накопичувач | де розмістити дані та хто має доступ | програма працює з іменованим файлом і дозволами |
| пристрої введення-виведення | як упорядкувати запити | кілька програм надсилають завдання на друк через чергу |
| мережа | як розподілити інтерфейси, адреси й сокети | сервери слухають різні порти |
Керування ресурсом містить дві різні ідеї:
- механізм визначає, як виконати дію, наприклад перемкнути процесор між потоками;
- політика визначає, яке рішення прийняти, наприклад якому готовому потоку надати процесор наступним.
Поділ механізму й політики дозволяє змінювати правила планування без повної перебудови механізму перемикання.
Конфлікт цілей
Менеджер ресурсів не просто прагне максимально завантажити обладнання. Він балансує цілі. Велике фонове обчислення може підвищити використання процесора, але погіршити час відгуку інтерактивної програми. Агресивне кешування прискорює читання, але займає пам'ять. Тому рішення ОС оцінюють у контексті навантаження.
3. ОС як розширена віртуальна машина
У цьому означенні віртуальна машина - не обов'язково VirtualBox або гіпервізор. Йдеться про зручну абстрактну машину, яку ОС показує програмі поверх складного обладнання.
Фізичний накопичувач працює із секторами, чергами команд і контролером. Прикладна програма зазвичай бачить файл: іменовану послідовність байтів, яку можна відкрити, прочитати, записати й закрити. Файл є абстракцією, що приховує більшість апаратних деталей.
Інші важливі абстракції:
- процес створює кероване середовище виконання програми;
- віртуальний адресний простір дає процесу власну систему адрес;
- сокет подає кінцеву точку мережевого обміну;
- каталог організовує імена файлів і зв'язки між ними;
- дескриптор дає процесу контрольоване посилання на відкритий ресурс.
Абстракція спрощує програмування, але не скасовує фізичних обмежень. Віртуальна пам'ять не створює нескінченну швидку RAM, а файл не робить пошкоджений накопичувач надійним. ОС надає модель і механізми, а реальні затримки та місткість залишаються.
4. Чому операційні системи еволюціонували
Еволюція ОС відповідала на зміну обладнання й способів використання комп'ютерів.
| Етап | Основна проблема | Рішення та наслідок |
|---|---|---|
| ручний запуск | оператор налаштовував кожне завдання окремо | низьке використання дорогого обладнання |
| пакетна обробка | простої між завданнями | монітор автоматично запускав пакет робіт |
| мультипрограмування | процесор простоював під час введення-виведення | у пам'яті тримали кілька завдань і перемикалися між ними |
| поділ часу | потрібна інтерактивна робота багатьох користувачів | короткі кванти процесора створили швидкий відгук терміналів |
| персональні комп'ютери | зручність для окремого користувача | поширилися графічні інтерфейси й настільні застосунки |
| мережеві та розподілені системи | обмін і спільні служби | мережеві стеки, віддалений доступ, клієнт-серверні моделі |
| мобільні, хмарні та вбудовані системи | енергія, масштаб, ізоляція, передбачуваність | спеціалізовані політики, віртуалізація, контейнери, RTOS |
Новий етап не завжди повністю витісняє попередній. Пакетна обробка досі існує в чергах хмарних обчислень, а інтерактивний ноутбук одночасно виконує фонові пакетні задачі.
5. Unix, Linux і BSD
Unix виник наприкінці 1960-х і на початку 1970-х років у Bell Labs. Важливими ідеями стали багатокористувацька робота, ієрархічна файлова система, процеси, канали та невеликі інструменти, які можна поєднувати. Переписування значної частини Unix мовою C сприяло переносності.
BSD (Berkeley Software Distribution) розвивав Unix у Каліфорнійському університеті в Берклі. Сучасні FreeBSD, OpenBSD і NetBSD є окремими ОС зі спільним історичним корінням, але різними пріоритетами. FreeBSD відома цілісною системною розробкою й серверним застосуванням, OpenBSD - увагою до безпеки, NetBSD - переносністю.
Linux - Unix-подібне ядро, започатковане Лінусом Торвальдсом у 1991 році. Разом із системними компонентами GNU та іншими пакетами воно утворює дистрибутиви на зразок Debian, Ubuntu або Fedora. Linux не походить із коду класичного Unix, але підтримує багато Unix-подібних принципів та інтерфейсів.
Стандарти POSIX описують спільні програмні інтерфейси для переносних Unix-подібних програм. Сумісність із POSIX не означає, що внутрішня будова всіх систем однакова.
6. Windows NT і macOS
Сімейство Windows NT створювалося як захищена, переносна й багатозадачна система, відмінна від лінії MS-DOS. Архітектурна основа сучасних клієнтських і серверних Windows належить до NT. Застосунки взаємодіють із системними службами через Win32 та інші API, а ядро й Executive керують основними механізмами.
macOS використовує ядро XNU, назва якого розкривається як X is Not Unix. XNU поєднує компоненти Mach, частини BSD і підсистему драйверів I/O Kit. На рівні користувача macOS надає Unix-сумісне середовище та власні графічні фреймворки Apple.
Порівнювати системи лише за зовнішнім виглядом некоректно. Схожий робочий стіл може приховувати різні ядра, моделі драйверів і API. Так само одна система може мати кілька оболонок і графічних середовищ.
| Сімейство | Архітектурна основа | Типові сфери |
|---|---|---|
| GNU/Linux | ядро Linux і компоненти дистрибутива | сервери, хмари, вбудовані системи, настільні системи |
| BSD | цілісні Unix-подібні системи BSD | сервери, мережеві пристрої, безпекові рішення |
| Windows NT | ядро NT, Executive, HAL та системні служби | персональні комп'ютери, корпоративна інфраструктура, сервери |
| macOS | XNU, системні служби та фреймворки Apple | комп'ютери Mac, розробка й творчі застосунки |
7. Вимоги до сучасної ОС
Оцінка ОС потребує кількох критеріїв:
- ефективність: раціональне використання CPU, пам'яті й введення-виведення;
- надійність: передбачувана робота, виявлення помилок і відновлення;
- безпека: автентифікація, контроль доступу, ізоляція та аудит;
- зручність: зрозумілі інтерфейси, доступність і якісна діагностика;
- переносність: можливість адаптувати систему та програми до різного обладнання;
- масштабованість: збереження прийнятної поведінки зі зростанням ресурсів і навантаження;
- сумісність: підтримка визначених API, ABI, форматів і протоколів;
- супроводжуваність: можливість безпечно виправляти й розвивати систему.
Між вимогами є компроміси. Додаткова перевірка безпеки може збільшувати затримку, а підтримка старого API ускладнювати систему. Добре інженерне рішення не ігнорує компроміс, а робить його явним і перевіряє пріоритети конкретного середовища.
8. CLI, GUI та API
CLI (Command-Line Interface) приймає текстові команди. Користувач працює через оболонку, наприклад Bash або PowerShell. CLI зручний для автоматизації, повторюваності та віддаленої роботи, але потребує знання команд і точного синтаксису.
GUI (Graphical User Interface) надає вікна, кнопки, меню та інші графічні елементи. GUI полегшує відкриття можливостей і візуальну взаємодію, але довгу повторювану процедуру часто складніше відтворити точно.
API (Application Programming Interface) визначає, як програма звертається до функцій бібліотеки або системи. API призначений насамперед для програмного коду, а не для безпосереднього введення людиною. POSIX API і Win32 API надають операції з файлами, процесами, пам'яттю та іншими об'єктами.
CLI і GUI зазвичай не керують обладнанням напряму. Вони викликають бібліотеки та системні служби через API. Одна дія може бути доступна всіма трьома способами: користувач натискає кнопку, вводить команду або програма викликає функцію.
Безпечна демонстрація середовища
У Linux та інших Unix-подібних середовищах команда лише читає ідентифікаційні відомості:
uname -srm
printf 'Оболонка: %s\n' "$SHELL"
У PowerShell відповідні відомості можна отримати без зміни системи:
$PSVersionTable.PSVersion
[System.Environment]::OSVersion.VersionString
Результати можуть відрізнятися залежно від ОС, архітектури, версії ядра й оболонки. Команда є CLI, а оболонка для її виконання використовує програмні інтерфейси системи.
9. Один запит на різних рівнях
Розглянемо читання файла. На рівні GUI користувач двічі натискає його піктограму. На рівні CLI виконує cat notes.txt. Програма може викликати open() і read() через бібліотечний API. Нижче безпечний приклад працює з даними всередині процесу й не звертається до файлової системи:
from io import StringIO
virtual_file = StringIO("ядро, процес, файл\n")
content = virtual_file.read()
print(content, end="")
Очікуваний результат:
ядро, процес, файл
StringIO створює файлову абстракцію в пам'яті процесу. Важливо розуміти межу цього прикладу: він повністю виконується в User Mode, не потрапляє в ядро й не демонструє жодного системного виклику чи файлового API ОС. Він лише показує, що однаковий інтерфейс read() можна перевикористати для різних об'єктів. Справжній шлях «програма → ядро → накопичувач» розглянемо в лекціях про системні виклики та введення-виведення.
10. Поетапна практична робота
Крок 1. Відтворення
Виконайте лише команди визначення середовища з розділу 8. Запишіть ОС або ядро, архітектуру та версію оболонки. Не робіть висновок про всю архітектуру ОС лише з назви оболонки.
Крок 2. Класифікація
Для кожної дії визначте основний інтерфейс: натискання кнопки «Зберегти», команда pwd, виклик read() у коді. Очікувана класифікація: GUI, CLI, API.
Крок 3. Прикладний аналіз
Сервіс має щоночі формувати звіт, а оператор іноді переглядає його вручну. Запропонуйте поєднання інтерфейсів. Обґрунтований варіант: API для отримання даних, CLI-сценарій для повторюваного запуску, GUI або вебінтерфейс для перегляду оператором. Інтерфейси доповнюють, а не обов'язково замінюють один одного.
Підсумок
- ОС керує обмеженими ресурсами й узгоджує конкуруючі запити.
- ОС надає абстракції процесу, файла, адресного простору й сокета, приховуючи апаратні деталі.
- Механізм відповідає на запитання «як виконати», а політика - «яке рішення обрати».
- Еволюція ОС пройшла через пакетну обробку, мультипрограмування, поділ часу, персональні, мережеві, мобільні та хмарні системи.
- Linux є Unix-подібним ядром; BSD-системи мають історичне коріння в Berkeley Software Distribution.
- Сучасні Windows належать до сімейства Windows NT, а macOS базується на XNU.
- Вимоги до ОС охоплюють ефективність, надійність, безпеку, зручність, переносність, масштабованість і сумісність.
- CLI призначений для текстових команд, GUI - для графічної взаємодії, API - для програмного доступу до можливостей системи.
