
ОС / учебник(см. лекции) Корольковой / глава 2
.pdf2.Процессы и потоки
2.1Понятия процесс и поток
2.2Создание процессов и потоков
2.3Состояния потоков
2.4Планирование процессов
2.4.1 Основные понятия планирования процессов
2.4.2Алгоритмы планирования, основанные на квантовании
2.4.3Алгоритмы планирования, основанные на приоритетах
2.4.4Планирование в операционных системах пакетной обработки информации
2.4.4.1Критерий эффективности
2.4.4.2Алгоритмы планирования
2.4.5Планирование в интерактивных системах (системах разделения
времени)
2.4.5.1Критерий эффективности
2.4.5.2Алгоритмы планирования
Схема назначения приоритета потокам в Windows 2000
2.4.6Планирование в системах реального времени
2.5Взаимодействие между процессами
2.5.1Виды взаимодействий между процессами
2.5.2Синхронизация процессов и потоков
2.5.2.1Состязания (гонки)
2.5.2.1.1Ситуация состязания
2.5.2.1.2Критические секции
2.5.2.1.3 Способы реализации взаимного исключения
2.5.2.2Взаимные блокировки
2.5.2.2.1Ситуация взаимной блокировки
2.5.2.2.2Моделирование взаимоблокировок
2.5.2.3Методы борьбы с тупиками 2.5.2.3.1 Пренебрежением проблемой в целом (страусовый
алгоритм)
2.5.2.3.2Обнаружение и устранение взаимоблокировок
2.5.2.3.3Обнаружение взаимоблокировки при наличии одного ресурса каждого типа
2.5.2.3.4Обнаружение взаимоблокировки при наличии нескольких ресурсов каждого типа
2.5.2.3.5Выход из взаимоблокировки
2.5.2.4Динамическое избежание взаимоблокировок
2.5.2.4.1Траектории ресурсов
2.5.2.4.2Безопасные и небезопасные состояния
2.5.2.4.3Алгоритм банкира для одного вида ресурсов
2.5.2.4.4Алгоритм банкира для несколько видов ресурсов
2.5.2.5Предотвращение условий, необходимых для взаимоблокировок
2.5.2.6Системные средства синхронизации процессов
2.5.2.6.1Мьютексы
2.5.2.6.2Системные семафоры
2.5.2.6.3События
2.5.2.6.4Ждущие таймеры
2.5.2.6.5Сигналы
2.5.2.6.3Мониторы Хоара
2.5.3Обмен данными между процессами и потоками
2.5.3.1 Конвейеры (каналы)
2.5.3.2 Очереди сообщений
2.5.3.3 Разделяемая память
2.5.3.4Почтовые ящики
2.5.3.5Сокеты

