- •Архитектура операционной системы
- •1. Монолитные системы
- •2. Многоуровневые системы
- •3. Виртуальные машины
- •Архитектура, основанная на ядре
- •Режим ядра и пользовательский режим
- •Типовые средства аппаратной поддержки ос
- •Машинно-зависимые компоненты ос
- •Микроядерная архитектура
- •Процессы и потоки
- •Реализация процессов
- •Назначение потоков
- •Реализация потоков
- •Планирование Процессов
- •Пример 1. Планирование в Windows 2000
- •Пример 2. Планирование в unix
- •Цели планирования
- •Схемы планирования
- •Взаимодействие процессов и потоков
- •Состояние состязания
- •Критические области
- •Взаимоисключение с активным ожиданием
- •Семафоры
- •Мьютексы
- •Мониторы
- •Взаимные блокировки
- •Основные направления решения проблемы тупиков
- •Предотвращение тупиков
- •Обнаружение тупика
- •Восстановление после тупика
- •Организация мультизадачности ос
- •Опрос (проверка флагов)
- •Исключения
- •Прерывания
- •Классификация прерываний
- •3 Класса прерываний:
- •Механизм прерываний
- •Приоритеты прерываний
- •Организация памяти
- •Функции ос по управлению памятью
- •Стратегии управления памятью
- •Фрагментация памяти
- •Способы борьбы с фрагментацией:
- •Типы адресов памяти
- •Учет свободных и занятых областей памяти
- •Учет памяти с помощью битовых карт
- •Учет памяти с помощью связных списков
- •Виртуальная память
- •Файлы подкачки
- •Вопросы по модулю №1
Мьютексы
mutex, сокращенное от mutual exclusion (взаимное исключение) – упрощенная версия семафора.
Два состояния:
блокирован (Значение устанавливается процедурой mutex_lock).
не блокирован (Значение устанавливается процедурой mutex_unlock).
Если поток (или процесс) собирается войти в критическую область, он вызывает mutex_lock. Если мьютекс не заблокирован (т.е. вход в критическую область разрешен), запрос выполняется и поток может попасть в критическую область.
При входе в критическую область процесс или поток вызывает mutex_lock и блокирует другие потоки или процессы. При выходе он запускает процедуру mutex_unlock. Если мьютекс блокирует несколько потоков, из них случайным образом выбирается один.
Использование мьютексов - это способ управления процессами или потоками с пассивным ожиданием (так как ожидающие процессы блокируются и не проверяют значений управляющих структур).
Недостатки семафоров и мьютексов – сложность программирования.
Мониторы
Способ решения проблемы взаимных исключений с помощью языков высокого уровня (ЯВУ). Реализацию взаимного исключения в этом случае выполняет компилятор языка.
Можно быть уверенным, что процессы, организованные как мониторы, не попадут в критические области одновременно.
Один из языков, поддерживающих мониторы – Java.
Взаимные блокировки
Взаимная блокировка (или клинч clinch, или тупик) процессов или потоков – это состояние, в котором ни один из процессов не может возобновить работу без вмешательства извне. Или состояние процесса, ожидающего событие, которое никогда не произойдет.
1 пример. Покажем, как это становится возможным. В компьютерных системах много устройств, каждое из которых может использоваться одновременно только одним процессом. Пусть в системе существует два процесса, которым необходимо отсканировать документ и записать его на компакт-диск. Процесс А запрашивает разрешение на использование сканера и получает его. Процесс В запрограммирован по-другому, и запрашивает сначала CD ROM, и тоже получает разрешение на его использование. Затем процесс А обращается к CD ROM и получает отказ, поскольку устройство уже занято процессом В, и переходит в состояние ожидания. Процесс В запрашивает сканер, и тоже получает отказ, и тоже переходит в состояние ожидания. В таком положении оба процесса заблокированы, и могут оставаться в нем бесконечно.
2 пример. Взаимоблокировки могут происходить во множестве других ситуаций, кроме операций ввода-вывода. Например, взаимоблокировка – это типичная сбойная ситуация при работе с базами данных или общими таблицами. Например, процесс А блокирует запись R1, а процесс В – запись R2. Затем процесс А пытается получить доступ к записи R2, а процесс В – к записи R1. Происходит взаимная блокировка.
Для возникновения тупика нужно одновременное наличие 4-х условий:
Условие взаимоисключения. (Каждый процесс требует монопольного обращения).
Условие выжидания ресурсов. (Процессы ждут дополнительные ресурсы не освобождая уже занятые).
Условие неперераспределяемости. (У процесса нельзя забрать захваченные им ресурсы).
Условие кругового ожидания (процессы ждут ресурсы, занятые другими процессом).