
- •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.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.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.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.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.4. Сегментна організація пам'яті
Перейдемо тепер до розгляду способів організації пам'яті, які базуються на використанні віртуальних адрес, апаратно перетворюваних в фізичні при виконанні команд. Два основних види організації віртуальної пам'яті - сегментна і сторінкова організація.
При сегментної організації вся віртуальна пам'ять, використовувана програмою, розбивається на частини, звані сегментами. Це розбиття виконується або самим програмістом (якщо він програмує на мові асемблера), або компілятором використовуваної мови програмування. Розміри сегментів можуть бути різними, але в межах максимального розміру, використовуваного в даній архітектурі. Розбиття зазвичай проводиться на логічно осмислені частини, такі, як сегмент даних, сегмент коду, сегмент стека і т.п. Велика програма може містити кілька сегментів одного типу, наприклад, кілька сегментів коду або даних.
Таким чином, при сегментної організації у програми немає єдиного лінійного адресного простору. Віртуальний адреса складається з двох частин: селектора сегмента і зміщення від початку сегменту.
Селектор сегмента представляє деяке число, яке зазвичай є індексом у таблиці сегментів даного процесу. Така таблиця містить для кожного сегмента його розмір, режим доступу (тільки читання або можливий запис), прапор присутності сегмента в пам'яті. Якщо сегмент знаходиться в пам'яті, то в таблиці зберігається його базову адресу (адресу фізичної пам'яті, відповідний початку сегмента). Відсутність сегмента означає, що його дані тимчасово витіснені на диск і зберігаються у файлі підкачки (swap file).
У кодах програми селектор сегмента може або явно присутній як частина адреси, або матися на увазі в залежності від сенсу конкретної адреси. Наприклад, для адрес виконуваних команд використовується селектор поточного сегмента команд, а для адрес операндів - селектор поточного сегмента даних.
При кожному зверненні до віртуального адресою апаратними засобами виконується перетворення пари «сегмент: зсув» у фізичну адресу. Спрощена схема такого перетворення показана на рис. 5-2.
Рис. 5‑21
Селектор сегмента використовується для доступу до відповідного запису таблиці сегментів. Якщо даний сегмент присутній в пам'яті, то його базову адресу, прочитаний в таблиці, складається зі зміщенням з віртуального адреси. Результат складання являє собою фізичну адресу, по якому і відбувається звернення до пам'яті.
Якщо сегмент відсутній у пам'яті, то відбувається переривання. Обробляючи його, система повинна довантажити сегмент з диску на вільне місце в пам'яті, записати його базовий адреса в таблицю сегментів і потім повторити команду, яка викликала переривання.
Але звідки візьметься вільне місце в пам'яті? По всій імовірності, системі доведеться для цього прибрати з пам'яті якийсь інший сегмент, що належить або до цього ж, або до іншого процесу. Копія витісняється сегмента повинна залишитися у файлі підкачки. Щоб уникнути зайвої роботи, в кожному записі таблиці зберігається прапор, який відзначає, чи є сегмент в пам'яті «чистим» або «брудним», тобто чи збігається його вміст з дисковою копією або ж воно було змінено у пам'яті після останнього завантаження з диска. «Брудний» сегмент повинен бути збережений на диску, для «чистого» збереження не потрібно. Якщо сегмент визначений як доступний лише для читання, то він свідомо «чистий».
Оскільки сегменти мають різні розміри, то в ході роботи системи, що супроводжується багаторазової завантаженням і вивантаженням сегментів, виникає ефект фрагментації пам'яті, описаний вище в п. 3.3 та у п. 5.3.3. У всіх випадках причиною фрагментації є багаторазове заняття і звільнення областей різного розміру.
Для боротьби з фрагментацією можна час від часу проводити дефрагментацію, тобто переміщення всіх сегментів, що знаходяться в пам'яті, на нові місця, без «дірок» в пам'яті між сегментами. При цьому, однак, потрібно, щоб система відкоригувала таблиці сегментів всіх тих процесів, сегменти яких перемістилися у фізичній пам'яті. Крім того, переміщення сегментів займає відчутний час, тому воно недопустимо для сегментів, що містять, наприклад, обробники переривань, які повинні спрацьовувати дуже швидко. Щоб уникнути цих проблем, в деяких системах сегменти можуть знаходитися в одному з двох станів:
· Фіксований сегмент не повинен переміщатися в пам'яті;
· Переміщуваний сегмент може переміщатися системою, проте програма не може звертатися до адрес в такому сегменті, оскільки його місце розташування не визначено.
Щоб працювати з даними в переміщуваному сегменті, програма повинна попередньо тимчасово зафіксувати його викликом спеціальної системної функції. При цьому ОС визначає поточне місце розташування сегмента і коригує його базовий адреса в таблиці сегментів процесу. Якщо ж програма протягом деякого часу не планує звертатися до даного сегменту, то його слід расфіксіровать, оскільки чим більше фіксованих сегментів в системі, тим менш ефективна буде дефрагментація.
При перемиканні поточного процесу все, що повинна зробити система у відношенні пам'яті, полягає в заміні таблиці сегментів. Для цього або в спеціальний системний регістр записується адреса таблиці сегментів поточного процесу, або, якщо апаратура допускає тільки одну таблицю сегментів, її вміст має бути перезаписані так, щоб відповідати новому працюючому процесу.