2 Процессы и потоки
2.1Понятия процесс и поток
Внастоящее время в большинстве операционных систем определены два типа единиц работы – процессы и потоки. Процесс (задача) - программа, находящаяся в стадии выполнения. Потоки (нити) возникли как средство распараллеливания вычислений в рамках одного процесса.
С каждым процессом связывается его адресное пространство. Адресное
пространство процесса содержит саму программу, |
ее данные, стек программы. |
Во многих операционных системах |
информация о каждом процессе, |
дополнительная к содержимому его собственного адресного пространства, хранится в таблице процессов операционной системы.
В операционных системах, где существуют и процессы, и потоки, процесс рассматривается как заявка на потребление всех видов ресурсов, кроме одного – процессорного времени. Процессорное время выделяется потокам. В простейшем случае процесс состоит из одного потока.
С каждым потоком связывается: счетчик выполнения команд, регистры для текущих переменных, стек, состояние. Потоки разделяют между собой адресное пространство,
глобальные переменные, открытые файлы, таймеры, семафоры, статистическую информацию своего процесса.
Преимущества использования потоков:
1.Создание потоков требует от ОС меньших накладных расходов, чем при
создании процессов. Потоки одного процесса могут взаимодействовать и обмениваться
данными не обращаясь к ОС, а используя общую память.
2.Быстрота создания потока по сравнению с процессом.
3.Повышение производительности самой программы. Задача, оформленная
ввиде нескольких потоков в рамках одного процесса, может быть выполнена быстрее за
счет псевдопараллельного (или параллельного в мультипроцессорной системе)
выполнения отдельных ее частей. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.
Мультипрограммирование более эффективно на уровне потоков, а не процессов.
Наибольший эффект от введения многопоточной обработки достигается в мультипроцессорных системах, в которых потоки могут выполняться на разных процессорах действительно параллельно (а не псевдопараллельно).
2.2 Создание процессов и потоков
Три основных события, приводящие к созданию процессов (вызов fork (в UNIX) или
CreateProcess (в Windows)):
-загрузка системы;
-работающий процесс подает системный вызов на создание процесса;
-запрос пользователя на создание процесса.
Во всех случаях активный текущий процесс посылает системный вызов на создание нового процесса. Создать процесс означает:
-создать описатель процесса;
-загрузить коды и данные исполняемой программы процесса с диска в оперативную память;
-в многопоточной системе для каждого создаваемого процесса создать как минимум один поток выполнения.
При управлении процессами используется два основных типа информационных структур: дескриптор процесса и контекст процесса. Дескриптор процесса содержит такую информацию о процессе, которая необходима ядру в течение всего жизненного цикла процесса независимо от того, находится он в активном или пассивном состоянии,
находится ли образ процесса в памяти или выгружен на диск. В дескрипторе прямо или косвенно содержится информация о состоянии процесса, о расположении образа процесса в оперативной памяти и на диске, о значении отдельных составляющих приоритета,
глобальном приоритете, об идентификаторе пользователя, создавшего процесс, о
родственных процессах и некоторая др. информация.
Контекст процесса содержит менее оперативную, но более объемную часть информации о процессе, необходимую для возобновления выполнения процесса с прерванного места: содержимое регистров процессора, коды ошибок выполняемых процессором системных вызовов, таблица открытых файлов, информация о незавершенных операциях ввода/вывода и др.

2.3 Состояния потоков
За время своего существования в системе поток может многократно находиться в
одном из трех состояний:
-выполнение – активное состояние, во время которого поток обладает всеми необходимыми ресурсами и непосредственно выполняется процессором;
-готовность – пассивное состояние, поток заблокирован в связи с внешними по отношению к нему обстоятельствами; в очередь готовых к выполнению попадает вновь созданный процесс;
-ожидание – пассивное состояние, находясь в котором поток заблокирован по своим внутренним причинам (ждет осуществления некоторого события, например, завершения операции ввода/вывода).
Возможные переходы между состояниями:
1.Поток выбран на выполнение
2.Поток ожидает завершения ввода/вывода
3.Ввод/вывод завершен (событие произошло)
4.Поток вытеснен.
Всостоянии выполнения в однопроцессорной
системе может находиться не более одного Рис. 2.1. Граф состояний потока потока, а в каждом из состояний ожидания и готовности – несколько потоков. Эти потоки организуются в очереди.
2.4 Планирование процессов
2.4.1 Основные понятия планирования процессов На протяжении существования процесса выполнение его потоков может быть
многократно прервано и продолжено. Переход от одного потока к другому осуществляется в результате планирования и диспетчеризации.
Планирование включает в себя решение двух задач:
-определение момента времени для смены текущего активного потока;
-выбор для выполнения потока из очереди готовых потоков.
Планирование может быть динамическим (решения принимаются во время работы системы на основе анализа текущей ситуации) и статическим (решения приняты заранее,
работа по расписанию).
Диспетчеризация заключается в реализации найденного в результате планирования решения, то есть в переключении процессора с одного потока на другой.
Диспетчеризация сводится к следующему:
-сохранение контекста текущего потока, который требуется сменить;
-загрузка контекста нового потока, выбранного в результате планирования;
-запуск нового потока на выполнение.
Ситуации, когда необходимо планирование:
1.Время, отведенное активной задаче на выполнение, закончилось.
Планировщик переводит задачу в состояние готовности и выполняет перепланирование.
2.Активная задача выполнила системный вызов, связанный с запросом на ввод/вывод или на доступ к ресурсу, который в настоящий момент занят. Планировщик переводит задачу в состояние ожидания и выполняет перепланирование.
3.Активная задача выполнила системный вызов, связанный с освобождением ресурса. Если есть, то она переводится из состояния ожидания в состояние готовность. Проверяются приоритеты готовых к выполнению задач.
4.Завершение периферийным устройством операции ввода/вывода переводит соответствующую задачу в очередь готовых и выполняется планирование.
5.Внутреннее прерывание сигнализирует об ошибке, которая произошла в результате выполнения активной задачи. Планировщик снимает задачу и выполняет перепланирование.
Все существующие алгоритмы планирования можно разделить на два класса:
-невытесняющие алгоритмы основаны на том, что активному потоку позволяется выполняться до тех пор, пока он сам, по собственной инициативе, не отдаст управление операционной системе для того, чтобы та выбрала из очереди другой готовый к выполнению поток;
-вытесняющие алгоритмы – это такие способы планирования потоков, в которых решение о переключении процессора с выполнения одного потока на выполнение другого потока принимается операционной системой, а не активной задачей.
Выбор алгоритма планирования зависит от типа задач, для решения которых будет
использоваться операционная система.
2.4.2Алгоритмы планирования, основанные на квантовании
Воснове многих вытесняющих алгоритмов планирования лежит концепция квантования. Квант – ограниченный непрерывный период процессорного времени.
Потоки получают процессорное время квантами. Поток, который исчерпал свой квант,
переводится в состояние готовности и ожидает, когда ему будет предоставлен новый квант, а на выполнение в соответствии с определенным правилом выбирается новый поток из очереди готовых.
Возможные переходы между состояниями:

