컴퓨터구조 - ALU, 제어장치, 레지스터

Leezi·2023년 2월 22일
2

컴퓨터구조

목록 보기
6/7

CPU는 메모리에 저장된 명령어를 읽어 드리고, 해석하고, 실행하는 장치입니다.
CPU 내부에는 계산을 담당하는 ALU, 명령어를 읽어 들이고 해석하는 제어장치(CU), 내부 임시 저장장치인 레지스터가 구성요소로 있습니다.

ALU(산술논리연산장치)

ALU(산술논리연산장치)

ALU(산술논리연산장치)는 계산기로 덧셈, 뺄셈 같은 두 숫자의 산술연산과 배타적 논리합, 논리곱, 논리합 같은 논리연산을 계산하는 디지털 회로입니다.
ALU에서 어떤 형태의 산술연산을 계산하기 위해서는 피연산자와 수행할 연산이 필요합니다. ALU는 레지스터를 통해 피연산자를 받아들이고, 제어장치(CU)로부터 수행할 연산을 알려주는 제어신호를 받아들여 다양한 연산을 수행합니다. 연산 후에 ALU는 결과값은 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장하고 연산결과에 대한 추가적인 상태 정보인 플래그(flag)를 플래그 레지스터로 내보냅니다.

플래그(flag)

플래그란 ALU가 처리한 연산결과에 대한 추가적인 상태 정보를 의미하고 '플래그 레지스터'에 저장됩니다. 이러한 플래그는 CPU가 프로그램을 실행하는 도중에 반드시 기억해야되는 일종의 참고 정보라고 생각하면 됩니다.

플래그 레지스터

종류의미사용예시
부호 플래그연산한 결과의 부호를 나타낸다.부호플래그가 1일 경우 계산 결과는 음수, 0일 경우 계산 결과는 양수를 의미한다.
제로 플래그연산 결과가 0인지 여부를 나타냄제로 플래그가 1일 경우 연산 결과는 0, 0일경우 연산결과는 0이 아님을 의미한다.
캐리 플래그연산 결과 올림수나 빌림수가 발생했는지를 나타낸다.캐리 플래그가 1일 경우 올림수나 빌림수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다.
오버플로우 플래그오버플로우가 발생했는지를 나타냄.오버플로우 플래그가 1일 경우 오버플로우가 발생했음을 의미하고 0일 경우 발생하지 않았음을 의미한다.
인터럽트 플래그인터럽트가 가능한지를 나타낸다.인터럽트 플래그가 1일 경우 인터럽트가 가능함을 의미하고 0일 경우 인터럽트가 불가능함을 의미한다.
슈퍼바이저 플래그커널모드인지, 사용자모드인지를 나타낸다.슈퍼바이저 플래그가 1일 경우 커널모드로 실행 중임을 의미하고, 0일 경우 사용자 모드로 실행 중임을 의미한다.
  • 오버플로우(overflow) : 연산결과가 연산 결과를 담은 레지스터보다 큰 상황
  • 인터럽트(interupt) : CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능
  • 슈퍼바이저(supervisor mode) : 운영체제에 커널이 동작되는 모드

제어장치(CU, Control Unit)

제어창지는 제어 신호(control signal)를 통해서 명령어를 해석, 조작을 지시하는 장치입니다. 제어 신호는 컴퓨터 부품을 관리하고 작동시키기 위한 일종의 전기 신호 입니다.
제어장치

제어장치의 입력

  1. 클럭 신호

    • 클럭(clock)이란 논리상태 H(high,논리 1)와 L(low,논리 0)이 주기적으로 나타나는 신호입니다.
    • 많은 경우 디지털 회로에서 클럭 신호에 맞추어 신호의 처리를 하는 동기 처리를 위해 사용합니다.
  2. 명령어 레지스터(IR)를 통해서 해석해야 할 명령어

    • CPU가 해석해야 하는 명령어는 명령어 레지스터에 저장됩니다.
    • 해당 레지스터로부터 명령어를 받아서 해석한 후 제어 신호를 발생해 수행할 내용을 전달합니다.
  3. 플래그 레지스터를 통해 추가 상태 정보 플래그 값

    • 플래그는 ALU 연산에 대한 추가 상태 정보이므로 제어장치가 명령어 해석에 필요한 추가 정보입니다.
  4. 제어버스로 전달 된 제어신호를 받기

    • 제어신호는 CPU뿐만아니라 다른 외부 장치에서도 발생시킬 수 있어 해당 정보를 받아드립니다

제어장치의 출력

