
- •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
- •Література
3.3. Розміщення файлів
Область даних диска, відведену для зберігання файлів, можна представити як лінійну послідовність адресуються блоків (секторів). Розміщуючи файли в цій області, ОС повинна відвести для кожного файлу необхідну кількість блоків і зберегти інформацію про те, в яких саме блоках розміщений даний файл. Існують два основних способи використання дискового простору для розміщення файлів.
· Безперервне розміщення характеризується тим, що кожен файл займає безперервну послідовність блоків.
· Сегментоване розміщення означає, що файли можуть розміщуватися «по шматочках», тобто один файл може займати кілька несуміжних сегментів різної довжини. Обидва способи розміщення показані на рис. 3-1.
Рис. 3‑10
Безперервне розміщення має два серйозних гідності.
· Інформація про розміщення файлу дуже проста і займає мало місця. Фактично достатньо зберігати два числа: номер початкового блоку файлу і число займаних блоків (або розмір файлу в байтах, по якому легко обчислити число блоків).
· Доступ до будь-якої позиції у файлі виконується швидко, оскільки, знаючи зміщення від початку файлу, легко можна обчислити номер потрібного блоку та прочитати відразу цей блок, не читаючи попередні блоки.
На жаль, недоліки неперервного розподілу ще більш вагомі.
· При створенні файлу потрібно заздалегідь знати його розмір, щоб знайти і зарезервувати на диску область достатньої величини. Подальше можливе збільшення файлу досить утруднено, тому що після кінця файлу може не виявитися досить вільного місця. Фактично замість збільшення файлу зазвичай доводиться заново створювати файл більшого розміру в іншому місці, переписувати в нього дані і видаляти старі файли. Але таке рішення вимагає багато часу на читання і запис даних і, крім того, знижує надійність зберігання даних, оскільки помилка при читанні або запису набагато більш ймовірна, ніж псування даних, «спокійно лежать» на диску.
· В ході звичайної експлуатації файлової системи, після багаторазового створення і видалення файлів різної довжини, вільний простір на диску виявляється розбитим на невеликі шматочки. Сумарний обсяг вільного місця на диску може бути достатньо великим, але створити файл пристойного розміру не вдається, для нього немає безперервній області потрібної довжини. Це явище носить назву фрагментації диска. Для боротьби з ним доводиться використовувати спеціальну процедуру дефрагментації, яка переміщує всі файли, розміщуючи їх упритул один до одного від початку області даних диска. Але така процедура вимагає багато часу, знижує, як сказано вище, надійність і посилює проблеми у випадку, якщо пізніше потрібно буде збільшити файл.
Сегментоване розміщення позбавлене першого з недоліків безперервного: при створенні файлу йому зазвичай взагалі не виділяють пам'ять, а потім, у міру зростання розміру файлу, йому можуть бути виділені будь-які вільні сегменти на диску, незалежно від їх довжини.
Не так просто з фрагментацією. Звичайно, на відміну від безперервного розміщення, при сегментованому ніяка фрагментація не завадить системі використовувати всі блоки, наявні на диску. Однак послідовне читання з сегментованого файлу може виконуватися істотно повільніше за рахунок необхідності переходити від сегмента до сегмента. Уповільнення особливо помітно, якщо файл виявився розкиданий маленькими шматочками по декількох циліндрах диска. В результаті, час від часу доцільно виконувати дефрагментацію диска, щоб підвищити швидкість доступу до даних. При сегментованому розміщенні дефрагментація означає не тільки об'єднання всіх вільних ділянок диска, але і, головним чином, об'єднання сегментів кожного файлу. Ця процедура виконується значно складніше, ніж дефрагментація при безперервному розміщенні.
Чи можете ви запропонувати хороший алгоритм дефрагментації? Врахуйте, що він повинен ефективно працювати, навіть якщо на диску залишилося всього декілька вільних блоків.
Недоліком сегментованого розміщення є те, що інформація про розміщення файлу в цьому випадку набагато складніше, ніж для безперервного випадку і, що найбільш неприємно, обсяг цієї інформації змінний: чим більше число сегментів займає файл, тим більше потрібно інформації, бо треба перерахувати всі сегменти. Є майже стільки ж способів вирішення цієї проблеми, скільки взагалі придумано різних файлових систем.
Щоб зменшити вплив сегментації на швидкість доступу до даних файлу, в ОС, що використовують сегментоване розміщення, застосовуються різні алгоритми вибору місця для файлу. Їх метою є розмістити файл по можливості в одному сегменті, і лише в крайньому випадку розбивати файл на кілька сегментів.
У сучасних ОС для файлових систем на магнітних дисках практично завжди використовують сегментоване розміщення. Інша річ файлові системи на дисках, призначених тільки для читання (наприклад, CD ROM). Неважко зрозуміти, що в цьому випадку недоліки безперервного розміщення не мають ніякого значення, а його гідності зберігаються.
Ще однією важливою характеристикою розміщення файлів є ступінь його «дробности». До цих пір ми припускали, що файл може займати будь-яке ціле число блоків, а під блоком фактично розуміли сектор диска. Проблема в тому, що для дисків великого об'єму число блоків може бути занадто великим. Припустимо, у деякій файловій системі розмір блоку дорівнює 512 байт, а для зберігання номерів блоків файлу використовуються 16-розрядні числа. У цьому випадку розмір області даних диска не зможе перевищити 512 * 216 = 32 Мб, що нині смішно. Звичайно, можна перейти до використання 32-розрядних номерів блоків, але тоді сумарний розмір інформації про розміщення всіх файлів на диску стає занадто великим. Звичайний вихід з цієї скрути полягає в тому, що мінімальною одиницею розміщення файлів вважають кластер (званий в деяких системах блоком або логічним блоком), який приймається рівним 2k секторів, тобто, наприклад, 1, 2, 4, 8, 16, 32 сектора, рідко більше. Кожному файлу відводиться ціле число кластерів, і в інформації про розміщення файлу зберігаються номери кластерів, а не секторів. Збільшення розміру кластерів дозволяє скоротити кількість даних про розміщення файлів «і в довжину і в ширину»: по-перше, для кожного файлу потрібно зберігати інформацію про меншому числі кластерів, а по-друге, зменшується число двійкових розрядів, використовуваних для створення номера кластера ( або при тієї ж розрядності можна використовувати більший диск). Так, при кластері розміром 32 сектора і 16-розрядних номерах можна адресувати до 1 Гб дискової пам'яті.
Використання великих кластерів має свою погану сторону. Оскільки розмір файлу можна вважати випадковою величиною (принаймні, цей розмір ніяк не пов'язана з розміром кластера), то можна приблизно вважати, що в середньому половина останнього кластера кожного файлу залишається незайнятою. Це явище іноді називають внутрішньою фрагментацією (на відміну від описаної вище фрагментації вільного простору диска, яку називають також зовнішньої фрагментацією). Крім того, якщо хоча б один із секторів, що входять в кластер, відзначений як дефектний, то і весь кластер вважається дефектним, тобто не може бути використаний. Очевидно, що при збільшенні розміру кластера зростає і число невикористовуваних секторів диска.
Оптимальний розмір кластера або обчислюється автоматично при форматуванні диска, або задається вручну.
Для нормальної роботи файлової системи потрібно, щоб, крім інформації про розміщення файлів, система зберігала у зручному для використання вигляді інформацію про наявні вільні кластерах диска. Ця інформація необхідна при створенні нових або збільшення існуючих файлів.
Використовуються різні способи подання інформації про вільне місце, деякі з них перераховані нижче.
· Можна зберігати всі вільні кластери як пов'язаний лінійний список, тобто на початку кожного вільного кластера зберігати номер наступного за списком. Недолік такого способу в тому, що утруднюється пошук вільного безперервного фрагмента потрібного розміру, тому складніше оптимізувати розміщення файлів.
· Названий недолік можна перебороти, якщо зберігати список не з окремих кластерів, а з безперервних вільних фрагментів диска. Правда, працювати з таким списком дещо складніше.
· У системах з безперервним розміщенням часто кожен безперервний фрагмент диска описують так само, як файл, але відзначають його прапорцем «вільний».
· Зручний і простий спосіб полягає у використанні бітової карти (bitmap) вільних кластерів. Вона являє собою масив, що містить по одному біту на кожний кластер, причому значення 1 означає «кластер зайнятий», а 0 - «кластер вільний». Для пошуку вільного безперервного фрагмента потрібного розміру система повинна буде переглянути весь масив.