
- •6.080401 “Інформаційні управляючі системи та технології”
- •6.080402 “Інформаційні технології проектування”
- •6.080401 “Інформаційні управляючі системи та технології” 1
- •Розділ 1 Основні концепції операційних систем
- •1.1 Поняття операційної системи, ії призначення та функції
- •1.1.1 Поняття операційної системи
- •1.1.2 Призначення операційної системи
- •1.1.3 Операційна система як розширена машина
- •1.1.4 Операційна система як розподілювач ресурсів
- •1.2 Класифікація сучасних операційних систем
- •1.3 Функціональні компоненти операційних систем
- •1.3.1 Керування процесами і потоками
- •1.3.2 Керування пам’яттю
- •1.3.3 Керування введенням-виведенням
- •1.3.4 Керування файлами та файлові системи
- •1.3.5 Мережна підтримка
- •1.3.6 Безпека даних
- •1.3.7 Інтерфейс користувача
- •Розділ 2 Архітектура операційних систем
- •2.1 Базові поняття архітектури операційних систем
- •2.1.1 Ядро системи. Привілейований режим і режим користувача
- •2.2 Реалізація архітектури операційних систем
- •2.2.1 Монолітні системи
- •2.2.2 Багаторівневі системи
- •2.2.3 Системи з мікроядром
- •2.2.4 Концепція віртуальних машин
- •2.3 Особливості архітектури: unix і Linux
- •2.3.1 Базова архітектура unix
- •2.3.2 Архітектура Linux
- •Розділ 3 Керування процесами і потоками
- •3.1 Базові поняття процесів і потоків
- •3.1.1 Процеси і потоки в сучасних ос
- •3.1.2 Моделі процесів і потоків
- •3.1.3 Складові елементи процесів і потоків
- •3.2 Стани процесів і потоків
- •3.3 Опис процесів і потоків
- •3.3.1 Керуючи блоки процесів і потоків
- •3.3.2 Образи процесу і потоку
- •3.4 Створення і завершення процесів і потоків
- •3.4.1 Створення процесів
- •3.4.2 Керування адресним простором під час створення процесів
- •3.4.3 Особливості завершення процесів
- •3.4.4 Синхронне й асинхронне виконання процесів
- •3.4.5 Створення і завершення потоків
- •3. 5 Керування процесами в unix і Linux
- •3. 5. 1 Образ процесу
- •3. 5. 2 Ідентифікаційна інформація та атрибути безпеки процесу
- •3. 5.3 Керуючий блок процесу
- •3. 5. 4Створення процесу
- •3. 5. 5 Завершення процесу
- •3. 5. 6 Очікування завершення процесу
- •3. 5. 7 Сигнали
- •3.6 Керування потоками в Linux
- •3. 6. 1 Базова підтримка багатопотоковості
- •3. 6. 2 Потоки ядра Linux
- •3. 6. 2 Програмний інтерфейс керування потоками Створення потоків
- •Очікування завершення виконання потоків
- •Висновки
- •Розділ 4 Планування процесів і потоків
- •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 Планування процесів реального часу в ядрі
- •4. 5. 2 Традиційний алгоритм планування
- •Умови виклику процедури планування
- •Процедура планування
- •Початок нової епохи
- •Розрахунок динамічного пріоритету
- •Перерахування кванта під час створення нового процесу
- •4. 5. 3 Сучасні підходи до реалізації планування
- •4. 5. 4 Програмний інтерфейс планування
- •Висновки
- •Розділ 5 Взаємодія потоків
- •5. 1 Основні принципи взаємодії потоків
- •5. 2 Основні проблеми взаємодії потоків
- •5. 2. 1 Проблема змагання
- •5. 2. 2 Критичні секції та блокування Поняття критичної секції
- •Блокування
- •Проблеми із реалізацією блокувань
- •5. 3 Базові механізми синхронізації потоків
- •5. 3. 1 Семафори
- •Особливості використання семафорів
- •Реалязація задачі виробників-споживачів за допомогою семафорів
- •5. 3. 2 М’ютекси
- •Висновки
- •Розділ 6 Міжпроцесова взаємодія
- •6. 1 Види міжпроцесової взаємодії
- •6. 1. 1 Технологія відображуваної пам’яті (mapped memory)
- •Розділ 7 Керування оперативною пам’яттю
- •7. 1 Основи технології віртуальної пам’яті
- •7. 1. 1. Поняття віртуальної пам’яті
- •7. 1. 2. Проблеми реалізації віртуальної пам’яті. Фрагментація пам’яті
- •7. 1. 3. Логічна і фізична адресація пам’яті
- •7. 1. 4 Підхід базового і межового регістрів
- •7. 2 Сегментація пам’яті
- •7.2. 1. Особливості сегментації пам’яті
- •7.2.2. Реалізація сегментації в архітектурі іа-32
- •7. 3 Сторінкова організація пам’яті
- •7.3.1. Базові принципи сторінкової організації пам’яті
- •7.3.2. Порівняльний аналіз сторінкової організації пам’яті та сегментації
- •7.3.3. Багаторівневі таблиці сторінок
- •7.3.4. Реалізація таблиць сторінок в архітектурі іа-32
- •7.3.5. Асоціативна пам’ять
- •7. 4. Сторінково-сегментна організація пам’яті
- •7. 5. Реалізація керування основною пам’яттю: Linux
- •7.5.1. Використання сегментації в Linux. Формування логічних адрес
- •7.5.2. Сторінкова адресація в Linux
- •7.5.3. Розташування ядра у фізичній пам’яті
- •7.5.4. Особливості адресації процесів і ядра
- •7.5.5. Використання асоціативної пам’яті
- •Розділ 8 Логічна організація файлових систем
- •8. 1. Поняття файла і файлової системи
- •8.1.1. Поняття файла
- •8.1.2. Поняття файлової системи
- •8.1.3. Типи файлів
- •8.1.4. Імена файлів
- •8. 2. Організація інформації у файловій системі
- •8.2.1. Розділи
- •8.2.2. Каталоги
- •8.2.3. Зв’язок розділів і структури каталогів
- •Єдине дерево каталогів. Монтування файлових систем
- •8. 3. Зв’язки
- •8. 3. 1. Жорсткі зв’язки
- •8. 3. 2. Символічні зв’язки
- •Підтримка символічних зв’язків на рівні системних викликів
- •8. 4. Атрибути файлів
- •8. 5. Операції над файлами і каталогами
- •8. 5. 1. Підходи до використання файлів процесами
- •8. 5. 2. Загальні відомості про файлові операції
- •8. 5. 3. Файлові операції posix
- •Література
3. 5 Керування процесами в unix і Linux
3. 5. 1 Образ процесу
В UNIX-системах образ процесу містить такі компоненти:
керуючий блок процесу;
код програми, яку виконує процес;
стек процесу, де зберігаються тимчасові дані (параметри процедур, повернені значення, локальні змінні тощо);
глобальні дані, спільні для всього процесу.
Для кожного компоненту образу процесу виділяють окурему ділянку пам’яті.
3. 5. 2 Ідентифікаційна інформація та атрибути безпеки процесу
Із кожним процесом у системі пов’язана ідентифікаційна інформація.
Ідентифікатор процесу (pid) є унікальним у межах усієї системи, і його використовують для доступу до цього процесу. Ідентифікатор процесу init завжди дорівнює одиниці.
Ідентифікатор процесу-предка (ppid) задають під час його створення. Будьякий процес має мати доступ до цього ідентифікатора. Так в UNIX-системах обов’язково підтримується зв’язок “предок-нащадок”. Якщо предок процесу P завершує виконання, предком цього процесу автоматично стає init, тому ppid для P дорівнюватиме одиниці.
Із процесом також пов’язаний набір атрибутів безпеки.
Реальні ідентифікатори користувача і групи процесу (uid, gid) відповідають користувачеві, що запустив програму, в наслідок чого в системі з’явивися відповідний процес.
Ефективні ідентифікатори користувача і групи процесу (euid, egid) використовують у спеціальному режимі виконання процесу – виконані з правами власника.
3. 5.3 Керуючий блок процесу
Розглянемо структуру керуючого блоку процесу в Linux.
Керуючий блок процесу в Linux відображається структурою даних task_struct. До найважливіших полів цієї структури належать поля, що містять таку інформацію:
ідентифікаційні дані (зокрема pid – ідентифікатор процесу);
стан процесу (виконання, очікування тощо);
покажчики на структури предка і нащадків;
час створення процесу та загальний час виконання (так звані таймери процесу);
стан процесора (вміст регистрів і лічильник інструкцій);
атрибути безпеки процесу (id, gid,euid, egid).
Зазначимо, що в ядрі Linux відсутня окрема структура даних для потоку, тому інформація про стан процесора міститься в керуючому блоці процесу.
Крім перелічених вище, task_struct має кілька полів спеціалізованого призначення, необхідних для різних підсистем Linux:
відомості для обробки сигналів;
інформація для планування процесів;
інформація про файли і каталоги, пов’язані з процесом;
структури даних для підсистеми керування пам’яттю.
Дані полів task_struct можуть спільно використовувати декілька процесів спеціалізованого призначення, у цьому випадку такі процеси фактично є потоками.
Керуючі блоки процесу зберігаються в ядрі у спеціальній структурі даних. До появи версії ядра 2.4 таку структуру називали таблицею процесів системи; це був масив,максимальна довжина якого не могла перевищувати 4 Кбайт. У ядрі версії 2.4 таблиця процесів була замінена двома динамічними структурами даних, що не мають такого обмеження на довжину:
хеш-таблицею (де в ролі хеша виступає pid процесу), ця структура дає змогу швидко знаходити процес за його ідентифікатором;
кільцевим двозв’язним списком, ця структура забезпечує виконання дій у циклі для всіх процесів системи.
Тепер обмеження на максимальну кількість процесів перевіряється тільки всередині реалізації функції fork() і залежить від обсягу доступної пам’яті (наприклад, є відомості, що у системі з 512 Мбайт пам’яті можна створити близько 32000 процесів).
Реалізація керуючого блоку в Linux відрізняється від його традиційної реалізації в UNIX-системах. У більшості версій UNIX (System V, BSD) керуючий блок процесу складається з двох струтур даних – струтури процесу (proc) і структури користувача (u).