임베디드/[ Embedded ]

[ Embedded ] 23. HAL(하드웨어 추상화 계층)

kim.svadoz 2020. 12. 2. 11:01
반응형

HAL

Hadrware Abstraction Layer (하드웨어 추상화 계층)

하드웨어 추상화 계층이란 컴퓨터 본체와 같은 물리적 하드웨어와 OS 같은 컴퓨터에서 실행되는 소프트웨어 사이의 추상화 계층이다.

이게 무슨말인가?

과거에는 운영체제의 커널이 하드웨어를 조작하기 위한 추상적 인터페이스를 제공하였다. System Call이라는 인터페이스가 있어서 하드웨어 I/O를 디바이스 노드에 실행하였다. 하드웨어 종류가 많지 않던 과거에는 이 방법이 나쁘지 않았다.

하지만 하드웨어 종류는 시간이 갈수록 늘어만 갔고 커널은 새로운 장치들을 인식하거나 변화된 상태를 인식하는데 많은 어려움이 따랐다. 그래서 하드웨어 차이에 상관이 없는 하드웨어 인식 방법을 개발하고자 하는 취지로 HAL은 연구되었다.

개발된 HAL의 작동원리는 이렇다. 어플리케이션들은 D-Bus IPC 라는 작동방식으로 하드웨어를 조작한다. 각각의 하드웨어는 각각 D-Bus 객체라고 저으이되어 고유의 주소를 식별자로 사용한다. HAL은 카메라가 연결되거나 DVD가 돌아가거나 노트북 덮개가 덥히는 등 하드웨어의 변화를 시그널로 감지하여 어플리케이션들이 그에 따라 반응할 수 있도록 한다.

HAL의 큰 장점은 하드웨어가 변겨오디더라도 소프트웨어가 작동할 수 있는 플랫폼을 제공한다는 것이다. 예를 들어, 워드에서 문서를 출력하고자 하는데 프린터가 바뀌었다고 하자. HAL이 없었으면 바뀐 프린터 드라이버에 대한 정보가 워드 프로그램에 다시 반영되어야 하므로 프린터 드라이버에 있는 내용을 다시 워드 프로그램에 또한 적용시켜야 했다.

마이크로소프트사에서는 Windows NT가 HAL에 기반하고 있다. HAL이 NT에 주는 장점은 NT의 휴대성을 높여주는 데 있다. 하드에어마다 HAL은 각각 다르게 작성되어야 한다.

하지만 하드웨어가 달라지더라도 HAL만 다시 작성하면 다른 부분의 운영체제는 특별히 다시 작성될 필요 없이 다시 컴파일만 하면 된다. 그래서 예전처럼 NT가 다른 CPU 구조에 인식되어야 할 때 용이했다.

현재 HAL에서 한 걸음 더 나아가 API가 사용된다. 소프트웨어는 이미 구성되어 있는 API르르 가지고 하드웨어를 작동시키면 된다.

API는 직접 또는 HAL을 통해 하드웨어를 컨트롤 한다. 예를 들어 GPS라는 API는 어플리케이션이 직접 하드웨어에 명령하지 않아도 하드웨어 정보를 얻을 수 있도록 도와준다.

=> 결국 같은 종류의 부품으로 다양하게 많은 종류의 하드웨어를 설계할 수 있어 직접 하드웨어에 접근하는 형태는 다소 복잡하다. 이 점을 해결하고 복잡한 내부를 감추고 일관성 있는 인터페이스를 제공하기위해, 같은 종류의 하드웨어에 대한 공통 명령어 집합으로 묶어두는 것을 하드웨어 추상화라고 하고 프로그래머가 여러 장비에서 개바랗는 것을 도와준다. 하드웨어 추상화 계층은 장비 제조사의 장비 규격에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의존하게 된다.

=> 소프트웨어가 수 많은 종류의 하드웨어 상에서 별 차이 없도록 동작할 수 있도록 하는 역할을 하며 OS의 커널 또는 장치 드라이버에서 호출된다.

=> 소프트웨어와 하드웨어 사이에서 소프트웨어가 PC의 시스템 메모리, CPU, 또는 기타 하드웨어 장치에 직접적으로 접근하는 것을 막아주며, 소프트웨어는 HAL을 통해 하드웨어의 종류에 관계없이 컴퓨터 자원을 사용하여 일관된 작업을 수행할 수 있게 된다.

# 안드로드에서 HAL이 중요한 이유
안드로이드에서 HAL은 자바 API 프레임워크에 대해 기기 하드웨어 기능을 사용할 수 있도록 표준 인터페이스를 제공한다. 여러 모듈 형태로 이루어져 있으며, 카메라 모듈, 블루투스 모듈 같은 유형으로 하드웨어 구성 요소의 인터페이스를 구현한다. 프레임워크 API가 하드웨어에 접근하기 위해 호출명령을 수행하면, 안드로이드 시스템에서 해당 하드웨어 구성요소에 대한 라이브러리 모듈을 불러온다. => *트레블의 기초가 된다.*
반응형