-
메모리 계층 구조 : CPU 레지스터 → L1/L2/L3 캐시 → RAM → 디스크
-
Instruction Cycle : Fetch → Decode → Execute → Writeback
-
파이프라이닝 : 명령어를 여러 단계로 나누어 동시에 처리함으로써 CPU 성능을 높이는 방식. 그러나 Data Hazard가 발생할 수 있음
- Data Hazard의 종류
- RAW : Read After Write.가장 일반적인 Data Hazard. 후속 명령어가 이전 명령어에 쓴 데이터를 읽으려할 때 발생
- WAR : Write After Read. 후속 명령어가 먼저 읽어야 할 데이터를 이전 명령어가 나중에 쓰려고 할 때 발생. 주로 역순 실행 시에 문제가 됨
- WAW : Write After Write. 두 명령어가 같은 레지스터에 쓰기 작업을 할 때, 쓰기 순서가 잘못되면 문제 발생
- Data Hazard의 해결책
- 파이프라인 stalling 또는 버블 삽입 : 데이터가 준비될 때까지 진행을 멈추고 기다림
- Forwarding & Data Passing : 아직 레지스터에 쓰기 완료 전인 데이터를 다음 명령어가 바로 사용할 수 있도록 파이프라인 내에서 직접 전달하는 방법
- 명령어 재배치 : 컴파일러나 하드웨어가 명령어 순서를 바꿔, 데이터 충돌을 피해 실행하도록 조정
- 레지스터 예약 : WAR, WAW Harazd를 방지하기 위해 논리적 레지스터 대신 물리적 레지스터를 동적으로 할당하는 기법
-
Cache : 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목현상을 줄이기 위한 메모리
- L1 캐시(CPU 내부), L2 캐시(CPU와 RAM 사이), L3(일반적으로 메인보드에 존재함)로 구성
- Cache hit과 Cache miss 연산으로 작동됨
- Cache miss의 종류 : Compulsory(처음 읽을 때 발생), Capacity(용량 부족), Conflict(서로 다른 주소가 같은 캐시 라인을 공유할 때)
-
ILP : 명령어 단위로 병렬 실행을 시도하는 방식. 현대 CPU는 out-of-order execution이나 speculative execution을 통해 이를 극대화함
-
SIMD와 병렬 연산
- SIMD : 하나의 명령어로 여러 데이터를 처리
- 일반적인 병렬 연산 : 여러 명령어를 여러 스레드가 동시에 실행
-
CPU의 작동원리

- Control Unit : PC로부터 명령어 주소를 가져옴 → 메모리에서 명령어를 읽어 IR에 저장 → 명령어의 opcode를 읽고 연산 판단 → ALU와 레지스터에 control signal 전송
- ALU : 산술 논리 연산 수행
- Register : 연산에 필요한 데이터와 결과를 임시 저장(대부분 RISC Architecture에서는 32개의 범용 레지스터가 존재)
-
소수점 표현
- 고정 소수점 : 부호(1bit), 정수부(15bit), 소수부(16bit)로 표현함. 단순하지만 표현 범위가 작음
- 부동 소수점 : 부호(1bit), 지수부(8bit), 가수부(23bit)로 표현함. 범위가 넓지만 오차 가능성이 있음
-
데이터 배열 방식
- Big Endian : 저장 시 상위 바이트 먼저 저장하는 방식(Intel)
- Little Endian : 저장 시 하위 바이트 먼저 저장하는 방식(Sparc)