Слой аппаратных абстракций


Hardware Abstraction Layer (HAL, Слой аппаратных абстракций) — слой абстрагирования, реализованный в программном обеспечении, находящийся между физическим уровнем аппаратного обеспечения и программным обеспечением, запускаемом на этом компьютере. HAL предназначен для скрытия различий в аппаратном обеспечении от основной части ядра операционной системы, таким образом, чтобы большая часть кода, работающая в режиме ядра, не нуждалась в изменении при её запуске на системах с различным аппаратным обеспечением.

На персональных компьютерах HAL, по существу, может рассматриваться как драйвер материнской платы, позволяющий взаимодействовать инструкциям высокоуровневых языков программирования с низкоуровневыми компонентами, такими, как аппаратное обеспечение.

В операционных системах семейства Windows NT HAL является неотъемлемой частью кода, исполняемого в режиме ядра, находится в отдельном загрузочном модуле, загружаемом совместно с ядром.[1][2] Это обеспечивает возможность использования одного и того же загрузочного модуля собственно ядра ОС Windows NT на ряде систем с различными архитектурами шин ввода-вывода, управления прерываниями и таймерами.

К примеру, рабочие станции, основанные на SGI Intel x86, были не совместимы с IBM PC-совместимыми рабочими станциями, но благодаря HAL Windows NT мог запускаться на них. Аналогичным образом одно и то же ядро Windows NT используется как на современных системах с контроллером прерываний APIC, так и на устаревших системах без поддержки APIC.

Windows Vista и выше (Windows Server 2008 и выше для серверов) автоматически определяют, какой уровень HAL должен быть использован во время загрузки.[3]

BSD, macOS, Linux, Solaris, CP/M, MS-DOS и некоторые другие портируемые ОС также имеют HAL, несмотря на то, что он не разрабатывался явно для выполнения описанных выше функций. Некоторые системы, такие, как Linux, имеют возможность вставлять подобный слой, к примеру, Adeos  (англ.), во время работы. Ядро операционной системы NetBSD широко известно наличием чистого слоя абстрагирования от аппаратного обеспечения (HAL), что позволяет ему быть высокопортируемым. Частью этой системы являются uvm(9)/pmap(9), bus_space(9), bus_dma(9) и другие подсистемы. Популярные шины, которые используются более чем на одной архитектуре, такие, как ISA, EISA, PCI, PCI-E и др., также абстрагированы, позволяя написанным под них драйверам также быть высокопортируемыми с минимальным изменением кода.