기록하는삶
[CS/컴퓨터 구조] CPU와 레지스터 본문
CPU의 구성과 성능
컴퓨터에서 인간의 뇌와 같은 역할을 담당해 기억, 해석, 연산, 제어의 4대 기능을 관할하는 장치인 CPU는 크게 산술 연산을 담당하는 ALU(Arithmetic Logic Unit)와 어떤 명령을 실행할 지 결정하는 제어장치(Control Unit) 그리고 처리할 명령어와 데이터를 메모리로부터 불러와 임시로 저장하는 공간인 레지스터(Registers)로 구성된다.
CPU의 성능은 클럭 속도와 코어 수로 결정된다. 클럭(Clock)은 초당 몇 번의 명령어를 처리할 수 있느냐를 의미하는 주파수 신호로, Hz 단위를 사용한다. 클럭 수가 3GHz라면 초당 30억 번의 명령어를 처리할 수 있다는 것을 의미한다. 코어는 CPU 역할을 하는 더 작은 단위의 블록으로, 한 개의 CPU안에 여러 개의 코어를 두는 멀티코어 구조의 경우 하나의 칩 안에서 여러 개의 주체가 4대 기능을 동작하도록 할 수 있다. 다만 멀티코어를 활용할 수 있도록 프로그램을 설계해야 한다.
이번 글에서는 레지스터의 종류별 역할에 대해 살펴본다. 세부 레지스터의 명칭이나 종류는 CPU 마다 조금씩 달라지기도 하지만, 이 글에서는 일반적으로 사용되는 8가지에 대해 간단하게만 다룬다.
메모리와 관련된 레지스터
- 프로그램 카운터
메모리에서 바로 다음 사이클에 가져올 명령어의 주소를 저장하는 레지스터. 역할을 정확히 이해하기 위해서는 CPU의 동작 사이클을 이해할 필요가 있는데, 추후에 다뤄보도록 하겠다. CPU가 다음 동작을 시작할 때 접근해야 하는 메모리가 어디인지를 가르킨다고 생각하면 된다. CPU가 명령을 수행하여 해당 메모리에 접근하면 그 다음 사이클이 필요로 하는 메모리 주소로 변경된다. 명령어 포인터(Instruction Pointer)라 지칭되기도 한다.
- 명령어 레지스터
CPU가 메모리에서 읽어들인 명령어를 저장하는 공간. CPU의 제어장치는 이 곳에 저장된 명령어에 접근하여 명령어를 해석하고 실행하게 된다.
- 메모리 주소 레지스터
CPU가 읽어 들이고자 하는 주소를 주소 버스를 통해 내보낼 때 거치는 레지스터. 즉, 프로그램 카운터에 보관하던 다음 실행을 위한 메모리에 직접 접근하게 될 때는 이 메모리 주소 레지스터에 해당 내용을 저장한 후에 메모리에 접근하는 명령이 수행된다.
- 메모리 버퍼 레지스터
CPU가 명령어 혹은 데이터를 데이터 버스로 주고받을 때 거치는 레지스터. 가령 메모리 주소 레지스터에 저장된 메모리에 접근에 특정 명령어 혹은 데이터를 읽어 들였다면 이는 메모리 버퍼 레지스터에 먼저 저장된다. 만약 그것이 명령어이고, 제어장치가 해석하게 해야 한다면 해당 명령어의 내용이 다시 명령어 레지스터에 복사된 후에 제어장치가 이를 해석하게 된다.
그 외의 레지스터
- 플래그 레지스터(상태 레지스터)
산술 연산 결과의 상태 혹은 CPU 상태에 대한 정보를 알려주는 플래그 비트들이 저장되는 공간. 플래그에는 연산 결과가 0임을 나타내는 제로 플래그, overflow를 나타내는 오버플로 플래그, 음수를 표현하는 사인 플래그, 인터럽트를 받아들일 수 있는지 여부를 표현하는 인터럽트 플래그 등 다양한 종류가 있다. (참고)
- 스택 포인터
메모리 중 스택 영역의 꼭대기 주소를 가리키는 특수한 레지스터.
- 베이스 레지스터
변위 주소 지정 방식에 사용하는 레지스터. 변위 주소 지정 방식은 데이터의 오퍼랜드 필드에 저장된 변위와 레지스터에 저장된 값을 더하여 유효주소를 얻는 방법을 말하는데, 해당 레지스터가 프로그램 카운터냐 베이스 레지스터냐에 따라 구분하기도 한다. 프로그램 카운터를 활용한다면, 프로그램 카운터에 당장 다음에 접근할 메모리 주소가 담기므로, 오퍼랜드 필드에 다음에 접근할 메모리를 기준으로 상대적인 위치(+3, -5 등)를 지정하여 유효주소를 얻을 수 있다. 프로그램 카운터가 다음 접근할 메모리를 기준으로 한다면, 베이스 레지스터를 활용하는 경우 베이스 레지스터에 저장한 값을 기준 주소로하여 해당 기준으로부터 상대적 위치를 오퍼랜드 필드에 지정하여 활용하게 된다.
- 범용 레지스터
목적이 명확하게 정해지지 않고, 말 그대로 범용적으로 사용되는 레지스터. 위에 언급한 목적들 뿐만 아니라 다양한 목적으로 활용될 수 있다.
'CS(Computer Science)' 카테고리의 다른 글
[CS/컴퓨터구조] 프로세스와 쓰레드, 파이썬의 병렬 처리 (1) | 2023.03.15 |
---|---|
[CS/컴퓨터 구조] C언어 컴파일 과정 (0) | 2023.03.09 |
[CS/컴퓨터 구조] ALU의 기본 구조, input과 output (0) | 2022.03.20 |
[CS/컴퓨터 구조] 컴퓨터의 숫자와 문자 표현, 부동소수점, ASCII, 유니코드 (0) | 2022.03.13 |
[CS/컴퓨터 구조] 논리 회로의 기초, Not/And/Or/Xor Gate (0) | 2022.03.09 |