하드웨어 추상화 계층(HAL)

By 01/11/2018Windows Internal

하드웨어 추상화 계층(HAL)

  • Windows Server 2008

 

윈도우 설계의 중요한 요소 중 하나는 다양한 하드웨어 플랫폼간의 이식성이다. 하드웨어 추상화 계층(HAL)은 윈도우가 실행 중인 하드웨어 플랫폼에 대한 저수준 인터페이스를 제공하는 로드 가능한 커널 모드 모듈(Hal.dll)이다.

 

윈도우 내부 컴포넌트는 플랫폼 의존적인 정보가 필요할 때 하드웨어를 직접 액세스하는 것보다 사용자가 작성한 드라이버와 마찬가지로 HAL 루틴을 호출함으로써 이식성을 유지한다. HAL 루틴은 WDK에 문서화 되어 있으며 자세한 내용은 WDK를 참고 한다.

 

윈도우 비스타, 서버2008은 부트업 타임에 어떤 HAL을 사용해야 하는지를 탐지할 수 있으며 이전에 존재하던 문제(이전 버전에서 설치된 윈도우가 다른 시스템에서 부팅할 때 발생하는 문제)도 해결 되었다.

 

[x86 HAL 목록]

HAL 파일명 지원되는 시스템
Halacpi.dll 고급 구성 및 전원 인터페이스, APIC 지원이 없는 단일 프로세서 머신을 뜻한다.(어느 하나라도 있으면 시스템은 아래 HAL을 사용한다.)
Halmacpi.dll ACPI가 있는 고급 프로그램 가능 인터럽트 컨트롤러 APIC의 존재는 SMP지원을 뜻한다.

 

[x64 HAL 목록]

X64 머신에서는 오직 하나의 HAL (hal.dll) 이미지만 존재한다. 이는 프로세서가 ACPI와 APIC 지원을 필요로 한 이래 모든 x64 머신이 같은 메인보드 구성을 갖게 된 결과다. 따라서 ACPI가 없는 머신이나 표준 PIC가 있는 머신을 지원할 필요가 없다.

 

[실행중인 HAL 확인]

어떤 HAL이 실행 중인지 알아보기 위해서는 WinDbg로 커널 디버깅 세션을 열어 어떤 버전의 HAL이 실행 중인지 알아볼 수 있다. 심볼이 로드되어 있는지 확인(.reload)하고 lm vm hal 이라고 입력하면 실행 중인 것을 확인 할 수 있다.

 

 

[Ntoskrnl과 HAL 이미지 연관 관계 보기]

윈도우 SDK에 포함되어 있는 Dependency Walker 툴(depends.exe)을 사용해 커널과 HAL 이미지의 익스포트와 임포트 테이블을 조사함으로써 둘 사이의 연관 관계를 확인 할 수 있다.

 

  • Pshed.dll : 플랫폼 한정적인 하드웨어 오류 드라이버. PSHED는 플랫폼의 오류 핸들링 메커니즘의 세부 내용을 운영체제로부터 숨김으로써 윈도우 운영체제에 일관성 있는 인터페이스를 익스포트하여 하위 플랫폼의 하드웨어 오류 보고 기능 추상화를 제공한다.
  • Bootvid.dll : 부트 비디오 드라이버, Bootvid는 기동하는 중에 부트 텍스트와 부트 로고를 나타내기 위해 필요로 하는 VGA 명령에 대한 지원을 제공한다.
  • Kdcom.dll : 커널 디버거 프로토콜 통신 라이브러리
  • Ci.dll : 코드 무결성 라이브러리
  • Clfs.sys : 공통 로깅 파일 시스템 드라이버로 커널 트랜잭션 관리자에 의해 다른 것들 사이에서 사용된다.

 

자세한 내용은 Dependency Walker 도움말 파일(Depends,hlp)에 있다.

 

 

[참고자료]

Windows Internals

 

OS, Windows, 윈도우아키텍처, Windowsinternals, OS아키텍처, 윈도우서버, WindowsServer, 윈도우커널, 하드웨어추상화계층, HAL, sqlmvp, SQL Angeles

 

Leave a Reply

%d bloggers like this: