CPU의 작동 원리: ALU와 제어장치

최건우·2023년 1월 21일
0

ALU와 제어장치

  • CPU는 ALU, 제어장치, 레지스터로 구성된다.
  • ALU: 계산 담당
  • 제어장치: 명령어를 읽어들이고 해석
  • 레지스터: CPU의 임시 저장 장치

ALU

ALU가 받아들이는 정보

ALU는 계산을 수행하는 부품으로서, 계산을 위한 피연산자, 연산 이 필요하다.

  • 피연산자: 레지스터가 전달.
  • 연산: 제어장치가 제어 신호를 통해 전달.
  • '1 + 2' 라는 연산을 수행할 때, 1과 2는 피연산자에 해당하고 '+' 는 연산에 해당한다.
  • ALU는 산술 연산 뿐만 아니라, 논리 연산을 비롯한 다양한 연산을 수행한다.

ALU가 내보내는 정보

1. 결괏값

  • ALU의 output, 즉 연산의 수행 결과는 숫자, 문자, 메모리 주소 등 다양한 결과를 산출한다.
  • 결괏값은 메모리에 저장되기 전, 일시적으로 레지스터에 저장된다.
    • CPU가 메모리보다 레지스터에 접근하는 속도가 훨씬 빠르기 때문이다. 이는 프로그램 실행 속도에도 영향을 줄 수 있기에, 레지스터에 우선 저장하는 것이다.

2. 플래그

  • 플래그란, 연산 결과에 대한 추가적인 상태 정보를 가리킨다.

    • 예를 들면, 결괏값이 이진수일 때 결괏값의 부호(+, -)를 쉽게 판단할 수 있도록 추가 정보로서 플래그를 제공.
    • 혹은, 연산 결과가 연산 결과를 담을 레지스터 크기보다 클 때(=overflow 상태) '결괏값이 너무 크다'는 플래그를 보냄.
  • 플래그들은 프로그램 실행 도중 반드시 기억해야 하는 참고 정보들이며, 플래그 레지스터라는 플래그 값 저장공간에 저장됨.

  • 대표적인 플래그

    • 부호 플래그: 연산한 결과의 부호를 나타냄.
    • 제로 플래그: 연산 결과가 0인지 여부를 나타냄.
    • 캐리 플래그: 연산 결과 올림수나 빌림수가 발생했는지를 나타냄.
    • 오버플로우 플래그: 오버플로우가 발생했는지를 나타냄.
    • 인터럽트 플래그: 인터럽트가 가능한지를 나타냄.
    • 슈퍼바이저 플래그: 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타낸다.
  • 그 외 ALU 내부 회로

    • 가산기(덧셈)
    • 보수기(뺄셈)
    • 시프터(시프트 연산)
    • 오버플로우 검출기
    • 등...

제어장치

  • 제어장치: 제어 신호를 내보내고, 명령어를 해석하는 부품.
  • 제어 신호: 컴퓨터 부품들을 관리하고, 작동시키기 위한 일종의 전기 신호

제어장치가 받아들이는 정보

1. '클럭 신호'

  • 클럭(clock) 이란, 컴퓨터의 부품을 움직일 수 있게 하는 시간 단위이다.
  • 정해진 클럭 주기(부품별로 상이함)에 따라 부품들이 작동하게 된다. 가령, 메모리에서 명령어를 가져오는 클럭 횟수와 레지스터에서 레지스터로 데이터가 이동하는 클럭 횟수는 다를 수 있다. 즉, 모든 부품이 "한 클럭" 단위로 작동하는 것은 아니다.

2. '해석해야 할 명령어'

  • 명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한다.
  • 이를 통해 제어 신호를 발생시켜 각 부품들에 수행해야 할 내용을 전달한다.

3. 플래그 레지스터 속 '플래그 값'

  • 제어 신호를 발생시킬 때, 플래그 값을 읽어 연산의 추가적인 상태 정보를 반영한다.

4. 제어 버스로 전달된 '제어 신호'

  • 제어 버스를 통해 외부 장치(ex. 메모리, 입출력장치, 보조기억장치 등) 로부터 전달된 제어 신호를 받아들이기도 한다.
  • 반대로, CPU 외부로 제어 신호를 전달하기도 한다.

제어장치가 내보내는 정보

  • CPU 내부에 전달하는 제어 신호
    • (1) ALU에 전달하는 신호로서, 수행할 연산을 지시하는 신호
    • (2) 레지스터에 전달하는 신호로서, 레지스터 간에 데이터를 이동시키거나, 레지스터에 저장된 명령어를 해석하기 위해 전달하는 신호.
  • CPU 외부에 전달하는 제어 신호
    • 제어 버스를 통해 전달
    • 메모리에 전달하는 신호로서, 메모리에 저장된 값을 읽거나, 메모리에 새로운 값을 쓰려고 할 때 보내는 신호.
    • 입출력장치(보조기억장치 포함)에 전달하는 신호로서, 입출력장치의 값을 읽거나 입출력장치에 새로운 값을 쓰려고 할 때 보내는 신호.




*이 글은 '혼자 공부하는 컴퓨터 구조+운영체제(한빛미디어, 2022)'를 개인적인 학습을 목적으로 요약한 게시글입니다. 문제가 있는 경우, 지적해 주시면 감사하겠습니다.

profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글