
- •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
- •Література
4.5.2. Процеси і нитки
Загальне поняття процесу, розглянуте вище в п. 4.2.1, для ОС Windows як би розпадається на два поняття: власне процесу та нитки (thread; в деяких книгах використовується термін потік). При цьому нитка є одиницею роботи, вона бере участь в конкуренції за процесорний час, змінює свій стан і пріоритет, як було описано вище для процесу. Що ж стосується процесу в Windows, то він може складатися з декількох ниток, які використовують спільну пам'ять відкриті файли та інші ресурси, що належать процесові. У двох словах: процес - володіє (пам'яттю, файлами), нитки - працюють, при цьому спільно використовуючи ресурси свого процесу. Правда, нитка теж дечим володіє: вікнами, чергою повідомлень, стеком.
Процес створюється при запуску програми (EXE-файлу). Одночасно створюється одна нитка процесу (повинен же хтось працювати!). Створення процесу виконується за допомогою API-функції CreateProcess. Основними параметрами при виклику цієї функції є наступні.
· Ім'я файлу запускається програми.
· Командний рядок, передана процесу при запуску.
· Атрибути захисту для створюваних процесу і нитки. І процес, і нитка є об'єктами ядра Windows і в цій якості можуть бути захищені від несанкціонованого доступу (наприклад, від спроб інших процесів втрутитися в роботу даного процесу).
· Різні прапори, уточнюючі режим створення процесу. Серед них слід відзначити клас пріоритету процесу, прапор отладочного режиму (при цьому система буде повідомляти процес-батько про дії породженого процесу), а також прапор створення припиненого процесу, який не почне працювати, поки не буде викликана функція відновлення роботи.
· Блок середовища процесу.
· Поточний каталог процесу.
· Параметри першого вікна, яке буде відкрито при запуску процесу.
· Адреса блоку інформації, через який функція повертає батьківському процесові чотири числа: ідентифікатор створеного процесу, ідентифікатор нитки, хендл процесу і хендл нитки.
Якщо процес успішно створений, функція CreateProcess повертає ненульове значення.
Клас пріоритету процесу використовується при визначенні пріоритетів його ниток. Докладніше про це в п. 4.5.3.
Хендл об'єкта ядра Windows (в даному випадку процесу або нитки) дозволяє виконувати різні операції з цим об'єктом. Докладніше про хендл та ідентифікаторах див. п. 4.5.4.
Після створення процесу його єдина нитка починає виконувати програму процесу, працюючи паралельно з нитками інших запущених процесів. Якщо логіка роботи програми передбачає паралельне виконання яких-небудь дій в рамках одного процесу, то можуть бути створені додаткові нитки. Для цього використовується функція CreateThread. Її основні параметри наступні:
· Атрибути захисту для створюваної нитки;
· Розмір стека нитки;
· Стартовий адресу нитки (зазвичай нитка зв'язується з виконанням однієї з функцій, описаних у програмі процесу, при цьому в якості стартового адреси вказується ім'я функції);
· Параметр-покажчик, що дозволяє передати нитки при запуску деяке значення в якості аргументу;
· Прапор створення нитки в припиненому стані;
· Покажчик на змінну, в якій функція повинна повернути ідентифікатор створеної нитки.
Значенням функції CreateThread є хендл створеної нитки або NULL, якщо створити нитку не вдалося.
Прекрасним прикладом багатонитковою програми є Microsoft Word. У той час як основна нитка обробляє введення з клавіатури, окрема нитку може динамічно розраховувати розбиття тексту на сторінки, ще одна нитка може в цей же час виконувати друк документа або його збереження.
Для завершення роботи нитки використовується виклик функції ExitThread. Для завершення роботи всього процесу будь-яка з його ниток може викликати функцію ExitProcess. Єдиним параметром кожної з цих функцій є код завершення нитки або процесу.
Завершення процесу призводить до звільнення всіх ресурсів, якими володів процес: пам'яті, відкритих файлів і т.п.
При завершенні процесу завершуються всі його нитки. І навпаки, при завершенні останньої нитки процесу завершується і сам процес.
Не надто широко відомо, що нитка не є самою дрібною одиницею організації обчислень. Насправді Windows дозволяє створити усередині нитки кілька волокон (fiber), які в звичайній термінології можуть бути описані як співпрограми або як завдання з невитесняющей диспетчеризацією, що працюють в рамках однієї і тієї ж задачі з витісняючої диспетчеризацією. Перемикання волокон виконується тільки явно, за допомогою функції SwitchToFiber. Про використання співпрограми см. / 15 /.