
- •Операційні системи Конспект лекцій
- •1. Введення
- •1.1. Предмет і завдання курсу
- •1.2. Рекомендації по літературі
- •1.3. Короткий нарис історії ос
- •1.3.1. Передісторія ос
- •1.3.2. Пакетні ос
- •1.3.3. Ос з поділом часу
- •1.3.4. Однозадачні ос для пеом
- •1.3.5. Багатозадачні ос для пк з графічним інтерфейсом
- •1.4. Класифікація ос
- •1.5. Критерії оцінки ос
- •1.5.2. Ефективність
- •1.5.3. Зручність
- •1.5.4. Масштабованість
- •1.5.5. Здатність до розвитку
- •1.6. Основні функції і структура ос
- •1.7. Ос, що використовуються в подальшому викладі
- •1.7.2. Windows
- •1.7.3. Unix
- •2. Управління пристроями
- •2.1. Основні завдання управління пристроями
- •2.2. Класифікація периферійних пристроїв і їх архітектура
- •2.3. Переривання
- •2.4. Архітектура підсистеми вводу / виводу
- •2.5. Способи організації введення / виводу
- •2.5.1. Введення / висновок з опитування і по перериваннях
- •2.5.2. Активне і пасивне очікування
- •2.5.3. Синхронний і асинхронний ввід / вивід
- •2.6. Буферизація і кешування
- •2.6.1. Поняття буферизації
- •2.6.2. Згладжування нерівномірності швидкостей процесів
- •2.6.3. Розпаралелювання введення та обробки
- •2.6.4. Узгодження розмірів логічної та фізичної записи
- •2.6.5. Редагування при інтерактивному введенні
- •2.6.6. Кешування дисків
- •2.6.7. Випереджаюче читання.
- •2.7. Драйвери пристроїв
- •2.8. Управління пристроями в ms-dos
- •2.8.1. Рівні доступу до пристроїв
- •2.8.2. Драйвери пристроїв в ms-dos
- •2.8.3. Управління символьними пристроями
- •2.8.4. Управління блоковими пристроями
- •2.8.4.1. Структура диска
- •2.8.4.2. Розділи і логічні томи
- •2.8.4.3. Засоби доступу до дисків
- •2.9. Управління пристроями в Windows
- •2.9.1.1. Драйвери пристроїв в Windows
- •2.9.1.2. Доступ до пристроїв
- •2.10. Управління пристроями в unix
- •2.10.1. Драйвери пристроїв в unix
- •2.10.2. Пристрій як спеціальний файл
- •3. Управління даними
- •3.1. Основні завдання управління даними
- •3.2. Характеристики файлів та архітектура файлових систем
- •3.3. Розміщення файлів
- •3.4. Захист даних
- •3.5. Поділ файлів між процесами
- •3.6. Файлова система fat і управління даними в ms-dos
- •3.6.1. Загальна характеристика системи fat
- •3.6.2. Структури даних на диску
- •Структура записи каталога файловой системы fat
- •3.6.4. Робота з файлами в ms-dos
- •3.6.4.1. Системні функції
- •3.6.4.2. Доступ до даних
- •3.6.4.3. Структури даних у пам'яті
- •3.6.5. Нові версії системи fat
- •3.7. Файлові системи і управління даними в unix
- •3.7.1. Архітектура файлової системи unix
- •3.7.1.1. Жорсткі і символічні зв'язку
- •3.7.1.2. Монтовані томи
- •3.7.1.3. Типи і атрибути файлів
- •3.7.1.4. Управління доступом
- •3.7.2. Структури даних файлової системи unix
- •3.7.3. Доступ до даних в unix
- •3.7.4. Розвиток файлових систем unix
- •3.8. Файлова система ntfs і управління даними в Windows
- •3.8.1. Особливості файлової системи ntfs
- •3.8.2. Структури дискових даних
- •3.8.2.1. Головна таблиця файлів
- •3.8.2.2. Атрибути файлу
- •3.8.3. Доступ до даних
- •3.8.4. Захист даних
- •3.8.4.1. Аутентифікація користувача
- •3.8.4.2. Дескриптор захисту
- •4. Управління процесами
- •4.1. Основні завдання управління процесами
- •4.2. Реалізація багатозадачного режиму
- •4.2.1. Поняття процесу і ресурсу
- •4.2.2. Квазіпараллельний виконання процесів
- •4.2.3. Стану процесу
- •4.2.4. Невитісняючаі витісняюча багатозадачність
- •4.2.5. Дескриптор і контекст процесу
- •4.2.6. Реєнтерабельним системних функцій
- •4.2.7. Дисципліни диспетчеризації та пріоритети процесів
- •4.3. Проблеми взаємодії процесів
- •4.3.1. Ізоляція процесів та їх взаємодія
- •4.3.2. Проблема взаємного виключення процесів
- •4.3.3. Двійкові семафори Дейкстри
- •4.3.4. Засоби взаємодії процесів
- •4.3.4.1. Цілочисельні семафори
- •4.3.4.2. Семафори з множинним очікуванням
- •4.3.4.3. Сигнали
- •4.3.4.4. Повідомлення
- •4.3.4.5. Спільна пам'ять
- •4.3.4.6. Програмні канали
- •4.3.5. Проблема тупиків
- •4.4. Управління процесами в ms-dos
- •4.4.1. Процеси в ms-dos
- •4.4.2. Середа програми
- •4.4.3. Запуск програми
- •4.4.4. Завершення роботи програми
- •4.4.5. Перехоплення переривань і резидентні програми
- •4.5. Управління процесами в Windows
- •4.5.1. Поняття об'єкта у Windows
- •4.5.2. Процеси і нитки
- •4.5.3. Планувальник Windows
- •4.5.4. Процес і нитка як об'єкти
- •4.5.5. Синхронізація ниток
- •4.5.5.1. Способи синхронізації
- •4.5.5.2. Об'єкти синхронізації та функції очікування
- •4.5.5.3. Типи об'єктів синхронізації
- •4.5.5.4. Критичні секції
- •4.5.6. Повідомлення
- •4.6. Управління процесами в unix
- •4.6.1. Життєвий цикл процесу
- •4.6.2. Групи процесів
- •4.6.3. Програмні канали
- •4.6.4. Сигнали
- •4.6.5. Засоби взаємодії процесів в стандарті posix
- •4.6.6. Планування процесів
- •4.6.6.1. Стану процесів в unix
- •4.6.6.2. Пріоритети процесів
- •4.6.7. Інтерпретатор команд shell
- •5. Управління пам'яттю
- •5.1. Основні завдання управління пам'яттю
- •5.2. Віртуальні й фізичні адреси
- •5.3.1. Настроювання адрес
- •5.3.2. Розподіл з фіксованими розділами
- •5.3.3. Розподіл з динамічними розділами
- •5.4. Сегментна організація пам'яті
- •5.5. Сторінкова організація пам'яті
- •5.6. Порівняння сегментної і сторінкової організації
- •5.7. Управління пам'яттю в ms-dos
- •5.8. Управління пам'яттю в Windows
- •5.8.1. Структура адресного простору
- •5.8.3. Відображення виконуваних файлів
- •5.8.4. Файли, відображувані на пам'ять
- •5.8.5. Стеки і купи
- •5.9. Управління пам'яттю в unix
- •Література
5.3.1. Настроювання адрес
Якщо в програмі використовуються значення фізичних адрес, то правильність її роботи залежить від того, за якими адресами завантажена в пам'ять сама програма. Це особливо очевидно для команд переходу: якщо в програмі є команда «Перейти за адресою 1000», то зсув цієї програми в пам'яті призведе до того, що перехід буде виконаний на зовсім іншу команду, хоча і за тією ж адресою.
У той же час важко розраховувати, що при кожному запуску програми ОС зможе завантажити її по одним і тим же адресам. Якщо це ще в принципі можливо для однозадачной ОС, то в разі декількох завдань їх програми можуть претендувати на одні й ті ж адреси.
Для вирішення цієї проблеми в складі файла програми доводиться зберігати словник переміщень - список всіх тих місць в програмі, які містять адреси, що вимагають настройки на адресу завантаження програми. Така настройка в більшості випадків являє собою просто додавання адреси завантаження з адресою, що зберігається у файлі програми, і виконується при завантаженні програми в пам'ять. Виконання налаштування призводить до деякої затримки при запуску програм.
Пізніші архітектури ЕОМ дозволили в значній мірі спростити справу за рахунок використання відносної адресації - вказівки адреси як зміщення відносно значення в деякому базовому регістрі. Тепер настройка потрібна лише для декількох команд, що завантажують значення в базові регістри. Більш того, для багатьох не дуже складних програм стало можливо обійтися взагалі без словника переміщень (наприклад, якщо всі адреси вказані тільки як зміщення відносно початку програми). Подібні програми, здатні без змін правильно працювати при завантаженні по будь-якою адресою, називаються позиційно-незалежними, на відміну від переміщуваних програм, що вимагають настройки адрес.
В системі MS-DOS всі файли типу COM містять позиційно-незалежні програми, а файли EXE - переміщувані.
5.3.2. Розподіл з фіксованими розділами
При цьому способі розподілу пам'яті адміністратор системи заздалегідь, при установці ОС, виконує розбиття всієї наявної пам'яті на кілька розділів. Як правило, формуються розділи різних розмірів. Допускається також визначення великого розділу як суми декількох прилеглих друг до друга менших розділів, як показано на рис. 5-1.
Рис. 1‑20
Можливі два варіанти організації роботи з фіксованими розділами.
· У більш примітивних системах вже на етапі компонування програми визначається, для якого з розділів вона призначена. У цьому виборі враховується розмір програми, а також, якщо це можливо передбачити, набір інших програм, які будуть працювати одночасно з даною. В ідеалі, паралельно працюючі програми повинні бути скомпоновані для різних розділів. При запуску
програми вона завантажується у відповідний розділ, а якщо він зайнятий, програма повинна очікувати його звільнення, тобто повного завершення роботи програми, що займає розділ.
· У більш розвинених системах програма зберігається в переміщуваному форматі, а при її запуску система вибирає найбільш відповідний за розміром вільний розділ. При відсутності такого програма очікує.
Очевидно, що в обох варіантах пам'ять використовується не дуже ефективно. Цілком можлива ситуація, коли до деяких розділів вишикувалася черга програм, а інші розділи в цей час пустують. У першому варіанті, крім того, неможливий перенос скомпонованих програм на іншу ЕОМ (з іншими розділами).
В описаних варіантах розподілу пам'яті кількість одночасно завантажених програм не може перевищувати числа розділів. Якщо бажано забезпечити більшу завдань, то можна дозволити поділ одного розділу між кількома програмами. При цьому програма, яка в даний момент знаходиться в сплячому або готовому стані, може бути витіснена з пам'яті на диск, у відведений для цього файл підкачки (swap file). У звільнився розділ з того ж файлу підкачки завантажується програма, яку планувальник процесів вибрав для виконання.
Використання підкачки дозволяє необмежено збільшувати кількість завантажених програм (тобто число процесів в системі). Однак підкачка - це досить небезпечне рішення, зловживання нею може в десятки разів знизити продуктивність системи, оскільки більша частина часу буде йти не на корисну роботу, а на перекачування програм з пам'яті на диск і назад. Щоб уникнути цієї небезпеки, в систему повинні бути закладені ретельно підібрані, перевірені алгоритми планування процесів і пам'яті.
Гранично простим випадком розподілу з фіксованими розділами можна вважати організацію пам'яті в однозадачних системах, де існує єдиний розділ для програм користувача, що включає всю пам'ять, не зайняту системою.