Шар апаратних абстракцій

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

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

Реалізація в ОС[ред. | ред. код]

У Windows NT[ред. | ред. код]

В операційних системах сімейства Windows NT HAL є невід'ємною частиною коду, що виконується в режимі ядра, міститься в окремому завантажуваному модулі, який можна завантажувати разом з ядром.[1] Це забезпечує можливість використання одного і того ж завантажувального модуля власне ядра ОС Windows NT на низці систем з різними архітектурами шин введення/виведення, управління переривань і таймерами. Приміром, робочі станції, засновані на SGI Intel x86, були не сумісні з IBM PC-сумісними робочими станціями, але завдяки HAL Windows NT міг запускатися на них. Аналогічним чином одне й те ж ядро Windows NT використовується і на сучасних системах з контролером переривань APIC, так і на застарілих системах без підтримки APIC.

В інших ОС[ред. | ред. код]

BSD, Mac OS X, Linux, CP/M, MS-DOS, Solaris і деякі інші портовані ОС також мають HAL, попри те, що він не розроблявся явно для виконання описаних вище функцій. Деякі системи, такі як Linux, мають можливість вставляти подібний шар, приміром Adeos, під час роботи. Ядро операційної системи NetBSD широко відомо наявністю чистого шару абстрагування від апаратних засобів (HAL), що дозволяє йому бути високо-портованим. Частиною цієї системи є uvm(9)[2]/pmap(9)[3], bus_space(9)[4], bus_dma(9)[5] та інші підсистеми. Популярні шини, які використовуються більш ніж на одній архітектурі, такі як ISA, EISA, PCI, PCI-E тощо, також абстраговані, дозволяючи написаним під них драйверам також бути високо-портованими з мінімальним зміною коду.

Реалізація в комп'ютерних архітектурах[ред. | ред. код]

«Екстремальний» приклад HAL може бути знайдений в архітектурі System/38 і AS/400. Більшість компіляторів для таких систем генерують абстрактний машинний код. Ліцензований Внутрішній Код (Licensed Internal Code) або ЛІК (LIC) переводить цей віртуальний машинний код у внутрішній (власний) код процесора, на якому він запускається, і виконує отриманий внутрішній код. (Виняток становлять компілятори, які самі генерують ЛІК; ці компілятори не доступні за межами IBM) Це було настільки успішним, що прикладне програмне забезпечення та програмне забезпечення операційної системи, розташовані над шаром ЛІК, скомпільовані на оригінальній архітектурі System/38 запускаються без будь-яких модифікацій і перекомпіляції на останніх системах AS/400. І це незважаючи на той факт, що апаратне забезпечення було кардинально змінено; принаймні три різні типи мікропроцесорів перебували у використанні.

Ієрархія[ред. | ред. код]

HAL є навіть нижчим рівнем в комп'ютерних мовах програмування, ніж API, тому що він взаємодіє безпосередньо з апаратним забезпеченням замість ядра системи, отже HAL вимагає менше процесорного часу ніж API. Мови високого рівня часто використовують HAL і API для взаємодії з компонентами нижчого рівня.

Особливості застосування[ред. | ред. код]

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

Примітки[ред. | ред. код]

  1. Windows NT Hardware Abstraction Layer (HAL). Microsoft. 31 жовтня 2006. Архів оригіналу за 3 березня 2012. Процитовано 25 серпня 2007.
  2. Архівована копія. Архів оригіналу за 17 липня 2013. Процитовано 17 січня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  3. Архівована копія. Архів оригіналу за 2 квітня 2015. Процитовано 17 січня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  4. Архівована копія. Архів оригіналу за 17 липня 2013. Процитовано 17 січня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  5. Архівована копія. Архів оригіналу за 17 липня 2013. Процитовано 17 січня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)

Посилання[ред. | ред. код]

Див. також[ред. | ред. код]