본문 바로가기
Computer Architecture/Basic

프로세서 내부의 레지스터

by FastBench 2023. 4. 4.

초안 :  2023.04.04

 

프로그램 속 명령어와 데이터는 실행 전후로 CPU 내에 위치한 레지스터에 저장된다.

CPU 속 레지스터들의 이름은 제조사 마다 다른데, 공통적으로 다루는 레지스터들은 대동소이하다.

 

1. 프로그램 카운터 (PC, Program Counter)

메모리에서 읽어 들일 명령어의 주소를 저장한다. 이를 Program Pointer 라고 부르는 CPU 도 있다.

 

2. 명령어 레지스터 (IR, Instrction Register)

PC 값으로 부터 명령어가 담긴 특정 메모리의 주소를 CPU 가 읽어올텐데, 해당 명령어를 저장하는 레지스터이다.

이후 CPU 내의 컨트롤러가 해당 명령어를 디코딩 하여, control signal 들을 내보낸다.

 

3. 메모리 주소 레지스터 (MAR, Memory Address Register)

메모리의 주소를 저장하는 레지스터다. CPU 가  특정 주소의 메모리에 데이터를 쓰거나 읽고싶을 떄,  즉 시스템 버스 내의 address bus 로 값을 보낼때 메모리 주소 레지스터를 거치게 된다.

 

4. 메모리 버퍼 레지스터 (MBR, Memory Buffer Register)

메모리와 주고받을 값을 저장하는 레지스터로, 3과 유사하게 시스템 버스 내의 data bus 로 값을 보낼 때 거치는 레지스터이다.

 

여기까지만 해도 CPU 가 어떻게 메모리에 저장된 프로그램 (명령어)를 가져오고 실행하는지 대략적으로 알 수 있는데, 요약하면 아래의 그림과 같다.

초기 PC 값에 저장된 메모리 주소의 명령어를 가져오고
해당 명령어는 MBR 에 저장된 후 IR - Control Unit 을 통해 디코딩 된다. 이후 PC 값은 1씩 증가하며 위 과정을 반복한다.

이외의 레지스터들을 더 살펴보면 아래와 같다.

 

5. 범용 레지스터 (General Purpose Register)

MAR과 MBR 은 주소와 데이터 값만 저장하지만, 범용 레지스터는 데이터와 주소 모두를 저장 할 수 있다. 보통 CPU 안에는 여러개의 범용 레지스터들이 있다.

 

6. 플래그 레지스터 (Flag Register)

CPU 내의 ALU 에서 발생한 플래그 값들을 저장하는 레지스터이다. 연산 결과에 대한 추가적인 정보를 저장한다. (예를 들어 양수인지 음수인지.. 오버플로우가 발생했는지 아닌지 등등) Controller 는 해당 레지스터 값을 참고하여 control signal 들을 내보낸다.

 

7. 스택 포인터 (Stack Pointer)

메모리에 프로그램을 배정할 때 일부 영역을 스택 영역으로 배정하는데, 스택 포인터는 현재 실행중인 프로세스의 스택의 꼭대기 주소를 가리키는 레지스터이다.

스택과 관련된 자세한 내용은 아래의 게시글을 참고하길 바란다. (아직 게시글 미작성. 추후 작성 후 업데이트 예정)

 

8. 베이스 레지스터 (Base Register)

프로그램을 실행하면 해당 프로그램의 명령어와 데이터들이 메모리에 저장이 될텐데, 이때 젤 첫 부분 (그러니까 0번지)를 base address 라고한다. Base Register 에는 base address 가 저장이 된다.

 

 

 

Reference

  • 혼자 공부하는 컴퓨터 구조 + 운영체제, 한빛미디어, 강민철

댓글