[5] CPU의 내부 구성

hyunsooo·2023년 3월 17일
0

첫 번째 포스트인 컴퓨터의 구조 개요에서 알아본 것 처럼 CPU는 크게 논리와 연산을 담당하는 ALU, 명령어의 해석이나 제어신호를 발생시키는 제어 장치 그리고 레지스터로 구성되어 있습니다.

ALU

ALU는 연산의 대상이 되는 피연산자를 레지스터로부터 입력 받고 제어장치로부터 수행할 연산에 대한 제어신호를 통해 받습니다. 연산의 결과를 임시로 누산기(Accumulator) 레지스터에 저장합니다.
0과 1로 숫자를 표현하는 방법을 설명했을때 음수에 대해서 CPU는 플래그를 통해 판단을 할 수 있다고 설명했는데, 바로 플래그(상태) 레지스터에 연산결과에 대한 부가 정보들이 저장되게 됩니다.

플래그 레지스터에 저장되는 정보

  • 부호(Sign) 플래그 : 연산 결과가 음수(1)인지 양수(0)인지에 대한 정보
  • 제로(Zero) 플래그 : 연산 결과가 0(1)인지 아닌지(0)
  • 캐리(Carry) 플래그 : 연산한 결과가 자리올림, 빌림(1)인지 아닌지(0)
  • 오버플로우(Overflow) 플래그 : 연산 결과가 레지스터에 비해 너무 큰지(1) 아닌지(0)
  • 패리티(Parity) 플래그 : 연산 결과에 1이 짝수개 인지(1) 아닌지(0)
  • 인터럽트(Interrupt) 플래그 : 인터럽트가 가능한지(1) 아닌지(0)
  • 슈퍼바이저(Superviser) 플래그 : 커널 모드로 실행 중인지(1) 사용자 모드인지(0)

제어장치

제어장치의 메카니즘은 위의 그림과 같습니다. 메카니즘을 설명하기전에 클럭이란 무엇인지 알아보겠습니다. 노래를 부를때도 박자가 있듯이 컴퓨터 부품들은 어떠한 파장에 따라 작동하게 됩니다. 여기서 1초 동안 파장을 몇번 만들어낼 수 있느냐, 이게 바로 클럭수를 의미하게 되고 절대적이진 않지만 보통 이 값이 높을수록 CPU의 성능이 좋다고 할 수 있습니다.

제어장치는 명령어를 해석하거나 제어신호를 보내는 역할을 한다고 했습니다. 위의 메카니즘 처럼 제어장치는 명령어 레지스터를 통해 해석할 명령어를 전달받게 되고 부가적인 정보도 플래그 레지스터를 통해 전달받게 됩니다. 명령어 해독을 통해 제어장치는 적절한 제어신호를 보내게 됩니다. 제어신호는 크게 CPU 내부와 외부로 나눠지는데, CPU 내부의 레지스터나 ALU에게 신호를 보내거나 외부의 메모리나 입출력장치에게 제어신호를 보내게 됩니다.

제어신호는 제어장치만 만들어낼 수 있는건 아닙니다. 주변장치를 통해 제어신호를 전달 받을 수도 있기 때문에 제어장치는 제어신호를 보내는 것 뿐 아니라 받기도 합니다.

레지스터

레지스터는 CPU 내부에서 정보들을 저장하는 저장소입니다. CPU에는 다양한 레지스터들이 존재하고 각기 다른 역할을 하고 있습니다. 물론 CPU마다 레지스터의 종류는 다르지만 대표적으로 쓰이는 레지스터들을 알아보겠습니다.

  • 프로그램 카운터(PC): 메모리에서 가져올 명령어의 주소 저장

  • 명령어 레지스터(IR) : 해석할 명령어 저장

  • 메모리 주소 레지스터(MAR): 메모리의 주소 저장 / PC가 메모리 주소를 읽어 들이려면 주소버스를 통해야 하는데 이때 중간에 거치는 레지스터

  • 메모리 버퍼 레지스터(MBR): 메모리와 주고 받을 값(데이터/명령어)을 저장, CPU가 데이터 버스로 정보를 주고 받을 때 거치는 레지스터

위의 4가지 레지스터들이 작동하는 방식에 대해서 설명해보겠습니다.
프로그램을 실행하게 되면 메모리에 명령와 데이터들이 저장되게 됩니다. 초기에 PC는 프로그램의 첫 명령어의 주소를 가지고 있게 되고 MAR을 통해 해당 주소값을 임시 저장 및 주소버스를 통해 메모리에 접근하게 됩니다. 이때 제어장치의 제어신호에 따라 메모리 읽기 신호도 같이 전달받게 됩니다.
해당 메모리 주소의 저장된 값은 데이터버스를 통해 MBR에 저장되고 명령어 레지스터에 명령어가 저장됩니다. 이때 원하는 주소의 값을 가져왔다면 PC값은 증가하게 됩니다. 이처럼 프로그램을 순차적으로 실행할 수 있게 됩니다. 물론 명령어가 JUMP와 CALL 등 처럼 특정 메모리 주소를 실행하거나 인터럽트가 발생시 순차적인 실행이 끊길 수 있습니다.

  • 플래그 레지스터(FR) : 연산 결과 또는 CPU 상태에 대한 부가적인 정보 저장

  • 범용 레지스터(GR) : 다양한 상황에 자유롭게 사용

  • 스택 포인터(SP) : 스택 주소 지정방식에 사용하는 레지스터. 스택(메모리의 한 공간, 운영체제)의 꼭대기를 가리키는 레지스터

  • 베이스 레지스터(BR) : 변위 주소 지정방식에 사용하는 레지스터. 명령어 오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻음. 특정 레지스터는 PC나 베이스 레지스터에 저장된 값과 더하여 사용

profile
지식 공유

0개의 댓글