Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Аппаратные абстракции - это наборы программ в программном обеспечении, которые предоставляют программам доступ к аппаратным ресурсам через программные интерфейсы. Интерфейс программирования позволяет получить доступ ко всем устройствам в конкретном классе аппаратных устройств C через идентичные интерфейсы, даже если C может содержать разные подклассы устройств, каждый из которых предоставляет свой аппаратный интерфейс.

Аппаратные абстракции часто позволяют программистам писать независимые от устройств высокопроизводительные приложения, предоставляя аппаратным средствам стандартные вызовы операционной системы (ОС). Процесс абстрагирования аппаратных средств часто выполняется с точки зрения ЦП . Каждый тип ЦП имеет определенную архитектуру набора команд или ISA. ISA представляет собой примитивные операции машины, доступные для использования программистами на ассемблере и разработчиками компиляторов. Одна из основных функций компилятора - позволить программисту написать алгоритм на языке высокого уровня.не заботясь о специфичных для процессора инструкциях. Затем задача компилятора - создать исполняемый файл, специфичный для ЦП. Тот же тип абстракции используется в операционных системах, но API ОС теперь представляют примитивные операции машины, а не ISA. Это позволяет программисту использовать операции уровня ОС (например, создание / удаление задач) в своих программах, сохраняя при этом переносимость на множество различных платформ.

Обзор [ править ]

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

Примером этого может быть абстракция «Джойстик». Устройство джойстика , которое существует во многих физических реализациях, доступно для чтения / записи через API, который может совместно использоваться многими устройствами, подобными джойстику. Большинство устройств-джойстиков могут сообщать направления движения. Многие устройства-джойстики могут иметь настройки чувствительности, которые могут быть настроены внешним приложением. Абстракция джойстика скрывает детали (например, формат регистра, адрес I2C ) оборудования, так что программисту, использующему абстрагированный API, не нужно понимать детали физического интерфейса устройства. Это также позволяет повторно использовать кодпоскольку один и тот же код может обрабатывать стандартизованные сообщения из любой реализации, которая предоставляет абстракцию «джойстик». «Сдвиг вперед» может быть от потенциометра или от емкостного сенсорного датчика, который распознает жесты «смахивания», если они оба обеспечивают сигнал, связанный с «движением».

Поскольку физические ограничения (например, разрешение датчика, частота обновления во времени) могут различаться в зависимости от оборудования, API мало что может скрыть, кроме как путем принятия модели «наименьшего общего знаменателя». Таким образом, определенные глубокие архитектурные решения из реализации могут стать актуальными для пользователей конкретного экземпляра абстракции.

Хорошая метафора - это абстракция транспорта. И езда на велосипеде, и вождение автомобиля - это транспорт. У них обоих есть общие черты (например, вы должны управлять) и физические различия (например, использование ног). Всегда можно указать абстракцию «ехать до» и позволить разработчику решить, что лучше - езда на велосипеде или вождение автомобиля. Функция «колесный наземный транспорт» абстрагируется, а детали «как управлять автомобилем» инкапсулируются.

Примеры «абстракций» на ПК включают видеовход, принтеры, аудиовход и выход, блочные устройства (например, жесткие диски или флэш-накопители USB ) и т. Д.

В определенных областях информатики, таких как операционные системы или встроенные системы, абстракции имеют немного другой вид (например, операционные системы, как правило, имеют более стандартизованные интерфейсы), но концепции абстракции и инкапсуляции сложности являются общими и глубокими.

Уровень абстракции оборудования находится под интерфейсом прикладного программирования (API) в программном стеке, тогда как уровень приложения (часто написанный на языке высокого уровня) находится над API и взаимодействует с оборудованием, вызывая функции в API.

В операционных системах [ править ]

