
- •Тема 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
Початкове завантаження. Процеси 0 та 1
Завантаження ядра системи в основну пам’ять та її запуск називають початковим завантаженням. Ця процедура виконується при:
1. Увімкненні комп’ютера.
2. Якщо відбувся крах системи.
3. Система була свідомо зупинена.
Початкове завантаження відбувається в декілька етапів.
1–й етап. Спочатку з диску апаратно читається в пам’ять вміст першого блоку. Перший блок файлової системи резервується для запису спеціальної короткої програми, що виконує початкове завантаження. Після зчитування ця програма виконується. При виконанні ця коротка програма–завантажувач шукає та читає в пам’яті файл з іменем “unix”, що знаходиться в кореневому каталозі (”/unix”). Цей файл містить ядро ОС в машинних командах. Він створений шляхом компіляції та зв’язку файлів, що включають вхідні коди ОС.
2–й етап. Другий етап початкового завершення починається з читання та наступного виконання файлу “/unix”. Перша функція ядра – ініціалізація декількох апаратних інтерфейсів. Це стосується системного годинника та диспетчера пам’яті. Ядро формує також початкові значення декількох структур даних в тому числі набори буферів блоків, списки символів, буфери індексних дескрипторів та змінну, що показує розмір основної пам’яті.
Після завершення цих операцій ядро починає ініціалізувати процес 0. Процес 0, на відміну від інших процесів, що ініціалізуються функцією fork, створюється ядром шляхом резервування пам’яті для його контексту та занесення відповідних посилань в перший елемент таблиці процесів.
Процес 0 є унікальним з таких причин:
1. Він не має кодового сегменту і складається тільки з контексту. Всі інші процеси містять код, який виконує певні функції. Вони є певними образами, отриманими в результаті компіляції та наступного виконання деякої програми. Процес 0 не є образом, це просто структура даних, що використовується ядром.
2. Процес 0 існує на протязі всього періоду роботи системи.
3. Процес 0 – це дійсно системний процес, він є активним виключно в той час, коли процесор знаходиться в режимі ядра.
4. Процес 0 називається процесом виключно тому, що він є каталогізованим в таблиці процесів, але це тільки структура даних ядра.
Після створення процесу 0 система копіює його і створює процес 1. При цьому виконуються ті ж процедури, що і при виконанні користувачем системного виклику fork. Алгоритм створення процесу 1 в значній степені нагадує стандартну процедуру створення процесів, але дещо спрощену. Спочатку процес 1 є точною копією процесу 0, у нього немає області коду. Після створення процесу 1 відразу збільшується його розмір. Це створюється тими самими підпрограмами, що і при обробці системного виклику break (збільшення розміру виділеної пам’яті).
До цього моменту обидва процеси: 0 та 1 тільки повинні бути в майбутньому виконані.
Далі процесу 1 надається життєздатність, тобто у тільки що створену область копіюється дуже проста програма. Ця програма складається з машинних кодів, що реалізують системний виклик exec, необхідний для виконання програми “/etc/init”.
Таким чином, ініціалізація процесів 0 та 1 завершена. Процес 0 – це структура даних користувача, за допомогою якої ядро організує мультипрограмування та керує процесами. Процес 1 дуже подібний на реальний образ процесу, отриманого в результаті компіляції деякої програми, хоча насправді вона спеціальним чином створена ядром. Після ініціалізації 0 та 1 UNIX переходить до виконання програми диспетчера.
На цьому ініціалізація ядра завершається. Але ініціалізація системи в цілому тільки починається.
Програма – диспетчер відповідає за прийняття рішень про те, який процес повинен бути виконаний, для якого потрібен стопінг на диск, а для якого – свопінг з диску. При першому виклику диспетчера прийняти рішення неважко, тому що свопінга немає і тільки один процес повинен виконуватись – процес 1.
Робота процесу 1 приводить до негайної видачі системного виклику exec, який замінить команди процесу 1 кодом, що знаходиться у файлі ”/etc/init”. Тепер, коли цей процес отримав свою остаточну форму він має ім’я init.
Процес init настроює структури процесів системи UNIX. Звичайно він може створювати як мінімум два типи обчислювального середовища: однокористувацький та багатокористувацький. Цей процес починає свою роботу з підключення інтерпретатора команд ОС shell до системної консолі та присвоєння shell статусу привілейованого користувача. Такий режим часто називають однокористувацьким. Консоль (дисплей, клавіатура, периферія) автоматично реєструється як користувач, що зайшов з кореневими привілеями і ні по жодні лінії зв’язку вхід більше не можливий. Такий однокористувацький режим застосовується для перевірки та відновлення файлових систем, для виконання основних функцій тестування і інших дій, що вимагають монопольного використання комп’ютера.
При виході з однокористувацького режиму процес init створює багатокористувацьке середовище. З цією метою він створює процес getty для кожного активного каналу зв’язку. Init також продовжує процес shell для виконання команд, що зберігаються у файлі “/etc/rc”. Цей файл вміщує послідовність команд shell, що дозволяють монтувати файлові системи, запускати процеси, що слідкують за подіями, вилучати застарілі тимчасові файли та ініціювати виконання програм обміну для користувачів. Вміст файлу “/etc/rc” індивідуальний для кожної системи UNIX.
Під час роботи ОС, init пасивний, в очікуванні завершення довільного з породженого ним процесів. Як тільки це відбувається, init активізується і створює нову програму getty для відповідної лінії зв’язку (Саме getty може завершитись, оскільки shell існує на протязі всього часу функціонування системи). Таким чином init не тільки створює багатокористувацьку структуру, але і підтримує її під час існування системи.
Останній учасник ініціалізації системи програма getty. Кожна з цих програм очікує, коли хтось зайде в систему через визначений канал зв’язку. При виконанні такої процедури getty виконує декілька налаштувань відповідно до протоколу каналу, а потім за системним викликом exec передає керування програмі login, яка реалізує перевірку паролю. Якщо пароль коректний, то знову за допомогою виклику exec контроль передається shell, що приймає команди користувача. Після завершення роботи активізується єдина “жива” рідна програма init і послідовністю fork–exec створюється новий процес getty, що керує каналом, який очікує нового входу по даному каналу.