- •1.1. Поняття операційної системи, її призначення та функції
- •1.1.1. Поняття операційної системи
- •1.1.2. Призначення операційної системи
- •1.1.3. Операційна система як розширена машина
- •1.1.4. Операційна система як розподілювач ресурсів
- •1.2. Історія розвитку операційних систем
- •1.3. Класифікація сучасних операційних систем
- •1.4. Функціональні компоненти операційних систем
- •1.4.1. Керування процесами й потоками
- •1.4.2. Керування пам'яттю
- •1.4.3. Керування введенням-виведенням
- •1.4.4. Керування файлами та файлові системи
- •1.4.5. Мережна підтримка
- •1.4.6. Безпека даних
- •1.4.7. Інтерфейс користувача
- •2.1. Базові поняття архітектури операційних систем
- •2.1.1. Механізми і політика
- •2.1.2. Ядро системи. Привілейований режим і
- •2.2. Реалізація архітектури операційних систем
- •2.2.1. Монолітні системи
- •2.2.2. Багаторівневі системи
- •2.2.3. Системи з мікроядром
- •2.2.4. Концепція віртуальних машин
- •2.3.1. Взаємодія ос і апаратного забезпечення
- •2.3.2. Взаємодія ос і виконуваного програмного коду
- •2.4.1. Базова архітектура unix
- •2.4.2. Архітектура Linux
- •2.5. Особливості архітектури: Windows хр
- •2.5.1. Компоненти режиму ядра
- •2.5.2. Компоненти режиму користувача
- •2.5.3. Об'єктна архітектура Windows хр
- •3.1. Базові поняття процесів і потоків
- •3.1.1. Процеси і потоки в сучасних ос
- •3.1.2. Моделі процесів і потоків
- •3.1.3. Складові елементи процесів і потоків
- •3.2. Багатопотоковість та її реалізація
- •3.2.1. Поняття паралелізму
- •3.2.2. Види паралелізму
- •3.2.3. Переваги і недоліки багатопотоковості
- •3.2.4. Способи реалізації моделі потоків
- •3.3. Стани процесів і потоків
- •3.4. Опис процесів і потоків
- •3.4.1. Керуючі блоки процесів і потоків
- •3.4.2. Образи процесу і потоку
- •3.5. Перемикання контексту й обробка переривань
- •3.5.1. Організація перемикання контексту
- •3.5.2. Обробка переривань
- •3.6. Створення і завершення процесів і потоків
- •3.6.1.Створення процесів
- •3.6.2.Ієрархія процесів
- •3.6.3.Керування адресним простором під час створення процесів
- •3.6.4. Особливості завершення процесів
- •3.6.5. Синхронне й асинхронне виконання процесів
- •3.6.6. Створення і завершення потоків
- •4.1. Загальні принципи планування
- •4.1.1. Особливості виконання потоків
- •4.1.2. Механізми і політика планування
- •4.1.3. Застосовність принципів планування
- •4.2. Види планування
- •4.2.1. Довготермінове планування
- •4.2.2. Середньотермінове планування
- •4.2.3. Короткотермінове планування
- •4.3. Стратегії планування. Витісняльна і невитісняльна багатозадачність
- •4.4. Алгоритми планування
- •4.4.1. Планування за принципом fifo
- •4.4.2. Кругове планування
- •4.4.3. Планування із пріоритетами
- •4.4.4. Планування на підставі характеристик подальшого виконання
- •4.4.5. Багаторівневі черги зі зворотним зв'язком
- •4.4.6. Лотерейне планування
- •4.5. Реалізація планування в Linux
- •4.5.1. Планування процесів реального часу в ядрі
- •6.1. Види міжпроцесової взаємодії
- •6.1.1.Методи розподілюваної пам'яті
- •6.1.2.Методи передавання повідомлень
- •6.1.3.Технологія відображуваної пам'яті
- •6.1.4.Особливості міжпроцесової взаємодії
- •6.2. Базові механізми міжпроцесової взаємодії
- •6.2.1. Міжпроцесова взаємодія на базі спільної пам'яті
- •6.2.2. Основи передавання повідомлень
- •6.2.3. Технології передавання повідомлень
- •8.1. Основи технології віртуальної пам'яті
- •8.1.1. Поняття віртуальної пам'яті
- •8.1.2. Проблеми реалізації віртуальної пам'яті. Фрагментація пам'яті
- •8.1.4. Підхід базового і межового регістрів
- •8.2. Сегментація пам'яті
- •8.2.1. Особливості сегментації пам'яті
- •8.2.2. Реалізація сегментації в архітектурі іа-32
- •8.3. Сторінкова організація пам'яті
- •8.3.1. Базові принципи сторінкової організації пам'яті
- •8.3.2. Порівняльний аналіз сторінкової організації пам'яті та сегментації
- •8.3.3. Багаторівневі таблиці сторінок
- •8.3.4. Реалізація таблиць сторінок в архітектурі іа-32
- •8.3.5. Асоціативна пам'ять
- •8.4. Сторінково-сегментна організація пам'яті
- •8.5. Реалізація керування основною пам'яттю: Linux
- •8.5.1. Використання сегментації в Linux. Формування логічних адрес
- •8.5.2. Сторінкова адресація в Linux
- •8.5.3. Розташування ядра у фізичній пам'яті
- •8.5.4.Особливості адресації процесів і ядра
- •8.5.5.Використання асоціативної пам'яті
- •8.6. Реалізація керування основною пам'яттю: Windows хр
- •8.6.1.Сегментація у Windows хр
- •8.6.2.Сторінкова адресація у Windows хр
- •8.6.3.Особливості адресації процесів і ядра
- •8.6.4. Структура адресного простору процесів і ядра
- •11.1. Поняття файла і файлової системи
- •11.1.1. Поняття файла
- •11.1.2.Поняття файлової системи
- •11.1.3.Типи файлів
- •11.1.4. Імена файлів
- •11.2. Організація інформації у файловій системі
- •11.2.1. Розділи
- •11.2.2. Каталоги
- •11.2.3. Зв'язок розділів і структури каталогів
- •11.3. Зв'язки
- •11.3.1. Жорсткі зв'язки
- •11.3.2. Символічні зв'язки
- •11.4. Атрибути файлів
- •11.5. Операції над файлами і каталогами
- •11.5.1. Підходи до використання файлів процесами
- •12.1. Базові відомості про дискові пристрої
- •12.1.1. Принцип дії жорсткого диска
- •12.1.2. Ефективність операцій доступу до диска
- •12.2. Розміщення інформації у файлових системах
- •12.2.1. Фізична організація розділів на диску
- •12.2.2. Основні вимоги до фізичної організації файлових систем
- •12.2.3. Неперервне розміщення файлів
- •12.2.4. Розміщення файлів зв'язними списками
- •12.2.5. Індексоване розміщення файлів
- •12.2.6. Організація каталогів
- •15.1. Завдання підсистеми введення-виведення
- •15.1.1. Забезпечення ефективності доступу до пристроїв
- •15.1.2. Забезпечення спільного використання зовнішніх пристроїв
- •15.1.3. Універсальність інтерфейсу прикладного програмування
- •15.1.4. Універсальність інтерфейсу драйверів пристроїв
- •15.2. Організація підсистеми введення-виведення
- •15.2.1. Символьні, блокові та мережні драйвери пристроїв
- •15.2.2. Відокремлення механізму від політики за допомогою
- •15.3. Способи виконання операцій введення-виведення
- •15.3.1. Опитування пристроїв
- •15.3.2. Введення-виведення, кероване перериваннями
- •15.3.3. Прямий доступ до пам'яті
- •15.4. Підсистема введення-виведення ядра
- •15.4.1. Планування операцій введення-виведення
- •15.4.2. Буферизація
- •15.7. Керування введенням-виведенням: unix і Linux
- •15.7.1. Інтерфейс файлової системи
- •15.7.2. Передавання параметрів драйверу
- •15.7.3. Структура драйвера
- •15.7.4. Виконання операції введення-виведення для пристрою
- •15.8. Керування введенням-виведенням: Windows хр
- •15.8.1. Основні компоненти підсистеми введення-виведення
- •15.8.2. Виконання операції введення-виведення для пристрою
- •15.8.3. Передавання параметрів драйверу пристрою
- •17.1. Термінальне введення-виведення
- •17.1.1. Організація термінального введення-виведення
- •17.1.3. Термінальне введення-виведення у Win32 api
- •17.2. Командний інтерфейс користувача 17.2.1.
- •17.2.2. Переспрямування потоків введення-виведення
- •17.2.3. Використання каналів
- •17.3. Графічний інтерфейс користувача
- •17.3.1. Інтерфейс віконної та графічної підсистеми Windows хр
- •17.3.2. Система X Window
- •17.4. Процеси без взаємодії із користувачем
- •17.4.1. Фонові процеси на основі posix
- •17.4.2. Служби Windows хр
- •16.1. Загальні принципи мережної підтримки
- •16.1.1. Рівні мережної архітектури і мережні сервіси
- •16.1.2. Мережні протоколи
- •16.2. Реалізація стека протоколів Інтернету
- •16.2.1. Рівні мережної архітектури tcp/ip
- •16.2.2. Канальний рівень
- •16.2.3. Мережний рівень
- •16.2.4. Транспортний рівень
- •16.2.5. Передавання даних стеком протоколів Інтернету
- •16.3. Система імен dns
- •16.3.1. Загальна характеристика dns
- •16.3.2. Простір імен dns
- •16.3.3. Розподіл відповідальності
- •16.3.4. Отримання ір-адрес
- •16.3.5. Кешування ір-адрес
- •16.3.6. Типи dns-ресурсів
- •16.4. Програмний інтерфейс сокетів Берклі
- •16.4.1. Особливості роботи з адресами
- •16.4.2. Створення сокетів
- •16.4.3. Робота з потоковими сонетами
- •16.4.4. Введення-виведення з повідомленням
- •19.1. Загальні принципи завантаження ос
- •19.1.1. Апаратна ініціалізація комп'ютера
- •19.1.2. Завантажувач ос
- •19.1.3. Двоетапне завантаження
- •19.1.4. Завантаження та ініціалізація ядра
- •19.1.5. Завантаження компонентів системи
- •19.2. Завантаження Linux
- •19.2.1. Особливості завантажувача Linux
- •19.2.2. Ініціалізація ядра
- •19.2.3. Виконання процесу init
- •19.3. Завантаження Windows хр
- •20.1. Багатопроцесорні системи
- •20.1.1. Типи багатопроцесорних систем
- •20.1.2. Підтримка багатопроцесорності в операційних системах
- •20.1.3. Продуктивність багатопроцесорних систем
- •20.1.4. Планування у багатопроцесорних системах
- •20.1.5. Спорідненість процесора
- •20.1.6. Підтримка багатопроцесорності в Linux
- •20.1.7. Підтримка багатопроцесорності у Windows хр
- •20.2. Принципи розробки розподілених систем
- •20.2.1. Віддалені виклики процедур
- •20.2.2. Використання Sun rpc
- •20.2.3. Використання Microsoft rpc
- •20.2.4. Обробка помилок і координація в розподілених системах
- •20.3. Розподілені файлові системи
- •20.3.1. Організація розподілених файлових систем
- •20.3.2. Файлова система nfs
- •20.3.3. Файлова система Microsoft dfs
- •20.4. Сучасні архітектури розподілених систем
- •20.4.1. Кластеры системи
- •20.4.2. Grid-системи
- •18.1. Основні завдання забезпечення безпеки
- •18.2. Базові поняття криптографії
- •18.2.1. Поняття криптографічного алгоритму і протоколу
- •18.2.2. Криптосистеми з секретним ключем
- •18.2.3. Криптосистеми із відкритим ключем
- •18.2.4. Гібридні криптосистеми
- •18.2.5. Цифрові підписи
- •18.2.6. Сертифікати
- •18.3. Принципи аутентифікаціїі керування доступом
- •18.3.1. Основи аутентифікації
- •18.3.2. Основи керування доступом
- •18.4. Аутентифікація та керування доступом в unix
- •18.4.1. Облікові записи користувачів
- •18.4.2. Аутентифікація
- •18.4.3. Керування доступом
- •18.5. Аутентифікація і керування доступом у Windows xp
- •18.5.1. Загальна архітектура безпеки
- •18.5.2. Аутентифікація
- •18.5.3. Керування доступом
- •18.6. Аудит
- •18.6.1. Загальні принципи організації аудиту
- •18.6.2. Робота із системним журналом unix
- •18.6.3. Журнал подій Windows xp
- •18.7. Локальна безпека даних
- •18.7.1. Принципи шифрування даних на файлових системах
- •18.7.2. Підтримка шифрувальних файлових систем у Linux
- •18.7.3. Шифрувальна файлова система Windows xp
- •18.8. Мережна безпека даних
- •18.8.1. Шифрування каналів зв'язку
- •18.8.2. Захист інформації на мережному рівні
- •18.8.3. Захист інформації на транспортному рівні
- •18.9. Атаки і боротьба з ними
- •18.9.1. Переповнення буфера
- •18.9.2. Відмова від обслуговування
- •18.9.3. Квоти дискового простору
- •18.9.4. Зміна кореневого каталогу застосування
17.3.2. Система X Window
У деяких ОС графічні підсистеми не є інтегрованими і не виконуються у режимі ядра. Таким прикладом є система X Window (X Window System), яку дотепер широко використовують в UNIX-системах. У цьому розділі наведемо її основні особливості [26, 80].
Базова архітектура системи X Window
Система X Window розроблена із використанням клієнт-серверного підходу, але її базові ідеї відрізняються від традиційних концепцій цієї архітектури.
Насамперед, поняття клієнта і сервера розглядають під незвичним кутом зору. Під клієнтом звикли розуміти застосування, що безпосередньо взаємодіє із користувачем, обробляє команди від клавіатури або миші та відображає дані, а під сервером — застосування, до якого клієнт звертається за даними. У даному випадку це не так (фактично маємо зворотну картину).
В архітектурі X Window під сервером (Х-сервером) розуміють програмне забезпечення, що цілковито відповідає за відображення інформації на дисплеї користувача (із використанням графічного адаптера) і за обробку команд від миші та клавіатури. На комп'ютері звичайно запускають лише одну копію Х-сервера.
Прикладні програми є клієнтами (Х-клієнтами), вони обробляють дані та звертаються до сервера для їхнього відображення. Крім того, сервер перетворює дії користувача (переміщення миші, натискання клавіш на клавіатурі) у дані і передає клієнтам для обробки. Клієнти не мають інформації про особливості роботи із конкретним графічним пристроєм, вони знають лише особливості обміну даними із сервером, зумовлені спеціальним Х-протоколом (X Protocol).
Клієнти і сервери можуть перебувати на різних комп'ютерах і виконуватися під різними операційними системами (рис. 17.2). Х-протокол звичайно працює поверх TCP/IP, фактично він є набором домовленостей про передавання спеціальних двійкових даних. Один сервер може одночасно відображати інформацію від клієнтів, що перебувають на різних комп'ютерах. Наприклад, комп'ютер під керуванням Linux може відображати засоби редагування відеоінформації, запущені на комп'ютері Silicon Graphics під керуванням ОС IRIX, та адміністративний інтерфейс (вікно додавання нового користувача), запущений на іншій Linux-машині. При цьому жодне із цих застосувань не перебуває у пам'яті комп'ютера, на якому виконується Х-сервер. З іншого боку, комп'ютери, на яких запущені Х-клієнти, можуть взагалі не підтримувати графічного відображення інформації — для них досить наявності зв'язку із сервером через мережу.
Зазначимо, що використання системи X Window не виключає можливості консольного доступу до ОС. З одного боку, на машині з Х-сервером є можливість перемикання між ним і текстовою консоллю, з іншого боку, всі поставки системи X Window включають клієнтську програму xterm, що реалізує емуляцію термінала. Це застосування дає можливість користувачу запускати командний інтерпретатор і консольні застосування на віддаленій машині та відображати результати їхнього виконання на екрані Х-сервера.
Віконні менеджери
Команди, надіслані клієнтами сервера, звичайно пов'язані із необхідністю відображення інформації у вікні застосування - ділянці екрана, якою володіє відповідне застосування. Важливою властивістю системи X Window є те, що Х-сервер не відповідає за роботу із такими вікнами, для цього використовують спеціальне клієнтське застосування — віконний менеджер (window manager). В обов'язки такого менеджера входить підтримка базових операцій над вікнами (їхнього переміщення, закриття або зміни розмірів), а також «декорування» вікон (відображення рамки, заголовка тощо).
Віконні менеджери майже завжди виконуються на тій самий машині, ш й Х-сервер, вони запускаються зазвичай відразу після запуску сервера. В усьом іншому це звичайні Х-клієнти, які обмінюються із сервером командами, пов'$ заними із відображенням вікон, обробкою команд користувача з їхнього перем щення тощо. З іншого боку, вони не відповідають за те, що відбувається всередш вікон застосувань (відображення інформації, обробка дій користувача) — відш відні команди передаються серверу від застосування-клієнта прямо, за їхню геш рацію відповідають інструментальні бібліотеки, про що йтиметься далі.
Рішення виділити підтримку віконних операцій в окреме застосування дал змогу досягти додаткової гнучкості роботи із системою. Є багато різних віконнн менеджерів, серед найпоширеніших можна виділити fvwm, sawfish, enlightenmen Деякі з них реалізують лише базову функціональність керування вікнами, інв надають користувачу багато можливостей (запуску застосувань, організації роб( чого столу тощо).
Клієнтські застосування та інструментальні бібліотеки
Теоретично застосування-клієнт може взаємодіяти із сервером із використання тільки Х-протоколу (відкриваючи мережне з'єднання, наприклад, за допомого: сокетів), але на практиці звичайно використовують засоби вищого рівня. Розглз немо їх.
Реалізація системи X Window надає засоби для розробки застосувань-клієв тів. На найнижчому рівні розташована бібліотека XLib, що надає набір функції які реалізують базові засоби взаємодії із сервером. Примітиви, надані XLib, дуж складно прямо використати для розробки інтерфейсу користувача. Фактично кс жен елемент керування, такий як кнопка або поле вводу, потрібно відображати використанням найпростіших графічних примітивів (ліній, точок тощо).
На практиці застосування розробляють із використанням набору функцій т сокого рівня, реалізованих із використанням XLib. Такі функції можуть відпов дати за відображення конкретних елементів керування і за обробку дій, виконг них користувачем із цими елементами; вони доступні в рамках інструментальна бібліотек (toolkit libraries). Елементи керування в термінології X Window називі ють віджетами (widgets), тому такі бібліотеки називають ще бібліотеками відж( тів (widget toolkits). Є так само багато інструментальних бібліотек, як і віконни менеджерів, серед найвідоміших можна виокремити Motif (найпоширеніша 6іблі< тека початку 90-х років, не є безкоштовною), Gtk, Qt (дві останні доступні у ві хідних кодах, і їх широко використовують у сучасних системах, зокрема в Linux)
Кожна інструментальна бібліотека реалізує свій власний підхід до проект] вання інтерфейсу користувача: свій набір елементів керування, свої особливое обробки вводу користувача. Застосування, розроблене із використанням такі бібліотеки, відображатиметься на екрані та оброблятиме ввід користувача завжд однаково, незалежно від застосованого віконного менеджера та Х-сервера (зг; даймо, що все відображення графічного інтерфейсу користувача для застосуваї ня зрештою зводиться до генерації команд відповідно до Х-протоколу і пересі лання їх серверу).
Інтегровані середовища підтримки робочого столу
Як зазначалося, система X Window є дуже гнучкою. Можна використовувати різні віконні менеджери, розробляти застосування із використанням різних інструментальних бібліотек. Ця гнучкість, однак, має свої недоліки.
♦ Кожний віконний менеджер реалізує керування вікнами по-різному, перехід від одного до іншого зазвичай викликає в користувачів труднощі.
♦ Ще більше проблем пов'язано із відсутністю стандарту на реалізацію інструментальних бібліотек; у результаті маємо, що в разі переходу від одного клієнтського застосування до іншого доводиться перемикатися між різними підходами до реалізації інтерфейсу користувача, навіть таких його базових компонентів, як прокручування або організація стандартних вікон відкриття файла.
♦ Кожну інструментальну бібліотеку потрібно поміщати у пам'ять під час завантаження відповідного застосування, що спричиняє додаткові витрати пам'яті у тому випадку, коли одночасно у пам'ять завантажено кілька застосувань, що використовують різні бібліотеки. 1вє ьи-*-
♦ Відсутній стандарт на базові застосування для керування системою, такі як панель керування або файловий менеджер. Є багато реалізацій цих засобів, несумісних за інтерфейсом один з одним.
Для вирішення цих проблем запропоновано концепцію інтегрованого середовища підтримки робочого столу (desktop environment). Таке середовище — це інтегрований набір застосувань та інструментальних бібліотек, що реалізують весь набір засобів для організації роботи користувача під управлінням системи X Window. Найчастіше туди входять інструментальна бібліотека, віконний менеджер і базові застосування для керування системою. Фактично, воно реалізує набір компонентів, стандартних для інтерфейсу користувача Windows-систем.
В сучасних ОС широко використовують два інтегровані середовища підтримки робочого столу: KDE і GNOME. Особливості реалізації KDE наведено нижче.
KDE містить:
♦ інструментальну бібліотеку (Qt), яку використовують для реалізації всіх KDE-застосувань і рекомендують як стандарт для розробників;
♦ віконний менеджер (kwm), що підтримує керування вікнами на основі домовленостей, прийнятих у Windows-системах;
♦ набір додаткових бібліотек високого рівня (kdelibs), що реалізують складніші елементи керування (наприклад, діалогові вікна), а також базові системні функції (наприклад, друкування документів);
♦ набір домовленостей із розробки інтерфейсу користувача;
♦ набір прикладних програм для розв'язання базових задач повсякденної роботи в системі (веб-браузер і файловий менеджер Konqueror, панель керування control panel, засіб запуску застосувань kpanel, емулятор термінала kconsole тощо).
GNOME має подібну функціональність, важливою відмінністю є те, що це середовище дає змогу вибирати між різними віконними менеджерами, не віддаючи переваги якомусь одному.