Лекция 3. Представление об интерфейсах прикладного программирования
Интерфейс – это совокупность средств и правил, обеспечивающих логическое (программное) или физическое (аппаратное) взаимодействие устройств и компьютерной программы, а также взаимодействие пользователя и компьютера.
Можно сказать, что операционная система обеспечивает три типа интерфейса (взаимодействия, взаимосвязи):
аппаратный (точнее аппаратно-программный) интерфейс – взаимодействие программ (программного обеспечения) с различными устройствами компьютера (аппаратным обеспечением) и управление ими.
программный интерфейс – обеспечение эффективной работы и взаимодействия прикладных программ с операционной системой.
пользовательский интерфейс – совокупность средств, при помощи которых пользователь взаимодействует с различными программами и устройствами.
Виды пользовательского интерфейса: интерфейс командной строки (MSDOS, UNIX, Linux) - алфавитно-цифровой (текстовый), графический интерфейс Windows.
Программный интерфейс, это способ взаимодействия виртуальных устройств.
Различают:
- интерфейс разработчика приложений: набор стандартных методов, которые можно использовать для доступа к функциональности другой программы;
- междупрограммный интерфейс: возможность создавать данные в одних приложениях и переносить их в другие документы, созданные в других приложениях.
Пришло время приступить к техническому изучению Windows.
На рисунке показаны уровни операционной системы Windows. Под уровнями апплетов и графического интерфейса пользователя находятся интерфейсы программирования, на которых построены приложения. Как и в других операционных системах, они состоят в основном из библиотек кода (DLL), которые программы динамически используют для доступа к функциональным возможностям операционной системы. В Windows имеется также несколько интерфейсов программирования, которые реализованы как работающие в виде отдельных процессов службы. Приложения ведут обмен со службами пользовательского режима при помощи удаленных вызовов процедур (RPC).
Как показано на рисунке, подсистемы NT состоят из четырех компонентов: процесса подсистемы, набора библиотек, перехватчиков в CreateProcess, а также поддержки в ядре. Процесс подсистемы — это просто служба. Единственным его специальным свойством является то, что он запускается программой smss.exe (диспетчером сеансов); это та программа NT, которая первой запускается в пользовательском режиме — по запросу CreateProcess из Win32 или из соответствующего API другой подсистемы.
Хотя поддерживаются только оставшиеся подсистемы Win32, Windows по-прежнему поддерживает модель подсистем, включая процесс подсистемы Win32 csrss.exe.
В отличие от всех других операционных систем, Windows имеет набор системных вызовов, которые она может выполнять. Они реализованы на уровне исполняющего модуля NTOS, который работает в режиме ядра.
Большинство собственных системных вызовов NT работает с объектами режима ядра (в том числе файлами, процессами, потоками, конвейерами, семафорами и т. д.).
В таблице дан список некоторых поддерживаемых в Windows категорий объектов режима ядра. Позднее, при обсуждении диспетчера объектов мы дадим более подробную информацию по конкретным типам объектов.
Вызовы функций Win32 называются интерфейсом прикладного программирования Win32 (Win32 API). Эти интерфейсы раскрыты и полностью документированы. Они реализованы как библиотечные процедуры, которые заключают в оболочку собственные системные вызовы NT (используемые для выполнения задачи), либо (в некоторых случаях) выполняют эту задачу прямо в пользовательском режиме.
API поддерживает также многие функции для работы с графическим интерфейсом пользователя (в том числе все вызовы для управления графическим интерфейсом системы). Имеются вызовы для создания, уничтожения и использования окон, меню, панелей инструментов, строк состояния, полос прокрутки, диалоговых окон, значков (и множества других имеющихся на экране элементов), а также управления ими. Есть вызовы для рисования геометрических фигур, их закраски, управления палитрами используемых цветов, работы со шрифтами, размещения значков на экране. И наконец, есть вызовы для работы с клавиатурой, мышью и другими устройствами ввода, а также для аудио, печати и прочих устройств вывода.
Операции графического интерфейса пользователя работают напрямую с драйвером win32k.sys (при помощи специальных интерфейсов для доступа к этим функциям режима ядра из библиотек пользовательского режима). Поскольку эти вызовы не влекут за собой выполнения базовых системных вызовов в исполнительном модуле NTOS, мы больше не будем о них говорить.
Интерфейсы системных вызовов, предоставляемые диспетчером ввода-вывода, не очень отличаются от предлагаемых большинством других операционных систем. Основные операции: open, read, write, ioctl и close, но есть и другие операции: Plug-and-Play, управления энергопотреблением, установки параметров, сброса системных буферов и т. д
NtCreateFile используется для открытия существующих или новых файлов. Он предоставляет дескрипторы безопасности для новых файлов, описание требуемых прав доступа, дает создателю новых файлов некоторые функции управления выделением блоков. NtReadFile и NtWriteFile принимают описатель файла, буфер и длину. Они также принимают явное смещение файла и позволяют указать ключ для доступа к заблокированным диапазонам байтов в файле. Большая часть параметров относится к указанию того, какие методы следует использовать для сообщения о завершении ввода/вывода (возможно, асинхронного), — они описаны ранее.
Операционное окружение (операционная среда) набор интерфейсов, необходимый программам и пользователям для обращения к ОС с целью получить определенные сервисы.
К составу среды окружения обычно относятся: системные переменные, текущие пути к дискам (ОС поддерживает несколько дисков), точка монтирования каталога (для UNIX-подобных системах), связь стандартных потоков ввода-вывода с файловыми описателями или устройствами, ограничения на одновременное количество открытых файлов, набор прав, дисковые квоты - ограничения на объем оперативной памяти – загрузки процессоров и т.д.; значение показателей использования ресурсов, получаемых от родительского процесса.
Контрольные вопросы:
1. Что такое интерфейс пользователя?
2. Что такое программный интерфейс?
3. Каково назначение программного интерфейса?
4. Виды пользовательского интерфейса.
5. Что такое операционное окружение?
6. Состав среды окружения.