- •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. Зміна кореневого каталогу застосування
12.2.3. Неперервне розміщення файлів
Найпростіший підхід до фізичної організації файлових систем — це неперервне розміщення файлів. При цьому кожному файлові відповідає набір неперервно розташованих кластерів на диску (рис. 12.2). Для кожного файла мають зберігатися адреса початкового кластера і розмір файла.
Зазначимо, що розподіл дискового простору в цьому разі подібний до динамічного розподілу пам'яті. Для пошуку вільного блоку на диску можна використати алгоритми першого підходящого або найкращого підходящого блоку.
Неперервне розміщення файлів вирізняється простотою в реалізації та ефективністю (наприклад, весь файл може бути зчитаний за одну операцію), але має істотні недоліки.
Під час створення файла користувач має заздалегідь задати його максимальну довжину і виділити весь простір на диску за один раз. Збільшувати розміри файлів під час роботи не можна. У багатьох ситуаціях це абсолютно неприйнятно (наприклад, неможливо вимагати від користувача текстового редактора щоб він вказував остаточну довжину файла перед його редагуванням).
Вилучення файлів згодом може спричинити велику зовнішню фрагментацію дискового простору з тих самих причин, що й за динамічного розподілу пам'яті. У сучасних ОС для організації даних на жорстких дисках неперервне розміщення майже не використовують, проте його застосовують у таких файлових системах, де можна заздалегідь передбачити, якого розміру буде файл. Прикладом є файлові системи для компакт-дисків. Вони мають кілька властивостей, що роблять неперервне розміщення файлів найкращим рішенням:
записування такої файлової системи здійснюють повністю за один раз, під час записування для кожного файла заздалегідь відомий його розмір;
доступ до файлових систем на компакт-диску здійснюють лише для читання, файли в них ніколи не розширюють і не вилучають, тому відсутні причини появи зовнішньої фрагментації.
12.2.4. Розміщення файлів зв'язними списками
Прості зв'язні списки
Іншим підходом є організація кластерів, що належать файлу, у зв'язний список. Кожен кластер файла містить інформацію про те, де перебуває наступний кластер цього файла (наприклад, його номер). Найпростіший приклад такого розміщення бачимо на рис. 12.3. Заголовок файла в цьому разі має містити посилання на його перший кластер, вільні кластери можуть бути організовані в аналогічний список.
Розміщення файлів з використанням зв'язних списків надає такі переваги:
відсутність зовнішньої фрагментації (є тільки невелика внутрішня фрагментація, пов'язана з тим, що розмір файла може не ділитися націло на розмір кластера);
мінімум інформації, яка потрібна для зберігання у заголовку-файла (тільки посилання на перший кластер);
можливість динамічної зміни розміру файла;
простота реалізації керування вільними блоками, яке принципово не відрізняється від керування розміщенням файлів. Цей підхід, однак, не позбавлений і серйозних недоліків:
відсутність ефективної реалізації випадкового доступу до файла: для того щоб одержати доступ до кластера з номером п, потрібно прочитати всі кластери файла з номерами від 1 до я-1;
зниження продуктивності тих застосувань, які зчитують дані блоками, за розміром рівними степеню числа 2 (а таких застосувань досить багато): частина будь-якого кластера повинна містити номер наступного, тому корисна інформація в кластері займає обсяг, не кратний його розміру (цей обсяг навіть не є степенем числа 2);
можливість втрати інформації у послідовності кластерів: якщо внаслідок збою буде втрачено кластер на початку файла, вся інформація в кластерах, що йдуть за ним, також буде втрачена.
Є модифікації цієї схеми, які зберегли своє значення дотепер, найважливішою
з них є використання таблиці розміщення файлів.
Зв'язні списки з таблицею розміщення файлів
Цей підхід (рис. 12.4) полягає в тому, що всі посилання, які формують списки кластерів файла, зберігаються в окремій ділянці файлової системи фіксованого розміру, формуючи таблицю розміщення файлів (File Allocation Table, FAT). Елемент такої таблиці відповідає кластеру на диску і може містити:
номер наступного кластера, якщо цей кластер належить файлу і не є його останнім кластером;
індикатор кінця файла, якщо цей кластер є останнім кластером файла;
індикатор, який показує, що цей кластер вільний.
Індексні «і . у дескриптори
Для організації файла достатньо помістити у відповідний йому елемент ката-лога номер першого кластера файла. За необхідності прочитати файл система знаходить за цим номером кластера відповідний елемент FAT, зчитує із нього інформацію про наступний кластер і т. д. Цей процес триває доти, поки не трапиться індикатор кінця файла.Використання цього підходу дає змогу підвищити ефективність і надійність розміщення файлів зв'язними списками. Це досягається завдяки тому, що розміри FAT дозволяють кешувати її в пам'яті. Через це доступ до диска під час відсте-ження посилань заміняють звертаннями до оперативної пам'яті. Зазначимо, що навіть якщо таке кешування не реалізоване, випадковий доступ до файла не при-зводитиме до читання всіх попередніх його кластерів - зчитані будуть тільки попередні елементи FAT.
Крім того, спрощується захист від збоїв. Для цього, наприклад, можна зберігати на диску додаткову копію FAT, що автоматично синхронізуватиметься з основною. У разі ушкодження однієї з копій інформація може бути відновлена з іншої.
І нарешті, службову інформацію більше не зберігають безпосередньо у кластерах файла, вивільняючи в них місце для даних. Тепер обсяг корисних даних всередині кластера майже завжди (за винятком, можливо, останнього кластера файла) дорівнюватиме степеню числа 2.
Однак, у разі такого способу розміщення файлів для розділів великого розміру обсяг FAT може стати доволі великим і її кешування може потребувати значних витрат пам'яті. Скоротити розмір таблиці можна, збільшивши розмір кластера, але це, в свою чергу, призводить до збільшення внутрішньої фрагментації для малих файлів (менших за розмір кластера).
Також руйнування обох копій FAT (внаслідок апаратного збою або дії програ-ми-зловмисника, наприклад, комп'ютерного вірусу) робить відновлення даних дуже складною задачею, яку не завжди можна розв'язати.
Про реалізацію цього підходу йтиметься в розділі 13 під час знайомства із файловими системами лінії FAT.