- •Что такое процесс?
- •Адресное пространство
- •Набор ресурсов
- •Объект-процесс
- •Что такое поток?
- •Многозадачность и мультипроцессорная обработка
- •Многопоточность
- •Объект-поток
- •История
- •Опорная модель osi
- •Встроенная сетевая поддержка
- •Сетевые api
- •Разрешение имен
- •Встроенные сетевые компоненты
- •Открытая архитектура
- •Доступ пользовательского режима к удаленным файловым системам
- •Транспортные протоколы
- •Среда ndis для сетевых драйверов
- •Среда распределенных приложений
- •Удаленный вызов процедур
- •Именованные каналы
- •Корпоративные сети и распределенная защита
Что такое поток?
В то время как процесс — это логическое представление работы, которую должна выполнить ОС, поток отображает одну из, возможно, многих необходимых подзадач. Предположим, к примеру, что пользователь запустил в оконном режиме приложение для работы с базой данных. ОС представляет этот вызов приложения как один процесс. Теперь предположим, что пользователь запросил генерацию отчета по данным из базы и сохранение этого отчета в файле — понятно, что это длительная операция. Пока идет выполнение операции, пользователь может ввести новый запрос к базе данных. ОС представляет каждый из запросов — генерацию отчета и новый запрос к базе — как отдельные потоки внутри процесса приложения для работы с базой данных. Эти потоки могут выполняться процессором независимо друг от друга, что позволяет проводить обе операции в одно и то же время (параллельно). У ОС есть удобный и эффективный способ предоставления потоков для достижения такой параллельности.
Основные составляющие потока в исполнительной системе NT таковы:
• Уникальный идентификатор, называемый идентификатором клиента.
• Содержимое набора регистров, отображающее состояние процессора.
• Два стека: один используется потоком при работе в пользовательском режиме, а другой — в режиме ядра.
• Собственная область памяти, предназначенная для использования подсистемами, библиотеками периода выполнения и динамически подключаемыми библиотеками (DLL).
Регистры, стек и собственная область памяти называются контекстам (context) потока. Фактические данные, составляющие контекст потока, зависят от типа. процессора.
Поток находится в адресном пространстве процесса, используя его для хранения данных во время выполнения. Если в одном процессе есть несколько потоков, то они совместно используют адресное пространство и все ресурсы процесса, включая маркер доступа, базовый приоритет и описатели объектов в таблице объектов процесса. Ядро NT направляет потоки на исполнение некоторому процессору. Таким образом, каждый процесс NT должен иметь по меньшей мере один поток
Многозадачность и мультипроцессорная обработка
Процессор может выполнять не более одного потока одновременно. Однако многозадачная (multitasking) ОС дает пользователям возможность исполнять несколько программ, причем создается впечатление, будто все они исполняются одновременно. Это достигается следующим образом:
1. Поток исполняется до тех пор, пока его исполнение не будет прервано или пока ему не придется ждать освобождения некоторого ресурса.
2. Сохраняется контекст потока.
3. Загружается контекст другого потока.
4. Этот цикл повторяется до тех пор, пока есть потоки, ожидающие выполнения.
Переключение процессора с исполнения одного потока на исполнение другого называется переключением контекста (context switching). В Windows NT его осуществляет ядро исполнительной системы.
Как показано на примере двух потоков на рис. 4-4, ОС поочередно выполняет то один поток, то другой. В конце концов, каждый поток заканчивает выполнение своей подзадачи и либо завершается, либо получает другую задачу. Очень высокая скорость работы процессора обеспечивает иллюзию одновременного выполнения всех потоков.
Многозадачность увеличивает объем работы, выполняемый системой, потому что большинство потоков не могут исполняться непрерывно. Периодически поток прекращает выполнение и ждет, например, пока медленное устройство ввода-вывода завершит
Рис. 4-4. Многозадачность.
пересылку данных или пока другой поток использует ресурс, необходимый первому. Благодаря многозадачности, пока один поток ожидает, может выполняться другой поток, и время процессора не расходуется впустую.
Вытесняющая многозадачность (preemptive multitasking) — это разновидность многозадачности, при которой ОС не ждет, пока поток добровольно предоставит процессор другим потокам. Вместо этого ОС прерывает поток, после того как он выполнялся в течение заранее заданного периода времени, так называемого кванта времени (time quantum), или когда готов к выполнению поток с большим приоритетом (например, реагирующий на пользовательский ввод). Вытеснение предотвращает монополизацию процессора одним потоком и предоставляет другим потокам их законную долю процессорного времени. Исполнительная система NT — это система с вытесняющей многозадачностью, как и ее основная среда Windows, подсистема Win32. В не вытесняющих версиях Windows для MS-DOS, чтобы достичь многозадачности, поток должен был добровольно передавать управление процессором. Плохие или примитивные программы могли захватить процессор в ущерб другим приложениям или всей системе.
Иногда двум потокам необходимо взаимодействовать друг с другом, чтобы скоординировать свои действия для достижения общей цели. Например, в компиляторе С один поток может выполнять препроцессорную обработку программы на С, а другой — принимать результаты работы первого и компилировать их в объектный код. Этим двум потокам необходим способ обмена данными друг с другом.
До второй половины 80-х годов в большинстве ОС программы могли иметь только один поток управления. (Фактически в большинстве ОС для обозначения исполняемой сущности использовалось слово процесс (process). Поток (thread) — достаточно новый термин.) Так как у каждого процесса было отдельное адресное пространство, двум процессам для обмена данными друг с другом нужны были либо область совместно используемой памяти, либо совместно используемый файл. Для такого рода коммуникаций между процессами широко использовались (и используются) каналы (см. рис. 4-5).
Препроцессорная обработка и компиляция программы двумя процессами (каждый с одним потоком), очевидно, должна идти быстрее, чем в случае одного процесса, так как многозадачная ОС может попеременно исполнять то поток препроцессора, то поток компилятора.
Рис. 4-5. Компилятор, состоящий из двух процессов.
Как только препроцессор поместит что-нибудь в совместно используемый буфер, компилятор может начать свою работу. Приложения, подобные этому, которые исполняются в двух или более местах одновременно, называются параллельными приложениями (concurrent applications).
Параллельность полезна приложениям и на однопроцессорном компьютере, но еще более она важна на многопроцессорном. При наличии нескольких процессоров препроцессор и компилятор из нашего примера могут исполняться параллельно. Если параллельное приложение хорошо спроектировано и минимизирует конкуренцию за ресурсы между своими потоками, то на многопроцессорном компьютере оно может работать быстрее, чем на однопроцессорном (сравните рис. 4-6 и рис. 4-4).
Операционной системой с мультипроцессорной обработкой (multiprocessing) называется такая ОС, которая специально спроектирована для работы на компьютерах с более чем одним процессором. ОС с симметричной мультипроцессорной обработкой (symmetric multiprocessing, SMP), такая как Windows NT, может выполнять на любом процессоре как код пользователя, так и код ОС. Если число потоков превышает число процессоров, ОС SMP также поддерживает многозадачность, разделяя время каждого процессора между всеми ожидающими потоками.
Рис. 4-6. Мультипроцессорная обработка.
Многопоточность.
