본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

산술 논리 장치(算術論理裝置, Arithmetic Logic Unit, ALU)는 중앙 처리 장치(CPU) 등 디지털 연산 회로에서 정수 산술 연산과 비트 단위 논리 연산을 수행하는 조합 논리 회로이다.

산술 논리 장치는 컴퓨터의 명령 실행 과정에서 실제 계산을 담당하는 핵심 구성 요소이다. 일반적으로 두 개 이상의 피연산자와 수행할 연산을 지정하는 제어 신호를 입력으로 받아, 덧셈·뺄셈 같은 산술 연산이나 AND·OR·XOR 같은 논리 연산의 결과를 출력한다.[1]

ALU는 CPU 내부의 실행 장치에 포함되는 경우가 많으며, 레지스터, 제어 장치, 데이터 버스와 함께 명령어 실행 경로를 구성한다. 정수 연산을 주로 다루는 ALU와 달리, 부동소수점 수의 연산은 별도의 부동소수점 장치(FPU)가 담당하는 구조가 일반적이다.[2]

ALU가 제공하는 기능은 프로세서 설계와 명령어 집합 구조에 따라 달라지지만, 일반적으로 다음 기능을 포함한다.

구분 대표 연산 설명
산술 연산 덧셈, 뺄셈, 증가, 감소 정수형 이진수 값을 대상으로 계산을 수행한다.
논리 연산 AND, OR, NOT, XOR 비트 단위로 논리 연산을 수행한다.
비교 연산 같음, 큼, 작음 두 값을 비교하고 상태 플래그나 조건 분기 판단에 필요한 결과를 만든다.
시프트 및 회전 연산 논리 시프트, 산술 시프트, 비트 회전 비트열을 좌우로 이동하거나 회전시켜 곱셈·나눗셈, 비트 마스크 처리 등에 활용한다.

일부 간단한 ALU는 덧셈기, 논리 게이트, 멀티플렉서만으로 구성되며, 복잡한 프로세서에서는 여러 ALU가 병렬로 배치되어 여러 명령을 동시에 처리할 수 있다.[3]

ALU는 보통 조합 논리 회로로 설계된다. 입력 피연산자와 연산 선택 신호가 안정되면, 회로 내부의 전파 지연 시간이 지난 뒤 결과가 출력된다.[4]

일반적인 동작 흐름은 다음과 같다.

  1. 명령어 해석 단계에서 제어 장치가 수행할 연산을 결정한다.
  2. 레지스터나 데이터 경로에서 피연산자가 ALU 입력으로 전달된다.
  3. ALU는 제어 신호에 따라 산술 회로 또는 논리 회로의 결과를 선택한다.
  4. 계산 결과와 상태 플래그가 출력된다.
  5. 결과는 목적지 레지스터, 메모리 경로 또는 다음 명령의 조건 판단에 사용된다.

ALU의 연산 결과는 단순한 결과값뿐 아니라 상태 플래그로도 표현된다. 상태 플래그는 조건 분기, 오버플로우 처리, 다중 정밀도 연산 등에 사용된다.[5]

플래그 의미
ZF 결과가 0이면 설정되는 제로 플래그
CF 자리올림이나 빌림이 발생했음을 나타내는 캐리 플래그
OF 부호 있는 정수 연산에서 표현 범위를 벗어났음을 나타내는 오버플로우 플래그
SF 또는 N 결과의 부호 비트가 음수 방향임을 나타내는 사인 플래그 또는 네거티브 플래그

플래그의 이름과 세부 의미는 프로세서 아키텍처마다 다를 수 있다. 예를 들어 x86 계열에서는 ZF, CF, OF, SF 등이 조건 분기 명령과 함께 사용된다.

ALU는 목적에 따라 다양한 회로 블록을 조합해 구현된다.

  • 가산기: 덧셈과 뺄셈의 기반이 되는 회로이다. 뺄셈은 보통 2의 보수 표현과 가산기를 이용해 구현한다.
  • 논리 게이트: AND, OR, XOR, NOT 등의 비트 단위 연산을 수행한다.
  • 시프터: 비트열을 좌우로 이동한다.
  • 비교 회로: 두 피연산자의 차이나 부호, 플래그를 이용해 비교 결과를 만든다.
  • 멀티플렉서: 여러 연산 회로의 출력 중 제어 신호에 맞는 결과를 선택한다.
  • 플래그 생성 회로: 결과값을 바탕으로 제로, 캐리, 오버플로우 등의 상태 정보를 만든다.

