Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

3.2.4. Реализация потоков в ядре

Рассмотрим ситуацию, когда ядро операционной системы будет владеть всей информацией о потоках и иметь возможность управ¬лять ими. Как видно из рис. 3.8, б, уже нет необходимости в системе поддержки исполнения программ. Вместо таблицы процессов в каждом потоке ядро сопровождает общую таблицу потоков, в которой находятся данные всех потоков, находящихся в системе. При возникновении необходимости создания нового потока или уничтожения существующего потока выполняющийся поток обратится к ядру, которое и будет создавать или разрушать путем обновления данных в таблице потоков.

Таблица потоков, которая находится в ядре, также содержит регистры каждого потока, состояние потоков и другие необходимые данные, то есть ту же информацию, которая ис¬пользовалась для реализации потоков на пользовательском уровне. Кроме того, данная информация является подмножеством данных о состоянии процесса. Ядро операционной системы для управления процессами поддерживает также и традиционную таблицу процессов.

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

Так как на создание и уничтожение потоков в ядре требуется более весо¬мые затраты, некоторые системы повторно используют свои потоки. Когда необходимо уничтожить поток, система помечает его как неспособный к выполнению, но не изменяет структуру данных, которая имеется о нем в ядре. Когда необходимо будет создать новый поток, то система не тратит на это новые ресурсы, а повторно активирует старый поток, более эффективно используя время.

Реализованные на уровне ядра потоки не требуют новых, неблокирующих системных вызовов. Так, если возникнет ошибка обращения к отсутствующей странице во время выполнения некоторого потока, то ядро системы проверит наличие любых других готовых к выполнению потоков данного процесса и в случае наличия таковых выберет один для запуска на выполнение. Главным недостатком таких потоков является высокая стоимость для системы осуществления системных вызовов. Частое выполнение операций над по¬токами влечет более существенные издержки.

Предыдущий раздел Оглавление Следующий раздел