Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
realizaciya_mnogozadachnosti_v_windows_vista.doc
Скачиваний:
21
Добавлен:
28.03.2015
Размер:
138.75 Кб
Скачать

Глава 2. Моделирование режима многозадачности

2.1. Процессы и потоки

Различают два способа реализации многозадачности:

– создать один процесс, имеющий несколько потоков выполнения (threads);

– создать несколько процессов, каждый из которых имеет один или несколько потоков выполнения.

Многозадачная (multi-process) система позволяет двум или более программам выполняться одновременно.

Многопотоковая (multi-threaded) система позволяет одной программе выполнять сразу несколько потоков одновременно.

Современные операционные системы сочетают в себе оба эти свойства. Приложение Win32 может состоять из одного или более процессов. Например, приложение по расчету параметров турбогенератора может состоять из удобной оболочки, написанной на языке C++ (главный процесс), и вычислительных модулей, написанных на языке FORTRAN и запускаемых в виде отдельных (порожденных) процессов. При этом возможен вариант, когда один процесс (модуль программы) занят выводом геометрии расчетной области, а другой одновременно производит расчет электромагнитного поля.

Процесс – это понятие, относящееся к операционной системе. Каждый раз, как вы запускаете приложение, система создает и запускает новый процесс. Процесс можно грубо отождествить с ехе-кодом, выполняющимся в отдельном процессоре.

С каждым процессом система связывает такие ресурсы, как: виртуальное адресное пространство; исполнимый код и данные; базовый приоритет; описатели объектов; переменные окружения.

Каждый процесс обязательно создает первичный поток (primary thread) выполнения. Он делает это автоматически и, если программист не предпринимает каких-либо специальных усилий по созданию второго потока, то первичный поток и породивший его процесс обычно отождествляются в сознании пользователя, а, часто и в сознании программиста. Но последний может создать еще один или несколько потоков, которые размещаются в одном и том же адресном пространстве, принадлежащем процессу. Когда они создаются, родительский процесс начинает выполняться не последовательно, а параллельно. Так реализуется потоковая многозадачность. Говорят, что потоки выполняются в контексте процесса.

Поток (thread) – это основной элемент системы, которому ОС выделяет машинное время. Поток может выполнять какую-то часть общего кода процесса, в том числе и ту часть, которая в это время уже выполняется другим потоком. Например, код функции, отображающей на экране степень продвижения процесса передачи информации, может одновременно выполняться двумя потоками, которые обслуживают двух клиентов одного сервера.

Все потоки (threads) одного процесса пользуются ресурсами породившего их процесса. Кроме того, каждому потоку система и/или программист приписывает приоритет выполнения и набор структур языка С, описывающих контекст потока. Система использует их для запоминания контекста потока, когда его выполнение прерывается. В контекст входят:

– состояние регистров;

– системный стек ядра ОС (kernel stack);

– стек пользователя (user stack), расположенный в адресном пространстве процесса;

– блок переменных окружения потока.

Потоки подобны процессам, но требуют меньших затрат при своем создании. Они в меньшей степени, чем процессы, защищены друг от друга, но позволяют совместить выполнение операций и выиграть в общей производительности процесса.

Перечислим наиболее типичные случаи, когда следует применять многопоточность:

– управление вводом в различные документы МШ-интерфейса. Ввод данных каждого документа приложения организован в виде отдельного потока;

– управление вводом данных из нескольких устройств телекоммуникации;

– разграничение приоритетов выполнения задач. Потокам, требующим высокой скорости реакции, присваивается высокий приоритет, а другим потокам более низкий;

– снижение времени реакции на действия пользователя по вводу данных при одновременном выполнении фоновых вычислений.

Обычно более эффективной является реализация многозадачности в виде одного процесса с несколькими потоками, чем в виде многих процессов с одним потоком, так как:

– контексты потоков занимают меньший объем, чем контексты процессов и система переключает их быстрее;

– взаимодействие потоков проще, так как они могут пользоваться глобальными переменными в общем для них адресном пространстве процесса;

– потоки одного процесса легче синхронизировать, так как им доступны описатели объектов ядра из общего контекста процесса2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]