- Основные системные процессы Windows 10 и их назначение
- Для чего знать названия процессов
- Обзор Process Lasso. Продвинутое управление процессами Windows
- Как использовать Process Lasso
- Оптимизация приоритета процесса
- Технология ProBalance
- Главное окно программы
- Активные процессы
- Графическое представление
- Вкладка «View»
- Параметры
- Управление процессами в Windows
Основные системные процессы Windows 10 и их назначение
С понятием процесса в Windows более или менее знакомы все пользователи хотя бы один раз заглядывавшие в Диспетчер задач . На вопрос, что это такое, процесс, большинство ответят: это такая-то программа или служба. Ответ не совсем правильный, потому что программа — это набор инструкций, представленный в виде исполняемого файла, тогда как под процессом следует понимать набор из закрытого адресного пространства, данных и ресурсов, используемых при выполнении этой самой программы.
Для просмотра запущенных процессов и их управления в Windows 10 предусмотрен Диспетчер задач, опытные юзеры и системные администраторы могут использовать для этих целей более продвинутые программные инструменты вроде Process Explorer — утилиты, позволяющей помимо всего прочего получать информацию об открытых дескрипторах и загруженных библиотеках DLL . Вникать в такие тонкости рядовому пользователю, пожалуй, излишне, но знать названия стандартных процессов ОС очень даже желательно.
Для чего знать названия процессов
Знания эти могут пригодиться в случае необходимости идентификации процесса того или иного приложения и управления им, а также выявления опасного и потенциально нежелательного ПО.
Давайте же познакомимся со стандартными процессами Windows 10 и посмотрим, какую задачу они выполняют в системе. Во встроенном Диспетчере задач запущенные процессы отображаются в двух вкладках — «Процессы» и «Подробности».
В первой вкладке Диспетчер показывает имя процесса, во второй — название исполняемого файла, ID процесса, описание (имя) , принадлежность, состояние и объем потребляемой памяти.
В Windows 10 все процессы делятся на три группы:
В первую группу входят процессы штатных и сторонних прикладных программ, вторую составляют процессы, не имеющие окон, то есть те, которые работают в фоне. Среди них могут встречаться как процессы, запущенные системой (службы) , так и процессы сторонних программ, например, антивирусов. Третью группу составляют собственно процессы операционной системы, обеспечивающие ее нормальное функционирование.
• svchost.exe – системный процесс, отвечающий за управление разными службами, служит своего рода контейнером для подпроцессов, использующих библиотеки DLL . В Диспетчере задач представлен несколькими экземплярами, большинство из которых являются критически важными для работы Windows. Располагается в папке System32 , часто служит мишенью для вирусов.
• lsass.exe – важный системный процесс, отвечающий за авторизацию в системе. Если последняя прошла успешно, он инициирует запуск Проводника с помощью специального маркера. В отличие от svchost.exe , процесс lsass.exe всегда запускается с правами SYSTEM . Для работы системы критически важен. Располагается в папке System32 , часто избирается мишенью для вредоносного ПО.
• explorer.exe – наиболее известный процесс, отвечающий за отображение графической оболочки Windows 10, позволяет осуществлять навигацию. Отключение не приведет к завершению работы системы, но сделает использование GUI невозможным. Запускается процесс из папки Windows , может иметь несколько экземпляров.
• sihost.exe – данный системный хост-процесс участвует в обслуживании инфраструктуры оболочки, позволяет открывать центр действий, различные меню, в том числе меню Пуск. Исполняемый файл запускается из папки System32 .
• ntoskrnl.exe или system – базовый, критически важный процесс ядра операционной системы, отвечающий за работу множества системных функций и драйверов устройств. Завершение процесса System не предусмотрено, функционирование системы без него невозможно. Исполняемый файл располагается в папке System32 .
• wininit.exe – этот процесс управляет автозагрузкой приложений в Windows, кроме того, он запускает ряд важных служб как SCM LSASS и LSM (диспетчер управления службами) . Исполняемый файл располагается в папке System32 . Случаи подмены вирусом не замечены.
• dwm.exe или диспетчер окон десктопа – процесс управляет визуальными эффектами важных элементов оболочки: десктопа, меню, окон и так далее. Запускается из каталога System32 . Вероятность заражения невелика.
• smss.exe – управляет подсистемой менеджера сеансов Windows (сеансом авторизовавшегося юзера) . Инициирует старт процессов Winlogon и Win32 , участвует в установке переменных системы. Для Windows критически важен, файл лежит в директории System32 , вероятность заражения оценивается как высокая.
• services.exe – важный процесс, отвечающий за управление системными службами. Запускается из директории System32 , владельцем является Система. Работа процесса под другим пользователем будет указывать на вероятное заражение или подмену.
• winlogon.exe – отвечает за авторизацию (вход) конкретного юзера в систему и выход из нее. Запускается из папки System32 , случаи заражения и подмены вирусом встречаются нечасто.
• csrss.exe – этот процесс управляет работой консольных приложений, например, командной строкой, является подсистемой компонента клиент-сервер. Исполняемый файл лежит в папке System32 , вероятность заражения оценивается как высокая.
Теперь перейдем к системным процессам, обозначаемых в Диспетчере задач как фоновые.
• RuntimeBroker.exe – один из основных процессов ядра Windows 8.1 и 10, управляющий разрешениями универсальных приложений, к примеру, доступом к камере или микрофону. Каждому запущенному UWP -приложению соответствует свой экземпляр процесса RuntimeBroker . Исполняемый файл находится в каталоге System32 .
• ApplicationFrameHost.exe – еще один процесс, отвечающий за работу UWP -программ. В Windows 10 обеспечивает запуск универсальных приложений в окнах независимо от используемого режима. Процесс может быть закрыт принудительно, но при этом будут закрыты и все запущенные UWP -приложения, включая работающие в фоне. Обитает exe-файл процесса в System32 .
• ctfmon.exe – процесс обеспечивает работу языковой панели, управляет вводом данных. Не является критическим, при завершении пользователем обычно перезапускается автоматически. Исполняемый файл лежит в System32 , случаи использования вирусами редки.
• SecurityHealthService.exe – системная служба, отвечающая в Windows 10 за работу Центра безопасности. Управляется Системой, завершение через Диспетчер задач не предусмотрено. Файл приложения находится в папке System32 .
• spoolsv.exe – процесс, обеспечивающий вывод на печать с использованием принтера и других подобных устройств. Не является особо важным, может быть завершен из Диспетчера задач или отключен в службах. Файл находится в System32 , заражение и использование вирусами маловероятно.
Это основные системные процессы, которые вы можете наблюдать в Диспетчере задач Windows 10.
Впрочем, если у вас есть сомнения по поводу безопасности того или иного процесса, вы всегда можете проверить его на «причастность» к вирусной активности, воспользовавшись утилитой Process Explorer, умеющей получать данные о файле с сервиса VirusTotal .
И еще один момент.
Изучив список процессов в Диспетчере задач, вы наверняка обнаружите процессы, которые не были приведены в нашем списке. Это вполне нормальное явление, поскольку процессы, особенно входящие в категорию «Фоновые» могут принадлежать различным дополнительным системным компонентам, а также драйверам устройств, имеющихся на вашем компьютере.
Обзор Process Lasso. Продвинутое управление процессами Windows
Сегодня в интернете можно найти несколько программ, предназначенных для оптимизации работы процессора в режиме реального времени. О них уже неоднократно рассказывалось, однако это не является поводом не поговорить об ещё одной утилите.
Как использовать Process Lasso
Process Lasso является одним из лучших инструментов для мониторинга и управления процессами в ОС Windows. Эта многофункциональная программа во многих отношениях намного лучше, чем стандартный диспетчер задач, который имеется в Windows 10.
Если ты новичок, то можешь установить Process Lasso и предоставить ему возможность делать свою работу в автоматическом режиме. Однако если ты относишься к тому типу людей, которые хотят контролировать всё сами, дочитай этот обзор до конца, чтобы узнать больше об этой программе.
Оптимизация приоритета процесса
Если и есть что-то, что мне нравится в Process Lasso, так это его «оптимизация приоритета процесса» и «автоматизация системы». Эти функции дают пользователю полный контроль над ситуацией.
Оптимизация приоритета позволяет просмотреть и изменить приоритет каждого процесса, но, что самое главное, она обеспечивает бесперебойную работу компьютера.
Технология ProBalance
Чтобы Process Lasso работал эффективно, он должен в полной мере использовать технологию ProBalance (Process Balance), позволяющую системе установить гармоничные отношения с пользователями. Проще говоря, ProBalance превращает Process Lasso в менее пугающий Диспетчер задач, и это хорошо как для новичков, так и для продвинутых юзеров.
Чтобы получить данные о том, как работает ProBalance, нажмите кнопку «View», а затем перейдите к «Open ProBalance Insights».
Главное окно программы
Первое, что вы увидите при запуске программы, — это главное окно. Именно здесь находится большая часть информации, и именно сюда вы будете смотреть особенно часто. Здесь вы найдёте «Все процессы», «Активные процессы», «Использование процессора», «Скорость отклика» и «Загрузку памяти».
Поначалу всё это очень трудно воспринять, но со временем, при регулярном использовании программы, всё станет намного проще и понятнее.
Если вы войдёте во вкладку «Main», вы поймёте, что есть довольно много вещей на главном экране, которые вы можете активировать или деактивировать. Многие пользователи предпочитают, чтобы в рабочем окне не было беспорядка, но вы можете добавить сюда всё, что вам нужно.
Здесь же вы можете внести изменения в схему электропитания вашего компьютера. Любые изменения питания будут сделаны из ядра, и если приложение будет удалено, изменения всё равно сохранятся.
Активные процессы
В разделе «Активные процессы» можно увидеть все запущенные процессы и приложения. Если щёлкнуть правой кнопкой мыши на процесс, у вас будет возможность внести несколько изменений. Например, вы можете завершить программу, перезапустить её, активировать режим производительности и многое другое. Кроме того, есть возможность осуществить привязку к процессору (CPU Affinity) и изменить приоритет ввода-вывода (I/O priority) для каждой программы, если вы захотите сделать это.
Графическое представление
Пользователи могут наглядно увидеть, что происходит с их компьютером, просто посмотрев на график загрузки процессора и использования оперативной памяти. Кроме того, этот график демонстрирует, насколько быстро реагирует вся система.
Вкладка «View»
В верхней части окна программы вы увидите вкладку «View». По сути она выполняет ту же функцию, что и вкладка «Main». Из этой вкладки вы можете удалить график (и снова добавить его в любое время) или же отключить компоненты графика, если вам кажется, что отображается слишком много информации.
Вы не слишком довольны цветом, используемым в Process Lasso по умолчанию? Вкладка «View» даёт вам возможность выбрать цветовую палитру в соответствии с собственными предпочтениями.
Параметры
Что же мы можем сделать в разделе «Options»? Довольно много, если вдуматься. Например, в этом разделе приложения пользователь может настроить работу процессора и оперативной памяти. Для тех, кто чувствует необходимость настроить свой ввод-вывод и определить, как программа будет запускаться при загрузке, раздел «Параметры» тоже очень пригодится.
Управление процессами в Windows
В отличие от «полуторазадачной» MS-DOS, которая оставляет прикладному программисту всю работу (и весь риск) организации параллельного функционирования процессов, многозадачные ОС предоставляют программисту более или менее удобный и богатый набор системных функций, позволяющих запустить несколько параллельных процессов и организовать их взаимодействие (синхронизацию процессов, обмен данными, взаимное исключение и т.п.). При этом ОС обязана гарантировать корректную и эффективную организацию переключения процессов, разделения между ними процессорного времени, памяти и других ресурсов.
Сложность проблемы организации взаимодействия параллельных процессов существенно разная для систем, использующих вытесняющую и невытесняющую диспетчеризацию процессов. При вытесняющей диспетчеризации процесс может быть прерван диспетчером практически в любой момент. Помимо задачи сохранения и последующего восстановления контекста процесса (см. п. 4.2.5), которая должна решаться самой ОС, возникают еще и задачи обеспечения взаимного исключения при выполнении критических секций в многозадачных приложениях. Только разработчик программы может решить, какие части текста его программы являются критическими секциями и должны быть защищены семафорами.
В системе с невытесняющей диспетчеризацией программисту достаточно проверить, что критические секции не содержат вызовов блокирующих и вытесняющих функций. При этом можно гарантировать, что в ходе выполнения критической секции не произойдет переключения процессов.
Все версии Windows от 1.0 до 3.11 представляли собой достаточно мощные многозадачные системы с невытесняющей диспетчеризацией. Версии, начиная с Windows NT и Windows 95, используют вытесняющую диспетчеризацию.
Понятие объекта в Windows
В ОС Windows широко используется понятие системного объекта. По сути, любой объект представляет собой некоторую структуру данных, расположенную в адресном пространстве системы. Поскольку приложения не могут иметь доступа к этой памяти, то для работы с объектом приложение должно получить хэндл объекта – некоторое условное число, которое будет представлять данный объект при обращении к API-функциям. Процесс получает хэндл, как правило, при вызове функции CreateXxx (здесь Xxx – название объекта), которая может либо создать новый объект, либо открыть существующий объект, созданный другим процессом. Функции вида OpenXxx позволяют только открыть существующий объект.
Объекты Windows делятся на объекты ядра (KERNEL), позволяющие управлять процессами, объекты USER, описывающие работу с окнами, и объекты GDI, задающие графические ресурсы Windows. В данном курсе рассматриваются только объекты ядра. Процессы, нити и открытые файлы являются примерами объектов ядра.
Одной из отличительных особенностей объектов ядра являются атрибуты защиты, которые можно указать при создании объекта. Эти атрибуты определяют права доступа к объекту для различных пользователей и групп. Кроме того, при создании объекта ядра можно задать его имя, которое используется для того, чтобы другие процессы могли открыть тот же объект, зная его имя.
Хэндл объекта может быть использован только тем процессом, который создал или открыл этот объект. Нельзя просто переслать значение хэндла другому процессу, оно не будет действовать в другом контексте. Имеется, однако, функция DuplicateHandle, которая создает корректную копию хэндла, требуя указать для этого, какой процесс создает копию, какого именно хэндла и для какого процесса предназначена копия.
Если хэндл объекта больше не нужен данному процессу, его следует закрыть с помощью функции CloseHandle, общей для разных типов объектов.
Объект существует до тех пор, пока не будут закрыты все хэндлы, указывающие на него.
Процессы и нити
Общее понятие процесса, рассмотренное выше в п. 4.2.1, для ОС Windows как бы распадается на два понятия: собственно процесса и нити (thread; в некоторых книгах используется термин поток). При этом нить является единицей работы, она участвует в конкуренции за процессорное время, изменяет свое состояние и приоритет, как было описано выше для процесса. Что же касается процесса в Windows, то он может состоять из нескольких нитей, использующих общую память, открытые файлы и другие ресурсы, принадлежащие процессу. В двух словах: процесс – владеет (памятью, файлами), нити – работают, при этом совместно используя ресурсы своего процесса. Правда, нить тоже кое-чем владеет: окнами, очередью сообщений, стеком.
Процесс создается при запуске программы (EXE-файла). Одновременно создается одна нить процесса (должен же кто-то работать!). Создание процесса выполняется с помощью API-функции CreateProcess. Основными параметрами при вызове этой функции являются следующие.
· Имя файла запускаемой программы.
· Командная строка, передаваемая процессу при запуске.
· Атрибуты защиты для создаваемых процесса и нити. И процесс, и нить являются объектами ядра Windows и в этом качестве могут быть защищены от несанкционированного доступа (например, от попыток других процессов вмешаться в работу данного процесса).
· Различные флаги, уточняющие режим создания процесса. Среди них следует отметить класс приоритета процесса, флаг отладочного режима (при этом система будет уведомлять процесс-родитель о действиях порожденного процесса), а также флаг создания приостановленного процесса, который не начнет работать, пока не будет вызвана функция возобновления работы.
· Блок среды процесса.
· Текущий каталог процесса.
· Параметры первого окна, которое будет открыто при запуске процесса.
· Адрес блока информации, через который функция возвращает родительскому процессу четыре числа: идентификатор созданного процесса, идентификатор нити, хэндл процесса и хэндл нити.
Если процесс успешно создан, функция CreateProcess возвращает ненулевое значение.
Класс приоритета процесса используется при определении приоритетов его нитей. Подробнее об этом в п. 4.5.3.
Хэндл объекта ядра Windows (в данном случае процесса или нити) позволяет выполнять различные операции с этим объектом. Подробнее о хэндлах и идентификаторах см. п. 4.5.4.
После создания процесса его единственная нить начинает выполнять программу процесса, работая параллельно с нитями других запущенных процессов. Если логика работы программы предполагает параллельное выполнение каких-либо действий в рамках одного процесса, то могут быть созданы дополнительные нити. Для этого используется функция CreateThread. Ее основные параметры следующие:
· атрибуты защиты для создаваемой нити;
· размер стека нити;
· стартовый адрес нити (обычно нить связывается с выполнением одной из функций, описанных в программе процесса, при этом в качестве стартового адреса указывается имя функции);
· параметр-указатель, позволяющий передать нити при запуске некоторое значение в качестве аргумента;
· флаг создания нити в приостановленном состоянии;
· указатель на переменную, в которой функция должна возвратить идентификатор созданной нити.
Возвращаемым значением функции CreateThread является хэндл созданной нити либо NULL, если создать нить не удалось.
Прекрасным примером многонитевой программы является Microsoft Word. В то время как основная нить обрабатывает ввод с клавиатуры, отдельная нить может динамически рассчитывать разбиение текста на страницы, еще одна нить может в это же время выполнять печать документа или его сохранение.
Для завершения работы нити используется вызов функции ExitThread. Для завершения работы всего процесса любая из его нитей может вызвать функцию ExitProcess. Единственным параметром каждой из этих функций является код завершения нити или процесса.
Завершение процесса приводит к освобождению всех ресурсов, которыми владел процесс: памяти, открытых файлов и т.п.
При завершении процесса завершаются все его нити. И наоборот, при завершении последней нити процесса завершается и сам процесс.
Не слишком широко известно, что нить не является самой мелкой единицей организации вычислений. На самом деле Windows позволяет создать внутри нити несколько волокон (fiber), которые в обычной терминологии могут быть описаны как сопрограммы или как задачи с невытесняющей диспетчеризацией, работающие в рамках одной и той же задачи с вытесняющей диспетчеризацией. Переключение волокон выполняется только явно, с помощью функции SwitchToFiber. Об использовании сопрограмм см. /15/.
Планировщик Windows
Задачей планировщика является выбор очередной нити для выполнения. Планировщик вызывается в трех случаях:
· если истекает квант времени, выделенный текущей нити;
· если текущая нить вызвала блокирующую функцию (например, WaitForMultipleObjects или ReadFile) и перешла в состояние ожидания;
· если нить с более высоким приоритетом пробудилась от ожидания или была только что запущена.
Для выбора нити используется алгоритм приоритетной очереди. Для каждого уровня приоритета система ведет очередь активных нитей (т.е. нитей, находящихся в состоянии готовности). Для выполнения выбирается очередная нить из непустой очереди с самым высоким приоритетом.
Очереди активных нитей пополняются за счет нитей, проснувшихся после состояния ожидания и нитей, вытесненных планировщиком. Как правило, нить помещается в конец очереди. Исключение делается для нити, вытесненной до истечения ее кванта времени более приоритетной нитью. Такая «обиженная» нить ставится в голову очереди.
Значение кванта времени для серверных установок Windows равно обычно 120 мс, для рабочих станций – 20 мс.
Как вы думаете, почему для серверов квант времени больше?
Теперь подробнее о приоритетах. Хотя общая схема их назначения одинакова для всех версий Windows, детали могут разниться. Дальнейшее изложение ориентировано на Windows NT 4.0.
Все уровни приоритета нитей пронумерованы от 0 (самый низкий приоритет) до 31 (самый высокий). Уровни от 16 до 31 называются приоритетами реального времени, они предназначены для выполнения критичных по времени системных операций. Только сама система или пользователь с правами администратора могут использовать приоритеты из этой группы. Уровни от 0 до 15 называются динамическими приоритетами.
В Windows используется двухступенчатая схема назначения приоритетов. При создании процесса ему назначается (а впоследствии может быть изменен самой программой или пользователем) один из четырех классов приоритета, с каждым из которых связано базовое значение приоритета:
· Realtime (базовый приоритет 24) – высший класс приоритета, допустимый только для системных процессов, занимающих процессор на очень короткое время;
· High (базовый приоритет 13) – класс высокоприоритетных процессов;
· Normal (базовый приоритет 8) – обычный класс приоритета, к которому относится большая часть запускаемых прикладных процессов;
· Idle (базовый приоритет 4) – низший (буквально – «холостой» или «простаивающий») класс приоритета, характерный для экранных заставок, мониторов производительности и других программ, которые не должны мешать жить более важным программам.
Собственно приоритет связывается не с процессом, а с каждой его нитью. Приоритет нити определяется базовым приоритетом процесса, к которому прибавляется относительный приоритет нити – величина от –2 до +2. Относительный приоритет назначается нити при ее создании и может при необходимости изменяться. Имеется также возможность назначить нити критический приоритет (31 для процессов реального времени, 15 для остальных) или холостой приоритет (16 для процессов реального времени, 0 для остальных).
Для нитей процессов реального времени приоритеты являются статическими в том смысле, что система не пытается их изменять по своему усмотрению. Предполагается, что для этой группы процессов соотношение приоритетов должно быть именно таким, как задумал программист.
Для процессов трех низших классов их приоритеты не случайно называются динамическими. Планировщик может изменять приоритеты, а заодно и кванты времени для нитей в ходе их выполнения, чтобы достичь более справедливого распределения процессорного времени. Правила изменения динамических приоритетов следующие.
· Когда заблокированная нить дождалась нужного ей события, к приоритету нити прибавляется величина, зависящая от причины ожидания. Эта прибавка может достигать 6 единиц (но приоритет не должен превысить 15), если нить разблокирована вследствие нажатия клавиши или кнопки мыши. Таким способом система стремится уменьшить время реакции на действия пользователя. Всякий раз, когда нить полностью использует свой квант времени, прибавка уменьшается на 1, пока приоритет нити не вернется к своему заданному значению.
· Если нить владеет окном переднего плана (т.е. тем, с которым работает пользователь), то ради уменьшения времени реакции планировщик может увеличить квант времени для этой нити с 20 мс до 40 или 60 мс, в зависимости от настроек системы.
· Если планировщик обнаруживает, что некоторая нить пребывает в очереди более 3 с, то он повышает ее приоритет аж до 15 и удваивает ее квант. Но эта благотворительность разовая: когда Золушка-нить израсходует увеличенный квант или заблокируется, ее приоритет и квант возвращаются к прежним значениям. Смысл акции понятен: система пытается обеспечить хоть какое-то продвижение даже для низкоприоритетных нитей.
Процесс и нить как объекты
Подсистема управления процессами в Windows позволяет рассматривать процессы и нити как объекты, над которыми нити различных процессов могут выполнить целый ряд действий. Для этого требуется иметь хэндл процесса или нити. Как нам известно, такие хэндлы возвращаются как побочные результаты работы функций CreateProcess и CreateThread. Это позволяет процессу, запустившему другой процесс или нить, выполнять с ними необходимые действия. Однако в некоторых случаях желательно дать возможность управлять процессом не процессу-«родителю», а другому, совершенно постороннему процессу (например, программе администрирования системы). Проблема при этом в том, что, как уже отмечалось, хэндл в Windows имеет смысл только в пределах того процесса, который вызвал функцию Create и не может быть просто передан другому процессу.
Функция OpenProcess позволяет одному процессу получить хэндл любого другого процесса, указав для этого два параметра: идентификатор интересующего процесса и маску, задающую набор запрашиваемых прав по отношению к этому процессу. Если подсистема безопасности Windows, сверив маркер доступа запрашивающего процесса с дескриптором безопасности процесса-объекта (см. п. 3.8.4.1), сочтет запрос законным, то функция вернет требуемый хэндл.
А о каких, собственно, правах идет речь? Что именно один процесс может сделать с другим процессом? Основные права следующие:
· запускать новую нить процесса;
· запрашивать и изменять класс приоритета процесса;
· читать и записывать данные в памяти процесса;
· использовать процесс в качестве объекта синхронизации;
· принудительно прекращать выполнение процесса;
· запрашивать код завершения процесса.
Все перечисленные действия выполняются с помощью соответствующих API-функций (например, для прекращения процесса вызывается функция TerminateProcess), одним из параметров которых указывается хэндл открытого процесса-объекта.
Синхронизация нитей
Способы синхронизации
Windows предоставляет разнообразные возможности для синхронизации работы нитей, т.е., иначе говоря, для организации пассивного ожидания нитью некоторых событий, связанных с работой других нитей того же процесса или других процессов.
· Традиционной для Windows формой синхронизации является обмен сообщениями (messages). При этом, механизм сообщений предназначен не только для синхронизации, но и для обмена данными. Далее работа с сообщениями будет рассмотрена подробно.
· Разнообразные условия ожидания могут быть реализованы с помощью объектов синхронизации и функций ожидания, которые позволяют заблокировать нить до момента перехода указанного объекта в сигнальное состояние.
· Использование переменных типа CRITICAL_SECTION, в отличие от предыдущих способов, возможно только для синхронизации нитей одного и того же процесса, но зато реализуется более эффективно по времени и памяти.