CPU에서의 역할

편집 원본 편집

CPU는 명령어를 가져오고 해석한 뒤, 필요한 데이터 연산을 ALU에 맡긴다. ALU는 산술 연산과 논리 연산을 처리하므로 프로그램 실행에서 변수 계산, 주소 계산, 조건 비교, 비트 조작 등 다양한 작업에 관여한다.

현대 CPU는 하나의 단일 ALU만 사용하는 구조가 아니라, 정수 실행 유닛 안에 여러 개의 ALU를 두거나 파이프라인 구조와 결합하여 명령 처리량을 높인다. GPU, DSP, 마이크로컨트롤러, FPGA 기반 연산 회로 등도 목적에 맞는 형태의 ALU 또는 유사한 연산 블록을 포함할 수 있다.[6]

ALU라는 개념은 초기 컴퓨터의 연산 장치에서부터 존재했으며, 집적회로와 마이크로프로세서의 발전에 따라 하나의 칩 내부에 포함되는 형태로 발전했다. 인텔 4004는 1971년에 등장한 초기 상용 마이크로프로세서 중 하나로, 계산기용 칩셋 프로젝트에서 출발해 프로그래머블 로직 마이크로칩의 중요한 사례가 되었다.[7]

이후 마이크로프로세서는 더 넓은 데이터 폭, 더 많은 실행 유닛, 파이프라인, 슈퍼스칼라 구조를 채택하며 발전했다. 이에 따라 ALU도 단순한 1비트 또는 4비트 단위 회로에서 다중 비트 병렬 연산 회로와 복수 실행 유닛 구조로 확장되었다.

ALU와 FPU의 차이

편집 원본 편집

ALU는 주로 정수와 비트 단위 연산을 처리한다. 반면 FPU(Floating Point Unit)는 부동소수점 형식의 실수 연산을 처리한다. 정수 연산은 주소 계산, 배열 인덱스, 조건 비교, 비트 마스크 등에 자주 사용되고, 부동소수점 연산은 과학 계산, 그래픽스, 인공지능, 시뮬레이션 등에 많이 사용된다.

일부 단순한 프로세서나 마이크로컨트롤러는 별도의 FPU 없이 정수 ALU만 제공할 수 있으며, 이 경우 부동소수점 연산은 소프트웨어 루틴으로 처리된다.

ALU 설계에서는 다음 요소가 중요하다.

  • 비트 폭: 8비트, 16비트, 32비트, 64비트 등 한 번에 처리할 수 있는 데이터 크기를 의미한다.
  • 지연 시간: 입력이 들어온 뒤 결과가 안정될 때까지 걸리는 시간이다.
  • 면적: 반도체 칩에서 회로가 차지하는 공간이다.
  • 전력 소비: 모바일·임베디드·서버 환경에서 중요한 설계 요소이다.
  • 명령어 지원 범위: 프로세서가 제공하는 산술·논리·시프트·비트 조작 명령에 따라 ALU 구조가 달라진다.

고성능 프로세서에서는 빠른 가산기 구조, 병렬 실행, 파이프라인, 분기 예측과 같은 기술이 ALU 주변의 데이터 경로와 함께 성능에 영향을 준다.

  1. ↑ Arithmetic logic unit, https://en.wikipedia.org/wiki/Arithmetic_logic_unit, 확인한 날짜: 2026년 6월 5일
  2. ↑ 산술 논리 장치, https://ko.wikipedia.org/wiki/%EC%82%B0%EC%88%A0_%EB%85%BC%EB%A6%AC_%EC%9E%A5%EC%B9%98, 확인한 날짜: 2026년 6월 5일
  3. ↑ ALU, http://www.ktword.co.kr/test/view/view.php?no=374, 확인한 날짜: 2026년 6월 5일
  4. ↑ Arithmetic logic unit, https://en.wikipedia.org/wiki/Arithmetic_logic_unit, 확인한 날짜: 2026년 6월 5일
  5. ↑ 2) ALU - IA32 어셈블리 프로그래밍, https://wikidocs.net/146024, 확인한 날짜: 2026년 6월 5일
  6. ↑ ALU Functions and Bus Organization, https://www.geeksforgeeks.org/computer-organization-architecture/introduction-of-alu-and-data-path/, 확인한 날짜: 2026년 6월 5일
  7. ↑ Announcing a New Era of Integrated Electronics, https://www.intel.com/content/www/us/en/history/virtual-vault/articles/the-intel-4004.html, 확인한 날짜: 2026년 6월 5일