더 효율적인 코딩을 위한 컴퓨터의 동작 원리 1편 – 비트와 트랜지스터

이 글은 [Must Have Tucker의 Go 언어 프로그래밍(세종도서 선정작)]에서 발췌했습니다.
골든래빗 출판사

 

컴퓨터는 매우 단순한 기계입니다. 아는 것이라곤 0과 1밖에 없고 할 줄 아는 것이라고는 단순한 계산 밖에 없습니다. 다만 매우 빠르게 수행할 뿐입니다. 컴퓨터는 트랜지스터를 기본 소자로 사용 해 발전했습니다. 앨런 튜링은 컴퓨터라는 개념을 만든 최초의 논문을 발표했습니다. 구체적인 아 키텍처로 발전시킨 사람은 폰 노이만입니다. 1945년 발표된 폰 노이만 구조는 현재 컴퓨터에서도 활용됩니다.

본 글에서는 컴퓨터와 프로그래밍 언어의 동작 원리를 정확히 알아 봅시다. 총 2편으로 구성했습니다. 1편에서는 비트와 트랜지스터에 대해 알아봅시다.

 

1. 비트의 탄생과 트랜지스터

트랜지스터는 연산을 수행하는 가장 기본이 되는 소자입니다. 컴퓨터는 수없이 많은 트랜지스터를 사용해 연산합니다. 트랜지스터는 CPU, 메모리, 그래픽카드 등에 사용됩니다. 마치 지구의 모든 동물이 단백질로 구성되어 있듯이, 컴퓨터는 트랜지스터로 구성되어 있다고 해도 과언이 아닙니다.

트랜지스터는 성질이 다른 2가지 실리콘, N형과 P형을 겹쳐 만듭니다. 예를 들어 NPN 트랜지스터는 N형 실리콘 사이에 P형 실리콘을 넣어서 만듭니다. 그래서 가운데 P형 부분을 베이스(Base)라 고 부르고 양쪽을 이미터(Emitter), 콜렉터(Collector)라고 부릅니다.

 

1.1 트랜지스터와 0과 1

트랜지스터는 크게 증폭과 스위치, 2가지 기능을 제공합니다. 컴퓨터에서는 증폭보다는 스위치로 주로 사용되기 때문에 스위치 기능 위주로 설명하겠습니다(또한 트랜지스터 내부에서 일어나는 전자의 움직임을 이해하는 건 복잡할 뿐 아니라 프로그래밍과는 거리가 멀기 때문에 간략히 설명 하겠습니다).

NPN 트랜지스터와 건전지를 연결한 다음 회로를 살펴봐주세요. 전구에 불이 들어올까요?

전구에 불이 들어오지 않습니다. 그 이유는 트랜지스터의 베이스 영역인 P형 실리콘이 전하의 흐름을 방해하는 역할을 하기 때문입니다. 하지만 다음 회로와 같이 베이스에 건전지를 연결해 전압 을 가하면 전하의 흐름을 방해하던 역할이 사라지면서 전류가 흘러 전구에 불이 들어옵니다.

즉, 베이스 부분에 전압을 가하면 전류가 흐르고 전압을 가하지 않으면 전류가 흐르지 않게 됩니다. 이게 마치 스위치를 켜고 끄는 것과 같아서 스위치 기능이라고 말합니다.

전구가 꺼진 상태를 0, 켜진 상태를 1이라고 하면, 트랜지스터를 이용해서 0과 1 두 숫자를 표현할 수 있습니다. 흔히 컴퓨터는 1과 0밖에 모른다라고 말하는데 바로 여기서 비롯된 말입니다. 0 과 1 둘 중 하나의 숫자값을 나타내는 공간을 1비트라고 부릅니다.

 

1.2 진수

컴퓨터는 1과 0 두 숫자를 사용해서 모든 수를 표현합니다. 숫자 10개를 사용해서 수를 표현하는 것을 10진수라고 부르고, 숫자 2개를 사용해서 수를 표현하는 것을 2진수라고 합니다. 컴퓨터는 바로 2진수로 수로 표현합니다. 예를 들어 10진수 123은 2진수로 1111011입니다.

그럼 10진수를 2진수로 어떻게 변환해야 할까요? 10진수 숫자를 2로 나눈 나머지와 자릿수를 활용해 직접 계산하는 방식도 있지만, 바쁜 현업에 그럴 시간은 없죠. 윈도우 계산기 프로그램을 이용하면 편리합니다. 윈도우 계산기에서 ‘ ❶ 설정 아이콘 → ❷ 프로그래머’를 클릭하면 프로그래머용 계산기로 바뀝니다.

왼쪽 상단에 있는 ❶ DEC가 10진숫값, ❷ BIN 이 2진숫값입니다. HEX는 16진숫값, OCT는 8진숫값을 나타냅니다. DEC를 클릭하시고 변 환하고 싶은 값을 10진수로 넣으면 다른 모든 진수에 해당 값이 자동으로 표시됩니다.

트랜지스터 1개로 0, 1을 표현할 수 있는데, 2 진수로 한 자리를 차지합니다. 즉 2진법 11011 이라는 숫자를 표현하려면 트랜지스터가 총 5개 필요합니다. 트랜지스터 하나로 2진법으로 한 자릿수를 표현하는 것을 1비트bit라고 말합니다.

