반응형
CPU의 주요 동작: Instruction Fetch부터 Register Write까지
컴퓨터가 명령어를 실행하는 과정은 여러 단계를 거치며, 각 단계에서 명령어의 처리와 데이터의 이동이 이루어집니다. 이 과정은 Instruction Fetch(IF), Instruction Decode(ID), Execute(EX), Memory Access(MEM), 그리고 Write Back(WB) 단계로 나뉩니다. 여기서는 각 단계에서 수행되는 작업을 자세히 살펴보겠습니다.
1. Instruction Fetch (IF)
"PC(Program Counter) -> Instruction Memory"
- 과정 설명:
CPU는 Program Counter(PC) 값을 사용해 명령어 메모리로부터 실행할 명령어를 읽어옵니다. 이 과정을 Instruction Fetch라고 합니다.- Program Counter(PC): 현재 실행 중인 명령어의 주소를 나타내며, 다음 명령어의 위치를 지정합니다.
- Instruction Memory: 명령어가 저장된 메모리 영역입니다.
- 주요 작업:
- PC 값을 바탕으로 메모리에서 명령어를 읽습니다.
- 읽어온 명령어는 이후 단계에서 해석 및 실행됩니다.
2. Instruction Decode (ID)
"명령어 해석 및 레지스터 선택"
- 과정 설명:
Fetch된 명령어를 해석하는 단계입니다. 명령어는 일반적으로 특정 형식(OpCode, 레지스터 번호, 즉시 값 등)을 가지며, 이를 분석해 어떤 동작(연산, 메모리 접근, 분기 등)을 수행해야 하는지 결정합니다. - 주요 작업:
- 명령어 해석:
- OpCode를 분석해 명령어의 종류(Instruction Class)를 파악합니다.
- 종류에 따라 이후 단계에서 수행할 작업이 달라집니다.
- 예: 산술/논리 연산, 메모리 접근, 분기 등.
- 레지스터 읽기:
- 명령어에 포함된 레지스터 번호를 사용해 Register File에서 데이터를 읽어옵니다.
- 읽어온 데이터를 ALU나 메모리 연산에 활용합니다.
- 명령어 해석:
3. Execute (EX)
"ALU를 사용한 계산"
- 과정 설명:
Instruction Decode에서 해석된 결과를 바탕으로 명령어의 실행 단계에 들어갑니다. 이 과정에서 주로 ALU(Arithmetic Logic Unit)가 사용됩니다. - 주요 작업:
- 데이터 연산:
- 산술/논리 연산을 수행합니다.
- 예: 덧셈, 뺄셈, AND, OR 등.
- 산술/논리 연산을 수행합니다.
- 메모리 주소 계산:
- 메모리에 접근하는 명령어의 경우, 데이터 메모리의 주소를 계산합니다.
- 예: Load/Store 명령어에서 Base Address + Offset.
- 메모리에 접근하는 명령어의 경우, 데이터 메모리의 주소를 계산합니다.
- 분기 조건 판단:
- 분기 명령어의 경우, 조건에 따라 다음 실행할 명령어의 주소를 결정합니다.
- 데이터 연산:
4. Memory Access (MEM)
"데이터 메모리에 접근"
- 과정 설명:
Execute 단계에서 계산된 주소를 기반으로 메모리에 접근하여 데이터를 읽거나 저장하는 작업을 수행합니다. - 주요 작업:
- Load: 메모리에서 데이터를 읽어옵니다.
- Store: 메모리에 데이터를 저장합니다.
- 주의: 메모리 접근은 시간이 많이 걸리기 때문에 캐시가 활용될 수 있습니다.
5. Write Back (WB)
"Register File 업데이트"
- 과정 설명:
마지막 단계에서는 Execute 또는 Memory Access 단계에서 생성된 데이터를 Register File에 저장합니다. 이 단계는 명령어의 최종 결과를 반영하는 중요한 과정입니다. - 주요 작업:
- 명령어에서 지정된 목적지 레지스터에 데이터를 기록합니다.
- 예: 연산 결과를 저장하거나, 메모리에서 읽어온 데이터를 저장합니다.
Instruction Class에 따른 동작
명령어의 종류에 따라 각 단계에서 수행되는 동작이 달라집니다. 몇 가지 예를 들어보겠습니다:
- Arithmetic/Logical 명령어 (ADD, SUB, AND 등):
- ALU를 사용해 연산을 수행합니다.
- 결과는 Register File로 Write Back됩니다.
- Memory 명령어 (LOAD, STORE):
- LOAD: 메모리에서 데이터를 읽어 레지스터에 저장합니다.
- STORE: 레지스터의 데이터를 메모리에 저장합니다.
- Branch 명령어 (BEQ, BNE 등):
- 조건을 비교하고, 조건이 만족되면 PC를 분기 주소로 변경합니다.
- 만족하지 않으면 다음 명령어로 진행합니다.
CPU의 핵심 동작 정리
- PC를 통해 명령어를 읽는다 (Fetch).
- 읽은 명령어를 해석하고 필요한 데이터를 준비한다 (Decode).
- ALU를 통해 연산하거나 메모리 주소를 계산한다 (Execute).
- 데이터 메모리에 접근하거나 데이터를 저장한다 (Memory Access).
- 결과를 Register File에 기록한다 (Write Back).
이러한 단계를 통해 CPU는 효율적으로 명령어를 처리하며, 각각의 단계가 명확히 정의되어 있어 병렬 처리(Pipelining) 등의 최적화 기술을 구현할 수 있습니다.
단계별 요약
- IF (Instruction Fetch): PC를 통해 명령어를 Instruction Memory에서 가져옴.
- ID (Instruction Decode): 명령어를 해석하고 필요한 데이터를 Register File에서 읽어옴.
- EX (Execute): ALU를 사용해 연산을 수행하거나 메모리 주소를 계산.
- MEM (Memory Access): Data Memory에서 데이터 읽기(LOAD) 또는 쓰기(STORE).
- WB (Write Back): 결과 데이터를 Register File에 저장.
LOAD와 STORE 명령어의 동작 차이
명령어Base + Offset 계산Data MemoryRegister FileLOAD | 계산된 주소 사용 | 데이터 읽기 (Load) | 데이터 저장 (Write Back) |
STORE | 계산된 주소 사용 | 데이터 쓰기 (Store) | 없음 |
조합 소자
출력 : 입력에 따라 달라짐
예 : and, or, xor, not ... -> ALU, mux
상태 소자
출력 : 입력과 내부 상태에 따라 달라짐
예 : d filp-flop (FF), SR, FF, JK, FF ... -> 메모리, 레지스터
클럭의 상승/하강에만 내부 상태가 달라짐(edge-triggered)
Clocking methodology
신호의 읽고 쓰기 타이밍을 정의
- 신호를 읽고 있는 동안 새 값이 쓰일 경우?
- Edge-triggered clocking: 클럭의 edge에서만 값 변경 가능
state element -> combination logic -> state element 2
클럭 주기 : 가장 긴 조합 논리 회로의 delay에 의해 결정
반응형
'IT 프로그래밍 > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] Processor1 (0) | 2024.12.17 |
---|---|
[컴퓨터구조] processor1 (0) | 2024.12.17 |
[컴퓨터구조] Dapapath (1) | 2024.12.11 |
[단국대 강의] MIPS 컴퓨터 구조 instruction (0) | 2024.09.29 |
컴퓨터 응용 분야 (0) | 2024.09.06 |