컴퓨터 구조와 운영체제

3. ALU, 제어장치, 레지스터

taemin_kwon 2025. 8. 16. 14:23

CPU 내부에는 계산을 담당하는 ALU(Arithmetic Logic Unit)와 명령어를 읽어 들이고 해석하는 제어장치(Control Unit), 작은 임시저장 장치인 레지스터(Register)가 있다.

 

ALU는 피연산자를 레지스터를 통해 받고 제어장치로 부터 수행할 연산을 제어신호로써 받는다. 

연산을 수행한 결과는 특정 숫자나 문자가 될수도있고, 메모리 주소가 될수도 있다. 이 결과 값은 일시적으로 레지스터에 저장된다. 바로 메모리에 저장되지 않는다. 메모리 보다 레지스터의 처리 속도가 더 빠르기 때문이다.

 

ALU는 연산 결과에 대한 추가적인 상태정보로 Flag를 내보낸다.

부호, 제로, 캐리, 오버플로우, 인터럽트, 슈퍼바이저 등등 과 같은 플래그 들을 통해 정보를 다룬다.

제로 플래그: 연산 결과가 0인지의 여부를 판단, 1이면 0의 값을 갖는다.

캐리 플래그: 올림수나 빌림수가 발생했는지 판단, 1이면 발생한것.

오버 플로우: 1이면 오버플로우가 발생함을 뜻한다.

인터럽트: 인터럽트가 가능한지에 대한 여부를 판단할 때 쓰이며, 1이면 가능을 의미한다.

슈퍼바이저: 커널 모드로 실행중인지 사용자 모드로 실행중인지 확인 1이면 커널모드, 0이면 사용자모드.

이러한 플래그는 프로그램을 실행하는 도중 CPU가 반드시 기억해야 하는 참고 정보이다. 플래그 레지스터에 저장된다.

 

제어신호는 컴퓨터 부품을 관리하고 작동시키기 위한 일종의 전기신호다.

  1. 제어신호는 클럭 신호를 받아들인다.
    클럭(clock)이란 컴퓨터의 모든 부품들을 움직일 수 있게 하는 '시간단위'이다. 레지스터로 데이터가 이동되거나 CPU가 메모리에 저장된 명령어를 읽어들인다. 또는 ALU에서 연산이 수행된다.
  2. 해석해야할 명령어를 받아들인다.
    명령어 레지스터로부터 해석할 명령어를 받아들이고 해석한 뒤, 제어 신호를 발생시켜 컴퓨터 부품들에 수행해야할 내용을 알려준다.
  3. 플래그 레지스터 속 플래그를 받아들인다.
  4. 제어장치는 시스템 버스중 제어버스로 전달된 제어신호를 받아들인다.

 

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

레지스터에 저장된 값만 관찰해도 프로그램의 실행 흐름을 파악할 수 있다.

 

반드시 알아야할 레지스터들은 아래와 같다.

프로그램카운터, 명령어, 메모리 주소, 메모리 버퍼 레지스터들은 같은 사이클에 동작한다.

스택 포인터, 베이스레지스터는 주소 지정방식에 따라 사용하게 된다.

  • 프로그램 카운터(Program Counter or Istruction Pointer)
    메모리에서 가져올 명령어의 주소를 저장한다. 명령어 포인터 역할을 한다.
  • 명령어 레지스터
    메모리에서 읽어들인 명령어를 저장한다. 제어장치는 명령어 레지스터 속 명령어를 받아들이고 해석한뒤 제어신호를 내보낸다.
  • 메모리 주소 레지스터
    메모리의 주소를 저장하는 레지스터다. CPU가 읽어 들이고자하는 주소값을 주소 버스로 보낼 때 주소레지스터를 거친다.
  • 메모리 버퍼 레지스터
    메모리와 주고 받을 값(데이터, 명령어)을 저장한다.
    메모리에 쓰고싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거친다.

  • 범용 레지스터
    이름 그대로 일반적인 상황에서 자유롭게 사용된다. 데이터와 주소 모두 저장할 수 있다.
  • 플래그 레지스터
    ALU 연산 결과에 따른 플래그를 저장한다. CPU 상태에 부가적인 정보를 저장한다.
  • 스택 포인터
    스택 주소 지정방식에 사용된다.
    stack pointer가 3번지를 가르키고 있는 상태가 되며, pop을 하게 되면 4번지에 있는 데이터 C가 나온다.
    메모리를 일종의 스택처럼 사용하고 주소를 스택 포인터로써 관리하게 되는 것이다.
    메모리 안에는 스택처럼 사용할 영역을 따로 지정해둬야 한다. 이를 스택영역이라 한다.

 

  • 베이스 레지스터
    프로그램 카운터와 베이스 레지스터는 변위주소 지정방식에 사용된다.
    변위 주소 지정방식은 상대 주소 지정방식과 베이스 레지스터 지정방식이 있다.
  • 상대 주소 지정방식: 오퍼랜드와 프로그램 카운터 값을 더하여 유효주소를 얻는다. if문과 유사하게 분기 처리를 통한 코드 실행 시 사용된다.

상대 주소 지정방식

  • 베이스 레지스터 주소 지정방식: 오퍼랜드와 베이스 레지스터의 값을 더하여 유효주소값을 얻는다. 기준주소 값으로부터 떨어진 거리를 오퍼랜드가 나타낸다. 베이스 레지스터는 기준주소 값이다.

베이스 레지스터 주소 지정방식

'컴퓨터 구조와 운영체제' 카테고리의 다른 글

2. 소스코드와 명령어  (7) 2025.08.12
1. 컴퓨터 구조의 큰그림  (4) 2025.08.07