컴퓨터구조와 운영체제

12. 명령어 집합 구조, CISC와 RISC

waterclean101 2023. 11. 13. 09:15

명령어 집합 구조, CISC와 RISC

명령어 병렬처리 기법(명령어 파이프라이닝)은 현대 CPU가 꼭 사용해야 되는 아주 중요한 핵심 기술이라고도 볼 수 있다. 그런데 명령어 파이프라이닝을 하기 유리하게 생긴 명령어가 있고 명령어 파이프라이닝에 불리하게 생긴 명령어가 있다. 그렇다면 명령어가 어떻게 생겨야지 명령어 파이프라이닝에 유리할까? 여기에 대해서 알아보기 위한 명령어 집합 구조.

 

명령어 집합

CPU마다 이해하는 명령어의 종류가 다른 경우가 있다. CPU 제조사별로도 만드는 CPU가 다르고 같은 제조사에서 만든 CPU라고 할지라도 명령어의 세세한 생김새나 연산 방식, 주소 지정 방식은 CPU마다 다른 경우가 있다.

명령어 집합 구조: CPU가 이해할 수 있는 명령어들의 모음.

인텔의 CPU가 이해할 수 있는 명령어들의 집합이 있고 아이폰 CPU가 이해할 수 있는 명령들의 집합이 있다. 인텔 데스크탑 컴퓨터에서 실행파일을 만들고 그 실행파일을 그대로 아이폰이나 맥북으로 옮겨서 특별한 설정 없이 바로 exe 파일을 실행하면 실행이 안된다. 왜냐하면 인텔 CPU에서 이해하도록 만들어진 실행파일, 명령어들의 모음을 아이폰이나 맥북의 입장에서는 이해할 수 있는 명령어가 아니기 때문에 즉, 명령어 집합 구조가 다르기 때문에.

마찬가지로 고급 언어와 저급 언어에 대해서 말했을 때 같은 소스 코드를 컴파일 하더라도 CPU의 종류에 따라서 어셈블리어의 종류로 달라질 수 있다고 했는데 명령어 집합이 다르기 때문.

이런 관점에서 보면 명령어 집합 구조는 CPU의 언어인 셈이다. 각기 다른 언어를 사용하는 나라들을 보면 사용하는 언어만 다른 게 아니라 언어에 따라서 사람들의 가치관이나 생활 양식도 달라지는 것을 볼 수가 있다. 높임말 문화 등. CPU도 마찬가지다. 명령어의 종류가 달라지면 많은 것들이 달라질 수가 있다. 명령어 해석하는 방식이나 레지스터의 종류, 그 개수, 파이프라이닝이 쉽거나 혹은 어렵거나 이런 것들이 아주 많이 달라진다. 이렇듯 명령어 집합에 따라서 CPU의 구조 나아가서 컴퓨터의 구조까지도 결정이 되기 때문에 명령어 집합 구조라고도 부른다.

명령어의 집합이 달라지면 그 명령어를 조금 더 효율적으로 실행할 수 있는 하드웨어 구조도 달라지기 때문에 명령어 집합 구조는 하드웨어 소프트웨어를 어떻게 이해해야 할지에 대한 약속이기도 하다.

 

CISC(Complex Instruction Set Computer, 시스크)

명령어 집합의 두 축 CISC와 RISC 중 CISC는 "복잡한 명령어 집합 컴퓨터"의 약자로, 말 그대로 다양하고 복잡한 명령어 세트를 가지는 컴퓨터 아키텍처를 나타낸다.

  • x86, x86-64는 CISC 기반 명령어 집합 구조
  • 복잡하고 다양한 명령어 형식: 복잡하고 다양한 명령어들을 활용. 한 개의 명령어가 여러 개의 마이크로 연산을 수행할 수 있다. 이로 인해 프로그래머가 상대적으로 적은 양의 명령어를 사용하여 복잡한 작업을 수행할 수 있다.
  • 멀티-사이클 연산: 하나의 명령어가 여러 사이클에 걸쳐 실행될 수 있다. 이는 복잡한 연산을 가능하게 하지만, 전체적인 속도는 느려질 수 있다.
  • 가변 길이 명령어: 명령어의 형태와 크기가 다양한 가변 길이 명령어를 활용
  • 명령어 파이프라이닝에 불리: 명령어 하나하나가 복잡하고 다양한 기능들을 제공하기 때문에 명령어의 개별적인 크기나 명령어 하나가 실행되기까지의 시간이 일정하지 않다. 하나의 복잡한 명령어를 실행하는데 여러 클럭 주기가 필요하다. 파이프라이닝이 잘 되려면 명령어가 실행돼야 되는 시간이 비교적 정형화되어 있어야 한다.

 

RISC (Reduced Instruction Set Computer):

RISC는 "간소화된 명령어 집합 컴퓨터"의 약자로, 작고 단순한 명령어 집합을 가지는 컴퓨터 아키텍처를 나타낸다.

  • 단순한 명령어: RISC 아키텍처는 간단하고 일관된 명령어 세트를 가진다. 명령어는 기본적인 동작만을 수행하며 복잡한 명령어를 지원하지 않는다.
  • 단일 사이클 연산: 대부분의 명령어들이 하나의 사이클 내에서 실행된다. 이는 전체적인 처리 속도를 향상시킨다.
  • 고정 길이 명령어: RISC 명령어는 고정된 길이를 가지며, 명령어를 해석하기가 더 쉽다.
  • 하드웨어 최적화: RISC 프로세서는 하드웨어 수행을 최적화하고 명령어 실행 시간을 줄이는 데 중점을 둔다.
  • 명령어 파이프라이닝: RISC 아키텍처는 명령어 파이프라이닝을 통해 병렬 처리를 향상시킨다.
  • ARM 아키텍처는 RISC의 대표적인 예로, 특히 모바일 및 임베디드 시스템에서 널리 사용된다.

 

CISC와 RISC의 비교

  • 성능 및 효율성: RISC는 일반적으로 더 빠르고 효율적이다. CISC는 복잡한 명령어로 인해 때때로 느려질 수 있다.
  • 용도: CISC는 오래된 일반 컴퓨팅 시스템에서 더 일반적이며, RISC는 저전력, 고성능이 필요한 모바일 및 임베디드 시스템에 주로 사용된다.
  • 프로그래밍 용이성: CISC는 프로그래머에게 더 친숙할 수 있지만, RISC는 컴파일러 최적화에 더 적합하다.