Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

2. ПРОГРАММИРОВАНИЕ В WINDOWS

Уровни операционной системы Windows представлены на рис. 2.1. Интерфейсы программирования, которые используются для построения приложений, располагаются под уровнями апплетов и графического интерфейса пользователя. Основой данных интерфейсов программирования являются библиотеки кода (DLL), динамически используемые программами для получения доступа к функциональным возможностям операционной системы. В Windows есть также и несколько реализованных в виде служб интерфейсов программирования. Приложения используют удаленные вызовы процедур (RPC) для обмена со службами пользовательского режима.

Уровни

Рис. 2.1. Уровни программирования в Windows

Программа режима ядра NTOS (ntoskrnl.exe) является ядром операционной системы NT и обеспечивает традиционные интерфейсы системных вызовов. Доступные всем разработчикам интерфейсы пользовательского режима принадлежат реализованным при помощи подсистем, которые функционируют поверх уровней NTOS.

Изначально разработчикам были доступны три интерфейса: OS/2, POSIX и Win32. Поддержка OS/2 закончилась с появлением Windows XP. Поддержка POSIX прекратилась с выходом операционной системы Windows 8.1. В настоящий момент большинство Windows-приложений создаются с помощью API-интерфейсов, основанных на подсистеме Win32, причем компания Microsoft осуществляет поддержку и других интерфейсов прикладного программирования.

Начиная с Windows 8, разработчикам предоставляется набор API-интерфейсов WinRT, а также, чтобы обеспечить переход к модели единой операционной системы, одинаково работающей на персональных компьютерах, серверах, смартфонах, планшетных компьютерах и игровых приставках, был создан новый набор современных средств разработки Modern Software Development Kit. API-интерфейсы данного комплекта средств разработки доступны для программ на C++ и C#.

Кроме новых интерфейсов WinRT API в MSDK также включены и многие интерфейсы Win32 API. MSDK продолжает поддерживать модель потоков Win32 для организации параллельных действий внутри процессора. Также сохраняется поддержка большинства API-функций Win32 для управления виртуальной памятью. Однако из MSDK были убраны не рекомендованные к применению в Win32 API-интерфейсы, а также все API-функции ANSI. Для API-интерфейсов MSDK используется исключительно Unicode.

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

Win32-приложения настольных систем развертываются посредством запуска специальной программы — установщика, который является частью приложения. Современные приложения развертываются в системе путем использования программы AppStore, причем устанавливаться могут лишь те приложения, которые находятся в интернет-магазине Microsoft.

Для выполнения современного приложения используется AppContainer, который также называется песочницей. Он считывает каждое запущенное пользователем приложение, затем, используя механизмы безопасности операционной системы, запрещает приложению пользователя доступ к системным ресурсам. Для обеспечения доступа пользовательских приложений используются процессы-посредники, имеющие в свою очередь доступ к большей части системных ресурсов, например, файлам.

Компоненты

Рис. 2.2. Компоненты подсистемы NT

Подсистемы NT (рис. 2.2) состоят из следующих компонентов: процесса подсистемы, набора библиотек, в том числе библиотеки времени выполнения подсистемы, и поддержки в режиме ядра системы. Процесс подсистемы запускается диспетчером сеансов smss.exe и является службой. Диспетчер сеансов является первой запускаемой программой NT в пользовательском режиме. Запускается она по запросу CreateProcess из Win32 API. Windows поддерживает модель подсистем, основанную на Win32.

Функции операционной системы высокого уровня реализуются набором библиотек. Для обмена между процессами, которые используют подсистему, и самим процессом подсистемы набор библиотек использует заглушки процедур. Средства LPC (Local Procedure Call), работающие в режиме ядра, используются для вызовов процесса подсистемы и процедурных вызовов между процессами.

У процессов подсистем имеются собственные средства для системных вызовов ядра системы и основных служб, например, smss.exe или lsass. exe. В системных вызовах процессов подсистем содержатся межпроцессные средства, которые управляют потоками, виртуальными адресами, дескрипторами, исключениями, предназначенными для запуска программ, которые написаны для конкретной подсистемы.

Предыдущий раздел Оглавление Следующий раздел