CPU의 언어인 ISA란 무엇인지 이해하고, 현대 CPU의 주요 설계 방식인 CISC와 RISC의 정의와 차이점에 대해 학습합니다.
'파이프라이닝 하기 쉬운 명령어'란 무엇일까요? 명령어가 어떻게 생겨야 파이프라인이에 유리할까요?
CPU의 언어인 ISA와 각기 다른 성격의 ISA를 기반으로 설계된 CISC와 RISC를 학습해 보겠습니다.
명령어 집합
명령어의 세세한 생김새, 명령어로 할 수 있는 연산, 주소 지정 방식 등은 CPU마다 조금씩 차이가 있습니다. CPU가 이해할 수 있는 명령어들의 모음을 명령어 집합 또는 명령어 집합 구조 (이하 ISA)라고 합니다. 즉 CPU마다 ISA가 다를 수 있다는 것입니다.
- ISA가 같은 CPU끼리는 서로의 명령어를 이해할 수 있지만, ISA가 다르면 서로의 명령어를 이해하지 못합니다. 이런 점에서 볼 때 ISA는 일종의 CPU인 언어인 셈입니다.
- 각기 다른 언어를 사용하는 나라들을 보면 사용하는 언어만 다른 게 아니라 언어에 따라 사람들의 가치관과 생활 양식도 다른 것을 볼 수 있습니다.
- ISA가 다르면 그에 따른 나비 효과로 많은 것이 달라집니다. 제어장치가 명령어를 해석하는 방식, 사용되는 레지스터 종류와 개수, 메모리 관리 방법 등 많은 것이 달라집니다.
- 우리가 실행하는 프로그램은 명령어로 이루어져 있습니다. ISA는 CPU의 언어임과 동시에 CPU를 비롯한 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속이라고도 볼 수 있습니다.
명령어 처리 기법들을 도입하기 위한 유리한 ISA는 무엇일까요? 현대 ISA의 양대 산맥인 CISC와 RISC에 대해 알아보겠습니다.
CISC
CISC는 Complex Instruction Set Computer의 약자입니다. 이를 그대로 해석하면 '복잡한 명령어 집합을 활용하는 컴퓨터'를 의미합니다. 여기서 '컴퓨터'를 'CPU'라고 생각해도 좋습니다. CISC란 이름 그대로 복잡하고 다양한 명령어들을 활용하는 CPU 설계 방식입니다. 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용합니다 메모리에 접근하는 주소 지정 방식도 다양해서 아주 특별한 상황에서만 사용되는 독특한 주소 지정 방식들도 있습니다.
이런 장점 덕분에, CISC는 메모리를 최대한 아끼며 개발해야 했던 시절에 인기가 높았습니다. CISC는 치명적인 단점이 있습니다. 워낙 복잡하고 다양한 기능을 사용하는 탓에 명령어의 크기와 실행되기까지의 시간이 일정하지 않습니다. 그리고 복잡한 명령어 때문에 명령어 하나를 실행하는 데에 여러 클럭 주기를 필요로 합니다.
하지만, CISC가 활용하는 명령어는 명령어 수행 시간이 길고 가지각생이기 때문에 파이플아니이 효율적으로 명령어를 처리할 수 없습니다. 명령어 파이프라인이 제대로 동작하지 않는다는 것은 현대 CPU에서 아주 치명적인 약점입니다. 현대 CPU에서 명령어 파이프라인은 높은 성능을 내기 위해 절대 놓쳐서는 안 되는 핵심 기술이기 때문입니다.
게다가 CISC가 복잡하고 다양한 명령어를 활용할 수 있다고는 하지만, 사실 대다수의 복잡한 명령어느 사용 빈도가 낮습니다. 명령어 집합이 다양하고 복잡한 기능을 지원하지만 실제로는 자주 사용되는 명령어만 쓰였다는 것입니다.
정리하면, CISC 명령어 집합은 복잡하고 다양한 기능을 제공하기에 적은 수의 명령으로 프로그램을 동작시키고 메모리를 절약할 수 있지만, 명령어의 규격하기가 어려워 파이프라이닝이 어렵습니다.
RISC
CISC의 한계가 우리들에게 준 교훈은 아래와 같습니다.
1. 빠른 처리를 위해 명령어 파이프라인을 십분 활용해야 한다. 원할한 파이프라이닝을 위해 '명령어 길이와 수행 시간이 짧고 규격화' 되어 있어야 한다.
2. 어차피 자주 쓰이는 명령어만 줄곧 사용된다. 복잡한 기능을 지원하는 명령어를 추가하기보다는 '자주 쓰이는 기본적이명령어를 작고 빠르게 만드는 것'이 중요하다.
이런 원칙 하에 등장한 것이 RISC입니다. RISC는 Reduced Instruction Set Computer의 약자입니다. 이름처럼 RISC는 CISC에 비해 명령어의 종류가 적습니다. CISC와는 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어를 지향합니다.
즉, RISC는 고정 길이 명령어를 활용합니다. 명령어가 규격화되어 있고, 하나의 명령어가 1클럭 내외로 실행되기 때문에 RISC 명령어 집합은 명령어 파이프라이닝에 최적화되어 있습니다.
RISC는 메모리 접근을 단순화, 최소화하는 대신 레지스터를 적극적으로 활용합니다. 그렇기에 CISC보다 레지스터를 이용하는 연산이 많고, 일반적인 경우보다 범용 레지스터의 개수도 더 많습니다.
이렇게 CPU의 언어인 ISA와 각기 다른 성격의 ISA 기반으로 만들어진 CPU 설계 방식인 CISC와 RISC에 대해 알아보겠습니다.
마무리
- ISA는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속입니다.
- CISC는 복잡하고 다양한 종류의 가변 길이 명령어 집합을 활용합니다.
- RISC는 단순하고 적은 종류의 고정 길이 명령어 집합을 활용합니다.
'취준' 카테고리의 다른 글
좋은 포트폴리오를 결정하는 기준 (0) | 2024.05.25 |
---|---|
[부스트캠프 웹.모바일] 수료생과 함께하는 부캠라디오 (0) | 2024.05.21 |
[컴퓨터 구조] 5-2 명령어 병렬 처리 기법 (0) | 2024.05.02 |
[컴퓨터 구조] 빠른 CPU를 위한 설계 기법 (1) | 2024.05.01 |
[컴퓨터 구조] Chapter 4-1. ALU와 제어장치 (0) | 2024.04.22 |