1.Потоку выделен квант процессорного времени
2.Поток ожидает завершения ввода/вывода
3.Ввод/вывод завершен (событие произошло)
4.Поток исчерпал квант
Кванты, выделяемые потокам, могут быть одинаковыми для всех потоков или различными.
Кванты, выделяемые одному потоку, могут быть фиксированной величины, а могут изменяться в разные перРисоды. 2.2жизниГраф состоянийпо ка. Кромепотока
того, соотношение между длительностью кванта и средним временсистемевыполнениясквантованиемзадачи влияет на производительность системы. Все эти обстоятельства позволяют ОС реализовывать некоторую определенную политику в планировании (предпочтение коротких или длинных задач, компенсация неиспользованного кванта, минимизация накладных расходов, связанных с переключениями). При этом не используется никакой предварительной информации о процессах, дифференциация обслуживания при квантовании базируется на истории существования потока в системе.
2.4.3 Алгоритмы планирования, основанные на приоритетах Приоритет – это число, характеризующее степень привилегированности потока при
использовании ресурсов ОС.
Фиксированный приоритет – приоритет потока назначается ОС при его создании и не изменяется во время существования потока.
Динамический приоритет – приоритет может быть изменен либо по инициативе самого потока, либо по инициативе пользователя, либо ОС изменяет приоритеты потоков,
в зависимости от ситуации, складывающейся в системе.
Существуют две разновидности приоритетного планирования:
-обслуживание с относительными приоритетами
–невытесняющий алгоритм планирования – приоритет учитывается только при выборе потока на выполнение из очереди готовых потоков, активный поток выполняется до тех пор, пока он сам не покинет процессор, перейдя в состояние ожидания, или не завершится (с ошибкой или без);
Возможные переходы между состояниями:
1. Выбор по приоритету

