[컴퓨터구조] ch.8 중앙처리장치 (5) 간소화된 명령어 집합 컴퓨터
Mano의 컴퓨터시스템구조 제3판, 프로텍 미디어, 김종상 옮김 도서를 정리, 요약하는 글입니다.
1. 간소화된 명령어 집합 컴퓨터
- 복잡하고 많은 명령어를 가진 컴퓨터를 (complex instruction set computer)라고 부르며 CISC라 한다. 1980년대에는 메모리 참조가 흔하지 않으며 실행 속도가 빠른 소수의 간단한 명령어를 써서 성능을 높이는 간소화된 명령어 집합 컴퓨터(reduced instruction set computer)라고 하고 RISC이라 한다.
2. CISC 특징
- 컴퓨터의 명령어 집합을 설계할 때 기계어 구조뿐 아니라 고급 언어의 사용도 고려해야 한다. 고급 언어를 기계어 프로그램으로 바꾸는 일은 컴파일러가 한다. 이 컴파일 동작을 간소화시켜 컴퓨터의 성능을 높이는 것이 CISC를 사용하는 이유이다.
- 대표적인 특징은 다음과 같다.
(1) 많은 수의 명령어
(2) 몇몇 복잡한 명령어는 잘 쓰이지 않는다.
(3) 다양한 어드레싱 모드
(4) 가변 길이 명령 형식 : CISC은 모든 고급 언어 문장을 각각 하나의 기계 명령어에 대응되도록 하는 것이다. CISC은 명령어 형식의 길이가 가변적이다. 레지스터 간의 동작을 표시하는 명령어는 두 바이트로 구성되지만, 메모리를 참조하는 명령어는 다섯 바이트가 있어야 전체 명령어 코드를 나타낼 수 있다. 하나의 명령어가 그 컴퓨터의 워드에 맞지 않을 수 있어서 가변적인 길이를 가진 명령어들을 메모리 워드에 꼭 채워넣기 위해서는 워드에서 바이트 수를 세는 특별한 디코딩 회로가 필요하다.
(5) 메모리의 피연산자를 직접 처리하는 명령 : 피연산자가 모두 메모리에 있기 때문에 모든 메모리 참조가 필요하다. 많은 명령어와 어드레싱 모드를 구현하기 위해 많은 하드웨어가 필요하고 컴퓨터 계산 속도가 느려진다.
- 하지만 파이프라이닝은 불리하다는 단점이 있다.
3. RISC 특징
- RISC은 컴퓨터의 명령어 집합을 간소화하여 실행 시간을 줄이기 위한 것이다.
- 대표적인 특징은 다음과 같다.
(1) 상대적으로 적은 수의 명령어
(2) 상대적으로 적은 수의 어드레싱 모드. immediate나 relative모드 말고는 모두 간단한 레지스터 어드레싱을 사용한다.
(3) 메모리 참조는 load, store 명령에만 쓰인다. 두 가지의 메모리 참조 이외에는 레지스터 간의 동작들만 있다. load 명령에 의해 레지스터에 올라와있는 데이터들로만 수행되고 store로 메모리에 저장한다.
(4) 모든 동작은 CPU의 레지스터 안에서 수행된다. 많은 수의 레지스터가 중간 단계의 결과를 저장하거나 피연산자의 참조를 최적화하는 데 유용하다.
(5) 고정된 길이의 명령어 형식으로 디코딩이 간단하다.
(6) 단일 사이클의 명령어 실행
(7) 마이크로 프로그램된 제어보다는 하드와이어된 제어를 채택한다.
- RISC은 파이프라인 방법을 통해서 매 클럭 사이클마다 하나의 명령어(fetch, decode, excute)를 실행할 수 있다.
4. 중첩된 레지스터 윈도우
- 프로시저의 호출의 경우 레지스터 값을 저장하고 사용될 파라미터를 전달하며 서브루틴을 호출하는 명령어들이 생성된다. 복귀의 경우 이전의 레지스터 값을 복구하고 결과를 호출한 프로그램에게 전달하며 서브루틴으로부터 복귀하는 명령어들을 생성한다. 이 과정이 시간이 오래 걸리므로 레지스터 값의 저장과 복구 과정을 없애기 위해서 다수의 레지스터 묶음을 가지고 프로시저에게 하나씩의 레지스터 묶음을 할당하는 방법을 사용한다. 이게 중첩된 레지스터 윈도우 방식이다.
- 총 74개의 레지스터가 있는데 그 중 R9 ~ R0은 전역 레지스터로 모든 프로시저에게 공용이다. 남은 64개 중 A, B, C, D 4개의 프로시저에게 각각 10개씩 지역 레지스터를 주고, 인접 윈도우와 공유하는 레지스터를 6개씩 주었다. 프로시저 A와 D가 서로 공유하기 때문에 이 윈도우는 환형적으로 구성되어 있다.
- 지역 레지스터는 지역 변수를 위해 사용되고, 공통 레지스터는 파라미터 전달에 쓰인다. 프로시저 호출에 의해 포인터가 가리키고 있는 윈도우가 하나 증가되면서 다음 윈도우를 활성화한다.
- 예를 들어 A 프로시저가 B 프로시저를 호출하면, R31 ~ R26 공통 레지스터를 프로시서 B를 위한 파라미터로 저장한다. 프로시저 B가 복귀할 때 계산 결과를 레지스터 R31 ~ R26에 저장하고 이것을 프로시서 A의 레지스터 윈도우로 전달한다.
- 전역 레지스터의 수 = G
- 각 윈도우에서 지역 레지스터의 수 = L
- 두 윈도우에 공통인 레지스터의 수 = C
- 윈도우의 수 = W
- 윈도우 크기 = L + 2C + G → 지역 레지스터 + 공통 레지스터 2개 + 전역 레지스터
- 레지스터 파일 = (L + C)W + G → 전체 레지스터 개수를 의미하므로, (지역 레지스터 + 공통 레지스터 2개) * 윈도우 + 전역 레지스터