
- •Операційні системи Конспект лекцій
- •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
- •Література
3.4. Захист даних
У багатокористувацьких ОС першорядне значення набуває завдання захисту даних користувача від випадкового або навмисного доступу з боку інших користувачів. Питання захисту даних та стандартизації вимог до безпеки ОС заслуговують вивчення в окремому курсі, тому тут вони будуть розглянуті дуже стисло.
Як зазначалося в п. 1.6, для реалізації багатокористувацької захисту даних необхідна наявність апаратних засобів, таких як привілейований режим роботи процесора. У противному разі будь чисто програмна система захисту могла б бути порушена за допомогою досить витонченої програми злому.
Для будь-якої системи захисту характерна наявність, принаймні, трьох компонент.
· Список користувачів системи, містить імена, паролі і привілеї, присвоєні користувачам.
· Наявність атрибутів захисту у файлів та інших об'єктів, що захищаються. Ці атрибути вказують, хто з користувачів має право доступу до даного об'єкту і які саме операції йому дозволені.
· Процедура аутентифікації користувача, тобто встановлення його особи при вході в систему. Такі процедури частіше за все засновані на введенні пароля, хоча можуть використовуватися і більш екзотичні засоби (відбитки пальців, спеціальні картки і т.п.).
Крім окремих користувачів, певними правами доступу до об'єктів можуть володіти групи користувачів. Поняття групи полегшує адміністрування прав доступу. Замість того, щоб індивідуально вказувати набір прав для кожного користувача, досить зарахувати його в одну або кілька груп, права яких визначені заздалегідь.
Нормальне обслуговування системи захисту неможливо без наявності адміністратора системи (він же в різних системах іменується привілейованим користувачем або суперкористувачами) або ж групи користувачів, які володіють правами адміністратора. Адміністратор призначає права іншим
користувачам, а також має можливість в надзвичайних випадках отримати доступ до об'єктів будь-якого власника. Однак при цьому бажано, щоб дії адміністратора, як мінімум, фіксувалися системою з метою виявлення можливих зловживань з його боку.
3.5. Поділ файлів між процесами
У багатозадачних ОС, а також в мережевих системах, можлива ситуація, коли два або більше процесів намагаються одночасно використовувати один і той же файл. Наприклад, два користувача можуть одночасно працювати з однією базою даних. Будемо припускати, що з правами доступу все гаразд, кожен процес окремо має право читати і записувати файл. Питання в тому, чи можна дозволити одночасну роботу, чи не призведе це до порушення цілісності даних.
Може призвести. Якщо один процес оновлює дані у файлі, а інший в цей час намагається читати ці ж дані, то він може прочитати частково оновлені дані. Ще небезпечніше, коли два процеси намагаються одночасно змінити одні й ті ж дані. У цьому випадку важко навіть передбачити, що в результаті буде збережено у файлі.
В принципі, завжди безпечними є лише два крайніх випадку:
· Тільки один процес працює з файлом, виконуючи читання і запис;
· З файлом працює довільне число процесів, але всі вони виконують тільки читання.
ОС могла б забезпечити безпечний доступ, дозволяючи процесу відкривати файл тільки в цих двох випадках, тобто якщо файл не відкритий ще жодним іншим процесом або якщо файл відкритий кимось тільки для читання і даний процес теж відкриває його для читання. Однак така суворість у ряді випадків істотно знизила б продуктивність системи. Скажімо, багато користувачів хотіли б одночасно працювати з однією базою даних. І в цьому немає нічого поганого, поки вони працюють з різними записами бази. Небезпека виникає тільки при одночасній роботі з однією і тією ж записом. Але ОС не може сама відстежити ситуацію так докладно, це може зробити програма, що керує базою даних. Зважаючи подібних ситуацій, більшість ОС дозволяють програмам процесів самим визначати, чи допустимо спільний доступ у різних конкретних ситуаціях.
Типове рішення полягає в наступному. Прикладна програма, викликаючи системну функцію відкриття файлу, вказує два додаткові параметри: режим доступу та режим поділу.
Режим доступу визначає, які операції сам процес збирається виконувати з файлом. Зазвичай розрізняють доступ «тільки для читання», «тільки для запису», «для читання і запису».
Режим поділу визначає, які операції даний процес готовий дозволити іншим процесам, які захочуть відкрити той же файл. Зразковий набір режимів поділу - «заборона запису», «заборона читання», «заборона читання і запису» і «без заборон».
Перший процес, який відкриває файл, встановлює на свій розсуд режими доступу і розподілу. Коли другий процес намагається відкрити той же файл, ОС перевіряє дві умови:
· Режим доступу другого процесу не повинен суперечити режиму поділу, встановленому першим процесом;
· Режим поділу, запитуваний другим процесом, не повинен забороняти той режим доступу, який вже встановив для себе перший процес.
У разі порушення одного з цих умов система не відкриває файл для другого процесу, функція відкриття файлу повертає помилку. Якщо ж умови дотримані, система відкриває файл для другого процесу, як би знімаючи з себе відповідальність за наслідки: ви цього хотіли - отримаєте.
До цих пір мова йшла тільки про поведінку процесів і системи при відкритті файлу. Однак це не повністю вирішує проблему. Повернемося до прикладу з базою даних. Нехай відповідний файл відкритий декількома процесами. Коли один із процесів приступає до роботи з конкретною записом, він повинен мати можливість тимчасово заборонити або обмежити доступ інших процесів до цієї ж записи. Для цієї мети служить блокування процесом фрагментів файлу.
Для встановлення блокування процес викликає відповідну системну функцію, вказуючи початок блокируемого фрагмента і його розмір. Якщо інший процес після цього спробує прочитати або записати дані, хоча б частково потрапляють у заблокований фрагмент, то або функція читання (запису) видасть помилку, або процесу доведеться чекати зняття блокування. Як правило, блокування встановлюється на якомога менший інтервал часу, щоб не знижувати продуктивність системи.
Описаний вище тип блокування називається ексклюзивної або виключної блокуванням: процес дозволяє собі і читання, і запис, а іншим процесам тимчасово забороняє те й інше. Деякі системи допускають також кооперативну (не виняткову) блокування: встановлюючи її, процес забороняє тільки запис всім процесам, у тому числі і собі самому, в той час як читання залишається дозволеним для всіх.