소프트웨어와 하드웨어 사이에 중재자

프로그래머는 하드웨어에 관계없이 프로그램을 만들고 실행한다.
하드웨어마다 설계도 특징도 다른데 이게 어떻게 가능한지 알아보자.


마이크로아키텍처와 ISA

  • ISA ( 명령어 집합 아키텍처, instruction set architecture )
    • 프로그래머 중심적인 프로그래밍 모델과 명령어 집합
  • 마이크로아키텍처 ( microarchitecture ) 어떤 ISA 에 대한 특정 하드웨어 구현.

ISA 의 역사

  • 컴퓨터 역사 초창기에는 프로그래머들이 각 하드웨어에 적합한 프로그램을 직접 만들었으며,
    새로운 기계가 등장할 때마다 처음부터 모든 프로그램을 다시 짜야 했다.
    • 소프트웨어는 각 하드웨어에 고유하게 설계 되었다.
    • 아래 그림의 소프트웨어는 다른 하드웨어에선 동작하지 못한다.
  • 이후 마이크로아키텍처와 분리해서 일종의 추상화 계층(인터페이스)인 ISA 를 도입하여,
    프로그래머는 실제 컴퓨터하드웨어 구현을 추상화한 정보를 통해 프로그램을 작성할 수 있게 되었다.
  • 명령어 집합의 설계 및 구현이 실제 컴퓨터의 하드웨어 구현과 분리됨에 따라,
    특정 ISA 에서 작성된 프로그램은 해당 ISA 를 구현한 어느 컴퓨터에서든지 실행 가능하게 되었다.

software-before-isa 소프트웨어는 각 하드웨어에 고유하게 설계되었다.


ISA 계층

  • 하드웨어 계층도 아니고, 소프트웨어 계층도 아닌 개념상의 계층.
  • ISA 계층은 하드웨어 복잡도를 프로그래머에게 감추는 역할을 한다.
    • 즉 실제 하드웨어와 상관없이 프로그래머는 프로그래밍 모델에 맞춰 소프트웨어를 만들면
      ISA 가 이 소프트웨어와 하드웨어 사이에 중재자 역할을 하여 서로다른 하드웨어에서도 사용이 가능하게 해준다.

ISA ISA는 여러 세대의 하드웨어에 걸쳐, 소프트웨어에 일관된 인터페이스를 제공한다.


마이크로코드 엔진

  • 컴퓨터에서 ISA 추상화 계층을 사용할 수 있도록 하는 프로세서.
    • ISA 명령어를 칩 내부를 제어하는 일련의 기계 명령어로 변환.
  • 마이크로코드 프로그램을 저장하는 마이크로코드 ROM 과 이를 처리하는 수행 유닛으로 이루어져 있다.
  • 초기 마이크로코드 엔진의 큰 단점은 명령어를 직접 디코드하는 경우에 비해 속도가 느렸다.
  • ISA 는 각 하부 하드웨어에 의해 에뮬레이션되는 이상적인 컴퓨터 모델을 나타내며,
    프로그래머는 이러한 이상적인 모델을 통해 프로그램을 작성.
    • 이 경우 마이크로코드 프로그램만 다시 작성하면 새로운 하드웨어에서도 ISA 를 이전과동일하게 유지할 수 있다.


복잡한 하드웨어에서 복잡한 소프트웨어로

  • 마이크로코드 엔진에 따라 컴퓨터는 두가지로 나뉘게 된다.

RISC ( Reduced Instruction Set Computer )

  • 고속 수행을 중시했기 때문에 마이크로코드 엔진을 사용하지 않음.
    • 간단한 하드웨어, 복잡한 소프트웨어.
  • RISC 에서 ISA 는 직접 하드웨어로 구현될 수 있는 간단한 형태로 변환됨.
    • 하드웨어 대신 소프트웨어를 복잡하게 만듦으로써
      마이크로코드 엔진을 없애면서도 여전히 ISA 의 장점을 유지할 수 있었다.
  • RISC 는 명령어의 종류를 줄이고 각 명령어를 단순화했기 때문에,
    이전처럼 큰 마이크로코드 엔진 없이도 하드웨어상 바로 명령어 집합을 구현 가능.

CISC ( Complex Instruction Set Computer )

  • 마이크로코드 엔진에 기반.
    • 복잡한 하드웨어, 간단한 소프트웨어.
    • 다양한 명령어를 지원함으로써 프로그래머들을 편하게 만듦.
  • RISC 와 비교하여 같은 연산을 수행하기 위해서 훨씬 더 적은 명령어가 필요.


다음 주제

[인사이드 머신] 병렬화를 통한 성능 향상 - 파이프라인


프로세서 아키텍처 명령어가 지정하는 작업을 실제 수행하는 프로세서 내부에서 사용되는 명령어.