[System Programming] CISC vs RISC 그리고 Memory Mapped I/O vs I/O Mapped I/O

Geon·2023년 5월 19일
0

CS

목록 보기
9/9
post-thumbnail

CISC vs RISC

현재 수강중인 강의 '시스템 프로그래밍'에서는 CPU의 동작도 직접 코드로 구현해야 한다. 그럼 CPU를 구현하기 전에 CPU를 설계하는 방식에 대해 짚고 넘어가야 할 필요가 있다. 설계하는 방식은 크게 CISC, RISC로 나뉜다.

CISC
" 복잡 명령어 집합 컴퓨터(Complex Instruction Set Computer, CISC)는 복잡한 명령어 집합을 갖는 CPU 아키텍처이다. 축소 명령어 집합 컴퓨터(RISC)와는 반의어로 간주된다.
명령어가 복잡하기 때문에 명령어를 해석하는 데 시간이 오래 걸리며, 명령어 해석에 필요한 회로도 복잡하다. 보통 풍부한 어드레싱 기능을 갖추고 있어 명령의 직교성이 좋으며, 어느 어드레싱 모드에서도 임의의 연산을 수행할 수 있다. 연산에 대해서는 레지스터와 레지스터 연산, 레지스터와 메모리 연산, 메모리와 메모리 연산을 모두 갖추고 있는 것이 보통이다. 피연산자(operand)는 2개에서 3개까지 지정할 수 있는 경우가 많다. 즉, 메모리 1의 내용과 메모리 2의 내용의 논리곱을 취해 메모리 3에 넣는 일을 하나의 명령어로 수행할 수 있다." - 출처 : Wekipidia

RISC
"축소 명령어 집합 컴퓨터(Reduced Instruction Set Computer, RISC)는 CPU 명령어의 개수를 줄여 명령어 해석시간을 줄임으로써 개별 명령어의 실행속도를 빠르게 한 컴퓨터다. RISC의 중요한 목표는 명령어 파이프라인을 통해 개별 명령어의 실행속도를 높여 복잡 명령어 집합 컴퓨터 (CISC)에 비해 더 많은 명령어를 처리해야 하는 단점을 상쇄하는 것이다. RICS는 마이크로프로세서를 설계하는 방법 가운데 하나이며, RISC-V, SPARC, MIPS 등의 아키텍처에서 사용된다.
전통적인 CISC CPU에는 프로그래밍을 돕기 위한 많은 수의 명령어와 주소 모드가 존재했다. 그러나 그중에서 실제로 쓰이는 명령어는 몇 개 되지 않는다는 사실을 바탕으로, 적은 수의 명령어만으로 명령어 집합을 구성한 것이 RISC이다. 그래서, RISC는 CISC보다 구조가 더 단순하다. 복잡한 연산도 적은 수의 명령어들을 조합하는 방식으로 수행이 가능하다" - 출처 : Wekipidia

추가적으로 설명하자면 두 설계방식의 차이는 설계 목적, 명령어의 길이에서도 나타나는데, CISC 설계는 '하나의 명령어로 최대한 많은 작업이 가능하게 해야 한다'를 목적으로 두는 반면, RISC는 '프로그램의 길이가 늘어나더라도 하나의 명령어는 하나의 작업을 해야 한다'를 목적으로 두고 있다. 따라서 CISC는 명령어의 길이가 가변적이고, RISC는 고정적인 특징을 가진다. 즉, 간단히 이야기하면 CISC는 상대적으로 CPU의 명령어가 구체적, 다양하고 복잡하니 호환성이 높다는 장점을 가지지만, 그만큼 전력 소모가 크고 속도가 느리다는 단점을 가지는 설계 방식이고, RISC는 CPU의 명령어를 단순화, 최소화 했기에 전력 소모 효율과 속도가 뛰어나다는 장점을 가지지만 하드웨어쪽에서 단순하게 구현한 만큼 소프트웨어(컴파일러 등)쪽에서 많은 일을 해야 하기에 소프트웨어쪽의 크기와 복잡도가 늘어난다는 점, 호환성이 낮다는 점이 단점으로 작용하는 설계방식이다.

Memory Mapped I/O vs I/O Mapped I/O

우리가 컴퓨터 시스템을 설계할 때, CPU에서 I/O Device에 어떤 방식으로 접근할 건지에 대해서도 고려해 봐야 한다. 접근 방식은 크게 이 두가지 방식으로 나뉜다.

Memory Mapped I/O
Memory의 일부 공간을 I/O Port에 할당하고 이와 맵핑하여 CPU가 I/O Device에 직접적으로 접근하지 않고 메모리에 접근해서 간접적으로 I/O Device에 접근하는 방식이다. 이 방식을 사용하면 CPU는 다른 I/O Device들과 일일히 직접적으로 소통하는 회로를 놓을 필요가 없기에 하드웨어적으로 설계가 단순해지고, 논리적으로 I/O Device도 메모리 안에 있는 것으로 간주하기 때문에 이들에 접근할 때 메모리에 접근하는 명령어들을(Load나 Store 등) 이용하여 그대로 I/O Device에도 접근하여 CPU로직이나 명령어의 복잡성이 낮다는 특징을 가지는데, 이는 하드웨어의 단순화를 추구하는 RISC 설계방식과 맞아 떨어져 RISC 설계방식을 사용하는 시스템에서 주로 사용하는 접근방식이다. 단점은 I/O Device에 접근하려면 메모리를 한번 거쳐서 가야 하기 때문에 접근속도가 상대적으로 느리다는 것, CPU가 I/O Device에 볼 일이 있어도, 메모리에 볼 일 이 있어도 우선 메모리에 접근부터 해야하기 때문에 CPU와 메모리 사이의 데이터 버스가 혼잡해진다는 단점이 있다. (이 밖에도 과거에는 메모리의 일부를 I/O Port에 할당해야 한다는 점에서 메모리의 용량이 부족해진다는 단점이 있었지만, 메모리가 상상 이상으로 거대해진 요즘 시대에선 딱히 단점이라고 보긴 어렵다.)

I/O Mapped I/O
CPU가 각 I/O Device들에 개별적으로 접근하는 방식을 말한다. I/O Device들에 접근하는 회로와 명령어를 따로 정의를 해야한다는 점에서 구체적이고 다양한 명령어의 설계를 지향하는 CISC 설계방식과 맞아 떨어지기에 CISC 설계방식을 채택할때 주로 함께 채택되는 접근 방식이다. 메모리에 볼 일이 있을때는 메모리에만 접근하고, I/O Device에 볼 일이 있을때는 각 I/O Device에 따로 접근하기 때문에 주소 버스의 크기가 작은(Addressing 능력이 제한된) CPU에서 사용하면 훨씬 효율적이다.

profile
별에 별 지식 저장해놓고 꺼내먹기📚

0개의 댓글