Подсистемы среды обеспечивают возможность запуска приложений, написанных для других операционных систем. Подсистемы среды предназначены для перехвата вызовов приложений в формате прикладных интерфейсов API определенной операционной системы, а также их последующего преобразования в формат, понятный Windows 2000. После этого преобразованные вызовы функций прикладных интерфейсов API передаются компонентам операционной системы, обрабатывающим запросы. После этого возвращенные коды или сведения (зависит от приложения) опять преобразуются в формат, понятный приложению.
Подсистемы среды — не новинка в Windows 2000, но они значительно улучшились со времен выпуска Windows NT. Считается, что некоторые приложения работают лучше под управлением Windows 2000, чем той операционной системы, для которой они изначально создавались. В Windows 2000 возросла и безопасность работы прило жений. Например, Windows 2000, никак не влияя на работу сервера, может прервать работу DOS-приложения, что гарантировало бы зависание при запуске в среде DOS. Подсистемы среды и приложений Windows 2000 перечислены в табл. 1.1.
Подсистемы среды, отличные от Win32, обеспечивают базовую поддержку He-Win32 приложений и не более того. В той или иной подсистеме большой необходимости нет, все они поддерживаются только для запуска простых утилит, совершающих прямые и совместимые с POS1X или OS/2 вызовы функций, обычно написанных на С. Однако подсистема среды POS1X обеспечивает запуск таких утилит UNIX, как VI или GREP.
Например, подсистема среды POSIX не обеспечивает такой тесной интеграции Windows 2000 и UNIX, как запуск оболочки UNIX под Windows 2000. Для этого вам понадобится устанавливать соответствующие службы для UNIX. Более подробные сведения вы найдете дальше в настоящей главе.
Для запуска под управлением Windows 2000 приложений, написанных для других операционных систем, существует несколько ограничений. Это продемонстрировано в следующем списке, куда для полноты картины включены и приложения Win32, работающие в режиме пользователя.
- Программы не имеют прямого доступа к оборудованию. Другими словами, если
приложению требуется свободное дисковое пространство, оно не может полу
чить необходимые сведения от оборудования. Вместо этого оно обращается к
объектам режима пользователя, которые взаимодействуют с объектами режима
ядра, а те, в свою очередь, спускаются еще ниже и обращаются к уровню аппа
ратных абстракций HAL. Затем полученные сведения передаются назад вверх до
уровня интерфейса. Функция из программного кода Win32 сразу получает необ
ходимые значения, поэтому разработчикам не нужно думать об организации
доступа к оборудованию. Такая ситуация хороша как для разработчиков, так и
для операционной системы. Прикладные интерфейсы API, проверяющие досто
верность вызовов, защищают операционную систему, поэтому разработчики по
лучают возможность использовать просто интерфейс на уровне вызовов, для чего
обычно требуется всего одна, а не 10 тысяч строк программного кода.
- Программы не имеют прямого доступа к драйверам устройств. Перечислен
ные выше замечания справедливы и по отношению к драйверам устройств.
Производители оборудования создают драйверы для Windows 2000, которые
взаимодействуют с оборудованием. Однако драйверы не обращаются непо
средственно к оборудованию, взаимодействуя вместо этого с абстрактными
объектами, предоставляемыми прикладными интерфейсами API. Этот под
ход, а также новая модель драйверов Windows WDM (Windows Driver Model)
будут рассмотрены дальше в настоящей главе.
- Программам выделяется только ограниченное адресное пространство. Это
защищает операционную систему от "грубых" приложений, пытающихся занять всю доступную память. Это невозможно в Windows 2000, где каждая программа ограничена выделенным ей адресным пространством.
- Windows 2000, как и Windows NT, использует пространство жесткого диска
как квазиоперативную память. Приложениям ничего не известно о типе ис
пользуемой памяти; для них все осуществляется совершенно прозрачно.
Виртуальная память — это комбинация всех типов памяти в системе; более
подробно эти вопросы будут рассмотрены дальше в настоящей главе.
- Приложения, запущенные в режиме пользователя, являются процессами с
низшим приоритетом, чем любые службы и функции, запущенные в режиме
ядра. Это также означает, что им отдается меньшее предпочтение при досту
пе к центральному процессору, чем процессам режима ядра.