stringtranslate.com

Аппаратная абстракция

Аппаратные абстракции — это наборы процедур в программном обеспечении , которые предоставляют программам доступ к аппаратным ресурсам через программные интерфейсы. Программный интерфейс позволяет получить доступ ко всем устройствам определенного класса аппаратных устройств 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] В состав этой системы входят uvm(9)/ pmap(9), bus_space(9), bus_dma(9)и другие подсистемы. Популярные шины, которые используются более чем в одной архитектуре, такие как ISA , EISA , PCI , PCIe и т. д., также абстрагируются, что позволяет драйверам также быть легко переносимыми с минимальной модификацией кода.

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

Майкрософт Виндоус

Уровень аппаратной абстракции в архитектуре Windows NT.

Ядро 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]

АС/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.

Смотрите также

Рекомендации

  1. ^ «Портативность и поддерживаемые аппаратные платформы» . Фонд NetBSD . Проверено 12 мая 2009 г.
  2. ^ «Уровень аппаратной абстракции Windows NT (HAL)» . Майкрософт . 31 октября 2006 г. Проверено 25 августа 2007 г.
  3. ^ Кастер, Хелен (1993), Внутри Windows NT , Microsoft Press , Bibcode : 1993iwn..book.....C
  4. ^ «Изменение уровня аппаратной абстракции в Windows 2000/XP – Smallvoid.com». 15 января 2001 года . Проверено 18 сентября 2020 г.
  5. ^ Руссинович, Марк Э.; Соломон, Дэвид А.; Ионеску, Алекс (2008). Внутреннее устройство Windows: включая Windows Server 2008 и Windows Vista (5-е изд.). Редмонд, Вашингтон, США: Microsoft Press . п. 65. ИСБН 978-0-7356-2530-3.
  6. ^ аб Солтис, Фрэнк Г. (1997). Внутри AS/400: описание серии AS/400e (2-е изд.). Лавленд, Колорадо, США: Duke Press. ISBN 978-1-882419-66-1.
  7. ^ «Проект Treble от Google решает одну из многих проблем с обновлением Android» . Арс Техника . 12 мая 2017 года . Проверено 12 мая 2017 г. .
  8. ^ «Обычные и устаревшие HAL» . Проект Android с открытым исходным кодом .

дальнейшее чтение