Эмуляция нескольких ОС
Подсистемы окружения операционной системы XP реализованы как системы типа Клиент/сервер. Как часть процесса компиляции, прикладные программы прикрепляются на этапе компоновки к API операционной системы, который экспортируют под Системы окружения ОС XP.
Например, Win32 программа - это клиент подсистемы окружения Win32, поэтому она связана с клиентскими DLL Win32, включая kernel32.dll, gdi32.dll, и user32.dll. Программа POSIX связана с клиентской DLL POSIX - psxdll.dll.
Клиентские DLL выполняют задачи от имени их серверов, но они выполняются как часть клиентского процесса. Как показано рис. 18, в некоторых случаях пользовательская DLL может полностью реализовывать API без необходимости обращения к помощи сервера.
В других случаях сервер должен помочь. Помощь сервера обычно необходима только когда должна быть модифицирована общая информация, связанная с подсистемой окружения. Когда пользовательская DLL требует помощи от сервера, DLL посылает сообщение, известное, как вызов локальной процедуры (LPC) на сервер.
Когда сервер завершает указанный запрос и возвращает ответ, DLL может завершить функцию и возвратить управление клиенту. И пользовательская DLL и сервер могут использовать "родной" API, когда это необходимо. API подсистем окружения дополняют "родной" API специфическими функциональными возможностями или семантикой.