CPU(Central Processing Unit) 중앙 처리 장치
컴퓨터에서 프로그램 명령을 해석하고 실행하는 장치
■ CPU 동작 원리
- CU (Control Unit) (제어 장치)
명령어를 해석하고 실행 순서를 제어한다.
ALU와 Register들 간의 데이터 전송을 관리한다.
Program Counter와 연동하여 프로그램의 흐름을 관리한다.
- Accumulator (누산기)
연산 결과를 저장한다.
다음 연산의 입력값을 제공한다.
- ALU (Arithmetic Logic Unit) (산술 논리 장치)
기본 산술 연산을 수행한다.
논리 연산을 수행한다.
비교 연산을 수행한다.
- PC (Program Counter) (프로그램 카운터)
현재 실행 중인 명령어의 주소를 저장한다.
다음에 실행할 명령어 주소를 자동으로 업데이트 한다.
- MAR (Memory Address Register) (메모리 주소 레지스터)
메모리에서 가져온 데이터를 저장하고, 이를 CPU로 전달한다.
CPU에서 나온 데이터를 받아 메모리에 기록한다.
- MBR (Memory Buffer Register) (메모리 버퍼 레지스터)
메모리에서 가져온 데이터를 저장하고, 이를 CPU로 전달한다.
CPU에서 나온 데이터를 받아 메모리에 기록한다.
- IR (Instruction Register) (명령어 레지스터)
현재 실행할 명령어를 저장한다.
명령어를 해석하고, 실행 단계에서 필요한 제어 신호를 생성한다.
CPU에 A = B + C라는 코드가 실행되면
어셈블리어로 LOAD[10], ADD[11], STORE[12]라는 명령이 실행된다고 가정한다.
- 인출 단계
1. LOAD[10]를 실행하기 위해서 PC에 주소 100이 저장되어 있는 경우 가져와야 할 메모리 주소가 100임을 의미한다.
2. MAR에 주소 100을 전달하게 된다.
3. MAR에 의해 100번지 주소를 확인한 다음 해당 주소에 있는 데이터를 가져와 MBR에 저장한다.
(* 메모리 주소마다 8비트의 데이터를 저장할 수 있고, CPU마다 한 번에 처리할 수 있는 데이터가 다르다. (ex) 32bit CPU, 64bit CPU...) 위 CPU의 경우 16bit CPU라고 가정하고 있기 때문에 메모리 주소를 2씩 불러온다.)
- 해석 단계
4. 위 16bit 데이터를 확인해서 그냥 값인지, 명령이 담긴 데이터인지 구분한다. 우선 메모리 100번지에 명령은 어셈블리어로 바꾸면 LOAD[10]이 된다. (위에서 가정했기 때문)
5. 명령이 담긴 데이터이기 때문에 LOAD[10]이라는 데이터를 IR로 전달한다.
6. 다음 PC에 2가 더해진다. (현재 16bit CPU이기 때문이다. 32bit CPU면 4, 64bit CPU면 8이 더해진다.)
7. IR에 저장된 명령은 CU로 이동되어 해석된다.
8. LOAD[10]은 데이터를 불러오라는 명령이기 MAR에 10이 저장되고, 메모리 주소 10에 있는 데이터를 MBR에 저장한다. 9. 메모리 주소 10에 있는 데이터는 명령어가 아니라 그냥 값이기 때문에 2의 값이 누산기에 저장된다.
=> 여기까지가 LOAD[10] 한줄을 처리하기 위한 과정이다.
- 실행 단계 (제어 장치에 의해 실행된다.)
다시 위 과정을 반복을 반복하게 된다.
10. PC의 데이터가 MAR로 전달된다.
11. 102에 있는 데이터를 가져와 해석하게 된다. 해당 데이터는 ADD[11] 명령을 가진 데이터로 해석된다.
(* 여기서 PC는 2씩 증가하는데 메모리 주소가 순차적으로 LOAD, ADD, STORE 되어 있지 않고 다른 위치에 있을 수 있다. 이를 해결하기 위해 Branch, Jump가 있는데 이는 추후에 자세하게 설명하겠다.)
12. 위 데이터는 명령어 데이터이기 때문에 ADD[11]이 IR로 이동하게 된다.
13. PC에 다시 2가 더해지고, ADD[11]은 CU로 이동하여 해석된다.
14. ADD 명령어에 의해 누산기에 있던 기존 값(2)는 ALU로 이동하게 된다.
15. CU에 있는 ADD[11]에 의해 MAR에 11이 저장되고, 메모리 주소 11에 있는 데이터를 MBR에 가져온다. 메모리 주소 11에 있는 데이터가 명령어가 아닌 값 3이기 때문에 누산기로 이동하게 되고, 3의 값은 CU에 있는 ADD 명령어에 의해 ALU로 이동하게 된다.
16. ADD 명령어에 의해 2 + 3이 실행되고 결과값인 5는 다시 누산기에 저장된다.
=> 여기까지가 ADD[11] 한줄을 추가로 처리한 상태이다.
- 저장 단계
17. 마지막 STORE[12]를 실행시키기 위해 PC에 있는 104 데이터가 MAR로 이동하게 된다.
18. 104에 있는 데이터를 MBR로 가져와 STORE[12]로 해석되고, 명령이기 때문에 IR에 STORE[12]가 저장된다.
19. PC에 2가 더해지고, STORE[12]는 CU에 저장된다.
20. 메모리 주소 12에 값을 저장하기 위해서 MAR에 12가 저장되고 누산기에 계산된 결과 값(5)가 MBR에 저장되고, MBR에 저장된 결과 값(5)은 메모리 주소 12에 저장된다.
=> 이렇게 A = B + C의 코드가 실행되고 명령어가 CPU 안에서 동작하게 된다.
'Semiconductor > 0. Digital, Analog, 회로 이론' 카테고리의 다른 글
CPU 구조 및 동작 원리 (RISC, Pipeline, Hazard) (2) (1) | 2024.08.15 |
---|---|
I2C 구조 및 동작 원리 (0) | 2024.08.14 |
NAND 구조 및 동작 원리 (0) | 2024.08.12 |
DRAM 구조 및 동작 원리 (2) (0) | 2024.08.09 |
DRAM 구조 및 동작 원리 (1) (0) | 2024.08.02 |