Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Службы ядра Переключение контекста

Переключение контекста

Ядро, стремясь эффективно разделять время процессора, переключается между потоками; эта деятельность называется переключением контекста. Когда поток выполняется в течение продолжительности его кванта времени или когда он блокируется из-за запрашивания ресурса, который в настоящий момент недоступен, ядро находит для запуска другой поток и переключается на его контекст. Система может также прервать текущий выполняющийся поток, чтобы запустить поток в результате асинхронного события, такого, как прерывание от устройства. Хотя оба сценария включают переключение контекста выполнения процессора, переключение между потоками происходит синхронно по отношению к текущему выполняющемуся потоку, тогда как обслуживание прерываний происходит асинхронно по отношению к текущему потоку. Кроме того, переключения контекста между процессами подразделяются на принудительные и добровольные. Добровольное переключение контекста происходит при блокировании процесса, поскольку он запрашивает недоступный ресурс. Принудительное переключение контекста имеет место, когда поток выполняется в течение своего кванта времени или когда система обнаруживает для запуска поток с более высоким приоритетом.

Каждый из этих видов переключения контекста осуществляется посредством различных интерфейсов. Добровольное переключение контекста инициируется вызовом процедуры sleep(), тогда как принудительное переключение контекста форсируется непосредственным вызовом низкоуровневого механизма переключения контекста, реализованного в процедурах mi_switch() и setrunnable(). Асинхронная обработка события запускается нижележащим оборудованием и в сущности прозрачна для системы. Наше обсуждение сконцентрируется на том, как асинхронная обработка события связана с синхронизацией доступа к структурам данных ядра.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 25 гостей онлайн

Реклама на сайте: