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

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

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

В операційних системах сімейства 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, легше портуються на різне обладнання. Це особливо важливо для вбудованих систем, які повинні працювати на великій кількості різних платформ.

Виноски[ред.ред. код]

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

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