베어 머신

Bare machine

컴퓨터 과학에서 베어머신(또는 베어메탈)은 컴퓨터가 논리 하드웨어 에서 명령을 직접 실행하는 을 말합니다.현대의 운영체제는 많은 서비스를 통합한 초급에서 오늘날의 복잡하고 매우 민감한 시스템까지 다양한 단계를 거쳐 발전했습니다.프로그램 가능한 컴퓨터의 개발 후(다른 프로그램을 실행하기 위해 물리적 변경이 필요하지 않음) 운영 체제의 개발 이전에는 시스템 소프트웨어 계층 없이 기계 언어를 사용하여 컴퓨터 하드웨어에서 순차적인 명령이 직접 실행되었습니다.이 접근방식은 현대 운영체제의 '맨머신'의 선구자라고 불립니다.현재는 일반적으로 시간이 중요한 레이텐시 요건이 있는 임베디드 시스템펌웨어에 주로 적용되지만 기존 프로그램은 운영체제에 오버레이된 런타임 시스템에 의해 실행됩니다.

이점

대부분의 경우 특정 애플리케이션에 대해 베어메탈 구현이 더 빠르게 실행되어 메모리 사용량이 줄어들고 전력 효율이 향상됩니다.이는 운영체제가 다른 프로그램과 마찬가지로 실행 시간과 메모리 공간이 필요하기 때문에 베어메탈에서는 더 이상 필요하지 않기 때문입니다.예를 들어 입력 및 출력을 포함하는 하드웨어 기능은 베어메탈 상에서 직접 액세스할 수 있지만 OS를 사용하는 동일한 기능은 콜을 서브루틴으로 라우팅해야 하므로 실행 시간과 [1]메모리가 소비됩니다.

단점들

특정 애플리케이션에서 베어메탈 프로그래밍은 제대로 작동하기 위해 더 많은 노력을 필요로 하며 운영 체제에서 제공하고 애플리케이션에서 사용하는 서비스를 필요에 따라 다시 구현해야 하기 때문에 더 복잡합니다.다음과 같은 서비스가 있습니다.

  • 시스템 부팅(필수)
  • 메모리 관리: 코드의 위치와 하드웨어 자원 및 주변기기에 관한 데이터 저장(필수)
  • 인터럽트 처리(있는 경우)
  • 태스크 스케줄링(어플리케이션이 여러 태스크를 수행할 수 있는 경우)
  • 주변기기 관리(있는 경우)
  • 오류 관리(필요한 경우 또는 필요한 경우)

베어메탈 프로그램의 디버깅은 다음과 같은 이유로 어렵습니다.

  • 소프트웨어 오류 알림이나 장애 관리는 구현 및 검증되지 않은 한 없습니다.
  • 구현 및 검증되지 않는 한 표준 출력은 없습니다.
  • 프로그램을 작성하는 기계는 프로그램을 실행하는 기계와 동일할 수 없으므로 대상 하드웨어는 에뮬레이터/시뮬레이터 또는 외부 장치입니다.이렇게 하면 베어메탈 프로그램을 대상에 로드(플래시)하고 프로그램 실행을 시작하고 대상 리소스에 액세스할 수 있는 방법을 설정해야 합니다.

베어메탈 프로그래밍은 일반적으로 Rust, C++, C, 어셈블리 언어 등 하드웨어에 가까운 언어를 사용하거나 소량의 코드나 매우 새로운 프로세서 기계 코드에도 [2]직접 사용합니다.이전의 모든 문제들은 필연적으로 베어메탈 프로그램이 거의 이식되지 않는다는 것을 의미합니다.

초기 컴퓨터

PDP-11과 같은 초기 컴퓨터는 프로그래머들이 기계 코드로 제공되는 프로그램을 RAM에 로드할 수 있게 했다.프로그램의 결과적인 동작은 조명으로 감시할 수 있으며 자기 테이프, 인쇄 장치 또는 스토리지에서 도출된 출력을 통해 감시할 수 있습니다.

