컴퓨터는 엄마가 좋은지 아빠가 좋은지로 구성됨

zeroone

지난 게시물에서는 왜 컴퓨터가 세상을 0과 1이라는 단순한 비트로 표현하는지, 그리고 이 비트들을 가지고 어떻게 논리적인 판단을 내릴 수 있는지 함께 살펴보았습니다. '비가 오고 외출 계획이 있을 때 우산을 챙긴다'와 같은 규칙을 진리표로 만들 수 있음도 확인했습니다. 하지만 이를 어떻게 현실에서 구현할 수 있을까요?

circuit

우리가 진리표로 정의한 이 논리적인 규칙들이 컴퓨터 내부에서 실제로 작동하려면 0과 1을 물리적으로 받아 정해진 결과를 내놓는 전자 회로가 필요합니다. 바로 이 역할을 하는 하드웨어 단위가 논리 게이트입니다.

lego

컴퓨터는 정말 복잡하고 다양한 작업을 처리합니다. 그러니 그 안에 들어가는 논리 게이트들도 엄청나게 복잡할 것이라고 생각하기 쉽습니다. 하지만 놀랍게도 컴퓨터 내부의 모든 복잡한 논리 회로는 아주 단순한 기본 논리 게이트들의 조합으로 만들어집니다. 마치 커다란 레고 작품도 작은 레고 블록들로 구성된 것처럼요.

이번 게시물에서는 아주 단순한 세 가지 기본 논리 게이트, AND, OR, NOT 게이트를 살펴보겠습니다. 이 게이트들이 모여 어떻게 복잡한 진리표를 구현하는지도 살펴보시죠!

그럼 논리게이트는 뭘로 만드는데요?

'컴퓨터가 논리 게이트로 만들어진다면 그 논리 게이트는 뭘로 만들어지는거지?'라는 자연스러운 궁금증이 생길 수 있습니다. 마치 레고 블록으로 집을 짓는 건 알겠는데, 그 레고 블록 자체는 무엇으로 만들어졌는지 궁금해지는 것과 같습니다.

이 부분은 사실 반도체 물리학이라는 영역과 연결됩니다. 이어서 나오는 이야기는 물리적인 구현에 대한 부분이라 간단하게만 살펴보고 넘어가겠습니다.

핵심 아이디어는 전기 신호의 흐름을 제어하는 스위치를 만드는 것입니다. 컴퓨터가 사용하는 0과 1은 낮은 전기 신호와 높은 전기 신호로 표현된다고 말씀드렸죠. 이 신호가 특정 조건을 만족할 때만 흐르도록 만드는 것이 바로 논리 게이트의 물리적인 구현입니다.

이 스위치 역할을 하는 가장 기본적인 물리 부품이 바로 트랜지스터입니다. 트랜지스터는 특정 조건(예: 다른 곳에서 약한 전기 신호가 들어올 때)이 만족되면 전기 신호가 흐르는 통로를 열어주거나(켜짐), 조건이 만족되지 않으면 통로를 막아버리는(꺼짐) 기능을 합니다. 마치 수도꼭지처럼 전기의 흐름을 제어하는 스위치 역할을 하는 거죠. 체크박스를 눌러 Gate에 전압을 줘보세요.

Drain (D)
Gate
Source (S)

지난번에 잠깐 살펴봤던 가장 기본적인 논리 연산, 즉 AND, OR, NOT 게이트는 이러한 트랜지스터라는 물리적인 스위치들을 특정 방식으로 연결해서 만들어집니다. 추상적인 논리가 물리 세계에서 구현되는 이 과정은 컴퓨터 공학의 정말 신비로운 부분 중 하나입니다.

엄마 아빠가 모두 좋은 AND 게이트

자, 이제 대표적인 세 개의 게이트 AND, OR, NOT 게이트를 살펴보겠습니다.

AND는 '그리고'를 의미합니다. 두 가지 조건이 모두 참일 때만 결과가 참이 됩니다.

A
B
A AND B
000
010
100
111

AND 게이트는 특정 조건들이 모두 충족되었는지 판단하는 데 주로 사용됩니다. 예를 들어, 어떤 명령을 실행하기 위해 두 개의 데이터가 모두 준비되었는지 확인하는 경우 등에 사용될 수 있습니다.

적어도 한 분은 좋은 OR 게이트

OR는 '또는'을 의미합니다. 두 가지 조건 중 하나라도 참이면 결과가 참이 됩니다.

A
B
A OR B
000
011
101
111