1비트가 8개 모인 8비트를 1바이트byte라고 말합니다. 또 1바이트가 1,024개 모인 것을 1킬로바 이트KB라고 말하고 1KB라고 씁니다. 킬로바이트 → 메가바이트MB → 기가바이트GB → 테라바이 트TB → 페타바이트PB → 제타바이트ZB로 이어집니다.

• 1바이트 = 8비트
• 1KB = 1,024바이트 • 1MB = 1,024KB
• 1GB = 1,024MB
• 1TB = 1,024GB
• 1PB = 1,024TB
• 1ZB = 1,024PB

 

 

2. 트랜지스터에서 계산기로

트랜지스터를 이용해서 0과 1을 표현해 숫자를 나타내는 방법을 알아보았습니다. 컴퓨터의 핵심 기능은 계산입니다. 어떻게 계산 기능을 만들 수 있을까요? 역시 트랜지스터를 이용해서 만들 수 있습니다. 트랜지스터로 어떻게 계산 기능을 만드는지 알아보겠습니다.

 

 

2.1 논리 소자와 트랜지스터

트랜지스터로 계산기를 만들려면 논리 소자를 알아야 합니다. 논리 소자는 입력에 따라 특정 결과를 반환하는 대표적인 기본 전기 회로로 AND, OR, XOR, NOT가 있습니다.

 

• AND
두 입력이 모두 1이면 1을, 하나라도 0이면 0을 반환합니다.

 

• OR
두 입력 중 하나라도 1이면 1을, 모두 0이면 0을 반환합니다.

 

• XOR
두 입력이 서로 다르면 1을, 같다면 0을 반환합니다.

 

• NOT
입력이 하나고 0이면 1을, 1이면 0을 반환합니다.

 

AND 소자 구조

논리 소자를 트랜지스터를 이용해서 만들 수 있습니다. 이해를 돕는 차원에서 비교적 설명이 쉬운 AND 소자를 만들어보겠습니다.

동그라미로 표시된 부분이 바로 트랜지스터입니다. 입력 A와 입력 B는 각 트랜지스터의 베이스 부분에 연결해줍니다.

 

AND 소자 동작

AND 소자 동작을 살펴보겠습니다.

먼저 입력 A가 1이고 입력 B가 0인 경우를 살펴보겠습니다.

입력이 1이면 전압이 있는 거고, 0이면 전압이 없는 겁니다. 그림에서는 입력 A에 전압을 가해 트랜지스터 A에 전류가 흐르고, 입력 B에 전압을 가하지 않아 트랜지스터 B에 전류가 흐르지 않습 니다. 결과적으로 출력에 전류가 흐르지 않습니다. 즉, 출력이 0이 됩니다.

입력 A가 0이고 입력 B가 1이면 트랜스터 B는 열리지만 트랜지스터 A가 열리지 않아서 출력은 0이 됩니다. 두 입력 모두가 1이면 두 트랜지스터가 모두 열려서 출력이 1이 됩니다. 즉 두 입력이 모두 1인 경우에는 출력이 1이 되고 나머지는 모두 0이 됩니다. 따라서 트랜지스터 두 개로 AND 회로 소자를 만들 수 있습니다. 이런 식으로 OR, XOR, NOT도 만들 수 있습니다.

 

 

2.2 논리 소자로 사칙연산 구현하기

그럼 논리 소자를 이용해서 어떻게 계산을 할까요? 1비트 가산기로 2진법 숫자 더하기를 살펴보겠습니다. 1비트 가산기란 1비트 입력 2개를 더하는 회로 소자입니다.

• 0+0=0
• 1+0=1
• 0+1=1
• 1+1=10 ←1+1=2 //2는2진법으로 10입니다.

표로 정리하면 다음과 같습니다.

입력은 한 자리로, 출력(결과)은 두 자리로 표시됩니다. 출력의 첫 번째는 자리올림수가 되고 두 번째는 합의 결과를 나타냅니다. 즉 2진법 1 + 1 = 10이 될 때 결과에서 10의 자리의 1은 자리올 림수가 되고, 1의 자리의 0은 합의 결과의 첫 번째 자릿수가 되는 겁니다.

자리올림수와 합의 결과를 따로 보겠습니다.

자세히 살펴보니 자리올림수는 AND, 합의 결과는 XOR와 결과가 같네요. 즉, 자리올림수는 AND 논리 소자의 결과로 표시하면 되고, 합의 결과는 XOR 논리 소자의 결과로 표시하면 됩니 다. 회로로 다음과 같이 그릴 수 있습니다.

이렇게 해서 AND, XOR로 1비트 가산기를 만들었습니다. 이를 응용하면 2비트 가산기도 쉽게 만들 수 있습니다. 이런 식으로 논리 소자를 이용해서 뺄셈인 감산기를 만들고, 가산기를 여러 번 사용해 곱셈기, 감산기를 여러 번 사용해 나눗셈기도 만들 수 있습니다.

단순히 스위치 기능을 하는 트랜지스터만으로 이런 다양한 기능을 구현할 수 있다니 정말 신기하네요.

 

2편에서는 튜링 머신과 폰 노이만 구조를 이해하고, 컴퓨터의 동작 원리에 대해서 알아봅시다.

WRITER

공봉식

13년 차 게임 서버 프로그래머로 다양한 장르의 온라인 게임을 개발했습니다. 넥슨과 네오위즈를 거쳐서 현재는 EA 캐나다에서 근무 중입니다. 「Tucker Programming」 유튜브 채널을 운영합니다.

1 Comment

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내