[인사이드 머신] - 마이크로아키텍쳐와 ISA
소프트웨어와 하드웨어 사이에 중재자
프로그래머는 하드웨어에 관계없이 프로그램을 만들고 실행한다.
하드웨어마다 설계도 특징도 다른데 이게 어떻게 가능한지 알아보자.
마이크로아키텍처와 ISA
- ISA ( 명령어 집합 아키텍처, instruction set architecture )
- 프로그래머 중심적인 프로그래밍 모델과 명령어 집합
- 마이크로아키텍처 ( microarchitecture ) 어떤 ISA 에 대한 특정 하드웨어 구현.
ISA 의 역사
- 컴퓨터 역사 초창기에는 프로그래머들이 각 하드웨어에 적합한 프로그램을 직접 만들었으며,
새로운 기계가 등장할 때마다 처음부터 모든 프로그램을 다시 짜야 했다.- 소프트웨어는 각 하드웨어에 고유하게 설계 되었다.
- 아래 그림의 소프트웨어는 다른 하드웨어에선 동작하지 못한다.
- 이후 마이크로아키텍처와 분리해서 일종의 추상화 계층(인터페이스)인 ISA 를 도입하여,
프로그래머는 실제 컴퓨터하드웨어 구현을 추상화한 정보를 통해 프로그램을 작성할 수 있게 되었다. - 명령어 집합의 설계 및 구현이 실제 컴퓨터의 하드웨어 구현과 분리됨에 따라,
특정 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 와 비교하여 같은 연산을 수행하기 위해서 훨씬 더 적은 명령어가 필요.
다음 주제
[인사이드 머신] 병렬화를 통한 성능 향상 - 파이프라인
프로세서 아키텍처 명령어가 지정하는 작업을 실제 수행하는 프로세서 내부에서 사용되는 명령어.