[컴퓨터 구조] 프로세서 구조

LeeJaeHoon·2022년 6월 8일
0

프로세서 구조

컴퓨터의 명령은 1) 데이터 처리, 2) 데이터 이동, 3) 프로그램 제어 등 세 가지 부류로 나눌 수 있다.

ARM 프로세서인 경우 각 부류의 대표적인 명령 예제는 다음과 같다.

  • 데이터 처리: add r0, r1, r2
  • 데이터 이동: ldr r0, [r1, #20], str r0, [r1, #20]
  • 프로그램 제어: beq L1

데이터 처리

add r0, r1, r2

위 명령 실행을 위해 프로세서는 다음과 같은 단계를 밟는다.

  1. PC 내용을 메모리에 보내어 명령을 읽어 온다. (instruction fetch) 다음 명령을 가져오기 위해 PC를 증가 시킨다.
  2. 두 개의 레지스터를 읽는다 (reg read): r1, r2
  3. ALU를 사용한다 (ALU): r1 + r2
  4. 레지스터에 쓴다 (reg write): r0 ← r1+r2

데이터 이동

ldr r0, [r1, #20]

  1. PC 내용을 메모리에 보내어 명령을 읽어 온다. (instruction fetch) 다음 명령을 가져오기 위해 PC를 증가 시킨다.
  2. 한 개의 레지스터를 읽는다 (reg read): r1
  3. ALU를 사용한다 (ALU): r1+20
  4. 데이터 메모리를 읽는다 (mem read): M[r1+20]
  5. 레지스터에 쓴다 (reg write): r0 ← M[r1+20]

str r0, [r1, #20]

  1. PC 내용을 메모리에 보내어 명령을 읽어 온다. (instruction fetch) 다음 명령을 가져오기 위해 PC를 증가 시킨다.
  2. 두 개의 레지스터를 읽는다 (reg read): r0, r1
  3. ALU를 사용한다 (ALU): r1+20
  4. 데이터 메모리에 쓴다 (mem write): M[r1+20] ← r0

프로그램 제어

beq L1

  1. PC 내용을 메모리에 보내어 명령을 읽어 온다. (instruction fetch) PC를 업데이트한다: PC ← PC + 4 또는 PC ← PC + L1
  2. 한 개의 레지스터를 읽는다 (reg read): psr PSR (processor status register) 레지스터 내용에 따라 PC 내용이 선택된다.

제어장치

프로세서를 구성하는 가장 큰 요소는 레지스터, 산술논리장치 ALU (Arithmetic and Logic Unit), 그리고 제어장치 CU (Control Unit)이다.

그림 12.5에서 레지스터, 메모리, PC 등의 출력이 한 곳에 모아지는 곳이 여러 군데있음을 볼 수 있다. 각각의 출력은 서로 다른 값을 가질 수 있으므로 원리적으로는 한 곳에 모아질 수는 없다. 출력 값끼리 서로 충돌하기 때문이다.

여러 개의 출력을 한 곳으로 모을 수 있게 하는 디지털 회로가 멀티플렉서 multiplexor (MUX) 이다. MUX 는 그림 12.6과 같이 여러 개의 입력 단자 (IN 0, IN1, IN 2, ...) 중 오직 하나만을 선택하여 출력 단자 (OUT)로 보내주는 기능을 한다. 선택을 위한 제어 선 (S0, S1, ...)이 따로 존재한다.

즉 그림 12.5에서 각 출력이 모이는 부분마다 MUX 가 필요하다. 어느 출력을 선택할지는 MUX 의 제어 선에 어떤 신호가 들어오는가에 따라 결정된다. MUX 의 제어선에 선택 신호를 보내주는 장치가 CU 이다. CU 는 현재의 명령 종류, 상태 레지스터값 등에 따라 각기 다른 제어 신호를 만들어 낸다.

ALU 에도 CU 가 보내주는 제어 신호가 필요하다. ALU 는 각종 산술연산과 논리연산을 할 수 있는데, 현 상태에서 어떤 연산을 해야 하는지는 CU 가 보내주는 제어 신호에 따라 결정된다.

메모리에도 CU 가 보내주는 제어 신호가 필요하다. 메모리는 읽기 또는 쓰기 동작이 가능한데, 이 읽기/쓰기 신호를 만들어 보내주는 곳이 CU 이다.

CU 는 어떻게 만들 수 있을까? 그림 12.7은 CU 의 구조를 보여주고 있다. CU 는 현재의 명령어, 클록 clock (12.3절 참조), 인터럽트, PSR 레지스터 등의 값을 입력으로 사용하여 입력 값에 따라 다양한 출력 신호를 만들어 내며, 이 출력 신호가 MUX, ALU, 메모리 등의 제어 신호로 이용된다. CU 는 전형적인 조합회로 combinational
circuit 이다.

hardwired control

CU 를 구현하는 방법은 크게 두 가지로 나눌 수 있다. 첫째 방법은 CU 가 전형적인 조합회로임에 착안하여 입력과 출력에 따른 진리표를 만들고 그 진리표에 맞도록 게이트 gate 등을 사용해 논리회로를 만들어 구현하는 방식이다 (그림 12.8). 이렇게 CU 를 구현하는 것을 hardwired control 방식이라고 부른다.

이 방식으로 구현된 CU 는 속도가 빠르다. 즉 특정 입력 신호를 주면 빠른 시간 내 해당 출력 신호가 만들어진다.

Hardwired control 방식의 가장 큰 단점은 설계가 너무 어렵다는 것이다. 그림 12.7 에 보인 것처럼 CU 의 입력은 컴퓨터의 명령, 클록, 인터럽트, PSR 레지스터 등으로 이루어지는데, 명령의 길이, 즉 비트 수가 너무 길거나 명령의 종류 등이 너무 많다면 이 조건에 맞는 조합회로를 설계하는 것이 매우 복잡하게 된다. 간단한 명령만을 지원하는 컴퓨터가 아니라면 이 방법으로 CU 를 설계하는 것은 거의 불가능할 때가 많다.

micro-programmed control

이 방식은 CU 를 게이트들의 집합으로 이루어진 논리회로가 아니라 메모리로 구현한다. 그림 12.7 또는 그림 12.8을 보면 주어진 입력에 대해 정해진 출력이 나오고 있는데, 이 그림을 달리 생각하면 주어진 주소에 대해 정해진 데이터가 나오는 메모리로 볼 수 있다 (그림 12.9). 즉 CU 내부에 메모리를 넣고, CU 의 입력을 메모리 주소로, CU 의 출력을 해당 주소의 메모리 데이터로 생각하는 것이다. 메모리 내에는 원하는 제어 신호를 낼 수 있도록 미리 값을 넣어 두어야 한다. 즉 프로그램을 저장해 두어야 한다.

이 방식에서 CU 내의 메모리 저장 내용은 한번만 기록해두면 변할 필요가 없으므로 ROM 에 해당된다. 즉 CU 내의 메모리를 control ROM 이라고 부른다. CU 내의 메모리와 프로세서 외부의 메인 메모리는 전혀 다르다.

메인 메모리에는 instruction (명령)이 저장되어있다. 마찬가지로 control ROM 에 저장되어있는 제어 신호 데이터는 micro-instruction 이라고 부른다. 메인 메모리에 있는 명령들의 집합은 프로그램이라고 부른다. 마찬가지로 control ROM 에 있는 micro-instruction 의 집합은 micro-program 이라고 부른다. 즉 control ROM 에는 micro-program 이 들어가고, 그래서 이런 방식의 CU 를 micro-programmed control이라고 부르는 것이다.

앞에서 우리는 하나의 컴퓨터 명령 실행은 여러 개의 단계들로 구성되어 있음을 배웠다. 예를 들어 ldr r0, [r1, #20] 명령은 instruction fetch, register read, ALU, memory read, register write 등 다섯 개의 단계로 이루어진다. 각 단계에서 일어나는 일들을 micro-operation 이라고 부른다. 메인 메모리에는 ldr 등의 명령이 저장되고, controlROM 에는 micro-operation 실행을 위한 제어신호, 즉 micro-instruction 이 저장되는 것이다.

장점

Micro-programmed control 방식의 CU 구현을 위해서는 복잡한 논리회로 설계가 필요하지 않다. 다만 control ROM 에 들어갈 micro-instruction 의 집합인 micro-program 만 필요하다. 논리회로 설계 대신 프로그래밍만 필요하므로 micro-programmed control 방식은 hardwired control 방식에 비해 더욱 쉽게 CU 의
구현이 가능하다. 따라서 이 방식으로 CU 를 구현하면 hardwired control 방식에 비해 보다 복잡하고 다양한 명령을 지원할 수 있게 된다. 그래서 micro-programmed control방식의 프로세서는 hardwired control 방식의 프로세서에 비해 더 많은 개수와 종류의 명령, 더 다양한 어드레싱 모드 등을 제공할 수 있다.

단점

micro-programmed control 방식은 ROM, 즉 메모리를 사용하므로 하드웨어 게이트를 사용하는 hardwired control 방식에 비해 속도가 느리다. 즉 주어진 입력에 대해 출력 신호를 만들어내는데 소요되는 시간이 길다. 본질적으로 메모리는 일반 게이트 회로에 비해 속도가 느리다. 따라서 micro-programmed control 방식은 고속의 컴퓨터를 만드는 데는 적합하지 않다고 볼 수 있다.

클록

컴퓨터는 전형적인 순차회로 sequential circuit 이다. 즉 프로세서는 일정 주기를 갖는 클록 clock 신호를 연속으로 받으며, 프로세서의 모든 동작은 클록에 동기 하여 일어난다. 예를 들어 하나의 클록 마다 하나의 명령 실행이 일어난다. 그림 12.11은 클록 신호의 파형 waveform 을 보여주고 있다. 가로축은 시간, 세로축은 전압을 각각 나타낸다.

따라서 클록이 빠를수록, 즉 클록 주파수가 높을수록 더 빠른 컴퓨터, 더 고성능의 컴퓨터가 만들어진다. 그러나 클록 주파수를 임의로 높일 수는 없다. 당연히 컴퓨터의 프로세서나 메모리 소재가 해당 클록 주파수를 지원할 수 있어야 한다.

또 다른 문제점은 명령어마다 실행 속도가 다를 수 있다는 것이다. 예를 들어 앞에서 배운 것처럼 add 명령은 4개의 단계를 밟는데 비해 ldr 명령은 5개의 단계를 필요로 한다. 반면 beq 명령은 2개의 단계만으로도 실행될 수 있다. 그러나 클록은 주기가 일정해야 하므로 클록 간의 시간은 가장 긴 단계를 밟는 ldr 과 같은 명령에 맞추어야 한다. 이렇게 하면 add 나 beq 명령은 더 짧은 시간에 끝날 수 있음에도 불구하고 클록에 맞추어 오랜 시간을 아무 것도 하지 않고 기다려야 한다. 즉 비효율성이 발생하는 것이다.

이런 비효율성을 극복할 수 있는 다른 방법이 뒤에서 공부할 명령어 파이프라이닝이다.

0개의 댓글