Аппаратная абстракция
Аппаратные абстракции — это наборы процедур в программном обеспечении , которые предоставляют программам доступ к аппаратным ресурсам через программные интерфейсы. всем устройствам определенного класса аппаратных устройств C Программный интерфейс позволяет получить доступ ко через идентичные интерфейсы, даже если C может содержать разные подклассы устройств, каждый из которых предоставляет свой аппаратный интерфейс.
Аппаратные абстракции часто позволяют программистам писать аппаратно -независимые высокопроизводительные приложения, предоставляя стандартные вызовы операционной системы (ОС) аппаратному обеспечению. Процесс абстрагирования частей аппаратного обеспечения часто выполняется с точки зрения ЦП . Каждый тип ЦП имеет определенную архитектуру набора команд или ISA. ISA представляет собой примитивные операции машины, доступные для использования программистами на ассемблере и авторами компиляторов. Одна из основных функций компилятора — позволить программисту написать алгоритм на языке высокого уровня, не заботясь об инструкциях, специфичных для процессора. Затем компилятор должен сгенерировать исполняемый файл для конкретного процессора. Тот же тип абстракции реализован в операционных системах, но API-интерфейсы ОС теперь представляют примитивные операции машины, а не ISA. Это позволяет программисту использовать операции уровня ОС (например, создание/удаление задач) в своих программах, сохраняя при этом переносимость на множество различных платформ.
Обзор [ править ]
Многие ранние компьютерные системы не имели какой-либо формы аппаратной абстракции. Это означало, что любой, кто пишет программу для такой системы, должен был знать, как каждое аппаратное устройство взаимодействует с остальной частью системы. Это было серьезной проблемой для разработчиков программного обеспечения, поскольку им нужно было знать, как работает каждое аппаратное устройство в системе, чтобы обеспечить совместимость программного обеспечения . Благодаря аппаратной абстракции программа не взаимодействует напрямую с аппаратным устройством, а сообщает операционной системе, что устройство должно делать, которая затем генерирует для устройства аппаратно-зависимую инструкцию. Это означало, что программистам не нужно было знать, как работают конкретные устройства, что делало их программы совместимыми с любым устройством.
Примером этого может быть абстракция «Джойстик». Устройство -джойстик , существует множество физических реализаций, доступно для чтения/записи через API, который могут использовать многие устройства, подобные джойстику. Большинство джойстиков могут сообщать направления движения. Многие джойстики могут иметь настройки чувствительности, которые можно настроить с помощью внешнего приложения. Абстракция джойстика скрывает детали (например, формат регистра, адрес I2C ) оборудования, поэтому программисту, использующему абстрактный API, не нужно понимать детали физического интерфейса устройства. Это также позволяет повторно использовать код, поскольку один и тот же код может обрабатывать стандартизированные сообщения из любой реализации, предоставляющей абстракцию «джойстика». «Подталкивание вперед» может осуществляться с помощью потенциометра или емкостного сенсорного датчика, который распознает жесты «смахивания», если они оба подают сигнал, связанный с «движением».
Поскольку физические ограничения (например, разрешение датчика, частота временного обновления) могут различаться в зависимости от аппаратного обеспечения, API мало что может сделать, чтобы скрыть это, кроме как предположить модель «наименьшего общего знаменателя». Таким образом, некоторые глубокие архитектурные решения реализации могут стать актуальными для пользователей конкретного экземпляра абстракции.
Хорошая метафора — абстракция транспорта. И езда на велосипеде, и вождение автомобиля являются транспортом. У них обоих есть общие черты (например, вы должны управлять) и физические различия (например, использование ног). Всегда можно указать абстракцию «ехать до» и позволить разработчику решить, что лучше — езда на велосипеде или вождение автомобиля. Функция «колесного наземного транспорта» абстрагирована и инкапсулированы детали «как управлять».
Примеры «абстракций» на ПК включают видеовход, принтеры, аудиовход и выход, блочные устройства (например, жесткие диски или флэш-накопитель USB ) и т. д.
В некоторых областях информатики, таких как операционные системы или встроенные системы, абстракции имеют немного другой внешний вид (например, операционные системы, как правило, имеют более стандартизированные интерфейсы), но концепция абстракции и инкапсуляции сложности является общей и глубокой.
Уровень абстракции оборудования находится под интерфейсом прикладного программирования (API) в стеке программного обеспечения, тогда как уровень приложения (часто написанный на языке высокого уровня) находится над API и взаимодействует с оборудованием путем вызова функций в API.
В операционных системах [ править ]
Уровень абстракции оборудования ( HAL ) — это абстракции , реализованный в программном обеспечении, между физическим оборудованием компьютера уровень и программным обеспечением , которое работает на этом компьютере. Его функция состоит в том, чтобы скрыть различия в оборудовании от большей части операционной системы ядра , чтобы не нужно было изменять большую часть кода режима ядра для работы в системах с различным оборудованием. В Microsoft Windows HAL по сути можно рассматривать как драйвер материнской платы, который позволяет инструкциям компьютерных языков более высокого уровня взаимодействовать с компонентами более низкого уровня, но предотвращает прямой доступ к оборудованию.
CP/M ( CP/M BIOS ), DOS ( DOS BIOS ), Solaris , Linux , BSD , macOS и некоторые другие портативные операционные системы также имеют HAL, даже если он явно не обозначен как таковой. Некоторые операционные системы, такие как Linux, имеют возможность вставлять их во время работы, например Adeos . Операционная система NetBSD широко известна тем, что имеет чистый уровень абстракции оборудования, что обеспечивает высокую переносимость. [1] Частью этой системы являются / , , и другие подсистемы. Популярные шины, которые используются более чем в одной архитектуре, такие как ISA , EISA , PCI , PCIe и т. д., также абстрагируются, что позволяет драйверам также быть легко переносимыми с минимальной модификацией кода.
Операционные системы, имеющие определенный HAL, легче переносить на другое оборудование. Это особенно важно для встраиваемых систем , работающих на десятках различных платформ.
Microsoft Windows [ править ]

