Составители:
Рубрика:
В Windows определен список событий, которые приводят к перепла-
нированию потоков:
• создание и завершение потока;
• выделенный потоку квант исчерпан;
• поток вышел из состояния ожидания;
• поток перешел в состояние ожидания;
• изменен приоритет потока;
• изменена привязка к процессору.
В целях уменьшения затрат на планирование потоков несколько из-
менен граф состояний потока. На рис. 6.6 приведен «классический» вид
графа состояний задачи, а на рис. 6.8 – граф состояний потока в Windows.
Переход из состояния «готовность» в состояние «выполнение» сделан в
два этапа – выбранный к выполнению поток подготавливается к выпол-
нению и переводится в состояние «выбран»; эта подготовка может осуще-
ствляться до наступления момента перепланирования, и в нужный мо-
мент достаточно просто переключить контекст выполняющегося потока
на выбранный.
Также в два этапа может происходить переход из состояния «ожида-
ние» в «готовность»: если ожидание было долгим, то стек потока может
быть выгружен из оперативной памяти. В этом случае поток переводится
в промежуточное состояние до завершения загрузки стека – в списке го-
товых к выполнению потоков находятся только те, которые можно начать
выполнять без лишнего ожидания.
Рис. 6.8. Граф состояний потока
Основы многозадачности
195
Принято также деление потоков на потоки ядра и потоки пользовате-
ля (эти термины тоже неоднозначны). Потоки ядра в данном контексте яв-
ляются потоками, для управления которыми предназначен планировщик,
принадлежащий ядру операционной системы. Потоки пользователя при
этом рассматриваются как потоки, которые управляются планировщиком
пользовательского процесса. Строго говоря, потоки пользователя явля-
лись переходным этапом между «задачами» и «процессами»: с точки зре-
ния операционной системы использовались «задачи», которым выделя-
лись и ресурсы, и процессорное время, тогда как разделение «задачи» на
«потоки» осуществлялось непосредственно в самом приложении.
В Windows для обозначения этих понятий использованы термины
process (процесс), thread (поток) и fiber (волокно). Достаточно часто термин
«thread» переводится на русский язык как «нить», а не «поток». Термин
«fiber» также может переводиться либо как «нить», либо как «волокно».
Поток соответствует потоку ядра и планируется ядром операционной сис-
темы, а волокно соответствует потоку пользователя и планируется в при-
ложении пользователя.
В операционной системе для описания потоков используются объекты
двух типов – так называемые дескрипторы и контекст. Дескрипторы содер-
жат информацию, описывающую поток, но не его текущее состояние ис-
полнения. Контекст потока содержит информацию, описывающую непо-
средственно состояние исполнения потока. Так, например, дескриптор дол-
жен содержать переменные окружения, права доступа, назначенные потоку,
приоритет, величину кванта и так далее, тогда как контекст должен сохра-
нять информацию о состоянии стека, регистров процессора и т.д. Дескрип-
торы содержат актуальную в каждый момент информацию, а контекст об-
новляется в тот момент, когда поток выходит из исполняемого состояния.
Из контекста восстанавливается состояние потока при возобновлении ис-
полнения. Пока поток выполняется, содержимое контекста не является ак-
туальным и не соответствует его реальному состоянию.
6.1.2. Реализация в Windows
В современных полновесных реализациях Windows (Windows 2000,
Windows XP, Windows 2003) планировщик ядра выделяет процессорное
время потокам. Управление волокнами возложено на приложения пользо-
вателя: Windows предоставляет набор функций, с помощью которых при-
ложение может управлять созданными волокнами. Фактически для воло-
кон реализуется невытесняющая многозадачность средствами приложе-
ния; с точки зрения операционной системы, все волокна должны быть со-
зданы в рамках потоков (один поток может быть «расщеплен» на множе-
ство волокон средствами приложения) и система никак не вмешивается в
их планирование.
194
CIL и системное программирование в Microsoft .NET
Готовность
Ожидание
Переходное
состояние
Выбран для
выполнения
Выполнение
Запуск
потока
Выбор для
выполнения
Переключение
контекста на
выбранный
поток
Ожидаемое
событие
произошло и
поток может
выполняться
Поток
вытеснен
Стек потока
загружен
Поток переходит
в режим
ожидания
Ожидаемое событие
произошло и поток
может выполняться,
но его стек был
выгружен
Завершение
потока
194 CIL и системное программирование в Microsoft .NET Основы многозадачности 195
Принято также деление потоков на потоки ядра и потоки пользовате- В Windows определен список событий, которые приводят к перепла-
ля (эти термины тоже неоднозначны). Потоки ядра в данном контексте яв- нированию потоков:
ляются потоками, для управления которыми предназначен планировщик, • создание и завершение потока;
принадлежащий ядру операционной системы. Потоки пользователя при • выделенный потоку квант исчерпан;
этом рассматриваются как потоки, которые управляются планировщиком • поток вышел из состояния ожидания;
пользовательского процесса. Строго говоря, потоки пользователя явля- • поток перешел в состояние ожидания;
лись переходным этапом между «задачами» и «процессами»: с точки зре- • изменен приоритет потока;
ния операционной системы использовались «задачи», которым выделя- • изменена привязка к процессору.
лись и ресурсы, и процессорное время, тогда как разделение «задачи» на В целях уменьшения затрат на планирование потоков несколько из-
«потоки» осуществлялось непосредственно в самом приложении. менен граф состояний потока. На рис. 6.6 приведен «классический» вид
В Windows для обозначения этих понятий использованы термины графа состояний задачи, а на рис. 6.8 – граф состояний потока в Windows.
process (процесс), thread (поток) и fiber (волокно). Достаточно часто термин Переход из состояния «готовность» в состояние «выполнение» сделан в
«thread» переводится на русский язык как «нить», а не «поток». Термин два этапа – выбранный к выполнению поток подготавливается к выпол-
«fiber» также может переводиться либо как «нить», либо как «волокно». нению и переводится в состояние «выбран»; эта подготовка может осуще-
Поток соответствует потоку ядра и планируется ядром операционной сис- ствляться до наступления момента перепланирования, и в нужный мо-
темы, а волокно соответствует потоку пользователя и планируется в при- мент достаточно просто переключить контекст выполняющегося потока
ложении пользователя. на выбранный.
В операционной системе для описания потоков используются объекты Также в два этапа может происходить переход из состояния «ожида-
двух типов – так называемые дескрипторы и контекст. Дескрипторы содер- ние» в «готовность»: если ожидание было долгим, то стек потока может
жат информацию, описывающую поток, но не его текущее состояние ис- быть выгружен из оперативной памяти. В этом случае поток переводится
полнения. Контекст потока содержит информацию, описывающую непо- в промежуточное состояние до завершения загрузки стека – в списке го-
средственно состояние исполнения потока. Так, например, дескриптор дол- товых к выполнению потоков находятся только те, которые можно начать
жен содержать переменные окружения, права доступа, назначенные потоку, выполнять без лишнего ожидания.
приоритет, величину кванта и так далее, тогда как контекст должен сохра-
нять информацию о состоянии стека, регистров процессора и т.д. Дескрип- Запуск
торы содержат актуальную в каждый момент информацию, а контекст об- потока
Поток Стек потока
новляется в тот момент, когда поток выходит из исполняемого состояния. загружен
Из контекста восстанавливается состояние потока при возобновлении ис- вытеснен
полнения. Пока поток выполняется, содержимое контекста не является ак-
Готовность Переходное
туальным и не соответствует его реальному состоянию.
Выбор для состояние
6.1.2. Реализация в Windows Ожидаемое
выполнения
событие
В современных полновесных реализациях Windows (Windows 2000,
Выбран для произошло и
Windows XP, Windows 2003) планировщик ядра выделяет процессорное Ожидание
Переключение выполнения поток может
время потокам. Управление волокнами возложено на приложения пользо-
контекста на выполняться
вателя: Windows предоставляет набор функций, с помощью которых при- Ожидаемое событие
ложение может управлять созданными волокнами. Фактически для воло- выбранный произошло и поток
кон реализуется невытесняющая многозадачность средствами приложе- поток Выполнение может выполняться,
Поток переходит
ния; с точки зрения операционной системы, все волокна должны быть со- Завершение в режим но его стек был
зданы в рамках потоков (один поток может быть «расщеплен» на множе- потока ожидания выгружен
ство волокон средствами приложения) и система никак не вмешивается в
их планирование. Рис. 6.8. Граф состояний потока
Страницы
- « первая
- ‹ предыдущая
- …
- 102
- 103
- 104
- 105
- 106
- …
- следующая ›
- последняя »
