[OS/컴퓨터구조] CPU와 레지스터

YongHo·2024년 4월 9일

중앙처리장치(CPU)는 명령어를 해석하여 실행하는 장치로 요리사 모형에서는 요리사에 해당한다. 중앙처리장치(CPU)는 산술논리 연산장치, 제어장치, 레지스터로 구성되며 이것들의 협업으로 작업을 처리하게 된다.

위의 그림은 CPU의 구성 요소를 요리사 모형에 빗대어 살펴본 것이다.

  • 산술논리 연산장치 : 데이터의 덧셈, 뺄셈, 곱셈 등과 같은 산술 연산과 AND, OR같은 논리 연산을 수행
  • 제어장치 : CPU에서 작업을 지시하는 부분
  • 레지스터 : 작업에 필요한 데이터를 CPU 내부에 보관하는 곳

위처럼 CPU에는 세가지로 구성되게 되는데 오늘은 이 중에서 레지스터 종류에 대해 자세하게 다뤄보려 한다.

1. CPU의 명령어 처리 과정

// pseudo code
1. int D2 = 2;	// 메모리 100번지가 D2라고 가정
2. int D3 = 3;	// 메모리 120번지가 D3라고 가정
3. int sum;		// 메모리 160번지가 sum이라고 가정
4.
5. sum = D2 + D3;

위 pseudo code는 변수 D2에 저장된 값 2와 D3에 저장된 값 3을 더하여 그 결과 값을 sum에 저장하는 코드이다. 프로그래밍 언어에서 D2, D3, sum과 같은 변수를 선언한다는 것은 메모리 내에 작업 공간을 만들으라는 의미이다.

컴퓨터는 0과 1로만 이루어진 기계어만 인식할 수 있다. 따라서 위의 코드를 아래처럼 기계어로 바꿔야 한다.

// 어셈블리 pseudo code
1. LOAD mem(100), register 2			// 메모리 100번지(D2) 내용을 R2로 이동
2. LOAD mem(120), register 3			// 메모리 120번지(D3) 내용을 R3로 이동
3. ADD register 5, register 2, register 3	// R2 + R3한 값을 R5에 저장
4. MOVE register 5, mem(160)			// R5 결과를 160번지에 저장

아래 이미지는 위 코드의 작업과정을 나타낸 것이다.

  1. 제어장치는 메모리 100번지에 있는 값(2)을 레지스터 2로 옮기라는 명령을 내린다.
  2. 제어장치는 메모리 120번지에 있는 값(3)을 레지스터 3으로 옮기라는 명령을 내린다.
  3. 레지스터 2와 3의 값을 ALU로 보내 더하라는 명령을 내린다. 결과값은 레지스터에 임시 보관된다.
  4. 레지스터의 결과 값을 메모리 160번지(sum)로 옮기라는 명령을 내린다.

이와 같이 CPU는 ALU, 제어장치, 레지스터들이 협업하여 작업을 처리하게 된다.

2. 레지스터의 종류

CPU는 필요한 데이터를 메모리에서 가져와 레지스터에 저장하고 ALU를 이용해 연산한 후 그 값을 다시 레지스터에 등록하게 된다. 이때 사용되는 레지스터에는 데이터 레지스터와 주소 레지스터가 있다. 이들은 사용자 프로그램에 의해 변경되기 때문에 '사용자 가시 레지스터'라고 부른다.

  • 데이터 레지스터(DR data register) : 메모리에서 가져온 데이터를 임시로 보관할 때 사용
  • 주소 레지스터(AR address register) : 데이터 또는 명령어가 저장된 메모리 주소를 저장할 때 사용

이 외에도 특별한 용도로 사용되는 레지스터도 있는데 이들을 '특수 레지스터'라고 한다. 특수 레지스터는 사용자가 임의로 변경할 수 없기 때문에 '사용자 불가시 레지스터'라고 불린다.

  • 프로그램 카운터(PC program counter) : 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에 알려줌
  • 명령어 레지스터(IR instruction register) : 현재 실행 중인 명령어를 저장하며 제어장치는 IR에 있는 명령어를 해석한 후 외부 장치에 제어 신호를 보냄
  • 메모리 주소 레지스터(MAR memory address register) : 메모리에서 데이터를 가져오거나 반대로 데이터를 보낼 때 주소 지정하는데 사용됨
  • 메모리 버퍼 레지스터(MBR memory buffer register) : 메모리에서 가져온 데이터나 옮겨갈 데이터를 임시로 저장하는 곳이며 항상 메모리 주소 레지스터와 함께 동작함

  1. 프로그램 카운터에는 실행해야 하는 코드의 행 번호가 저장되어 있으며, 이를 제어장치에 전송하면 행 번호가 실행되게 된다.
  2. 제어장치가 명령어 레지스터에 있는 명령을 해석하여 제어 신호를 보낸다.
  3. 메모리에 있는 데이터를 CPU로 옮기는 일은 메모리 관리자가 담당하게 된다. 메모리 관리자는 MAR에 있는 값을 읽은 후 메모리 주소에 저장된 값을 MBR로 보낸다. 레지스터는 CPU가 관리하는 영역이기 때문에 메모리 관리자가 값을 직접 옮길 수 없다.
  4. 제어장치는 메모리 버퍼 레지스터에 저장된 값을 레지스터로 옮긴다.

이 외에도 프로그램 상태 레지스터(PSR program status register)가 있다. PSR은 조건의 결과에 따른 코드가 실행되는 조건문과 같은 분기에 사용된다. PSR은 ALU와 연결되며, 연산 결과를 저장한다. 이는 플래그 레지스터, 상태 레지스터, 컨디션 레지스터라고도 불린다.

주요 레지스터 표를 정리하고 마무리 짓겠다.

0개의 댓글