Semiconductor/0. Digital, Analog, 회로 이론

CPU 구조 및 동작 원리 (1)

잇(IT) 2024. 8. 13. 18:45

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 안에서 동작하게 된다.

728x90