- •Тема 1: Основні поняття обчислювальних систем Призначення та склад системного програмного забезпечення
- •Основні концепції операційних систем
- •Типи операційних систем
- •Основні етапи розвитку операційних систем
- •Функціональні компоненти операційних систем
- •Керування процесами й потоками
- •Керування ресурсами
- •Керування введенням-виведенням
- •Керування файлами та файлові системи
- •Мережна підтримка
- •Тема 2: Архітектура операційних систем Основні принципи побудови операційних систем
- •Принцип модульності
- •Принцип функціональної вибірковості
- •Принцип здатності до генерування
- •Принцип функціональної надмірності
- •Принцип віртуальності
- •Принцип незалежності програм від зовнішніх пристроїв
- •Принцип сумісності
- •Принцип відкритої і нарощуваної ос
- •Принцип мобільності (переносимості)
- •Принцип забезпечення безпеки обчислень
- •Базові поняття архітектури операційних систем
- •Ядро операційної системи
- •Монолітні системи
- •Багаторівневі системи
- •Системи з мікроядром
- •Концепція віртуальних машин
- •Засоби апаратної підтримки операційних систем
- •Інтерфейс прикладного програмування
- •Варіанти реалізації api
- •Особливості архітектури unix і Linux
- •Особливості побудови ос Linux
- •Особливості архітектури Windows xp
- •Компоненти режиму ядра
- •Компоненти режиму користувача
- •Об’єктна архітектура Windows xp
- •Тема 3: Процеси та потоки
- •Базові поняття процесів та потоків
- •Блок керування процесом
- •Операції над процесами
- •Обробка переривань
- •Алгоритми планування процесів
- •Витісняючі та невитісняючі алгоритми планування
- •Нитки, потоки (Thread)
- •Керування процесорами
- •Планування з переключення та без переключення
- •Лекція 4: Ядро операційної системи
- •Основні функції ядра
- •Асинхронні паралельні процеси
- •Взаємо-виключення
- •Семафори
- •Кільцевий буфер
- •Конвеєр (програмний канал)
- •Черги повідомлень (Queue)
- •Лекція 5. Керування ресурсами
- •Керування пам’яттю
- •Ієрархія пам’яті
- •Розподіл пам’яті
- •Зв’язний розподіл пам’яті для одного користувача
- •Мультипрограмування з фіксованими розділами
- •Мультипрограмування із змінними розділами
- •Боротьба з фрагментацією
- •Стратегії розміщення інформації в пам’яті
- •Системи з розподілом часу. Сторінкова організація пам’яті. Концепція віртуальної (уявної) пам’яті.
- •Принцип кешування даних
- •Лекція 6. Керування даними Файлова система
- •Функції файлової системи
- •Ієрархія даних
- •Об’єднання в блоки та буферизація
- •Організація файлів
- •Методи доступу
- •Характеристики файлів
- •Файлова система
- •Виділення та звільнення місця в пам’яті
- •Зв’язаний розподіл пам’яті
- •Незв’язаний розподіл пам’яті
- •1) Розподіл за допомогою списків секторів
- •2) Поблочний розподіл
- •Дескриптор файлу (file descriptor)
- •Матриця керування доступом
- •Керування доступом в залежності від класів користувачів
- •Копіювання та відновлення інформації
- •Планування роботи з дисковою пам’яттю
- •Призначення планування
- •Цільові характеристики принципів планування
- •Оптимізація пошуку циліндру
- •Оптимізація за часом очікування записів
- •Архітектура сучасних файлових систем
- •Лекція 8. Основи організації ms-dos
- •Будова та функції основних складових дос
- •Керування пам’яттю
- •Відображена пам’ять
- •Розширена пам’ять
- •Висока пам’ять
- •Верхня пам’ять
- •Драйвери верхньої та розширеної пам’яті
- •Завантажувані модулі com та exe – файли
- •Логічна структура диску в ms-dos
- •Формат елементів таблиці розділів
- •Запис завантаження (boot)
- •Використання boot-сектору
- •Визначення формату fat
- •Формат fat
- •Файли та каталоги
- •Недоліки ms-dos
- •Переваги які надає користувачам Windows
- •Windows як операційна оболонка
- •Обмін даними в Windows
- •Зв’язування чи вбудовування
- •Первинність повідомлень: механізм повідомлень
- •Незалежна (preemptive) багатозадачність
- •Взаємодія 32– та 16–розрядних кодів
- •Робота з 16–розрядними продуктами
- •Робота з dos–продуктами
- •Робота 32–розрядних Windows–продуктів
- •Вдосконалення розподілу системних ресурсів
- •Vcache – 32–розрядний дисковий кеш
- •Варіанти модифікацій ос Windows xp
- •Нові характеристики реалізовані в Windows xp
- •Продуктивність
- •Лекція 8. Ос unix
- •Ядро ос unix
- •Генерування ос
- •Процеси
- •Початкове завантаження. Процеси 0 та 1
- •Файлова система unix
- •Будова файлової системи unix
- •Каталоги
- •Тема 1: Основні поняття обчислювальних систем 1
- •Тема 2: Архітектура операційних систем 9
- •Тема 3: Процеси та потоки 25
Генерування ос
Генерування ОС – це процес формування конфігурації ОС UNIX, що відповідає деякому заданому набору периферійних пристроїв та деякому комплексу можливостей, що вибираються по замовленню. Основна робота, що виконується при генерації – це створення списку, що вміщує точний опис апаратних та програмних засобів.
Ядро UNIX – це не проста послідовна програма. Воно вміщує декілька важливих таблиць, які використовуються для координації взаємопов’язаних потоків, що повинні виконуватися. Це є приклад програми структура якої визначена даними, тому її вивчення слід починати з інформаційних таблиць. Більша частина роботи ядра – це пошук в таблицях і їх модифікація.
У довільний момент часу комп’ютер виконує або програму користувача (процес), або процес ОС. Деякі механізми ОС можуть виконувати запит на переключення з режиму користувача в режим ядра.
1. Системний годинник. Періодично формується переривання, тобто сигнал, що переключає комп’ютер на виконання спеціальної службової програми. Ця програма, обслуговування системного годинника, виконує переоцінку пріоритетів процесів і таким чином може відбутися зміна процесу, що виконується.
2. Системний виклик. Якщо у програми користувача виникає необхідність в послугах ОС, вона генерує системний виклик. Як наслідок – перехід з режиму користувача в режим ядра. Системні виклики, що виконують операції вводу/виводу, досить часто приводять до зупинки процесу, який ініціював виклик, на час передачі даних. Під час паузи може виконуватись інший процес користувача. Часто ініціюють роботу механізму розподілення часу.
3. Обслуговування периферійних пристроїв вводу/виводу. Для нормального продовження роботи процесу, що запустив операцію вводу/виводу, після закінчення передачі інформації виробляється переривання. Воно звичайно приводить до змін стану різних елементів, в таблицях і може ініціювати наступний обмін.
ОС UNIX підтримує у користувача дві ілюзії:
1. Файлова система розміщена в конкретному місці носія.
2. Процес “живе” своїм життям.
Процеси
Ядро UNIX існує для виконання потреб процесів. З точки зору процесів, ядро це витрати, з якими треба миритись. З точки зору ядра, процеси – це каталогізовані структури даних, над якими за певними правилами виконуються маніпуляції.
Процес – це програма під час виконання в деякий момент часу довільної програми може відповідати один або декілька процесів, або не відповідати жодний. Процес – це об’єкт, що враховується в спеціальній таблиці ядра системи.
Найбільш важлива інформація про процес зберігається в двох місцях:
- в таблиці процесів;
- в таблиці користувача (контекст процесу).
Перша – завжди знаходиться в пам’яті і містить на кожний процес по одному елементу, в якому відображається точний стан процесу:
– розташування процесу (адреса в пам’яті або адреса свопінгу);
– розмір;
– ідентифікатори процесу;
– ідентифікатори користувача що запустив процес.
Менш актуальна інформація про процес зберігається в таблиці користувача. Така таблиця існує для кожного активного процесу і тільки до неї можуть безпосередньо звертатись програми ядра. При всіх ситуаціях, що виникають при виконанні процесу, відбувається звертання до його таблиці. Створення процесу включає ініціалізацію відповідного контексту та сегмента таблиці процесів а також формування даних та тексту цього процесу. Зміна стану (виконання, очікування, повернення в пам’ять та інше) та отримання стану від паралельного процесу – все це фіксується в таблиці процесів.
Якщо процес складається з чистих машинних кодів (дані існують окремо), то структура даних буде наступна.
Після завершення деякого процесу відповідний елемент таблиці звільняється для того, щоби потім його використовували для інших процесів.
Таблиця процесів резидентна в основній пам’яті, що забезпечує ядру можливість реагувати на зміни стану процесу, що тимчасово зберігається на диску. Справа в тому, що деякі події, що стосуються процесу, можуть відбуватися в той час, коли він пасивний. Наприклад, процес може “спати” в очікуванні вводу/виводу. Завершення процедури обміну приводить до того, що процес “прокидається” і виконується відмітка про його готовність до виконання. Вся інформація, необхідна для керування “прокиданням” процесу, знаходиться в таблиці процесів.
Ядро резервує по одному контексту на кожний активний процес. В цій таблиці інформація, що необхідна під час виконання процесу. Якщо процес призупинено, контекст стає недоступним та не модифікованим. Окрім того, оскільки ця структура даних є складовою частиною області даних кожного процесу, то при виконанні свопінгу переписується на диск разом з усім образом процесу.
Біжуча інформація про процес в основному вміщується в його контексті. Сюди записуються:
– ідентифікаційні номера користувача і групи, що призначені для визначення привілеїв доступу до файлів;
– посилання на системну таблицю файлів для всіх відкритих процесом файлів;
– покажчик на індексний дескриптор біжучого каталогу в таблиці індексних дескрипторів;
– список реакцій на різні сигнали.
Для створення нових, існуючі процеси використовують два основних механізми:
Fork – системний виклик (команда) для створення процесом своєї власної копії; це єдиний спосіб для збільшення числа процесів; після його виконання є два процеси, породжуючий (батьківський, джерело) та породжений (дочірній, приймач). Основна відмінність між ними в тому, що вони мають різні власні ідентифікатори та ідентифікатори батьківських процесів. Обидва процеси розділяють між собою відкриті файли і кожен з них може визначити чи він є батьківським чи дочірнім.
Exec – для перетворення процесу, що ініціював цей системний виклик. У цьому випадку міняється не кількість процесів, а їх якість. Тобто після виклику exec процес, що ініціював цей виклик, замінюється деяким іншим. Ідентифікатор процесу та відкриті файли при цьому залишаються незмінними.
Звичайно для створення дочірнього процесу з новим ідентифікатором послідовно викликають fork, а потім exec. Саме в такий спосіб запускаються інтерпретатори shell та довільна викликана програма. Пара fork–exec, як правило, працює разом із системним викликом wait. Wait дозволяє процесу–батьку дочекатись завершення породженого ним процесу.
