
Способы реализации процессов
Потоки могут быть:
на уровне ядра;
на уровне пользователя;
комбинированные
В ядре есть таблица процессов, которыми оно управляет. О потоках этих процессах ядро не знает ничего. Планирование производится для процессов, время выделяется процессам. Процессы на уровне пользователя имеют свои таблицы потоков. Потоки при выполнении самостоятельно передают управление друг другу.
Достоинства:
- такая схема может быть реализована в системе не поддерживающей многопоточность;
- потоки внутри каждого процесса могут исполнять свой алгоритм планирования.
Недостатки:
- прерывание от таймера получает ядро, а не процессы. В следствие чего, процессы ничего не знают о времени выполнения своих потоков. Если ядро может по таймеру снять один и запустить другой процесс, то процессы этого не могут. Поэтому, если один поток не передаёт управление другим потокам, то принудительно сменить потоки нельзя.
- при выполнении блокирующего вызова, т.е. переход в состояние ожидания, то весь процесс блокируется, несмотря на то, что вызов сделан всего одним потоком.
На ряду с таблицей процессов в ядре есть таблица потоков. Ядро планирует не процессы, а потоки всех процессов, выделяя им кванты времени. Благодаря этому переключение между потоками происходит по таймеру и длительная работа одного потока никак не влияет на работу других потоков. Каждый поток имеет своё состояние, поэтому при блокирующем вызове в состояние ожидания переводится только этот поток, и не влияет на работу потоков этого и других процессов.
Недостатки:
- инверсия достоинств предыдущего. Нельзя реализовать в системах не поддерживающих многопоточность;
- частое переключение потоков различных процессов приводит к частой схеме контекстных процессов, тем самым увеличивает расходы на управление.
Потоки на уровне пользователя при блокирующем вызове переводятся на уровень ядра.
Мультиплексирование потоков каждому процессу соответствует несколько потоков ядра. Каждому потоку ядра – несколько потоков пользователя. Кванты времени выделяются потоками ядра, потоки пользователя управляют собой сами. При блокирующем вызове в блокировку уходит весь поток ядра с несколькими потоками пользователя, но другие потоки этого процесса продолжают выполнение.
Прерывания
Прерывание – это приостановка выполнения текущего набора команд с передачей управления другому набору команд и последующим возвратом к прерванному набору команд. Набор команд, которому передаётся управление называется обработчиком прерывания. Его цель – выполнить необходимые действия, связанные с произошедшим событием. Прерывание обладает приоритетном. Во время обработки одного прерывания можно прерваться на обработку другого, если приоритет того не ниже, иначе текущий обработчик будет выполнен до конца и только после этого передаст управление обработчику прерывания с более низким приоритетом. При поступлении на линию прерывания сигнала процессор начинает опрашивать все устройства, с целью, какое из них послало прерывание. После того, как устройство определено процессор из таблицы векторов прерываний выбирает соответствующий и передаёт управление обработчику.