Текст лекции. Рассмотрим теперь более подробно компоненты операционной системы Windows 2000, примерная архитектура которой была изображена на рисунке 2.1

Рассмотрим теперь более подробно компоненты операционной системы Windows 2000, примерная архитектура которой была изображена на рисунке 2.1. Более подробно архитектура Windows 2000 представлена на рисунке 2.2 [1].

Рисунок 2.2 – Архитектура Windows 2000

Из рисунка видно, что в Windows 2000 имеется три подсистемы окружения: Win32, POSIX и OS/2. Подсистема Win32 здесь стоит на первом месте не случайно – без нее Windows 2000 работать не может. Эта подсистема обрабатывает все, что связано с клавиатурой, мышью и экраном. Она нуж­­на даже на тех серверах, у которых нет интерактивных пользователей. Подсистема Win32 работает всегда, а остальные две подсистемы запускаются только по требованию.

Какие подсистемы будут загружены при старте Windows 2000, определяется значением параметра Required в разделе реестра HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Subsystem. В этом параметре просто указан список подсистем, загружаемых при запуске.

Каждая подсистема окружения предоставляет прикладным программам свое подмножество базовых сервисов исполнительной системы Windows 2000. Это значит, что приложение, созданное для одной подсистемы, может выполнять только операции этой подсистемы, и не может другой. Так Win32-приложения не могут использовать POSIX-функцию fork.

Каждый исполняемый файл (.EXE) принадлежит одной, и только одной подсистеме. При запуске его образа код, отвечающий за создание процесса, получает тип подсистемы, указанный в заголовке образа, и уведомляет соответствующую подсистему о новом процессе. В Microsoft Visual C++ тип указывается спецификатором /SUBSYSTEM в команде link.

Одновременные вызовы функций различных подсистем невозможны. То есть, приложения POSIX могут вызывать только сервисы, экспортируемые этой подсистемой, а приложения Win32 – только сервисы, экспортируемые подсистемой Win32.

Как уже сказано выше, приложения пользователя не могут напрямую вызывать системные сервисы Windows 2000. Они обращаются к DLL подсистем. Эти DLL предоставляют документированный интерфейс между программой и вызываемой ей подсистемой. DLL подсистемы Win32 (Kernel32.dll, Advapi32.dll, User32.dll, Gdi32.dll) реализуют функции Win32 API, а DLL подсистемы POSIX реализует функции POSIX 1003.1 API.

При вызове приложением одной из функций DLL подсистемы может возникнуть один из трех случаев:

- Функция полностью реализована в пользовательском режиме внутри DLL подсистемы. То есть вызова исполнительной системы Windows 2000 не происходит, и после выполнения функции в пользовательском режиме ее результат возвращается вызвавшей функцию программе.

- Функция требует одного или более вызовов исполнительной системы Windows 2000. Например, Win32 -функции ReadFile и WriteFile обращаются к внутренним недокументированным сервисам ввода-вывода – к NtReadFile и NtWriteFile, соответственно.

- Функция требует выполнения каких-либо операций в процессе подсистемы окружения. В этом случае подсистеме окружения передается сообщение с клиент-серверным запросом выполнения какой-либо операции. DLL подсистемы в этом случае возвращает управление вызвавшей программе только после получения соответствующего ответа.

Некоторые функции, вроде CreateProcess или CreateThread могут требовать выполнение и второго, и третьего пунктов.

Так как Win32 является главной подсистемой окружения Windows 2000, код для обработки окон и отображения ввода-вывода помещен именно в эту подсистему. Другие подсистемы окружения для выполнения базовых функций ввода-вывода вызывают соответствующие сервисы Win32. Далее мы рассмотрим более подробно компоненты Windows 2000, изображенные на рисунке 2.2.
10 Лекция № 9. Подсистемы окружения и исполнительная система

Продолжительность: 2 часа (90 мин.)


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: