Унифицированный интерфейс драйвера
Унифицированный интерфейс драйвера (англ. Uniform Driver Interface, UDI) — снятый с поддержки проект, инициированный в 1998 году компанией Intel при поддержке Compaq, HP, IBM и Sun для высокопроизводительных серверов с целью определения переносимого интерфейса для драйверов устройств[1].
Описание
Унифицированный интерфейс драйвера (UDI) позволял обеспечивать переносимость драйверов устройств между различными аппаратными платформами и операционными системами без необходимости в изменении исходного кода драйвера. Благодаря участию множества производителей операционных систем, платформ и аппаратных средств, проект UDI претендовал на роль первого интерфейса, способного обеспечить такую масштабную портируемость. UDI предоставлял инкапсулирующую среду с чётко определёнными интерфейсами, изолировав драйверы от политик ОС и зависимостей от платформы и шин ввода-вывода. В принципе, это позволяло разрабатывать драйверы совершенно независимо от разработки операционной системы. Кроме того, архитектура UDI была призвана избавить драйверы от специфики платформы, такой как порядок байтов, особенности прямого доступа к памяти (DMA), поддержки многопроцессорности, реализации прерываний и топологии шин ввода-вывода[2].[3][4] В основе UDI лежат несколько ключевых технических принципов. Базовые спецификации обеспечивают полную переносимость на уровне исходного кода[2][5], а спецификации бинарных привязок гарантируют бинарную совместимость в пределах одной процессорной архитектуры[5]. Драйверы проектируются с использованием неявной синхронизации, что делает их потокобезопасными без применения явных блокировок[2]. Кроме того, архитектура обеспечивает независимость от расположения, поддерживая «горячую» замену устройств и работу в распределённых средах[2]. Механизм независимости от шин реализуется через абстракцию физического ввода-вывода, скрывающую низкоуровневые детали оборудования[2][3]. Для взаимодействия между программными модулями в UDI используется концепция «мета-языков». Они задают стандартизированную парадигму коммуникации для каждого класса устройств, строго определяя типы каналов связи, абстрактные операции и структуру управляющих блоков[2].
Сравнение с I2O
Проекты UDI и I2O имеют общую цель — создание стандартизированных независимых от операционных систем интерфейсов для драйверов устройств, однако они фокусируются на разных аспектах. UDI сосредоточен на независимости от операционных систем для хост-процессоров, тогда как I2O фокусируется на интеллектуальных архитектурах ввода-вывода и вопросах запуска драйверов на процессорах ввода-вывода (IOP). Эти проекты могут дополнять друг друга: например, через использование специальных UDI-мапперов, преобразующих запросы в сообщения I2O, или посредством реализации среды UDI непосредственно на IOP, что позволяет одним и тем же драйверам работать как на хост-процессоре, так и на процессоре ввода-вывода[6].
Критика
Хотя UDI потенциально мог быть полезен открытым операционным системам, таким как Linux и *BSD, давая возможность получать больше драйверов от производителей, некоторые сторонники открытого программного обеспечения и свободного ПО опасались, что UDI приведёт к распространению закрытых драйверов и сокращению поддержки открытого кода со стороны производителей, что подорвёт цель движений свободного и открытого ПО. Ричард Столлман (лидер движения за свободное ПО) утверждал, что этот проект не приносит пользы движению за свободное ПО[7].
Примечания
Литература
- The Free Software Movement and UDI — эссе Ричарда Столлмана, 1998 год.
- Leading items — статья LWN.net о UDI и Linux, 1998 год.
- We should all be supporting Project UDI. — редакционная статья Девена Корзина в поддержку Project UDI, 2005 год.
- The Uniform Driver Interface—why wasn’t it adopted? — блог-пост Майкла Трауша, 2010 год.
Ссылки
- Операционная система Acess2 — поддержка UDI