Уровень аппаратных абстракций ( HAL ) представляет собой уровень абстракции , реализованный в программном обеспечении, между физическим аппаратным в виде компьютера и программного обеспечения , который работает на этом компьютере. Его функция состоит в том, чтобы скрыть различия в оборудовании от большей части ядра операционной системы , так что большую часть кода режима ядра не нужно изменять для работы в системах с другим оборудованием. В Microsoft Windows HAL можно в основном рассматривать как драйвер для материнской платы и позволяет командам компьютерных языков более высокого уровня взаимодействовать с компонентами более низкого уровня, но предотвращает прямой доступ к оборудованию.

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

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

Microsoft Windows [ править ]

NT Windows , ядро имеет 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 . Большинство компиляторов для этих систем генерируют абстрактный машинный код; Лицензионный внутренний код, или LIC, переводит этот код виртуальной машины в собственный код для процессора, на котором он работает, и выполняет полученный собственный код. [6](Исключение составляют компиляторы, которые генерируют сам LIC; эти компиляторы недоступны за пределами IBM.) Это было настолько успешным, что прикладное программное обеспечение и программное обеспечение операционной системы выше уровня LIC, которые были скомпилированы на исходном S / 38, работали без изменений и без перекомпиляции в новейших системах AS / 400, несмотря на то, что базовое оборудование было радикально изменено; использовались по крайней мере три различных типа процессоров. [6]

Android [ править ]

Android представил HAL, известный как «интерфейс поставщика» (кодовое название «Project Treble») в версии 8.0 «Oreo» . Он абстрагирует низкоуровневый код от платформы ОС Android, и они должны быть совместимы с будущими версиями Android, чтобы упростить разработку обновлений прошивки. [7] Android HAL существовал еще раньше. [8]

См. Также [ править ]

  • Базовая система ввода / вывода (BIOS)
  • Единый расширяемый интерфейс микропрограмм (UEFI)
  • Прошивка
  • Расширенная конфигурация и интерфейс питания (ACPI)
  • Дерево устройств
  • Пакет поддержки платы (BSP)
  • DeviceKit
  • Комплект устройств Haiku
  • HAL (программное обеспечение)
  • Аппаратно-зависимое программное обеспечение (HDS)
  • Наноядро
  • Picokernel
  • Защитное кольцо

Ссылки [ править ]

  1. ^ «Переносимость и поддерживаемые аппаратные платформы» . Фонд NetBSD . Проверено 12 мая 2009 .
  2. ^ "Уровень абстракции оборудования Windows NT (HAL)" . Microsoft . 2006-10-31 . Проверено 25 августа 2007 .
  3. ^ Кастер, Хелен (1993), Inside Windows NT , Microsoft Press , Bibcode : 1993iwn..book ..... C
  4. ^ "Изменение уровня абстракции оборудования в Windows 2000 / XP - Smallvoid.com" . Проверено 18 сентября 2020 .
  5. ^ Руссинович, Марк Э .; Соломон, Дэвид А .; Ионеску, Алекс (2008). Внутреннее устройство Windows: включая Windows Server 2008 и Windows Vista (5-е изд.). Редмонд, Вашингтон, США: Microsoft Press . п. 65. ISBN 978-0-7356-2530-3.
  6. ^ a b Солтис, Фрэнк Г. (1997). Внутри AS / 400: серия AS / 400e (2-е изд.). Лавленд, Колорадо, США: Duke Press. ISBN 978-1-882419-66-1.
  7. ^ «Project Treble от Google решает одну из многих проблем с обновлением Android» . Ars Technica . Дата обращения 12 мая 2017 .
  8. ^ https://www.e-consystems.com/blog/system-on-module-SOM/android-hal-and-device-driver-architecture/

Дальнейшее чтение [ править ]

  • «Расширенная спецификация вычислений RISC» (PDF) . MIPS Technologies . п. 23 . Проверено 26 февраля 2013 .
  • Зильбершац, Авраам; Гэлвин, Питер Медведь; Гань, Грег (2002). Концепции операционной системы (6-е изд.). ISBN 0-471-41743-2.