CPU 구조와 명령어 실행
CPU 구성, 주요 레지스터, 명령어 사이클, 명령어 형식과 RISC·CISC를 이해한다.
1. 프로그램 내장 방식
폰 노이만 구조는 명령어와 데이터를 같은 기억장치에 저장하고 프로그램 카운터가 가리키는 명령어를 순서대로 인출해 실행한다. 명령어와 데이터가 같은 통로를 공유해 병목이 발생할 수 있다.
2. CPU 구성
- ALU: 산술·논리·시프트·비교 연산
- 제어장치: 명령어 해독과 제어신호 생성
- 레지스터: CPU 내부의 빠른 임시 저장장치
- 내부 버스: 데이터·주소·제어 정보 전달
3. 주요 레지스터
| 레지스터 | 역할 |
|---|---|
| PC | 다음에 인출할 명령어 주소 |
| IR | 현재 실행할 명령어 |
| MAR | 접근할 메모리 주소 |
| MDR/MBR | 메모리에서 읽거나 쓸 데이터 |
| ACC | 연산 결과 임시 저장 |
| SP | 스택의 최상단 위치 |
| PSW/상태 레지스터 | 부호·제로·캐리·오버플로·모드 등 상태 |
4. 명령어 사이클
- 인출: PC 주소의 명령어를 메모리에서 읽어 IR에 저장한다.
- 해독: opcode와 operand 형식을 해석한다.
- 간접·피연산자 인출: 필요한 경우 실제 주소와 데이터를 구한다.
- 실행: ALU·메모리·입출력 동작을 수행한다.
- 인터럽트 확인: 처리할 인터럽트가 있으면 상태를 저장하고 ISR로 이동한다.
인출 과정의 전형적 마이크로연산은 다음과 같이 표현할 수 있다.
MAR ← PC
MDR ← M[MAR]
IR ← MDR
PC ← PC + 명령어 길이
5. 명령어 형식
명령어는 opcode와 주소·레지스터·즉시값 등의 operand 필드로 구성된다.
- 0주소: 스택 기반, 피연산자 주소 생략
- 1주소: 누산기 사용
- 2주소: 한 피연산자 위치에 결과 저장
- 3주소: 두 피연산자와 결과 위치를 별도 지정
주소 수가 많으면 한 명령으로 표현하기 쉽지만 명령어 길이가 길어진다.
6. RISC와 CISC
| 항목 | RISC | CISC |
|---|---|---|
| 명령어 | 단순·규칙적 | 복잡·다양 |
| 길이 | 고정 길이 경향 | 가변 길이 가능 |
| 메모리 접근 | load/store 중심 | 메모리 피연산 명령 다수 가능 |
| 제어 | 하드와이어드 경향 | 마이크로프로그램 경향 |
| 파이프라인 | 상대적으로 유리 | 해독이 복잡할 수 있음 |
실제 현대 CPU는 두 특징을 혼합하므로 표는 전형적인 비교로 이해한다.
7. ISA와 마이크로아키텍처
ISA는 소프트웨어가 볼 수 있는 명령어, 레지스터, 주소형식, 예외 모델의 계약이다. 마이크로아키텍처는 같은 ISA를 파이프라인 깊이, 캐시, 실행 유닛, 분기예측 등으로 어떻게 구현하는지에 관한 것이다. 같은 ISA 프로그램이 서로 다른 CPU에서 실행될 수 있지만 성능과 내부 동작은 다를 수 있다.
8. 데이터패스와 제어신호
단순한 명령 ADD R1, R2, R3은 개념적으로 다음 마이크로동작을 거친다.
A ← Reg[R2]
B ← Reg[R3]
ALUOut ← A + B
Reg[R1] ← ALUOut
제어장치는 레지스터 읽기 선택, ALU 연산, 목적 레지스터, 쓰기 활성화 신호를 만든다. 하드와이어드 제어는 조합·순서회로로 신호를 직접 생성해 빠른 경향이 있고, 마이크로프로그램 제어는 제어 메모리의 마이크로명령을 사용해 복잡한 명령 구현과 변경이 용이한 경향이 있다.
9. CPU 성능식
CPU time = Instruction Count × CPI × Clock Cycle Time
= Instruction Count × CPI / Clock Rate
프로그램 A가 10억 명령, 평균 CPI 1.5, 클록 3GHz라면 CPU 시간은 10^9×1.5/(3×10^9)=0.5초다. 클록 주파수만 높아도 CPI나 명령 수가 증가하면 빨라지지 않을 수 있다.
속도향상은 기존 실행시간 / 개선 실행시간으로 계산한다. MIPS는 명령 복잡도가 다른 ISA·프로그램 비교에서 오해를 낳을 수 있으므로 실제 실행시간을 우선한다.
10. 명령어 필드 비트 계산
32비트 고정 길이 명령어가 opcode 6비트, 레지스터 필드 3개를 포함하고 레지스터가 32개라면 각 레지스터 필드는 5비트다. 남은 즉시값은 다음과 같다.
32 - 6 - 3×5 = 11비트
11비트 signed 즉시값의 범위는 -1024~1023이다. 주소 범위를 넓히기 위해 여러 명령어 형식, PC-relative 변위, 상위 즉시값 조합 등을 사용한다.
11. Endianness와 정렬
32비트 값 0x12345678을 주소 100부터 저장하면 다음과 같다.
주소 100 101 102 103
big-endian 12 34 56 78
little 78 56 34 12
엔디언은 바이트 순서이며 한 바이트 내부 비트 순서를 뜻하지 않는다. 정렬된 접근은 데이터 크기의 배수 주소를 요구하거나 선호할 수 있다. 비정렬 접근은 일부 ISA에서 예외가 나거나 여러 메모리 접근으로 느려질 수 있다.
12. 명령어 인출·실행 세부 추적
메모리 M[100]=LOAD R1,[500], PC=100이라면 인출 후 PC는 명령 길이만큼 증가하고 IR에는 명령어가 들어간다. 실행 단계에서 주소 500의 데이터를 읽어 R1에 저장한다. 명령어 인출 메모리 접근과 피연산자 데이터 접근을 구분한다.
인출: MAR←PC, MDR←M[MAR], IR←MDR, PC←PC+L
실행: MAR←500, MDR←M[MAR], R1←MDR
13. 예외·특권 명령과 상태 레지스터
메모리 관리 설정, 인터럽트 마스크 변경, 입출력 제어 등은 보통 특권 명령이다. 사용자 프로그램이 직접 실행하면 예외가 발생하고 커널이 처리한다. 상태 레지스터의 모드 비트는 현재 권한 수준을 나타내며, 조건 코드 플래그는 분기 판단에 사용된다.
14. Amdahl의 법칙
프로그램의 비율 p인 부분을 s배 빠르게 해도 전체 속도향상은 다음으로 제한된다.
Speedup = 1 / ((1-p) + p/s)
실행시간의 40%를 4배 개선하면 전체 속도향상은 1/(0.6+0.1)=1.428...배다. 개선되지 않는 부분이 전체 상한을 결정한다.
최종 확인 문제
- 명령 수 6×10^8, CPI 2, 클록 2.4GHz인 프로그램의 CPU 시간을 구하시오.
- 32비트 명령어에서 opcode 7비트와 64개 레지스터용 레지스터 필드 2개를 사용하면 남는 비트 수는 얼마인가?
- 값
0xA1B2C3D4를 little-endian으로 낮은 주소부터 저장한 바이트 순서를 쓰시오. - ISA와 마이크로아키텍처의 차이를 한 문장씩 설명하시오.
- 전체 실행시간의 50%를 5배 빠르게 할 때 Amdahl 법칙에 따른 전체 속도향상을 구하시오.