Ядро, стремясь эффективно разделять время процессора, переключается между потоками; эта деятельность называется переключением контекста. Когда поток выполняется в течение продолжительности его кванта времени или когда он блокируется из-за запрашивания ресурса, который в настоящий момент недоступен, ядро находит для запуска другой поток и переключается на его контекст. Система может также прервать текущий выполняющийся поток, чтобы запустить поток в результате асинхронного события, такого, как прерывание от устройства. Хотя оба сценария включают переключение контекста выполнения процессора, переключение между потоками происходит синхронно по отношению к текущему выполняющемуся потоку, тогда как обслуживание прерываний происходит асинхронно по отношению к текущему потоку. Кроме того, переключения контекста между процессами подразделяются на принудительные и добровольные. Добровольное переключение контекста происходит при блокировании процесса, поскольку он запрашивает недоступный ресурс. Принудительное переключение контекста имеет место, когда поток выполняется в течение своего кванта времени или когда система обнаруживает для запуска поток с более высоким приоритетом.
Каждый из этих видов переключения контекста осуществляется посредством различных интерфейсов. Добровольное переключение контекста инициируется вызовом процедуры sleep(), тогда как принудительное переключение контекста форсируется непосредственным вызовом низкоуровневого механизма переключения контекста, реализованного в процедурах mi_switch() и setrunnable(). Асинхронная обработка события запускается нижележащим оборудованием и в сущности прозрачна для системы. Наше обсуждение сконцентрируется на том, как асинхронная обработка события связана с синхронизацией доступа к структурам данных ядра.
- 20/09/2010 00:36 - Другие виды синхронизации
- 16/09/2010 17:09 - Блокировки менеджера блокировок
- 14/09/2010 12:02 - Синхронизация с помощью мьютекса
- 13/09/2010 12:25 - Синхронизация
- 01/09/2010 07:22 - Состояние потока
- 28/08/2010 04:32 - Структура потока
- 27/08/2010 20:18 - Структура процесса
- 17/08/2010 04:52 - Планирование
- 17/08/2010 04:44 - Многозадачное программирование
- 14/08/2010 01:10 - Введение в управление процессами