Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры программирование.doc
Скачиваний:
0
Добавлен:
09.01.2020
Размер:
655.36 Кб
Скачать

18. Понятие процесса и потока (нити), принципы диспетчеризации процессов, блокировка процессов.

Для ОС потребителем ресурсов выступает процесс. Процесс является единицей работы для ОС. Процесс является единицей, которая требует такие ресурсы, как процессор, ОП, определенная область на диске, определяющаяся совокупностью периферийных устройств (устройства печати, модем). Процесс всегда характеризуется той программой, которую должен выполнять. Процесс всегда выполняется по какому-то программному коду.

В однозадачных ОС нет проблемы взаимодействия процессов, поскольку все ресурсы вычислительной системы предоставляются в распоряжение активной программы. Проблема взаимодействия процессов возникает в мультипрограммных системах, когда процессы начинают конкурировать за ресурсы вычислительной системы.

В ОС каждый процесс представляется с помощью некоторой информационной структуры. В информационную структуру помещается такая информация, как идентификация процесса, приоритет, идентификация хозяина процесса (пользователь или другой процесс), ссылка на адресное пространство процесса и на кодовый сегмент (программный код), определяющий поведение процесса. Сам программный код не является процессом. Это позволяет определить несколько процессов, выполняющих один и тот же программный код.

Организация процесса может быть рассмотрена на примере Unix. В нем не выделяется понятие потока, и каждый новый процесс создается как копия уже существующего процесса. Создание копии уже существующего процесса осуществляется системным вызовом fork().

В Unix каждый процесс характеризуется дескриптором процесса и контекстом процесса. В дескрипторе процесса хранится информация, которая постоянно необходима ОС, а именно идентификатор процесса (целое без знака), приоритет процесса, идентификатор владельца процесса (целое без знака), адрес виртуального пространства данного процесса, а также список тех событий, которые ожидает данный процесс. В контексте процесса хранится более объемная информация, которая необходима для правильного возобновления выполнения процесса (адрес прерванной команды, флаги условий, маски прерываний, дескриптор всех открытых файлов в процессе). Дескрипторы всех существующих процессов в Unix хранятся в таблице процессов – это структура, которая хранится в адресном пространстве системы. При выполнении fork создается новая запись в таблице дескрипторов процессов, в котором помещается информация о дескрипторе создаваемого процесса. Почти все поля дескриптора нового процесса копируется из дескриптора процесса – создателя, кроме идентификации нового процесса, копируется также и контекст процесса – создателя в контекст нового процесса. Создается новое адресное пространство для нового процесса. Вызов fork возвращает в процесс-создатель идентификатор нового созданного процесса, а в порожденный процесс fork возвращает 0, поэтому, как правило, сам фрагмент кода порожденного процесса. После создания кода системного процесса происходит переключение кодовых сегментов. С помощью системного вызова exec() можно перегрузить кодовый сегмент процесса. После его использования новый процесс выполняет другой код. Далее процесс-создатель и новый процесс могут работать как синхронно, так и асинхронно. Синхронно означает, что процесс-создатель приостанавливается до завершения выполнения всех построенных им процессов. Асинхронно означает, что процессы работают независимо друг от друга.

В общем случае поток может находиться в одном из 3-х состояний: 1). Выполнение, а именно: процесс имеет все необходимые для работы ресурсы, в т.ч. ЦП, т.е. процесс является активным. 2). Ожидание – поток приостановил свое выполнение по каким-либо внутренним причинам. Например, поток запросил операцию в/в. 3). Состояние готовности – поток не находится в активном состоянии по причинам внешним для потока. Например, потоку не выделен ЦП.

Под потоком понимается такая активность, когда определяющаяся в рамках выполняющегося процесса, за исключением самого процесса. В современных ОС помимо понятия процесса, определяется также и понятие потока. Понятие потока особенно полезно в тех случаях, когда программа обладает внутренним параллелизмом, т.е. разные ветви программы могут выполняться одновременно (параллельно). В этом случае конкретный вариант выполнения программы определяется как поток. В некоторых ОС используется понятие нить (например, в Win NT). В рамках одного процесса может существовать несколько потоков. Все они работают в едином адресном пространстве и одну и ту же совокупность ресурсов: ВУ, совокупность открытых файлов и т.д. Каждый поток характеризуется своим дескриптором, а также адресом текущей выполняемой команды и своим сегментом стека, поскольку для каждого потока выделяется свой стек. Если ОС не поддерживает многопоточности, считается, что в ней организован один поток выполнения.

Управление процессами определяет какой процесс в какой момент времени должен стать активным и на какой интервал. В задаче управления процессами (потоками) выделяется 2-е основные подзадачи: 1). Задача планирования потоков. 2). Задача диспетчеризации потоков. Задача планирования потоков определяет в какой момент и какой поток должен стать активным. Задача диспетчеризации определяет как должно осуществляться сохранение контекста текущего активного потока и переключение на контекст нового активного потока. Решение задачи планирования потоков может следовать одной из 2-х основных стратегий: не вытесняющая и вытесняющая многозадачность. Не вытесняющая многозадачность (win 3.1, NetWare 3.x, 4.x). если поток становится активным, т.е. находится в состоянии выполнения, то он продолжает выполнение до тех пор, пока он сам не прекратит выполнение. Ос с не вытесняющей многозадачностью подвержена краху системы. Однако в таких системах можно организовать эффективное выполнение всех потоков, если каждый из них занимает ресурс ограниченное время. Вытесняющая многозадачность реализуется практически во всех ОС. Согласно этой концепции каждый поток становится активным на определенный интервал времени (квант). По истечении этого кванта или раньше поток переводится в состояние ожидания или в состояние готовности. Система с вытесняющей многозадачностью выполняет разные стратегические планирования, как на основе приоритета, так и без приоритета.

Под тупиком понимается ожидание 2-х или более потоков освобождения 2-х или более ресурсов, которое не может произойти. Например: P(B) P(E) запись V(B) V(F): и если в момент выполнения P(B)=0, то поток –писатель переводится в состояние ожидания, и вывести его может только поток-читатель, который выполнит V(E), но поток-читатель не сможет войти в критическую секцию, т.к. b=0, и значит оба потока заблокированы (тупик). Ситуация тупика может образовывать и большее количество потоков, чем 2. Тупик может возникнуть только в мультипрограммной системе. В общем случае ситуация тупика не имеет алгоритма недопущения.

Графическая иллюстрация тупика (4-х потоков):

Если Ос попала в состояние тупика, то необходимо выполнить действия по выходу из этого состояния. Обычно ОС переводит один или несколько потоков в состояние ожидания, в частности это может потребовать выгрузки этих потоков из ОП на диск, отбирает у них те ресурсы, которые были предоставлены указанным потокам, что позволяет оставшимся потокам продолжить свое выполнение.

Меры по недопущению появления тупиков:

  1. Система должна удовлетворять заявки на потребление ресурсов в одной и той же последовательности (это достаточное условие, но может возникнуть ситуация, что ресурсы будут простаивать).

  2. Просмотр того, что будет, если данный ресурс будет предоставлен потоку. Если есть возможность тупика, то поток переводится в режим ожидания.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]