여러 가능한 조건들 중 하나만 만족해도 되는 상황을 판단하는 데 사용됩니다. 예를 들어, 공장 기계의 여러 위치의 비상 정지 버튼이 있을 때 어느 버튼이든 하나라도 눌리면 전체 시스템을 정지해야할 때 사용될 수 있습니다.

NOT 게이트

NOT는 '아니다'를 의미합니다. 입력된 비트의 상태를 반전시키는 논리입니다.

A
NOT A
01
10

어떤 상태를 반대로 뒤집거나 특정 조건이 아닌 경우를 판단할 때 사용됩니다. 예를 들어, 어떤 장치가 '작동 중(1)'이 아닐 때(0) 정지등을 켜는 회로 등에 활용될 수 있습니다.

AND OR NOT으로 세상 모든 함수 만들기

사실, AND, OR, NOT 게이트만 있으면 진리표로 표현 가능한 세상의 그 어떤 복잡한 논리 회로도 다 만들 수 있습니다. 그 방법 중 하나를 알아보겠습니다.

핵심 아이디어는 간단합니다. 출력 값이 참(1)이 되는 모든 입력 조합들을 찾아서, 그 각각의 조합을 AND 게이트로 만들고, 마지막으로 이 AND 결과들을 모두 OR 게이트로 합치는 것입니다.

말로만 들으면 조금 복잡하게 느껴질 수 있으니 예시를 통해 자세히 살펴볼까요? 두 입력이 같을 때 출력이 1인 게이트를 AND, OR, NOT만으로 만들어 봅시다. 우선 진리표를 살펴보면 다음과 같습니다.

A
B
A == B
001
010
100
111

이제 간단한 세 단계를 거치면 됩니다.

  1. 출력 값이 1인 행을 모두 찾습니다.
  1. 각 행을 표현하는 AND 조건을 만듭니다.
  1. 이렇게 만들어진 각 AND 조건들을 OR 게이트로 모두 연결합니다. 출력이 1이 되는 경우는 '첫 번째 행의 조건이 만족' 또는 '네 번째 행의 조건이 만족'일 때 입니다. 따라서 위에서 만든 두 식을 OR로 연결하면 됩니다.

최종 논리식은 ((NOT A) AND (NOT B)) OR (A AND B) 가 됩니다.

A
B
NOT A
NOT B
(NOT A) AND B
A AND (NOT B)
((NOT A) AND (NOT B)) OR (A AND B)
0011001
0110100
1001010
1100001

원래 진리표와 똑같이 작동하는 회로가 완성됐네요!

이는 복잡한 계산이나 판단을 수행하는 모든 디지털 회로가 결국에는 아주 기본적인 AND, OR, NOT의 조합으로 만들어진다는 것을 보여주는 중요한 예제입니다. 마치 복잡한 건물도 결국 벽돌, 시멘트, 나무 같은 기본 재료로 만들어지는 것과 같습니다.

이처럼 진리표는 원하는 논리적 동작을 정의하는 '설계도' 역할을 하고, 방금 소개한 방법은 이 설계도를 AND, OR, NOT이라는 '기본 부품'을 이용해 실제 회로로 만드는 과정을 보여줍니다.

마무리

og

사람이 이해하기에는 AND, OR, NOT 논리가 매우 직관적이고 이해하기 쉽습니다. 우리가 언어를 통해 사고하는 방식과도 가깝죠. 그래서 처음 배울 때 이 세 가지 게이트부터 시작하는 것입니다.

하지만 정작 컴퓨터 하드웨어를 만드는 엔지니어의 입장에서는 조금 다른 이야기가 펼쳐집니다. 컴퓨터는 감정을 가진 존재가 아니기에 '직관성'이나 '이해하기 쉬움'이 중요하지 않습니다. 대신 물리적으로 구현하기가 얼마나 효율적이고 간단한지가 중요합니다.

놀랍게도, AND, OR, NOT은 물론 세상의 그 어떤 복잡한 논리 게이트도 오직 NAND 게이트 하나만으로 모두 만들 수 있다는 사실 알고 계신가요? 이것을 NAND의 완전성 또는 보편성 이라고 부릅니다. 마치 레고 블록 중에 특정 모양 하나만 있어도 다른 모든 모양을 조립할 수 있는 만능 블록이 있는 것처럼요. NAND와 NOR 게이트가 바로 그런 만능 블록입니다.

다음 시간에는 어떻게 NAND 게이트 하나만으로도 모든 논리 회로를 구성할 수 있는지에 대해 더 깊이 있게 알아보겠습니다.

댓글을 작성하려면 이 필요합니다.

seongyeol