Ядро Windows NT имеет HAL в пространстве ядра между оборудованием и исполнительными службами, которые содержатся в файле NTOSKRNL.EXE. [2] [3] под %WINDOWS%\system32\hal.dll . Это обеспечивает переносимость кода режима ядра Windows NT на различные процессоры с различной архитектурой блоков управления памятью и различные системы с различной архитектурой шины ввода-вывода; большая часть этого кода выполняется без изменений в этих системах при компиляции для набора инструкций, применимого к этим системам. Например, рабочие станции SGI на базе Intel x86 не были рабочими станциями, совместимыми с IBM PC , но благодаря HAL Windows 2000 . на них могла работать [4] [ не удалось пройти проверку ]
Начиная с Windows Vista и Windows Server 2008 , используемый HAL автоматически определяется во время запуска . [5]
AS/400 [ править ]
«Экстремальный» пример HAL можно найти в архитектурах System/38 и AS/400 , которые в настоящее время реализованы в операционной системе IBM i . Большинство компиляторов для этих систем генерируют абстрактный машинный код; Лицензионный внутренний код, или LIC, преобразует этот код виртуальной машины в собственный код для процессора, на котором он работает, и выполняет полученный собственный код. [6] (Исключением являются компиляторы, генерирующие сам LIC; эти компиляторы недоступны за пределами IBM.) Это было настолько успешным, что прикладное программное обеспечение и программное обеспечение операционной системы выше уровня LIC, которые были скомпилированы на исходном S / 38, работали без изменений и перекомпиляции. в новейших системах AS/400, несмотря на то, что базовое оборудование было существенно изменено; использовались как минимум три разных типа процессоров. [6]
Андроид [ править ]
Android представил HAL, известный как «интерфейс поставщика» (кодовое название «Project Treble») в версии 8.0 «Oreo» . Он абстрагирует низкоуровневый код от инфраструктуры ОС Android, и их необходимо сделать совместимыми для поддержки будущих версий Android, чтобы облегчить разработку обновлений прошивки. [7] До Project Treble Android полагался на различные нестандартизированные устаревшие HAL. [8]
Halium — это HAL на базе Android, используемый несколькими мобильными операционными системами, такими как Ubuntu Touch и LuneOS, для работы на смартфонах с предустановленной Android.
См. также [ править ]
- Базовая система ввода/вывода (BIOS)
- Единый расширяемый интерфейс прошивки (UEFI)
- Прошивка
- Расширенный интерфейс конфигурации и питания (ACPI)
- Дерево устройств
- Пакет поддержки совета директоров (BSP)
- ДевайсКит
- Комплект устройств Haiku
- ХАЛ (программное обеспечение)
- Аппаратно-зависимое программное обеспечение (HDS)
- Наноядро
- Пикоядро
- Защитное кольцо
Ссылки [ править ]
- ^ «Портативность и поддерживаемые аппаратные платформы» . Фонд NetBSD . Проверено 12 мая 2009 г.
- ^ «Уровень аппаратной абстракции Windows NT (HAL)» . Майкрософт . 31 октября 2006 г. Проверено 25 августа 2007 г.
- ^ Кастер, Хелен (1993), Внутри Windows NT , Microsoft Press , Bibcode : 1993iwn..book.....C
- ^ «Изменение уровня аппаратной абстракции в Windows 2000/XP – Smallvoid.com» . 15 января 2001 года . Проверено 18 сентября 2020 г.
- ^ Руссинович, Марк Э.; Соломон, Дэвид А.; Ионеску, Алекс (2008). Внутреннее устройство Windows: включая Windows Server 2008 и Windows Vista (5-е изд.). Редмонд, Вашингтон, США: Microsoft Press . п. 65. ИСБН 978-0-7356-2530-3 .
- ↑ Перейти обратно: Перейти обратно: а б Солтис, Фрэнк Г. (1997). Внутри AS/400: описание серии AS/400e (2-е изд.). Лавленд, Колорадо, США: Duke Press. ISBN 978-1-882419-66-1 .
- ^ «Проект Treble от Google решает одну из многих проблем, связанных с обновлениями Android» . Арс Техника . 12 мая 2017 года . Проверено 12 мая 2017 г. .
- ^ «Обычные и устаревшие HAL» . Проект Android с открытым исходным кодом .
Дальнейшее чтение [ править ]
- «Спецификация расширенных вычислений RISC» (PDF) . МИПС Технологии . п. 23 . Проверено 26 февраля 2013 г.
- Зильбершац, Авраам; Гэлвин, Питер Беар; Ганье, Грег (2002). Концепции операционной системы (6-е изд.). ISBN 0-471-41743-2 .