임베디드 시스템

베어 머신 프로그래밍은 임베디드 시스템에서 일반적인 관행으로 남아 있습니다.이 시스템에서는 마이크로 컨트롤러 또는 마이크로 프로세서가 개별 운영 체제를 로드하지 않고 단일 목적 소프트웨어로 직접 부팅되는 경우가 많습니다.이러한 임베디드 소프트웨어는 구조가 다양할 수 있지만, 가장 단순한 형태는 무한 메인 루프(infinite main loop)로 구성되며, 입력 확인, 액션 실행 및 출력 쓰기를 담당하는 서브루틴을 호출합니다.

발전

베어 머신을 사용하는 접근방식은 운영체제 개발을 가속화하는 새로운 아이디어의 기반을 마련했습니다.

이 접근방식에서는 다음과 같은 필요성이 강조되었습니다.

  • 코드와 데이터를 편리하게 입력할 수 있는 입출력(I/O) 장치:
    • 키보드와 같은 입력 장치가 생성되었습니다.초기 컴퓨터가 종종 독특하고 둔하고 복잡한 입력 장치를 가지고 있었기 때문에, 이러한 것들은 필요했다.

예를 들어, 프로그램은 디바이스 전면 패널에 있는 일련의 토글 스위치를 사용하여 수동으로 PDP-11에 로드되었습니다.키보드는 이러한 빈티지한 입력 장치보다 훨씬 우수합니다. 전환 스위치를 사용하여 기계에 입력하는 것보다 코드나 데이터를 입력하는 것이 훨씬 빠르기 때문입니다.키보드는 브랜드나 가격에 관계없이 나중에 거의 모든 컴퓨터에서 표준이 되었습니다.

    • 컴퓨터 모니터와 같은 출력 장치는 나중에 널리 사용될 것이며, 오늘날까지도 여전히 사용되고 있다.컴퓨터 상태를 나타내는 Altair 8800의 조명 배열과 같은 이전의 출력 장치보다 훨씬 편리하다는 것을 증명했습니다.

컴퓨터 모니터는 프로그램의 출력을 사용하기 쉽게 표시할 수도 있습니다.예를 들어 컴퓨터 하드웨어의 상태를 이해하기 위해서는 특정 초기 컴퓨터와 조명 배열로 구성된 디스플레이 시스템에 대해 잘 알고 있어야 합니다.이와는 대조적으로, 읽을 수 있는 사람은 누구나 프로그램이 실행되고 있는 컴퓨터의 하드웨어에 대해 알 필요 없이 최신 시스템에서 잘 설계된 사용자 인터페이스를 이해할 수 있어야 합니다.

  • 비휘발성 메모리에 프로그램을 저장하기 위한 보다 빠르고 저렴하며 널리 사용 가능한 보조 스토리지 장치.이것은 컴퓨터를 유용하게 사용하기 위해 손으로 코드를 입력해야 하는 번거로움이 있었기 때문에 시스템이 컴퓨터를 휘발성 메모리에 저장하기 때문에 재부팅할 마다 손실됩니다.
  • 편리한 고급 언어 및 해당 기계 코드에 대한 고급 언어의 번역자 요구 사항.
  • 링크 라이브러리 모듈을 링크하는 링커. 사용자가 작성하거나 시스템에서 이미 사용할 수 있습니다.
  • 로더: 세컨더리 스토리지에서 RAM으로 실행 파일을 로드합니다.
  • 프로그램에 의해 생성되는 출력의 하드 카피를 작성하기 위한 프린터등적절한 I/O 디바이스.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Gordon, Abel; Amit, Nadav; Har'El, Nadav; Ben-Yehuda, Muli; Landau, Alex; Schuster, Assaf; Tsafrir, Dan (2012). "ELI". ACM SIGPLAN Notices. 47 (4): 411–422. doi:10.1145/2248487.2151020.
  2. ^ https://arobenko.gitbooks.io/bare_metal_cpp/content/