Common Intermediate Language и системное программирование в Microsoft.Net. Макаров А.В - 104 стр.

UptoLike

В 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. Граф состояний потока