- •Глава 4.
- •Многопоточность
- •Функциональность потоков
- •Потоки на пользовательском уровне и на уровне ядра
- •Другие схемы
- •4.2 Симметричная многопроцессорная обработка
- •Организация симметричной многопроцессорной системы
- •Архитектура многопроцессорных операционных систем
- •4.3. Микроядра
- •Архитектура микроядра
- •Достоинства архитектуры с микроядром
- •Производительность микроядра
- •Архитектура микроядер
- •4.4. Потоки и smp в windows 2000
- •Объекты процессов и потоков
- •Многопоточность
- •Состояния потоков
- •Поддержка подсистем операционной системы
- •Поддержка симметричной многопроцессорной обработки
- •4.5. Управление потоками и smp в solaris
- •Мотивация
- •Структура процессов
- •Выполнение потоков
- •Прерывания в роли потоков
- •4 6. Управление процессамии потоками в linux
- •4.7. Резюме, ключевые термины и контрольные вопросы
- •Контрольные вопросы
- •4.8. Рекомендуемая литература
- •4.9. Задачи
Многопоточность
Операционная система W2K поддерживает параллельное выполнение процессов, потому что потоки различных процессов могут выполняться одновременно. Более того, нескольким потокам одного и того же процесса могут быть выделены различные процессоры, и эти потоки также могут выполняться одновременно. Параллелизм достигается в многопоточном процессе без накладных расходов на использование нескольких процессов. Потоки одного и того же процесса могут обмениваться между собой информацией с помощью общего адресного пространства и имеют доступ к совместным ресурсам процесса. Потоки, принадлежащие разным процессам, могут обмениваться между собой информацией с помощью общей области памяти, установленной для этих двух процессов.
Объектно-ориентированный многопоточный процесс является эффективным средством реализации серверных приложений. Например, один обслуживающий процесс может обслуживать несколько клиентов. Каждый запрос клиента приводит к созданию в сервере нового потока.
Состояния потоков
Поток, созданный в операционной системе W2K, может находиться в одном из шести состояний (см. рис. 4.14). Перечислим эти состояния.
Готовый к выполнению. Поток, который может быть направлен на выполнение. Диспетчер микроядра отслеживает все готовые к выполнению потоки и осуществляет их планирование в соответствии с приоритетом.
Резервный. Поток, который будет запущен следующим на данном процессоре. Поток находится в этом состоянии до тех пор, пока процессор не освободится. Если приоритет резервного потока достаточно высок, то он может вытеснить выполняющийся в данный момент поток. В противном случае резервный поток ждет, пока не произойдет блокировка выполняющегося потока или пока не истечет выделенный ему промежуток времени.
Выполняющийся. Как только микроядро переключит поток или процесс, резервный поток перейдет в состояние выполнения и будет пребывать в этом состоянии до тех пор, пока не произойдет одно из следующих событий: поток будет вытеснен, закончится отведенный ему интервал времени, поток будет блокирован или завершен. В первых двух случаях поток снова переходит в состояние готовности.
Ожидающий. Поток входит в состояние ожидания, если (1) он блокирован каким-то событием (например, операцией ввода-вывода), (2) он добровольно ждет синхронизации или (3) среда подсистемы предписывает потоку, чтобы он сам себя приостановил. После того как условия ожидания будут удовлетворены, поток переходит в состояние готовности, если все его ресурсы будут доступны.
Переходный. Поток переходит в это состояние, если он готов к выполнению, но ресурсы недоступны (например, страницы стека потока могут находиться на диске). После того как необходимые ресурсы станут доступны, процесс переходит в состояние готовности.
Завершающийся. Завершение потока может быть инициировано самим потоком, другим потоком или может произойти вместе с завершением родительского процесса. После завершения необходимых операций освобождения ресурсов и т.п. поток удаляется из системы (или может быть сохранен исполнительной системой для дальнейшей повторной инициализации).