Реализация потоков в пространстве пользователя

Метод состоит в размещении пакета потоков целиком в пространстве пользователя.

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

Все операционные системы когда-то относились к этой категории, а некоторые относятся до сих пор))))

фкн в пространстве пользователя)))

Подобные реализации имеют в своей основе одинаковую общую схему, пред­ставленную на рис. а).-
Потоки работают поверх системы поддержки исполнения программ, которая является набором процедур, управляющих потоками.

Если управление потоками происходит в пространстве пользователя, каждому процессу необходима собственная таблица потоков для отслеживания потоков в процессе.
Эта таблица аналогична таблице процессов, с той лишь разницей, что она отслеживает лишь характеристики потоков, такие как счетчик команд, указатель вершины стека, регистры, состояние и т. п. Когда поток переходит в состояние готовности или блокировки, вся информация, необходимая для повторного запуска, хранится в таблице потоков подобному тому, как в ядре хранится информация о процессах в таблице процессов.

Когда поток, ожидая окончания действия другого потока в том же процессе, делает нечто, что может привести к локальной блокировке, он вызывает процедуру системы поддержки исполнения программ. Процедура проверяет необходимость блокирования потока. В этом случае процедура сохраняет регистры потока в таблице потоков, ищет в таблице поток, готовый к запуску, и загружает его со­храненные значения в регистры машины. Как только указатель стека и счетчик команд переключены, работа нового потока возобновляется автоматически. Если у процессора есть команда, позволяющая за одну инструкцию сохранить все регистры, и еще одна, чтобы загрузить их все заново, переключение потоков может быть выполнено с помощью очень небольшого количества инструкций.
Такое переключение потоков по крайней мере на порядок быстрее, чем переключения в режим ядра(интересно почему?....), и является серьезным аргументом в пользу управления потоками в пространстве пользователя.

Преимущества:

  1. ? Процедура, сохраняющая информацию о потоке, и планировщик являются локальными процедурами, и их вызов существенно более эффективен, чем вызов ядра. Не требуются прерывание, переключение контекста, сохранение кэша и т. п., что существенно ускоряет переключение потоков.
  2. ? Они позволяют каждому процессу иметь собственный алгоритм планирования.
  3. ? Эти приложения лучше масштабируются.

Недостатки:

  1. ? Проблема реализации блокирующих системных запросов.
  2. ? Ошибка из-за отсутствия страницы.
  3. ? При запуске одного потока ни один другой поток не будет запущен, пока первый поток добровольно не отдаст процессор.
  4. ? Программисты хотят использовать потоки именно в тех приложениях, в которых потоки часто блокируются, например в многопоточном web-cepвepe.