2.Поток ожидает завершения ввода/вывода
3.Ввод/вывод завершен (событие произошло).
-обслуживание с абсолютными приоритетами
-вытесняющий алгоритм планирования –
приоритет учитывается при выборе потока на выполнение из очереди готовых, и, кроме того, если
вочереди готовых потоков появился поток,
приоритет которого выше, чем приоритет активного потока, выполнение активного потока прерывается,
он переходит в состояние готовности, и запускается на выполнение более приоритетный поток.
Возможные переходы между состояниями:
1.Выбор по приоритету
2.Поток ожидает завершения ввода/вывода
3.Ввод/вывод завершен (событие произошло)
4.В очереди появился поток с более высоким приоритетом.
2.4.4 Планирование в операционных системах пакетной обработки информации
2.4.4.1 Критерий эффективности Главной целью и критерием эффективности систем пакетной обработки является
максимальная пропускная способность, т.е. решение максимального числа задач в единицу времени. Для достижения этой цели в системах пакетной обработки используется следующая схема функционирования: в начале работы формируется пакет заданий,
каждое задание содержит требования к системным ресурсам; из этого пакета формируется мультипрограммная смесь, то есть множество одновременно выполняемых задач. Для одновременного выполнения выбираются задачи, предъявляющие разные требования к ресурсам, так, чтобы обеспечивалась сбалансированная загрузка всех устройств вычислительной машины. Выбор нового задания из пакета заданий зависит от внутренней ситуации, складывающийся в системе. Следовательно, в вычислительных системах,
работающих под управлением пакетных ОС, невозможно гарантировать выполнение того или иного задания в течение определенного периода времени.
2.4.4.2 Алгоритмы планирования
1. "Первый пришел - первым обслужен" (FIFO - First In Fist Out)
Процессы ставятся в очередь по мере поступления.
Достоинства:

-простота;
-справедливость (как в очереди покупателей, кто последний пришел, тот оказался
вконце очереди).
Недостатки:
- процесс, ограниченный возможностями процессора может затормозить более быстрые процессы, ограниченные устройствами ввода/вывода.
2. "Кратчайшая задача - первая"
Этот алгоритм минимизирует среднее оборотное время выполнения задачи, т.е.
время, прошедшее от момента запуска пакета на выполнение до получения результата задачи. Суть алгоритма: первой на выполнение запускается самая короткая задача из пакета.
Достоинства:
-уменьшение оборотного времени;
-справедливость (как в очереди покупателей, кто без сдачи проходит вперед);
Недостатки:
- длинный процесс, занявший процессор, не пустит более новые краткие процессы,
которые пришли позже.
- требуется превентивная информация о времени выполнения задач.
3. Наименьшее оставшееся время выполнения Аналог предыдущего, но при перепланировке учитывается оставшееся время
выполнения задач.
4. Трехуровневое планирование
Рис. 2.5 Трехуровневое планирование Новые задачи сначала помещаются в очередь, хранящуюся на диске. Планировщик
доступа выбирает задачи оптимальным образом и передает их системе. Планировщик памяти определяет, какие процессы сейчас должны находиться в памяти. Если процессов
в памяти слишком много, планировщик памяти выгружает процессы на диск. Количество процессов находящихся в памяти, называется степенью многозадачности. Третий уровень планирования отвечает за доступ процессов, находящихся в состоянии готовности, к
процессору.
2.4.5 Планирование в интерактивных системах (системах разделения времени)
2.4.5.1 Критерий эффективности Цель планирования в системах разделения времени - повышение удобства и
эффективности работы пользователя. В системах разделения времени пользователям (или одному пользователю) предоставляется возможность интерактивной работы сразу с несколькими приложениями. ОС принудительно периодически приостанавливает приложения, не дожидаясь, когда они добровольно освободят процессор. Всем приложениям попеременно предоставляется квант процессорного времени, таким образом, что пользователи, запустившие программы на выполнение, получают возможность поддерживать с ними диалог.
2.4.5.2 Алгоритмы планирования
1. Циклическое планирование Самый простой алгоритм планирования и часто используемый.
Каждому процессу предоставляется квант времени процессора. Когда квант заканчивается, процесс переводится планировщиком в конец очереди, а управление передается следующему за ним процессу.
Преимущества:
-простота;
-справедливость (как в очереди покупателей, каждому только по килограмму).
Недостатки:
-слишком малый квант времени (по сравнению с временем переключения контекстов) приводит к частому переключению процессов и снижению производительности;
-слишком большой квант может привести к увеличению времени ответа на интерактивный запрос.
2. Приоритетное планирование Каждому процессу присваивается приоритет, и управление передается процессу с
самым высоким приоритетом.
Обычно процессы объединяют по приоритетам в группы, и применяют приоритетное планирование среди групп, а внутри группы используют циклическое планирование.