728x90
반응형

CPU의 마지막 이야기이다.

이전에 배운걸 기억해보면 CPU가 효과적으로 사용되려면 파이프라이닝이 하기 쉽게 생겨야 된다.

'파이프라이닝 하기 쉬운 명령어' 

먼저 CPU의 언어인 ISA(명령어집합구조)와 각기 다른 ISA를 기반으로 설계된 CISC와 RISC를 알아야 한다.

 

명령어 집합 구조(ISA; Instruction Set Architecture)


CPU가 이해할 수 있는 명령어들의 모음을 '명령어 집합' 또는 '명령어 집합 구조'라고 한다.

쉽게말해서 애플에서 만든 CPU를 인텔 CPU에 그대로 가져오게 되면

사용하는 어셈블리어(기계어)가 달라서 서로의 명령어를 이해할 수 없다.

즉, ISA가 다르다는 건 CPU가 다르다는 것이고 같은 소스 코드로 만들어진 프로그램이라도

ISA가 다르면 CPU가 이해할 수 있는 명령어도 어셈블리어도 달라진다.

따라서 ISA는 일종의 CPU의 언어인 셈이다.

ISA는 CPU가 이해하는 명령어에 따라 하드웨어 설계부터 레지스터 종류와 개수, 메모리 관리방법, 제어장치의 해석 방법 등 큰 영향을 미치기 때문에 중요하다

ISA는 크게 2가지가 있다.

  1. CISC
  2. RISC


CISC(Complex Instruction Set Computer)


'복잡한 명령어 집합을 활용하는 컴퓨터'를 의미 한다.

CISC는 다양하고 강력한 기능의 명령어 집합을 활용하기 때문에 명령어의 형태와 크기가 다양한

가변 길이 명령어를 활용한다. 메모리에 접근하는 주소 지정 방식도 다양해서 아주 특별한 상황에서 사용된다.

다양하고 강력하다는 것은 상대적으로 적은 수의 명령어로도 프로그램을 실행할 수 있다는 것을 의미한다.

이런 장점 덕분에 CISC는 메모리를 최대한 아끼며 개발해야 했던 옛 시절에 인기가 높았다.

하지만 그만큼 명령어가 복잡하고 다양한 기능을 제공하는 탓에 치명적인 단점도 많았다.

일단 실행되기까지의 시간이 일정하지 않았고, 명령어 하나를 실행하는 데에 여러 클럭 주기를 필요로 했다.

그래서 효율적으로 파이프라인이 명령어를 처리할수 없었다.

즉, 규격화되지 않은 명령어로 파이프라닝을 어렵게 만들기 때문에

높은 성능을 내기 위한 현대 CPU에서는 .......나가리다.

그리고 대다수의 명령어가 사용 빈도수가 낮고(예로 100개중 20개?정도만 사용 나머지는 불필요) 명령어 규격화가 어려워서 성장에는 한계가 있다.

그래서 나온것이 RISC다.

 

RISC(Reduced Instruction Set Computer)

CISC는 큰 교훈을 남겼다. 

  • 빠른 처리를 위해 명령어 파이프라인 중요
  • 원활한 파이프라이닝을 위해 '명령어는 짧게, 수행시간도 짧게, 그리고 규격화'
  • 어차피 쓰던 명령어만 쓰니까 자주 쓰이는 기본적인 명령어를 작고 빠르게 만들기

이런 원칙하에 RISC가 등장했다.

CISC와 달리 짧고 규격화된 명령어, 되도록 1클럭 내외로 실행되는 명령어 지향

즉, '고정 길이 명령어'를 활용한다.

메모리 접근 단순화, 최소화하는 대신 레지스터를 적극 활용한다.

그래서 CISC보다 레지스터를 이용하는 연산이 많다.

하지만 CISC보다 프로그램 하나를 실행시키기 위해서 많은 명령어가 필요하고

주소 지정 방식이 적다는 점도 있다.

두 가지 차이를 정리해보자.

 

 

CISC RISC
복잡하고 다양한 명령어 단순하고 적은 명령어
명령어 수 적음 명령어 수 많음
가변 길이 명령어 고정 길이 명령어
파이프라이닝 어려움 파이프라이닝 쉬움
다양한 주소 지정 방식 적은 주소 지정 방식
클럭이 많이 필요함 1클럭 내외로 명령어 수행

 

핵심

  • ISA는 CPU의 언어, 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속
  • CISC 복잡 , 다양, 가변 길이 명령어 집합 활용 
  • RISC 단순, 적은, 고정 길이 명령어 집합 활용

 

 

반응형

'컴퓨터공학(CS) 배우기 > 혼공 컴퓨터 구조 + 운영체제' 카테고리의 다른 글

[CS] 명령어 병렬 처리 기법  (0) 2023.04.10
[CS] CPU의 속도  (0) 2023.04.09
[CS] 인터럽트  (0) 2023.04.08
[CS] 명령어 사이클  (0) 2023.04.03
[CS] 레지스터  (0) 2023.04.02