Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Смешанная реализация



С целью совмещения преимуществ реализации потоков на уровне ядра и на уров­не пользователя были опробованы многие способы смешанной реализации. Один из методов заключается в использовании управления ядром и последующем муль­типлексировании потоков на уровне пользователя, как показано на рисунке 37.1

Мультиплексирование потоков пользователя из потока ядра

Рисунок 37.1 - Мультиплексирование потоков пользователя в потоках ядра

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

Активация планировщика

Многие исследователи старались совместить преимущества реализации потоков на уровне ядра (простота реализации) и реализации потоков на уровне пользова­теля (высокая производительность).

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

Увеличение эффективности достигается за счет уменьшения количества не­нужных переходов между пространством пользователя и ядром. Например, если поток блокирован в ожидании действий другого потока, совершенно не обязатель­но обращаться к ядру, что позволяет избежать накладных расходов, по переходу «пользователь—ядро». Система поддержки исполнения программ, работающая в пространстве пользователя, может блокировать синхронизирующий поток и са­мостоятельно выбрать другой.

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

В основе механизма работы этой схемы лежит следующее утверждение. Если ядро знает, что поток блокирован (например, если он выполнил блокирующий системный запрос или вызвал ошибку из-за отсутствия страницы), ядро оповеща­ет об этом систему поддержки исполнения программ процесса, пересылая через стек в качестве параметров номер потока в запросе и описание случившегося. Опо­вещение происходит при помощи активации ядром в определенном начальном адресе системы поддержки исполнения программ, что приблизительно аналогич­но сигналу в UNIX. Этот метод называется upcall («вызов вверх», также иногда именуемый обратным вызовом — callback — в противоположность обычным вы­зовам, производящимся из верхних уровней в нижние).

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

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





Дата публикования: 2015-01-26; Прочитано: 784 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...