[컴퓨터 구조] CPU : 제어장치

bien·2024년 8월 7일
0

컴퓨터구조

목록 보기
5/10

제어장치

  • 제어장치(control unit, CU)
    • 프로세서의 조작을 지시하는 컴퓨터 중앙 처리장치(CPU)의 한 부품
    • 입출력 장치 간 통신 및 조율을 제어
    • 명령어들을 읽고 해석하며 데이터 처리를 위한 시퀀스를 결정
  • 타이밍과 제어 신호를 제공함으로써 다른 장치들의 조작을 지시한다. 모든 컴퓨터들은 제어 장치의 관리를 받는다.
    • 제어장치: 제어 신호를 내보내고, 명령어를 해석하는 부품
    • 제어신호: 컴퓨터 부품을 관리하고 작동시키기 위한 일종의 전기 신호

제어장치는 CPU의 구성요소 중 가장 정교하게 설계된 부품이다.
CPU 제조사마다 제어장치의 구현 방식이나 명령어를 해석하는 방식, 받아들이고 내보내는 정보에 조금씩 차이가 있다.
따라서 제어장치가 받아들이고 내보내는 가장 대표적인 정보에만 초점을 맞춰보자!

제어장치 수집 정보

제어장치는 클럭, 현재 수행할 명령어, 플래그, 제어 신호를 받아들인다.

1) 클럭 신호

  • 클럭(clock)
    • 컴퓨터의 모든 부품을 일사분란하게 움직일 수 있게 하는 시간 단위
    • 클럭의 "똑-딱-똑-딱" 주기에 맞춰 한 레지스터에서 다른 레지스터로 데이터가 이동되거나, ALU에서 연산이 수행되거나, CPU가 메모리에 저장된 명령어를 읽어들인다.
  • "컴퓨터의 모든 부품이 클럭 신호에 맞춰 작동한다" != "컴퓨터의 모든 부품이 한 클럭마다 작동한다"
    • 컴퓨터 부품들은 클럭이라는 박자에 맞춰 작동할 뿐 한 박자마다 작동하는 것은 아니다.
    • 다음 그림처럼 하나의 명령어가 여러 클럭에 걸쳐 실행될 수 있다.

2) 해석해야 할 명령어

  • 명령어 레지스터: CPU가 해석해야 할 명령어를 저장하는 특별한 레지스터
    • 제어장치는 이 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에서 수행해야 할 내용을 알려준다.

3) 플래그 값 (form 플래그 레지스터)

  • 플래그: ALU 연산에 대한 추가적인 상태 정보
    • 제어 장치가 제어 신호를 통해 컴퓨터 부품을 제어할 때 플래그 값을 참고해서 제어신호를 생성

4) 세스템 버스, 특히 제어 버스로 전달된 제어 신호

  • 제어신호는 CPU 뿐만 아니라 입출력장치를 비롯한 CPU 외부 장치도 발생시킬 수 있다.
    • 제어장치는 제어버스를 통해 외부로부터 전달된 제어 신호를 받아들이기도 한다.

제어장치 전달 정보

CPU 외부에 전달하는 제어신호, 내부에 전달하는 제어 신호

  • CPU 외부 제어 신호
    • 이는 곧, 제어 버스로 제어 신호를 내보낸다는 말과 같다.
    • 크게 (1)메모리에 전달하는 제어신호와 (2)입출력장치에 전달하는 제어신호가 있다.
      • (입출력장치: 보조기억장치 포함)
  • CPU 내부 제어 신호
    • ALU 전달 제어 신호: 수행할 연산을 지시하기 위해
    • 레지스터 전달 제어신호: 레지스터간 데이터 이동 및 저장된 명령어 해석을 위해

제어장치의 의의

공통버스 시스템에서, 몇몇 레지스터들에는 Load라는 입력선이 달려있다. 만약 Load가 없다면 클럭이 들어올 때 버스에 올라가 있는 데이터가 전부 각각의 레지스터에게 덮어 씌워지게 된다. (이런 경우 공통 버스 사용이 의미가 없을 것이다.)

하지만 이런 일은 발생하지 않는데, 이는 Load가 있기 때문이다. 공통 버스의 구조를 보면, 버스의 출력이 각각의 레지스터(PC, IR등)에 연결되어 있기 때문에 클럭이 들어오면 각 레지스터의 값은 전부 버스에 있는 값으로 바뀌어야 하지만, 실제로는 Load가 1인 상태인 레지스터에만 이러한 '덮어쓰기'가 이뤄진다. 이를 통해 원하는 레지스터의 값만 바꿀 수 있는 것이다.

Load를 1 혹은 0으로 조절하는 장치가 제어장치이다.

Load의 조절

이 Load를 어떻게 상황에 따라 만들어줄 수 있을까? 이는 '명령어'의 구성을 고려하여 조절할 수 있다.

명령어는 I비트, OP코드, 오퍼랜드로 구성된다.

  • OP코드 = 000~110 : 메모리 참조 명령
  • 오퍼랜드 : 메모리 주소 값 (즉시처리 X)
  • I비트: 직/간접주소

이와 같은 명령어를 그대로 회로로 구성하면 된다. 즉, IR에다가 이런 구분을 해주는 회로를 덧붙이면 되는 것이다. 이 과정의 결과로 만들어지는 회로를 제어장치라고 부른다.

