Составители:
Рубрика:
В 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
- …
- следующая ›
- последняя »