Реферат: Процессы, нити и волокна в ОС Windows
Belownormal: –1;
Highest: +2;
Lowest: –2;
Timecritical: устанавливает базовый приоритет потока для Realtime класса в 31,
для остальных классов – в 15;
Idle: устанавливает базовый приоритет потока для Realtime класса в 16,
для остальных классов – в 1.
Если операционная система выполняется на машине, где установлено более одного процессора, то по умолчанию, нить выполняется на любом доступном процессоре. Однако в некоторых случаях, набор процессоров, на которых нить может работать, может быть ограничен. Это явление называется привязкой к процессорам (processoraffinity). Можно изменить привязку к процессорам программно, через Win32‑функции планирования.
Волокна поддерживаются в WIN32 API, начиная с Windows2000. Под волокном понимается упрощенная нить, выполнение которой планируется самим приложением, а не планировщиком процессорного времени ОС. Планирование волокон может осуществляться только путем переключения на них только из других волокон. Волокна выполняются в контексте нитей, в которых планируется их применение, и допускают полную их идентификацию с нитями. В каждой нити может быть запланировано несколько волокон. Для каждого волокна создается собственный стек, в котором хранится информация о состоянии волокна.
2. Создание процессов
Создание Win32 процесса осуществляется вызовом одной из таких функций, как CreateProcess , CreateProcessAsUser (для WinNT/2000/Vista) и CreateProcessWithLogonW (начиная с Win2000) и происходит в несколько этапов:
– Открывается файл образа (EXE), который будет выполняться в процессе. Если исполняемый файл не является Win32 приложением, то ищется образ поддержки (support image) для запуска этой программы. Например, если исполняется файл с расширением.bat, запускается cmd.exe и т.п.
В WinNT/2000/Vista для отладки программ реализовано следующее. CreateProcess , найдя исполняемый Win32 файл, ищет в SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option раздел с именем и расширением запускаемого файла, затем ищет в нем параметр Debugger, и если строка не пуста, запускает то, что в ней написано вместо данной программы.
– Создается объект Win32 «процесс».
– Создается первичная нить (стек, контекст и объект «нить»).
– Подсистема Win32 уведомляется о создании нового процесса и нити.
– Начинается выполнение первичной нити.
– В контексте нового процесса и потока инициализируется адресное пространство (например, загружаются требуемые DLL) и начинается выполнение программы.
3. Завершение процессов
Процесс завершается если:
– Входная функция первичной нити возвратила управление.
– Одна из нитей процесса вызвала функцию ExitProcess .
– Нить другого процесса вызвала функцию TerminateProcess .
Когда процесс завершается, все User- и GDI‑объекты, созданные процессом, уничтожаются, объекты ядра закрываются (если их не использует другой процесс), адресное пространство процесса уничтожается.
Пример: Программа создает процесс «Калькулятор».
#include <windows.h>
int main (int argc, char* argv[])
{
STARTUPINFO si;