Операционные системы: архитектура и управление процессами. Макаров П.С. - 47 стр.

UptoLike

Составители: 

47
Различные маршруты выполнения вызовов Win32 API
Рис. 19
Теперь мы достаточно подготовились к тому, чтобы понять, как реализо-
ван интерфейс Win32, а также другие интерфейсы. Каждый пользовательский
процесс, как правило, связан с несколькими динамическими библиотеками, со-
вместно реализующими интерфейс Win32. Чтобы обратиться к вызову API, вы-
зывается одна из процедур в DLL (шаг 1 на рис. 19). Дальнейшие действия за-
висят от вызова Win32 API. Различные вызовы реализованы по-разному.
В некоторых случаях динамические библиотеки обращаются к другой
динамической библиотеке (ntdll.dll), которая, в свою очередь, обращается к яд-
ру операционной системы. Этот путь показан на рисунке как шаги 2а и 3а. Ди-
намическая библиотека может также выполнить всю работу самостоятельно,
совсем не обращаясь к системным вызовам. Для других вызовов Win32 API вы-
бирается другой маршрут, а именно: сначала процессу подсистемы Win32
(csrss.exe) посылается сообщение, выполняющее некоторую работу и обра-
щающееся к системному вызову (шаги 2б, 3б и 4б). При этом в некоторых слу-
чаях подсистема также выполняет всю работу в пространстве пользователя и
немедленно возвращает управление. Передача сообщения между прикладным
процессом и процессом подсистемы Win32 была старательно оптимизирована
по времени, для чего был использован специальный механизм вызова локаль-
ной процедуры.
В первой версии Windows NT практически все вызовы Win32 API выби-
рали маршрут 2б, 3б, 4б, так как большая часть операционной системы (напри-
мер, графика) была помещена в пространство пользователя. Однако, начиная с
версии NT 4.0, для увеличения производительности большая часть кода была