하드웨어 추상화

Hardware abstraction

하드웨어 추상화는 프로그래밍 인터페이스를 통해 프로그램에 하드웨어 자원에 대한 액세스를 제공하는 소프트웨어에서 일련의 루틴이다.프로그래밍 인터페이스는 C가 각각 다른 하드웨어 인터페이스를 제공하는 다른 장치 하위 클래스를 포함할 수 있더라도 하드웨어 장치의 특정 클래스 C에 있는 모든 장치에 동일한 인터페이스를 통해 접근할 수 있도록 한다.

하드웨어 추상화는 종종 프로그래머가 하드웨어에 표준 운영 체제(OS) 호출을 제공하여 장치 독립적인 고성능 애플리케이션을 작성할 수 있게 한다.하드웨어 조각을 추상화하는 프로세스는 CPU의 관점에서 이루어지는 경우가 많다. CPU의 각 유형에는 특정 명령 집합 아키텍처 또는 ISA가 있다.ISA는 조립 프로그래머와 컴파일러 작성자가 사용할 수 있는 기계의 초기 작동을 나타낸다.컴파일러의 주요 기능 중 하나는 프로그래머가 CPU별 지시사항에 신경 쓰지 않고도 고도의 언어로 알고리즘을 작성할 수 있도록 하는 것이다.그런 다음 CPU별 실행 파일을 생성하는 것이 컴파일러의 작업이다.운영체제에서도 같은 종류의 추상화가 만들어지지만, OS API는 이제 ISA가 아닌 기계의 원시적인 작동을 나타낸다.이를 통해 프로그래머는 다양한 플랫폼에 대한 이식성을 유지하면서 자신의 프로그램에서 OS 수준 운영(예: 태스크 생성/삭제)을 사용할 수 있다.

개요

많은 초기 컴퓨터 시스템들은 어떠한 형태의 하드웨어 추상화도 가지고 있지 않았다.이는 그러한 시스템에 대한 프로그램을 작성하는 모든 사람이 각 하드웨어 장치가 시스템의 나머지 부분과 어떻게 통신하는지 알아야 한다는 것을 의미했다.이것은 소프트웨어 개발자들에게 중요한 도전이었다. 왜냐하면 그들은 그 후 시스템의 모든 하드웨어 장치가 소프트웨어의 호환성을 보장하기 위해 어떻게 작동하는지 알아야 했기 때문이다.하드웨어 추상화를 통해 하드웨어 장치와 직접 통신하는 프로그램이 아니라, 기기가 해야 할 일을 운영체제에 전달하여 하드웨어 의존적 명령을 장치에 생성한다.이것은 프로그래머들이 특정 기기가 어떻게 작동하는지 알 필요가 없다는 것을 의미했고, 그들의 프로그램이 어떤 장치와 호환되도록 만들었다.

이것의 예는 "조이스틱" 추상화일 수 있다.물리적 구현이 많은 조이스틱 장치는 많은 조이스틱 유사 장치가 공유할 수 있는 API를 통해 읽기/쓰기 가능하다.대부분의 조이스틱 장치는 이동 방향을 보고할 수 있다.많은 조이스틱 장치는 외부 응용 프로그램에 의해 구성될 수 있는 민감도 설정을 가질 수 있다.조이스틱 추상화는 추상화된 API를 사용하는 프로그래머가 장치의 물리적 인터페이스의 세부사항을 이해할 필요가 없도록 하드웨어의 세부사항(예: 레지스터 포맷, I2C 주소)을 숨긴다.이것은 또한 동일한 코드가 "조이스틱" 추상화를 제공하는 모든 종류의 구현에서 표준화된 메시지를 처리할 수 있기 때문에 코드 재사용을 허용한다."전진"은 전위차계 또는 "스파이프" 제스처를 인식하는 용량성 터치 센서에서 나올 수 있으며, 둘 다 "움직임"과 관련된 신호를 제공한다.

물리적 한계(예: 센서 분해능, 임시 업데이트 주파수)는 하드웨어에 따라 다를 수 있으므로 API는 "최소 공통분모" 모델을 가정하는 것 외에 이를 숨기기 위해 거의 할 수 없다.그러므로 구현으로 인한 어떤 심층적인 구조 결정은 추상화의 특정 인스턴스화 이용자와 관련될 수 있다.

좋은 은유는 교통의 추상화다.자전거 타기와 자동차 운전 모두 교통수단이다.그들은 둘 다 공통점(예: 조향해야 한다)과 신체적 차이(예: 발 사용)를 가지고 있다.사람들은 언제나 추상적인 "drive to"를 명시할 수 있고, 구현자가 자전거 타기와 자동차 운전 중 어느 것이 가장 좋은지 결정하게 할 수 있다.「바퀴 달린 지상 전송」 기능을 추상화하고, 「운전법」의 상세 내용을 캡슐화한다.

PC의 "수축"의 예로는 비디오 입력, 프린터, 오디오 입력 및 출력, 블록 장치(하드 디스크 드라이브 또는 USB 플래시 드라이브) 등이 있다.

운영 체제나 임베디드 시스템과 같은 특정 컴퓨터 과학 영역에서는 추상화의 외관이 약간 다르지만(예를 들어, 운영 체제는 더 표준화된 인터페이스를 갖는 경향이 있다), 추상화와 복잡성의 캡슐화의 개념은 일반적이며 깊다.

하드웨어 추상화 계층은 소프트웨어 스택의 애플리케이션 프로그래밍 인터페이스(API) 아래에 위치하는 반면, 애플리케이션 계층(종종 높은 수준의 언어로 작성됨)은 API 위에 위치하며 API의 기능을 호출하여 하드웨어와 통신한다.

