[ComputerScience] CPU의 ALU
CPU의 ALU
CPU의 산술논리연산장치(ALU, Arithmetic and Logic Unit)는 말 그대로 CPU 내부의 계산기라고 볼 수 있습니다.
이 장치는 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산과 AND, OR, NOT 같은 논리 연산을 처리합니다.
이러한 설명은 교재나 기초 개념에서 사용하는 표준적인 정의이며, 현대의 CPU에서는 ALU가 기본적인 산술 연산을 담당하고 곱셈이나 나눗셈과 같은 복잡한 연산은 별도의 연산 유닛에서 처리되기도 합니다.
프로그램이 실행되면서 발생하는 대부분의 기본적인 산술 및 논리 연산은 ALU를 거치며, CPU가 명령어를 처리할 때 실질적인 계산을 담당합니다.
부동소수점 연산은 FPU(Floating Point Unit)와 같은 별도의 연산 장치가 담당하기도 하며, 메모리 접근은 LSU(Load/Store Unit), 주소 계산은 AGU(Address Generation Unit)와 같은 전용 유닛이 처리합니다.
ALU는 레지스터로부터 피연산자를 입력받아 연산을 수행하고, 그 결과를 다시 레지스터에 저장하며 동시에 플래그를 갱신합니다.
아래 그림은 ALU가 어떤 정보를 받아들이고 내보내는지를 표현한 그림입니다.

출처: 강민철, 『혼자 공부하는 컴퓨터 구조+운영체제』, 한빛미디어, 2022, 105쪽
연산 수행 결과는 특정 숫자나 문자가 될 수도 있고, 메모리 주소가 될 수 도 있습니다.
이 결과값은 바로 메모리에 저장되지 않고 일시적으로 레지스터에 저장됩니다.
CPU가 메모리에 접근하는 속도가 레지스터에 접근하는 속도보다 훨씬 느리고, 연산 후 항상 메모리에 접근한다면 프로그램 실행 속도가 저하될 수 있기 때문입니다.
또한 이후 연산에서 결과를 빠르게 재사용하기 위해서도 레지스터에 저장됩니다.
플래그
ALU는 계산 결과와 더불어 추가적인 상태 정보를 나타내는 플래그를 내보냅니다.
이러한 플래그들은 프로그램 실행 도중 조건 판단 등에 사용되는 중요한 참고 정보입니다.
대표적인 플래그는 다음과 같습니다.
연산 결과 플래그(ALU 관련)
| 종류 | 의미 | 사용 예시 |
|---|---|---|
| 부호 플래그 | 연산 결과의 부호를 나타낸다. | 부호 플래그가 1일 경우 계산 결과는 음수, 0일 경우 계산 결과는 양수를 의미한다. |
| 제로 플래그 | 연산 결과가 0인지 여부를 나타낸다. | 제로 플래그가 1일 경우 연산 결과는 0, 0일 경우 연산 결과는 0이 아님을 의미한다. |
| 캐리 플래그 | 연산 결과 올림수나 빌림수가 발생했는지를 나타낸다. | 캐리 플래그가 1일 경우 올림수나 빌림수가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다. |
| 오버플로우 플래그 | 오버플로우가 발생했는지를 나타낸다. | 오버플로우 플래그가 1일 경우 오버플로우가 발생했음을 의미하고, 0일 경우 발생하지 않았음을 의미한다. |
CPU 상태 플래그
| 종류 | 의미 | 사용 예시 |
|---|---|---|
| 인터럽트 플래그 | 인터럽트가 가능한지를 나타낸다. | 인터럽트 플래그가 1일 경우 인터럽트가 가능함을 의미하고, 0일 경우 인터럽트가 불가능함을 의미한다. |
| 슈퍼바이저 플래그 | 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지를 나타낸다. | 슈퍼바이저 플래그가 1일 경우 커널 모드로 실행 중임을 의미하고, 0일 경우 사용자 모드로 실행 중임을 의미한다. |
이 플래그들은 플래그 레지스터(상태 레지스터)에 저장됩니다.
플래그 레지스터는 이름 그대로 이러한 상태 정보를 저장하는 레지스터입니다.
댓글남기기