- •Оглавление
- •7.1. Основные понятия 37
- •8.1. Основные понятия 47
- •14.1. Основные понятия 77
- •Введение
- •Раздел 1. Основные сведения об операционных системах Тема 1. Функции и классификация операционных систем
- •1.1. Функции ос
- •1.1. История ос
- •По назначению
- •По режиму обработки задач
- •1.3. Классификация ос
- •По способу взаимодействия с пользователем
- •По принципу построения
- •Вопросы для самоконтроля
- •Тема 2. Структура операционных систем. Системные вызовы
- •2.1. Структура ос
- •Монолитная структура (структура макроядра)
- •Иерархическая структура (многослойное ядро)
- •Структура микроядра
- •2.2. Выполнение системных вызовов
- •2.3. Понятие операционной и программной среды
- •Вопросы для самоконтроля
- •Раздел 2. Процессы и потоки Тема 3. Процессы
- •3.1. Основные сведения о процессах
- •Создание процессов
- •Завершение процессов
- •Иерархия процессов
- •3.2. Модели процесса Модель с двумя состояниями
- •Модель с пятью состояниями
- •3.3. Описание процессов
- •3.4. Управление процессами Создание процессов
- •Переключение процессов
- •3.5. Выполнение кода ос по отношению к процессам
- •Ядро вне процессов (автономное ядро)
- •Ядро в составе пользовательских процессов
- •Ос на основе процессов
- •Вопросы для самоконтроля
- •Тема 4. Системные вызовы управления процессами в ос unix
- •4.1. Создание процесса
- •4.2. Завершение процесса
- •4.3. Изменение образа памяти процесса
- •4.4. Синхронизация между родительским и дочерним процессами
- •4.5. Состояние "зомби"
- •Вопросы для самоконтроля
- •Тема 5. Сигналы в ос unix
- •5.1. Назначение сигналов
- •5.2. Обработка сигналов
- •5.3. Посылка сигнала процессу
- •Вопросы для самоконтроля
- •Тема 6. Потоки
- •6.1. Основные понятия
- •6.2. Основные операции с потоками
- •6.3. Способы реализации потоков в пространстве пользователя
- •В пространстве ядра
- •Смешанная реализация
- •Вопросы для самоконтроля
- •Тема 7. Взаимоблокировки
- •7.1. Основные понятия
- •Типы доступа к ресурсу
- •Условия возникновения взаимоблокировок
- •7.2. Моделирование взаимоблокировок
- •7.3. Обнаружение взаимоблокировок Обнаружение взаимоблокировок при наличии одного ресурса каждого типа
- •Обнаружение взаимоблокировок при наличии нескольких ресурсов каждого типа
- •7.4. Избежание взаимоблокировок Безопасные и небезопасные состояния
- •Алгоритм банкира для одного вида ресурса
- •Алгоритм банкира для нескольких видов ресурсов
- •Вопросы для самоконтроля
- •Раздел 3. Взаимодействие процессов Тема 8. Проблема взаимного исключения и способы ее решения
- •8.1. Основные понятия
- •8.2. Аппаратные способы достижения взаимного исключения Запрещение прерываний
- •Специальные команды, выполняющиеся атомарно
- •8.3. Программные способы достижения взаимного исключения Переменные блокировки.
- •Алгоритм Деккера
- •Алгоритм Петерсона
- •Вопросы для самоконтроля
- •Тема 9. Примитивы синхронизации
- •9.1. Семафоры Определение семафора
- •Применение семафоров
- •9.2. Мьютексы
- •9.3. Мониторы
- •Структура монитора
- •Вопросы для самоконтроля
- •Тема 10. Классические проблемы межпроцессного взаимодействия
- •10.1. Проблема производителя и потребителя
- •10.2. Задача о читателях и писателях
- •10.3. Задача об обедающих философах
- •10.4. Задача о спящем парикмахере
- •10.5. Задача о железнодорожном перегоне
- •Вопросы для самоконтроля
- •Тема 11. Межпроцессное взаимодействие в ос unix
- •11.1. Неименованные каналы
- •Синхронизирующие свойства неименованного канала
- •Системные вызовы для работы с неименованными каналами
- •Шаги в установлении связи через неименованный канал
- •Ограничения неименованных каналов
- •11.2. Именованные каналы
- •Использование именованных каналов
- •Синхронизирующие свойства именованных каналов
- •Системные вызовы для работы с именованными каналами
- •11.3. Очереди сообщений
- •11.4. Разделяемая память
- •Вопросы для самоконтроля
- •Тема 12. Передача сообщений
- •12.1. Характеристика систем передачи сообщений
- •12.2. Модель клиент-сервер
- •Вопросы для самоконтроля
- •Тема 13. Api сокетов ос unix
- •13.1. Межпроцессное взаимодействие при помощи сокетов
- •13.2. Системные вызовы работы с сокетами в ос unix Структура адреса сокета
- •Получить дескриптор сокета (создать сокет)
- •Указать адрес локальной оконечной точки
- •Перевод сокета в пассивный режим
- •Принять соединение с сокетом
- •Установить соединение с сервером.
- •Чтение данных из сокета и запись данных в сокет
- •Операции клиента и сервера
- •14.2. Критерии краткосрочного планирования.
- •14.3. Стратегии краткосрочного планирования. Первым поступил – первым обслужен
- •Кратчайшая задача – первая
- •Наименьшее оставшееся время выполнения
- •Циклическое планирование
- •Приоритетное планирование
- •Вопросы для самоконтроля
- •Раздел 5. Управление памятью Тема 15. Технологии распределения памяти
- •15.1. Фиксированное распределение
- •15.2. Динамическое распределение
- •15.3. Система двойников
- •15.4. Простая страничная организация
- •15.5. Простая сегментная организация
- •Вопросы для самоконтроля
- •Тема 16. Виртуальная память
- •16.1. Предпосылки для организации виртуальной памяти
- •16.2. Страничная организация виртуальной памяти
- •Структура таблицы страниц
- •16.3. Сегментация
- •16.4. Комбинация сегментации и страничной организации
- •16.5. Алгоритмы управления виртуальной памятью
- •Стратегия выборки
- •Стратегия размещения.
- •Стратегия замещения
- •Вопросы для самоконтроля
- •Раздел 6. Ввод-вывод и файловая система Тема 17. Ввод-вывод
- •17.1. Принципы программного обеспечения ввода-вывода
- •Способы осуществления ввода-вывода
- •17.2. Программные уровни ввода-вывода
- •Обработчики прерываний
- •Драйверы устройств
- •Независимое от устройств программное обеспечение ввода-вывода
- •Программное обеспечение ввода-вывода пространства пользователя
- •Вопросы для самоконтроля
- •Тема 18. Физическая организация файловой системы
- •18.1. Цели и задачи файловой системы
- •18.2. Устройство диска
- •18.3. Физическая организация и адресация файла
- •Вопросы для самоконтроля
- •Тема 19. Логическая организация файловой системы
- •19.1. Типы файлов
- •19.2. Иерархическая структура файловой системы
- •Имена файлов
- •Монтирование
- •19.3. Атрибуты файлов
- •Вопросы для самоконтроля
- •Литература
- •Перечень сокращений
Раздел 3. Взаимодействие процессов Тема 8. Проблема взаимного исключения и способы ее решения
8.1. Основные понятия
Два процесса называются параллельными (concurrent), если их выполнение может перекрываться во времени. Это означает, что второй процесс начинается прежде, чем первый завершится. В мультипроцессорной системе достигается физическая параллельность. Если в процессоре чередуется выполнение нескольких процессов, то достигается логическая параллельность. Два процесса называются последовательными (serial), если они не являются параллельными.
Виды взаимодействия процессов:
Обмен информацией: процессы непосредственно осведомлены о наличии друг друга.
Конкуренция за доступ к ресурсам: процессы не осведомлены о наличии друг друга. ОС должна регулировать такие обращения.
Согласование действий процессов: процессы косвенно осведомлены друг о друге. Например, процесс А поставляет данные, процесс В выводит их на печать.
Параллельные процессы взаимодействуют с помощью следующих механизмов:
разделяемые переменные;
передача сообщений.
И в однопроцессорных и в многопроцессорных системах из-за невозможности предсказать относительную скорость работы процессов при работе параллельных процессов возникают следующие проблемы:
Состояние гонок, или состязаний. Когда два процесса используют одну глобальную переменную и оба выполняют чтение и запись этой переменной. Критическим оказывается порядок чтения и записи этой переменной разными процессами.
Блокировки и взаимоблокировки при доступе к ресурсам. Процесс А может затребовать и получить контроль над некоторым УВВ, после чего временно приостановить работу. Нежелательно, чтобы ОС при этом блокировала УВВ и не давала другим процессам возможности использовать его – это может привести к взаимоблокировке.
Трудно обнаруживаемые программные ошибки, т.к. результат работы программы перестает быть детерминированным и воспроизводимым.
Пример состояния гонок. Пусть имеется процедура, выполняющая чтение символа с клавиатуры и отображение его на экране, которая находится в разделяемой памяти и используется всеми процессами.
void echo()
{
chin = getchar();
chout = chin;
putchar(chout);
}
Рассмотрим следующую последовательность событий:
Процесс А выполняет оператор chin = getchar(); Введен символ x.
Процесс В выполняет процедуру echo до конца. Введен и выведен символ у.
Процесс А продолжает выполнение. Будет выведен у, а не х. Т.е. у выведен дважды, а х – потерян.
Решение данной проблемы – в каждый момент времени только один процесс может входить в процедуру echo, и она обязательно должна быть полностью выполнена вошедшим в нее процессом до того, как станет возможным ее выполнение другим процессом. Та же проблема остается и в многопроцессорной системе:
Взаимное исключение (mutual exclusion) – это механизм, который гарантирует, что в любой момент времени, только один процесс выполняет некоторую определенную последовательность действий и, тем самым, исключает возможность работы другого процесса.
Критический ресурс – это ресурс, к которому в каждый момент времени возможен доступ только одного процесса. Доступ к такому ресурсу осуществляется в критической секции (КС) – части кода, которая в любой момент времени может выполняться только одним процессом.
Взаимное исключение может привести к двум проблемам:
Взаимная блокировка (deadlock), которая обсуждается в теме 4.
Голодание (starvation). Пусть имеются процессы А, В и С. Каждому из процессов периодически требуется доступ к ресурсу Р. Пусть процесс А использует Р, В и С – ждут. Потом В использует Р, затем опять А использует Р и т.д. Т.е. процесс С может никогда не получить доступ к ресурсу Р, несмотря на то, что никакой взаимной блокировки нет. Такая ситуация называется голоданием.
Итак, чтобы избежать гонок, мы должны избегать нахождения двух процессов в критических секциях одновременно. Но этого требования недостаточно. Для правильной совместной работы параллельных процессов необходимо выполнение шести условий для достижения взаимного исключения.
Два процесса не должны одновременно находиться в критических секциях.
В программе не должно быть предположений о скорости или количестве процессоров.
Процесс, находящийся вне критической секции, не может блокировать другой процесс.
Невозможна ситуация, в которой процесс вечно ждет попадания в критическую секцию, т.е. не должны появляться взаимоблокировка и голодание.
Когда в КС нет ни одного процесса, любой процесс, запросивший возможность входа в КС, должен немедленно ее получить.
Процесс остается в КС только в течение ограниченного времени.
Существуют следующие подходы к достижению взаимного исключения.
Программный – сам процесс является ответственным за достижение взаимного исключения. Т.е. процесс (и системный, и пользовательский) должен координировать свои действия с другими процессами для достижения взаимного исключения без поддержки со стороны ОС или языка программирования.
Аппаратный – использование машинных команд специального назначения.
Поддержка со стороны ОС или языка программирования (семафоры, мониторы и т.п.).