제어 장치는 CPU 외부로 메모리나 입출력장치의 값을 읽거나 쓰기 위해서 제어신호를 전달하거나 CPU 내부로 ALU나 레지스터의 동작을 지시하기 위해서 제어신호를 내보냅니다.


레지스터

레지스터는 CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치입니다.
프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장되기 때문에 프로그래머 기준으로 매우 중요합니다. 레지스터만 잘 관찰해도 프로그램의 자세한 실행 과정을 알 수 있습니다.

레지스터는 CPU마다 이름, 크기, 종류가 매우 다양하지만 공통적으로 아래 8가지는 꼭 알아두어야 하는 레지스터입니다. (다른 레지스터는 각 CPU 제조사 홈페이지나 공식 문서 등에서 확인 할 수 있습니다.)

1. 프로그래밍 카운터(PC, Program Counter)

프로그램 카운터 또는 명령어 포인터(IP, Instruction Pointer)는 메모리에서 가져올 명령어의 주소, 즉 메모리에서 읽어드릴 명령어의 주소를 저장합니다.

2. 명령어 레지스터(IR, Instruction Register)

명령어 레지스터(IR)는 메모리에서 읽어 드린 해설할 명령어를 저장하는 레지스터입니다.

3. 메모리 주소 레지스터(MAR, Memory Address Register)

메모리 주소 레지스터(MAR)은 메모리의 주소를 저장하는 레지스터입니다. CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거치게 됩니다.

4. 메모리 버퍼 레지스터(MBR, Memory Buffer Register)

메모리 버퍼 레지스터(MBR) 또는 메모리 데이터 레지스터(MDR, Memory Data Register)는 메모리와 주고 받은 데이터나 명령어을 저장하는 레지스터입니다. CPU가 MAR을 거쳐 주소버스로 값을 내보내면 데이터버스로 데이터가 MBR를 거칩니다.

5. 범용 레지스터(general purpose register)

범용 레지스터는 이름 그래도 다양하고 일반적인 상황에서 자유롭게 사용할 수 잇는 레지스터입니다. 일반적으로 MAR은 메모리 주소값만 MBR는 데이터버스로 주고 받을 값만 저장하지만 범용레지스터는 데이터와 주소를 모두 저장할 수 있습니다.

6. 플래그 레지스터(flag register)

플래그 레지스터는 ALU 연산 결과에 따른 부가적인 정보인 플래그를 저장하는 레지스터입니다.

7. 스택 포인터(stack pointer)

스택포인터는 스택주소 지정방식을 사용할때 사용하는 레지스터로, 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터입니다.

스택주소 지정방식이란 메모리 안에 스택처럼 사용할 영역이 정해져 있는 스택영역의 주소를 지정하는 방식입니다.

8. 베이스 레지스터(base register)

베이스 레지스터란 베이스 레지스터 주소 지정 방식에서 사용하는 '기준 주소를 저장하는 레지스터입니다.


제어장치 동작 순서

① PC에 저장된 주소를 MAR로 보낸다.
② MAR에 저장된 주소에 있는 기억장치의 명령어를 MBR로 읽어 오고, PC를 증가시킨다. 명령어의 실행을 위해 읽어 온 명령을 IR에 저장한다.
③ 명령어의 연산코드는 명령어 해독기로 보내고 오퍼랜드는 주소처리기로 보낸다.
④ 주소처리기는 MAR을 통해 기억장치에 접근하여 명령어 수행에 필요한 오퍼랜드의 주소 또는 다음 명령어의 주소를 계산한다.
⑤ 제어신호 발생기에서는 위의 ①~④ 과정에서 필요한 제어신호와 연산코드를 해독하여 명령 수행을 위한 제어신호를 발생시킨다. 이때 명령어가 기억장치의 주소를 참조하는 명령어라면 주소처리기를 동작시켜 다음에 수행될 명령어의 주소를 계산한다.
⑥ 현재 IR에 있는 명령어의 수행이 끝나면 증가된 PC의 내용은 다음에 수행할 명령어의 주소를 지정하거나 분기가 필요한 경우 해당 명령어의 주소를 지정하는데 이는 다시 ①부터의 과정을 반복하며 실행된다.

💡 일반적으로 프로그램 카운터는 꾸준히 증가하며 프로그램을 차례대로 실행하지만 종종 프로그램 카운터가 실행중인 명령어의 다음 번지 주소가 아닌 전 혀 다름 값으로 업데이트가 되는 경우가 있습니다.
명령어중 JUMP, CONDITIONAL JUMP, CALL, RET와 같이 특정 메모리 주소로 실행 흐름을 이동하는 명령어가 실행되었을 때 프로그램 카운터가 변경된 주소로 바뀝니다.

0개의 댓글