이 글은 Crash Course의 Computer Science를 보고 정리한 글입니다.
컴퓨터 기능의 진정한 목적인 숫자를 구조화하고 목적에 맞는 방식으로 다루는 것이다. 이러한 작용은 컴퓨터의 산술적(Arithmetic)이고 논리적(Logic)인 부분(Unit)에서 다루어지는 데 통상적으로 이걸 ALU라고 칭한다.
ALU는 컴퓨터의 수학적인 두뇌를 일컫는다. 이것은 컴퓨터에서 모든 계산을 한다. 아마 가장 유명한 ALU는 Intel 74181일 것이다. 이것이 1970년에 출시되었을 당시에 하나의 칩 안에 완전히 딱 들어맞는 완벽한 ALU였다. 부울 논리 게이트를 사용해서 74181과 같은 기능을 할 수 있는 단순한 ALU회로를 만들 수 있다.
ALU는 두 개의 구성 단위를 가지고 있는데, 그것은 산술 단위(Arithmetic Unit)와 논리 단위(Logic Unit)이다.
먼저 산술 단위는 컴퓨터에서 덧셈, 뺄셈 같은 모든 수치 연산을 처리한다. 그리고 다른 숫자에 하나를 추가하는 것과 같은 간단한 작업도 많이 한다. 이것을 증분 작업이라고 부른다.
덧셈에서 가능한 입력 조합은 4가지뿐이다. 0+0=0, 1+0=1, 0+1=1, 그리고 1+1=0 (이진법에서 2라는 수는 없기 때문에 결과는 0이 되고 1을 다을 열에 받아 올린다.) 이것은 XOR게이트의 출력을 만족한다. 그렇지만 1+1=10이기 때문에 받아 올린 비트를 위해 여분의 출력선이 더 필요하다.
받아 올린 | |||
비트는 입력이 모두 1일 때만 참이므로 이것은 AND게이트의 출력을 만족한다.
만약 1+1보다 큰 덧셈을 한다면 "전가산기"가 필요하다. 반가산기는 출력으로 캐리비트를 남겼다. 101+101의 경우 2번째 열부터는 받아 올린 비트가 새롭게 추가되므로 2비트가 아닌 3비트를 더해야 한다. 따라서 전가산기는 A, B, C 세 개의 비트를 입력받을 수 있기 때문에 좀 더 복잡해진다.
A | B | C | CARRY (C) | SUM (S) |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 |
1 | 0 | 0 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
일반적으로 우리가 사용중인 비트수보다 덧셈의 결과가 더 커서 표현할 수 없을 때, (위에서 두 숫자의 합으로 9번째 비트인 CARRY가 있을 때) 이것을 오버플로우(overflow)가 발생했다고 한다. 이럴 때 보통 에러가 나거나 예상치 못한 동작이 발생한다.
만약 오버플로우를 피하고 싶다면 전가산기를 더 사용해서 회로를 확장하면 된다. 16비트나 32비트 숫자까지 가능하게 할 수 있도록 말이다. 하지만 이건 오버플로우가 발생할 가능성을 줄이지만 더 많은 게이트를 사용한다. 하나 더 단점을 추가하자면, 캐리비트들이 앞으로 이동하는데 시간이 좀 걸려서 긴 시간은 아니지만 오늘날의 빠른 컴퓨터에 변화를 주기에는 충분하다.
이러한 이유로, 현대 컴퓨터는 "올림수 예견 가산기(Carry-Look-Ahead adder)"라는 약간 다른 회로를 사용한다. 이것은 더 빠르고, 궁극적으로 정확하게 이진수를 더하는 일을 똑같이 해낸다.
ALU의 산술 유닛은 다른 수학 연산을 하는 회로를 갖고 있는데 일반적으로 8가지가 항상 지원된다.
ADD | A 와 B를 더한다. |
ADD with CARRY | A 와 B 와 Carry 비트를 모두 더한다. |
SUBTRACT | A에서 B를 뺀다. (또는 그 반대) |
SUBTRACT with BORROW | A와 Borrow 비트에서 B를 뺀다. |
NEGATE | 0에서 A를 뺀다. 부호가 바뀐다. (-를 +로, +를 -로 만든다.) |
INCREMENT | A를 1 증가 |
DECREMENT | A를 1 감소 |
PASS THROUGH | 수정 없이 지나간다. |
이러한 다른 연산들은 개별 논리 게이트로 만들어져있다.
단순한 ALU는 곱셈과 나눗셈을 위한 회로를 갖고 있지 않는데 대신 일련의 추가 작업을 수행한다. 예를 들면, 8*5는 8을 5번 더하는 것과 똑같다. 이 하나의 곱셈을 위해 ALU를 5번 지나간다. 이것은 많은 종류의 단순한 프로세서들이 작동하는 방식이다.
하지만 스마트폰이나 노트북에 있는 고급 프로세서들은 곱셈 전용 회로가 있는 산술 유닛을 갖고 있다. 당연히 이 회로는 덧셈보다 더 복잡하다. 이것이 저비용 프로세서가 이 기능을 갖고 있지 않는 이유이다.
ALU의 논리 유닛은 AND, OR, NOT과 같은 논리 연산을 한다. 또 어떤 숫자가 음수인지 확인하는 것과 같은 간단한 숫자 테스트를 하기도 한다.
연산 코드(OPERATION CODE)는 ALU에게 무슨 연산을 해야 할지 알려준다. 또한 ALU는 특정 상태나 상활들에 대해서 1비트로 일련의 신호를 출력하기도 한다. 만약 두 숫자를 비교한다고 하면 A에서 B를 빼고 음의 신호가 참인지 제로의 신호가 참인지를 살펴보면 된다.
고급 ALU는 더 많은 신호들을 갖고 있을 것이지만, 이 세 가지 신호들은 보편적이고 자주 사용된다.
'컴퓨터공학 > 기초' 카테고리의 다른 글
중앙 처리 장치 (CPU) (0) | 2022.07.30 |
---|---|
레지스터와 RAM (0) | 2022.07.30 |
이진수로 숫자와 문자 나타내기 (0) | 2022.07.28 |
부울 연산과 논리 게이트 (0) | 2022.07.26 |
전자 컴퓨팅 (0) | 2022.07.26 |
댓글