[컴퓨터 구조] CPU 작동 원리

byeol·2023년 3월 13일
0

오늘은 앞서 배웠던 CPU의 핵심 구성 부품 3가지 ALU, 제어장치, 레지스터에 대해서 그 역할과 종류에 대해 더 깊게 배워보고자 한다.

간단히 정리하면
ALU은 CPU의 연산을 담당한다.
제어장치는 명령을 읽어들이고 해석하고 실행한다.
레지스터는 CPU 안에 있는 작은 임시 저장 장치이다.

ALU(Arithmetic and Logical Unit)

  • 들어오는 정보

    • 레지스터로부터 오는 피연산자
    • 제어장치로부터 오는 제어신호
  • 내보내는 정보

    • 연산 수행 결과(특정 문자 혹은 숫자, 메모리 주소)
      메모리에 바로 저장되지 않고 일시적으로 레지스터에 저장된다.
      <CPU가 메모리에 접근하는 횟수가 많아질수록 프로그램 실행 속도가 느려질 수 있기 때문에>

    • 플래그 : 연산 결과에 대한 추가정보인 정보
      이 플래그를 플래그 레지스터에 보낸다.

      플래그 종류의미
      부호 플래그1: 음수 0:양수
      제로 플래그1: 연산 결과가 0인 경우/ 0: 연산 결과가 0이 아닌 경우
      캐리 플래그1: 올림수, 빌림수 발생 / 0: 발생하지 않음
      오버플로우 플래그1: 오버플로우 발생 / 0: 발생하지 않음
      인터럽트 플래그1: 인터럽트 가능 / 0: 인터럽트 불가능
      슈퍼바이저 플래그1: 커널 모드 실행 / 0: 사용자 모드 실행

      -> CPU가 프로그램을 실행하는 도중 반드시 기억해야 하는 일종의 참고 정보

제어장치

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

이 또한 받아들이는 정보와 내보내는 정보 2가지로 나누어 설명한다.

  • 받아들이는 정보
    • 클럭 : 컴퓨터의 모든 부품이 일사불란하게 움직일 수 있게 하는 시간 단위이다. (뚝-딱-뚝-딱) 일정한 박자의 노동요
    • 명령어 레지스터로부터 해석할 명령어: 이를 해석해서 컴퓨터 부품들에게 수행할 내용을 알려준다.
    • 플래그 : 플래그 레지스터로부터 플래그 값을 받는다.
    • 제어신호 : CPU 외부장치 장치도 제어신호를 발생시킬 수 있다. 예를 들어 입출력장치
  • 내보내는 정보
    • 외부 (제어버스를 통해서 외부에 전달)
      메모리나 입출력장치(보조기억장치)의 값을 읽고 싶거나 쓰고 싶을 때
    • 내부
      ALU: 수행할 연산 지시
      레지스터 : 레지스터간 데이터를 이동시킬 때, 저장된 명령어를 해석할 때

레지스터

프로그램 속 명령어와 데이터들은 실행 전후로 반드시 레지스터에 저장된다.

CPU가 공통적으로 포함하는 6개의 레지스터에 대해서 정리한다.

  • 프로그램 카운터
    = 메모리에서 가져올 명령어의 주소
    = 메모리에서 읽어들일 명령어의 주소가 저장된다.
    = "명령어 포인터"라고도 한다.
    카운터라는 이름이 붙은 이유는 만약 현재 명령어의 주소가 6이고 이를 제어신호와 ALU가 해석하고 연산한 하면 명령어의 주소가 +1되어 명령어의 주소가 7을 가리키는 방식

  • 메모리 주소 레지스터
    프로그램 카운터가 가리키는 명령어의 주소를 메모리 주소 레지스터가 받아서 주소 버스로 보내는 역할 + 제어장치가 제어 버스로 메모리 "읽기" 신호를 보낸다.

  • 메모리 버퍼 레지스터
    메모리 주소 레지스터와 제어 신호로 메모리와 주고 받는 데이터는 데이터 버스를 통해 주고 받는데 그 데이터는 메모리 버퍼 레지스터에 저장된다.

  • 명령어 레지스터
    방금 읽어 들인 명령어가 저장된다. 이는 메모리 버퍼 레지스터에 저장된 명령어가 명령어 레지스터로 가기 때문이다.
    제어 장치는 이 명령어 레지스터 속 명령어를 해석하고 제어신호를 내보낸다.

  • 범용 레지스터
    데이터와 주소 모두 저장할 수 있다.

  • 플래그 레지스터
    앞서 배웠듯이 연산결과에 대한 추가적인 정보를 저장하고 있다.

    특정 레지스터를 이용한 주소지정방식

    먼저 앞서 배운 내용을 정리해본다.

    명령어 = 연산코드 + 오퍼랜드
    오퍼랜드
    = 연산에 사용할 데이터 또는
    = 연산에 사용할 데이터가 저장된 메모리의 주소 또는
    = 연산에 사용할 데이터가 저장된 레지스터의 주소가 저장된다.

    주소 지정 방식(오퍼랜드 필드를 통해 연산에 사용할 데이터를 찾는 방식)

    • 즉시 주소 지정 방식 : 데이터가 직접 명시
    • 직접 주소 지정 방식 : 데이터가 저장된 메모리의 주소 명시
    • 간접 주소 지정 방식 : 유효 주소의 주소가 명시 + 유효주소와 연산에 사용할 데이터 모두 메모리에 저장되어 있다.
    • 레지스터 주소 지정 방식 : 데이터가 저장된 레지스터의 주소 명시
    • 레지스터 간접 주소 지정 방식 : 유효주소를 저장한 레지스터의 주소 + 레지스터에는 유효주소가 메모리에는 연산에 사용할 데이터가 저장되어 있다.

    이번에는 주소지정방식 중에서 특정 레지스터를 사용하는 방법에 대해서 배운다.

  • 스택 주소 지정 방식
    오퍼랜드에는 스택의 꼭대기를 가리키는 레지스터인 스택 포인터에 대한 주소가 저장된다.

    스택은 어디에 있는걸까?
    스택은 메모리에 있다.
    메모리 안에 스택처럼 사용할 수 있는 스택 영역이 정해져있다.

  • 변위 주소 지정 방식
    변위 주소 지정 방식은 오퍼랜드 필드에 어떤 변위 값이 담기고 그 값과 레지스터에 담긴 값을 더하여 메모리의 저장된 유효주소의 주소를 알아내는 방법이다. 즉 레지스터 간접 주소 방식의 변형이다.

    이 명령어는

    연산코드 + 레지스터 필드 + 오퍼랜드

    로 구성되어져 있다.

    레지스터 필드에는 어떤 레지스터를 이용할 것인가에 대한 것으로 레지스터의 종류가 담긴다.

    그 종류는 2가지이다. 프로그램 카운터, 베이스 레지스터

    • 상대 주소 지정 방식
      오퍼랜드 값 + 프로그램 카운터에 저장된 값 = 유효주소가 저장된 메모리의 주소값
      오퍼랜드 값은 변위값이기 때문에 +3이라면 세 칸씩 건너뛴 번지를 실행한다.
    • 베이스 레지스터 주소 지정 방식
      오퍼랜드 값 + 베이스 레지스터에 저장된 기준 주소의 값 = 유효주소가 저장된 메모리의 주소값
profile
꾸준하게 Ready, Set, Go!

0개의 댓글

관련 채용 정보