위 그림은 제어장치의 가장 기본이 되는 부분을 그린 것이다. 그러나 아직 제어장치로 부족한데, 제어장치에는 반드시 '타이밍'과 관련된 시퀀셜 카운터(SC)가 존재해야 하기 때문이다. 제어장치는 위와 같은 디코더 구조와, SC를 모두 포함하는 것을 말한다.

타이밍

우리가 만드는 컴퓨터에는 클럭 펄서가 있는데, 클럭 자체는 아무런 '의미'를 가지고 있지 않은 그저 반복되는 전기신호일 뿐이다. 컴퓨터에서 사용되는 클럭 펄서는 '수정 진동자'라는 것을 이용해서 만드는데, 수정편(얇은 수정조각)에 2개의 전극을 달고 전압을 가하면서, 이 전압의 방향을 교체하면 일정한 주기의 진동을 주기적으로 일으키게 되는 원리를 이용한다. 그러니, 단순히 '무의미한' 전류가 흘렀다가 흐르지 않는 사태를 반복할 뿐이다.

각각의 회로가 '별도'로 존재할때에는, 클럭 신호가 어떤 '의미'를 가질 필요가 없다. 하지만, 이 회로들을 모두 모아서 큰 컴퓨터를 구성할 때는, 클럭 신호에 '의미'를 부여할 필요가 있다.

전자기학 법칙들 때문에, 메모리 읽기와 쓰기 등이 이뤄지는 '메모리 사이클'은 되게 '클럭 사이클'보다 상당히 더 길다. 예를들어, ALU가 '이번 클럭'에서 메모리에서 읽어온 값을, 기존의 AC에 있는 값과 더하기로 했는데 메모리에서 '이번 클럭'이 끝날때 까지도 값을 읽어오지 못하는 일이 생기는 것이다.

이 경우, ALU는 '메모리에서 읽어오는 작업'이 끝날 때 까지 기다려야 한다. 그러나 우리의 클럭 펄서는 이러한 내용을 알지 못하고, 그냥 계속 반복적으로 클럭을 뿌려줄 뿐이다. 그러면 ALU도 '기다리는 것'을 할 수 없고, '다음 클럭'에 대해 작동하게 된다.

이러한 이유로, '클럭'에 '의미'를 부여해주는 일이 필요한데, 이런 일을 '타이밍'이라고 한다. 이 역할을 수행하는 것이 바로 시퀀스 카운터(SC)이다.

시퀀스 카운터

시퀀스 카운터는 그저 클럭이 들어오면 값을 무조건 1 증가시키는 일반적인 카운터와는 다르다. 시퀀스 카운터는 INC(Increment - 증가) 입력을 가지고 있다. 클럭이 1이고, 'INC'입력이 들어왔을 때 값을 1 증가시킨다.

어떻게 시퀀스 카운터를 통해 '기다리는' 작업을 수행할까? CPU에서는 시퀀스 카운터의 출력이 무엇이냐에 따라 '공통 버스'에서 각 레지스터에 붙어있던 Load를 적절히 1로 만들어준다. 따라서, 다음 작업이 Load되지 않게 할 수도 있다. 시퀀스 카운터의 출력은 '클럭'과 상관없이 INC의 입력이 들어오지 않으면 증가하지 않으므로, 다음 단계로 넘어가지 않게 막을 수 있고, '대기'가 가능해진다.

또한 시퀀스 카운터의 출력값에 따라 수행되어야 하는 작업의 회로가 작동한다. 이때, "어떤 출력 값일 때 어떤 회로가 작동할지"가 이미 정해져있다.

CPU는 패치, 디코드, 명령실행, 결과쓰기의 4가지 단계의 '반복되는 사이클'이 존재한다. 이 사이클의 구간 구간에서 실행돼야 하는 명령은 시퀀스 카운터가 특정 값을 가질때만 실행되게 되어있다. 가령 시퀀스 카운터의 출력이 T0일 때는 PC의 값을 AR로 전송한다. 반대로 이야기해서, PC의 값이 AR로 전송되는 것은 시퀀스 카운터의 출력이 T0일때만 일어난다.

참고

즉, 시퀀스 카운터의 출력이 뭐냐에 따라서, (PC값을 AR로 전송가거나 하는 등의) 명령들을 실행하는 회로가 활성화 되는 것이다.

시퀀스 카운터는 디코더를 포함하고 있는데, 4비트 짜리라고 하면 T0~T15의 16개의 명령어 실행이 가능한 것이다.

결국, 시퀀스 카운터의 출력은 항상 T0에서 T15까지의 도선 중 하나가 된다. T0에 전류가 흐르면 PC의 값을 AC로 전송하는 회로가 동작하고, T1에 전류가 흐르면 또 다른 어떤 작업을 하는 회로가 동작하는 등의 방식으로 작동한다. 즉, 컴퓨터의 사이클 각 시간에서 해야하는 작업은 이미 정해져있다는 의미가 된다.

CLR(클리어) 입력도 가지고 있어 이게 1이면 시퀀스 카운터의 값이 0이된다. 이건 '사이클이 반복되게'하기 위해 중요하다. T15까지의 값을 다 수행하면, 클리어를 통해 다시 T0부터 수행한다. '다음 사이클'이 실행되는 것이다.

📌 정리

  • 제어장치 = IR이 붙어있는 디코더 + SC

Reference

profile
Good Luck!

0개의 댓글