CISC 와 RISC 차이점

 

CISC 와 RISC 차이점

CISC는 메모리가 귀한 옛날에 탄생한 모델입니다. 그래서 최대한 작은 공간에 많은 뜻을 함축해야 했습니다. x86은 1바이트로도 명령을 표현할 수 있습니다. 반면, 최고 17바이트까지 길어질 수도 있다. 평균적으로 x86 코드는 작은 공간에 담을 수 있습니다. 대표적으로 x86에는 스택(stack) 메모리 공간을 직접 조작하는 push/pop 같은 명령어가 지원됩니다. 프로그램은 함수 호출을 관리하기 위한 정보(activation frames)나 지역 변수를 스택이라는 일종의 연습장과 같은 메모리에 쓰고 읽으면서 계산합니다. x86은 이것을 push/pop으로 간단하게 처리할 수 있습니다. 스택에 어떤 데이터를 넣고(push) 뽑는(pop) 것이 명령어 하나로 됩니다. 반면, RISC는 이런 함축적인 명령이 보통 없고 명시적으로 처리해야 합니다. 직접 스택 꼭대기를 가리키는 스택 포인터(sp)를 바꾸고 그 자리에 데이터를 이동하는 명령을 지시해야 합니다.

주소 모드(addressing mode)의 단순함과 복잡함도 두 명령어 구조의 뚜렷한 특징입니다. 주소 모드란 명령어 속에 포함된 피연산자를 어떻게 해석할지를 결정합니다. 가장 큰 차이는 CISC는 피연산자로 메모리 주소가 바로 올 수 있지만, RISC는 레지스터만 올 수 있습니다. 소스 2-2의 “A += 7” x86 코드를 보면 피연산자와 계산 결과의 목적지로 바로 변수 A의 주소가 담겨 있었습니다. 반면, RISC는 이런 형식을 허용하지 않고 반드시 레지스터를 거치도록 합니다.

 

이렇게 RISC는 피연산자에 메모리 주소가 바로 올 수 없고, 레지스터만 올 수 있어 주소 모드가 상당히 단순합니다. 여기서 오해하지 말아야 할 것은 CISC로도 얼마든지 RISC 형식으로 코드를 만들어낼 수 있습니다. 방금 위에서 본 RISC 형식은 당연히 CISC로도 표현할 수 있습니다. 또, 착각하지 말아야 할 것은 비록 CISC 명령에 바로 메모리 주소가 온다 하더라도 프로세서가 직접 메모리 주소를 대상으로 바로 연산을 하는 것이 아닙니다. 정말 그렇게 만들 수도 있지만, 현대 프로세서들은 그렇지 않습니다. 
 
주소 모드는 매우 빈번히 등장하는 배열 접근 방식도 정의합니다. 배열 변수에 접근하려면 반드시 ‘기준점 + 변위’와 같은 주소 계산이 필요합니다. 예를 들어, 정수 배열 A의 10번째 원소에 접근하려면 보통 A[10]처럼 쓰는데, 이것은 배열 A의 기준점 주소에 변위인 10*sizeof(int)를 더한 값에 접근한다는 이야기입니다. RISC는 방금 말한 ‘기준점 + 변위’처럼 비교적 단순한 메모리 형태만 지원합니다. 반면, x86에서는 ‘기준점 + 변위 + 인덱스*스케일’과 같은 복잡한 형태를 지원합니다. 따라서 x86용 컴파일러는 더 짧은 명령어 생성이 가능합니다.

CISC와 RISC는 그 설계 철학에 차이가 있습니다. CISC는 컴퓨터 프로그램의 복잡함을 하드웨어가 도맡아 처리합니다. 복잡한 수학 함수를 지원하기도 하고 메모리 주소를 바로 피연산자로 받을 수도 있습니다. 과거 프로그래머들이 직접 x86으로 작업을 많이 했기에 이런 기능은 유용했습니다. 그러나 RISC는 하드웨어의 복잡함을 일부 소프트웨어, 즉 컴파일러로 넘겼습니다. 이제는 기계어로 프로그래밍하는 경우는 드물고, 컴파일러가 똑똑히 번역해주기에 굳이 ISA를 다양하게 제공할 필요가 없게 되었습니다. 이렇게 하드웨어의 복잡함을 덜어서 절약한 트랜지스터 수를 RISC는 성능 향상에 투자할 수 있었습니다. 대표적으로 RISC의 범용 목적 레지스터 개수는 CISC보다 많습니다. x86은 8개, x86-64는 16개만 지원하지만 대부분 RISC 구조는 32개 이상의 레지스터를 제공합니다. 결국, 프로그램을 빠르게 실행해야 한다는 목적은 같지만, 하드웨어와 소프트웨어가 어떻게 일을 분담하고, 또 어떻게 서로 소통하느냐는 문제를 RISC와 CISC는 다르게 접근하는 것입니다.

프로세서 내부를 이해하려면 가장 먼저 프로세서가 쓰는 언어, ISA를 이해해야만 합니다. 마찬가지로 프로세서를 만든다고 할 때도 가장 먼저 ISA부터 설계할 것입니다. 이제는 CISC와 RISC의 경계가 모호해졌음도 알았습니다. 더 자세히 기계어에 대해 알고 싶으면 흔히 전산학과에서 개설되는 시스템 프로그래밍과 같은 수업 자료를 살펴볼 것을 권합니다. 아니면 AMD, IBM, 인텔 같은 회사가 제공하는 ISA 문서를 보는 것도 매우 좋습니다.

반응형