Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_СГTУ new v10.doc
Скачиваний:
148
Добавлен:
12.11.2019
Размер:
4.13 Mб
Скачать

2.3. Процессы и потоки в Windows

С точки зрения программирования каждый процесс win32/64 включает компоненты (рис. 22):

  • один или несколько потоков;

  • виртуальное адресное пространство, отличное от адресных пространств других процессов, за исключением случаев явного разделения памяти;

  • один или более сегментов кода, включая код DLL;

Рис. 22. Структура процесса и его потоков

  • один или более сегментов данных, содержащих глобальные переменные;

  • строки окружения с информацией о переменных окружениях, таких как текущий путь поиска файла и др.;

  • память кучи процесса;

  • ресурсы процесса (открытые дескрипторы, файлы, другие кучи).

Атрибуты процесса и потока в Windows приведены в табл. 2.

Атрибуты процесса и потока в Windows Таблица 2

Процесс

Поток

Идентификатор процесса - уникальное значение, идентифицирующее процесс в ОС

Идентификатор потока - уникальное значение, идентифицирующее поток, когда он вызывает сервис.

Дескриптор защиты – описывает, кто создал процесс, права доступа и пр.

Контекст потока – набор значений регистров, которыми определяется состояние выполняемого потока.

Базовый приоритет – базовый приоритет для потоков

Динамический приоритет - приоритет выполняемого потока в данный момент.

Базовый приоритет – нижний приоритет динамического приоритета потока.

Родственность процессов по умолчанию – заданный по умолчанию набор процессов, где возможно выполнение потоков.

Родственность процессов по потоку – множество процессов, где возможно выполнение потоков.

Время выполнения – суммарное время, затраченное на выполнение всех потоков в процессе.

Время выполнения потока - совокупное время, затраченное на выполнение потока в пользовательском режиме и режиме ядра.

Счётчик ввода/вывода - переменные, в которые заносятся сведения о количестве и типе операций ввода/вывода, выполненных потоками процесса.

Статус извещения (оповещения) – этот флаг, который указывает, следует ли потоку выполнять асинхронный вызов процедуры.

Счётчик операций с виртуальной памятью – это переменные, в которые заносятся сведения о количестве и типе операций с виртуальной памятью выполненных потоками процесса.

Счётчик приостановок – в нём указывается, сколько раз выполнение потока было приостановлено без последующего возобновления.

Квоты – максимальное количество страничной памяти и процессорного времени доступного процессу

Маркеры режима анонимного воплощения – это временный признак доступа.

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

Порт завершения – это канал обмена информацией между процессами, куда диспетчер процессов отправляет сообщения при завершении потока.

Статус выхода – причины завершения процесса

Статус выхода – причины завершения потока

Все потоки процесса совместно используют код, глобальные переменные, строки окружения и ресурсы процесса [3]. Каждый поток планируется независимо. Поток включает следующие элементы:

  • стек вызова процедур, переменных, обработчиков исключений и автоматических данных;

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

  • структура контекста, управляемая ядром, содержащая значение аппаратных регистров.

Некоторые атрибуты потока подобны атрибутам процессов. Значениия таких атрибутов потока извлекаются из значений атрибутов процесса. Например, в многопроцессорной системе родственные процессоры по потоку – это множество процессоров, на которых может выполняться данный поток. Оно совпадает с множеством процессоров родственных по процессу или является его подмножеством. Информация, содержащаяся в контексте потока, позволяет ОС приостанавливать и возобновлять потоки [9]. Основные функции управления процессами и потоками показаны в табл.3.

Сервисы процесса и потока в Windows Таблица 3

Процесс

Поток

Создание процесса CreateProcess().

Создание потока CreateThread().

Открытие процесса OpenProcess().

Открытие потока OpenThread()

Информация по запросу процесса

Информация по запросу потока

Информация по наладке процесса

Информация по наладке потока

Текущий процесс GetCurrentProcessID()

Текущий поток GetCurrentThreadID()

Прекращение процесса ExitProcess()

Завершение потока ExitThread()

Получение контекста

Установка контекста

Приостановка Delay()

Возобновление

Извещение потоков

Проверка извещения потока

Порт регистрации завершения.

Основной функцией для управления процессом win32 является функция CreateProcess(). Она создаёт процесс с одним потоком. Так как процесс требует наличие кода, то в вызове функции CreateProcess() необходимо указывать имя исполняемого файла программы. Функция имеет 10 параметров и при успешном выполнении возвращает дескрипторы для процесса и для первичного потока. Дополнительные потоки можно создать функцией CreateThread(). Для Windows все процессы одинаковы, и она не различает дочерние и родительские, в отличие от Unix.

Жизненный цикл потока в Windows (рис 23) проходит следующие шесть состояний [3]:

Готовый к выполнению: это поток, который может быть направлен на выполнение, у него есть все необходимые ресурсы кроме процессорного времени. Диспетчер микроядра отслеживает, все готовые потоки и осуществляет их планирование в соответствии с их приоритетом.

Резервный ‑ это поток, который будет запущен следующим на данном процессоре. Поток находится в этом состоянии до тех пор, пока процессор не освободится. Если приоритет резервного потока достаточно высок, то он может вытеснить выполняющийся в данный момент поток, иначе он ждёт, пока не произойдёт блокировка выполняющегося потока или пока не истечёт выделенный ему квант времени.

Рис. 23. Жизненный путь потока в Windows

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

Ожидающее: поток входит в состояние ожидания, если он блокирован каким-либо событием (например, операцией ввода/вывода); он добровольно ждёт синхронизации; среда подсистемы предписывает потоку, чтобы он сам себя остановил. После удовлетворения условий ожидания, поток переходит в состояние готовности, если все его ресурсы доступны.

Переходное: поток готов к выполнению, но не все ресурсы необходимые ему для работы доступны. При доступности всех ресурсов он переходит в состояние готовности.

Завершающее: завершение потока может быть инициировано самим потоком, другим процессом или может произойти вместе с завершением родительского процесса.

После завершения необходимых операций освобождения ресурсов поток удаляется из операционной системы.