- •Классификация и характеристика программного обеспечения
- •Назначение, классификация системного программного обеспечения. Требования к спо
- •Формирование целостного представления о назначения организации сис по.
- •Овладение методами и инструментами: настройки, откладки, диагностики и защиты программных систем.
- •Назначение, функции и основные качества операционных систем. Требования к современным ос
- •Поколения операционных систем и их классификация
- •Функциональные компоненты операционных систем: подсистема управления ресурсами
- •1.1. Управление процессами
- •1.2. Управление памятью
- •1.3. Управление файлами и внешними устройствами
- •Функциональные компоненты операционных систем: подсистема управления задачами
- •2.1. Защита данных и администрирование
- •2.2. Интерфейс прикладного программирования
- •2.3. Пользовательский интерфейс
- •Архитектура операционных систем: ядро и вспомогательные модули ос
- •Модулями ос
- •Архитектура операционных систем: ядро в привилегированном режиме
- •В привилегированном режиме
- •К привилегированному ядру
- •Архитектура операционных систем: многослойная структура ос
- •Типовые средства аппаратной поддержки операционных систем
- •Концепция, преимущества и недостатки микроядерной архитектуры
- •Пространство
- •Мультипрограммирование. Реализация в системах пакетной обработки
- •Ввода-вывода
- •В мультипрограммной системе (б)
- •Мультипроцессорная обработка: сущность и характеристика
- •Понятия «процесс» и «поток», операции над процессами в мультипрограммных системах
- •Планирование и диспетчеризация потоков в мультипрограммных системах
- •Состояния потока в мультипрограммных системах
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Алгоритмы планирования, основанные на квантовании
- •Алгоритмы планирования, основанные на приоритетах
- •Синхронизация процессов и потоков: цели и средства синхронизации
- •Синхронизация процессов и потоков: гонки и тупики
- •Синхронизация процессов и потоков: критическая секция, блокирующие
- •Синхронизация процессов и потоков: использование семафоров
- •Синхронизация процессов и потоков: синхронизирующие объекты ос
- •Функции операционных систем по управлению памятью
- •Управление памятью: виртуальное адресное пространство и виртуальная память
- •Алгоритмы распределения памяти: распределение памяти фиксированными разделами
- •Алгоритмы распределения памяти: распределение памяти динамическими разделами, перемещаемые разделы
- •Управление памятью: страничное распределение
- •Управление памятью: сегментное распределение
- •Управление памятью: сегментно-страничное распределение
- •Мультипрограммирование на основе прерываний: диспетчеризация и приоритезация прерываний в ос
- •Мультипрограммирование на основе прерываний: системные вызовы
- •Управление вводом-выводом в операционной системе: основные понятия и концепции организации ввода/вывода
- •Режимы управления вводом/выводом. Основные системные таблицы ввода/вывода
- •2.1. Режимы управления вводом/выводом
- •2.2. Основные системные таблицы ввода-вывода
- •Управление вводом-выводом в операционной системе: кэширование операций ввода/вывода при работе с накопителями на магнитных дисках
- •Управление файлами: общий принцип работы операционной системы с файлами
- •Управление файлами: общая характеристика файловых систем (fat, fat32 и ntfs)
- •2.1. Файловая система fat
- •2.2. Файловые системы vfat и fat32
- •3. Файловая система ntfs
- •3.1. Структура тома с файловой системой ntfs
- •3.2. Возможности файловой системы ntfs по ограничению
- •Сетевые и распределенные операционные системы
- •Функциональные компоненты сетевой операционной системы
- •Одноранговые и серверные сетевые операционные системы
- •Интерфейс прикладного программирования (api)
- •1.1. Принципы построения интерфейсов ос
- •1.2. Варианты реализации функций api
- •1). Реализация функций api на уровне ос
- •2). Реализация функций api на уровне системы программирования
- •3). Реализация функций api с помощью внешних библиотек
- •Платформенно-независимый интерфейс posix
- •Технологии программирования сом
Синхронизация процессов и потоков: гонки и тупики
Необходимость синхронизации и гонки
Пренебрежение вопросами синхронизации в многопоточной системе может привести к неправильному решению задачи или даже краху систем.
Возможность возникновения таких ситуаций рассмотрим на примере рис. 1
Рис. 1. Возникновение гонок при доступе к разделяемым данным
Рис. 2. Влияние относительных скоростей потоков на результат
решения задачи
Таким образом, анализирую диаграмму a) b) c) рис.2, можно сказать, что взаимодействие, а, следовательно, правильный результат работы потоков будет обеспечен в случае с), что возможно только тогда, когда выполнение поток B будет искусственно заторможено, т.е. скорости выполнения потоков будут согласованы.
Сложность проблемы синхронизации кроется в нерегулярности возникающих ситуаций. Ситуации подобные той, когда 2 или более потоков обрабатывают разделяемые данные, и результат зависит от скоростей потока, называют гонками.
Тупики
Тупик (взаимная блокировка, дедлок, клинч) – ситуация многозадачной системы, при которой несколько процессов находятся в бесконечном ожидании ресурсов захваченных самими этими процессами. Таким образом, если в рисунке 1 переставить местами P(e) и P(b), то ни один из потоков не сможет завершить начатую работу, в случае, если на этот момент времени не окажется свободных буферов, т.е. возникнет тупиковая ситуация, которая не может быть разрешена без внешнего воздействия.
Рис. 1. Использование семафоров для синхронизации потоков
Рис. 3. Возникновение взаимных блокировок
при выполнении программы
Другой пример тупика изображен на рисунке 3. На этом рисунке диаграмма Б демонстрирует возникновение тупика. В этом случае после выполнения процедуры А1 захвата порта, получивший управление поток В не может выполнить процедуру Б2 захват порта, т.к. портом владеет находящийся в состоянии ожидания поток А, который в свою очередь не может занять диск, т.е. процедуру А2, т.к. диском владеет, находящийся в состоянии ожидании, поток Б. На диаграмме В показан случай очереди, когда поток Б не может выполнить процедуру Б1 и откладывает ее нерационально используя свой квант времени, до тех пор пока поток А не освободит сначала порт, потом диск А3, А4. На диаграмме Г показан случай нормальной синхронизации критических секций взаимодействующих потоков, в этом случае не возникает ни тупиков, ни очередей.
Возникновение тупиков может происходить и при большем значении, чем 2 взаимодействующих потоков, причем вероятность возникновения тупиков в этом случае выше.
На рисунке 4 показан случай тупиков для нескольких потоков.
Рис. 4. Взаимная блокировка нескольких потоков
Показанная ситуация, когда 4 потока образуют тупик, вынужденно, перейдя в состояние ожидания из-за необходимости получения ресурсов, удерживаемых другими потоками.
Возникновение тупиков и необходимость их предотвращения снижает производительность системы, поэтому ОС должна предоставить средства:
Распознавания тупиков
Снятие взаимных блокировок
Восстановление нормального вычислительного процесса
Существует формальные, программно-реализуемые методы распознавания тупиков. Они основаны на введение таблиц распределение ресурсов и таблиц запросов к занятым ресурсам. Если тупиковая ситуация возникла, то:
Необязательно снимать с выполнения все разблокируемте потоки.
Можно ввернуть некоторые потоки в область подкачки
Можно совершить откат некоторых потоков до так называемой контрольной точки. Эти точки расставляются в программах в местах возможного возникновения тупиков