Реализация потоков в пространстве пользователя
Primary tabs
Forums:
Метод состоит в размещении пакета потоков целиком в пространстве пользователя.
При этом ядро о потоках ничего не знает и управляет обычными, однопоточными процессами. Наиболее очевидное преимущество этой модели состоит в том, что пакет потоков на уровне пользователя можно реализовать даже в операционной системе, не поддерживающей потоки.
Все операционные системы когда-то относились к этой категории, а некоторые относятся до сих пор))))
Подобные реализации имеют в своей основе одинаковую общую схему, представленную на рис. а).-
Потоки работают поверх системы поддержки исполнения программ, которая является набором процедур, управляющих потоками.
Если управление потоками происходит в пространстве пользователя, каждому процессу необходима собственная таблица потоков для отслеживания потоков в процессе.
Эта таблица аналогична таблице процессов, с той лишь разницей, что она отслеживает лишь характеристики потоков, такие как счетчик команд, указатель вершины стека, регистры, состояние и т. п. Когда поток переходит в состояние готовности или блокировки, вся информация, необходимая для повторного запуска, хранится в таблице потоков подобному тому, как в ядре хранится информация о процессах в таблице процессов.
Когда поток, ожидая окончания действия другого потока в том же процессе, делает нечто, что может привести к локальной блокировке, он вызывает процедуру системы поддержки исполнения программ. Процедура проверяет необходимость блокирования потока. В этом случае процедура сохраняет регистры потока в таблице потоков, ищет в таблице поток, готовый к запуску, и загружает его сохраненные значения в регистры машины. Как только указатель стека и счетчик команд переключены, работа нового потока возобновляется автоматически. Если у процессора есть команда, позволяющая за одну инструкцию сохранить все регистры, и еще одна, чтобы загрузить их все заново, переключение потоков может быть выполнено с помощью очень небольшого количества инструкций.
Такое переключение потоков по крайней мере на порядок быстрее, чем переключения в режим ядра(интересно почему?....), и является серьезным аргументом в пользу управления потоками в пространстве пользователя.
Преимущества:
- ? Процедура, сохраняющая информацию о потоке, и планировщик являются локальными процедурами, и их вызов существенно более эффективен, чем вызов ядра. Не требуются прерывание, переключение контекста, сохранение кэша и т. п., что существенно ускоряет переключение потоков.
- ? Они позволяют каждому процессу иметь собственный алгоритм планирования.
- ? Эти приложения лучше масштабируются.
Недостатки:
- ? Проблема реализации блокирующих системных запросов.
- ? Ошибка из-за отсутствия страницы.
- ? При запуске одного потока ни один другой поток не будет запущен, пока первый поток добровольно не отдаст процессор.
- ? Программисты хотят использовать потоки именно в тех приложениях, в которых потоки часто блокируются, например в многопоточном web-cepвepe.
- Log in to post comments
- 10202 reads