운영 체제

하드웨어 추상화 계층(HAL)은 컴퓨터의 물리적 하드웨어와 그 컴퓨터에서 실행되는 소프트웨어 사이의 소프트웨어에서 구현되는 추상화 계층이다.그것의 기능은 대부분의 운영 체제 커널과 하드웨어의 차이를 숨기는 것으로, 커널 모드 코드의 대부분을 다른 하드웨어를 가진 시스템에서 실행하기 위해 변경할 필요가 없다.Microsoft Windows에서 HAL은 기본적으로 마더보드의 드라이버로 간주될 수 있으며, 하위 레벨의 컴포넌트와 통신할 수 있는 상위 레벨의 컴퓨터 언어의 지시를 허용하지만 하드웨어에 직접 접속하는 것은 방지한다.

CP/M(CP/M BIOS), DOS(DOS BIOS), Solaris, Linux, BSD, macOS 및 일부 다른 휴대용 운영 체제도 HAL을 가지고 있다.Linux와 같은 일부 운영체제는 아데오스와 같이 실행하면서 하나를 삽입할 수 있는 기능을 가지고 있다.NetBSD 운영 체제는 휴대성이 뛰어난 하드웨어 추상화 계층을 가진 것으로 널리 알려져 있다.[1]이 시스템의 일부로서 /,pmap(9) 및 기타 서브시스템이 있다.ISA, EISA, PCI, PCIe 등 둘 이상의 아키텍처에 사용되는 인기 버스도 추상화돼 최소한의 코드 수정만으로 운전자의 이동성이 높다.

HAL이 정의된 운영 체제는 서로 다른 하드웨어에서 더 쉽게 이동할 수 있다.이는 수십 개의 다른 플랫폼에서 실행되는 임베디드 시스템에 특히 중요하다.

마이크로소프트 윈도

윈도 NT 커널은 NTOSKRNL 파일에 포함된 하드웨어와 실행 서비스 사이의 커널 공간에 HAL을 가지고 있다.%Windows%\system32\hal.dll 아래의 EXE[2][3].이를 통해 Windows NT 커널 모드 코드를 서로 다른 메모리 관리 장치 아키텍처와 서로 다른 I/O 버스 아키텍처를 가진 다양한 프로세서에 이식할 수 있다. 그러한 코드의 대부분은 해당 시스템에 적용되는 명령 집합에 대해 컴파일되었을 때 해당 시스템에서 변경 없이 실행된다.예를 들어 SGI Intel x86 기반 워크스테이션은 IBM PC와 호환되는 워크스테이션이 아니었지만 HAL로 인해 Windows 2000은 이 워크스테이션에서 실행될 수 있었다.[4]

윈도우즈 비스타윈도우즈 서버 2008 이후 사용되는 HAL은 시작 중에 자동으로 결정된다.[5]

AS/400

HAL의 "극한" 예는 현재 IBM i 운영 체제에서 구현된 시스템/38AS/400 아키텍처에서 찾을 수 있다.이러한 시스템에 대한 대부분의 컴파일러는 추상적인 시스템 코드를 생성하며, 라이센스 내부 코드 또는 LIC는 이 가상 시스템 코드를 실행 중인 프로세서의 네이티브 코드로 변환하여 결과 네이티브 코드를 실행한다.[6](이러한 예외는 LIC 자체를 생성하는 컴파일러로서, 그러한 컴파일러는 IBM 이외의 지역에서는 사용할 수 없다.) 이것은 너무나 성공적이어서, 원래의 S/38에 컴파일된 LIC 계층 위의 애플리케이션 소프트웨어와 운영 체제 소프트웨어는 수정 없이 최신 AS/400 시스템에 대한 재컴파일 없이 실행된다.기본 하드웨어가 극적으로 변경되었다; 적어도 세 가지 다른 유형의 프로세서가 사용되고 있다.[6]

안드로이드

안드로이드버전 8.0 "오레오"에 "벤더 인터페이스"(프로젝트 트레블"이라고 코딩된)라고 알려진 HAL을 도입했다.안드로이드 OS 프레임워크에서 로우레벨 코드를 추상화하며, 펌웨어 업데이트의 개발을 용이하게 하기 위해 향후 안드로이드 버전을 지원할 수 있도록 전진 호환이 이루어져야 한다.[7]프로젝트 Treble Android는 표준화되지 않은 다양한 레거시 HAL에 의존했다.[8]

참고 항목

참조

  1. ^ "Portability and supported hardware platforms". The NetBSD Foundation. Retrieved 2009-05-12.
  2. ^ "Windows NT Hardware Abstraction Layer (HAL)". Microsoft. 2006-10-31. Retrieved 2007-08-25.
  3. ^ Custer, Helen (1993), Inside Windows NT, Microsoft Press, Bibcode:1993iwn..book.....C
  4. ^ "Changing hardware abstraction layer in Windows 2000 / XP – Smallvoid.com". Retrieved 2020-09-18.
  5. ^ Russinovich, Mark E.; Solomon, David A.; Ionescu, Alex (2008). Windows Internals: Including Windows Server 2008 and Windows Vista (5 ed.). Redmond, Washington, USA: Microsoft Press. p. 65. ISBN 978-0-7356-2530-3.
  6. ^ a b Soltis, Frank G. (1997). Inside the AS/400: Featuring the AS/400e Series (2 ed.). Loveland, Colorado, USA: Duke Press. ISBN 978-1-882419-66-1.
  7. ^ "Google's "Project Treble" solves one of Android's many update roadblocks". Ars Technica. 12 May 2017. Retrieved 12 May 2017.
  8. ^ "Conventional & legacy HALs". Android Open Source Project.

추가 읽기