3. 컴퓨터의 연산(모든 것은 덧셈에서 시작한다)

컴퓨터의 CPU는 내부의 디지털 회로를 통해 연산을 수행한다. 이 때 사용되는 디지털 회로는 AND, OR, XOR, NOT이 있다. 컴퓨터의 기본 연산 단위인 2진수 0과 1을 통해 값을 계산하고 자릿수 올림까지 계산한다.

etc-image-0
XOR는 두 입력 값이 서로 다를 때만 1을 출력한다ㅏ.

 

컴퓨터의 덧셈

반가산기

etc-image-1

기본적으로 1자리 수 두 개의 입력을 받고 합과 자리올림을 계산한다. 만약 1과 1을 더할 경우 이진수에서는 10이므로

합은 0으로 표현하고 자릿수가 하나 올라갔기 때문에 Carry 값을 1로 표현하게 된다. 즉, 반가산기는 1bit에 대한 연산을 진행하는 계산기이다. 만약, 16진수 연산을 진행해야할 경우, 16진수 한자리는 4bit이므로, 반가산기가 4개 필요하게 된다.

전가산기

etc-image-2

만약, 0010과 0011을 더하는 경우 단순히 더하는 연산 뿐만 아니라 그로인해 생긴 자리올림 1에 대한 연산도 이루어져야 비로소 최종 결과 값인 0101을 계산할 수 있게 된다. 즉, 연산을 통해 발생하는 자리올림(Carry)에 대한 연산도 같이 수행해야 할 경우, 이와 같이 3개의 값을 처리하는 가산기가 필요하게 된다. 이와 같은 가산기를 전가산기라고 한다. 따라서 이와 같은 전가산기를 N개로 병렬로 연결한다면 N bit의 입력을 처리할 수 있는 가산기가 되는 것이다. 32bit 가산기라면 32bit 짜리 입력 2개에 대한 더하기 연산을 진행할 수 있는 것이다. 가산기의 bit 수가 늘어날수록 성능이 좋아지는 이유이다.

 

컴퓨터의 뺄셈

보수란 자릿수가 올라가기 위해 더해져야 하는 수를 의미한다. 즉, 십진수 6에서 10이 되기 위해서는 4만큼이 더 필요하게 되고, 6에 대한 10의 보수는 4인 것이다. 만약 13 - 6의 연산을 해야한다고 하면 6에 대한 10의 보수인 4를 13에 더한 다음 10의 자리 1을 빼면 7을 얻을 수 있다. 즉, 뺄셈 또한 보수의 덧셈을 통해 구현할 수 있는 것이다.

2진수 뺄셈

2진수에서의 뺄셈은 2의 보수를 더해주면 된다. 앞서 말한 보수의 덧셈을 통해 뺄셈을 할 수 있는 것이다. 그러면 2의 보수는 무엇일까? 2의 보수는 1의 보수에 1을 더하면 된다. 2진수에서 1의 보수는 0과 1을 뒤집으면 된다. 0에 대한 1의 보수는 1, 1에 대한 1의 보수는 0인 것이다. 

 

13 - 6을 13 + (6에 대한 2의 보수)로 바꿔보자. 13은 1101이고, 6은 0110이다. 6에 대한 2의 보수는 1010(1001(1의 보수) + 0001 -> 1010)이다. 1101 + 1010 = 10111이 된다. 이 때 맨 앞 자리 1은 네 자리 수를 벗어나기 때문에 버리면 된다. 따라서 최종 결과 0111이 남게 되고 이는 숫자 7이다. 정리하면, 뺄셈 대상인 수에 대한 2의 보수를 구하여 더한 다음 자리올림 수를 버리면 된다. 곱셈과 나눗셈 또한 덧셈 및 뺄셈으로 구현이 가능하다.

 

컴퓨터의 곱셈과 나눗셈

곱셈과 나눗셈은 기본적으로 Shift와 Padding을 기본 원리로 사용한다.

곱셈

4비트를 5로 표현하면 0101인데, 각가의 비트를 왼쪽으로 Shift 하면 1010이 된다. 왼쪽으로 옮기기 때문에 자동으로 오른쪽에 빈 공간이 생기는데 이를 Padding이라고 한다. 이 Padding에는 0으로 채워진다. 그리고 왼쪽으로 벗어난 자리올림 수는 버리게 된다. 따라서 0101(5) 가 1010(10)으로 바뀌었으므로 곱하기 2 연산을 진행하게 된 것이다. 즉, 왼쪽으로 한 자리 Shift를 하게 되면 곱하기 2 연산을 진행하는 것이다. 만약, 곱하기 3을 하고 싶다면 곱하기 2연산을 한 상태에서 기존의 값을 더해주기만 하면 된다.

etc-image-3

나눗셈

곱셈과 마찬가지로 나눗셈에서도 Shift를 할 수 있는데 이 때는 방향이 반대이다. 즉, 오른쪽으로 Shift하게 되고 그 결과 왼쪽에 Padding이 생긴다. 이 때도 마찬가지로 한번 Shift하는 것은 나누기 2연산을 진행하는 것이다.

 

etc-image-4
정수 나누기 연산이므로 5 / 2 했을 때 소수 나머지를 버려서 2가 나온다.

또한 나눗셈은 뺄셈으로도 구현될 수 있다. 따라서 15를 5로 나눌 경우, 15가 0이 될 때까지 5씩 뺀 다음 연산한 횟수를 가지고 값을 계산할 수도 있다. 즉, 15 - 5 * 3 = 0이므로 15 / 5 의 값은 3인 것이다. 따라서 컴퓨터에서 특정 값에 0을 나누는 연산을 할 경우 무한한 연산을 하게 되고, 과열로 인해 장치가 폭발하는 문제가 발생할 수 있다.

https://www.youtube.com/watch?v=mZ7pUADoo58 

현재 사용되는 CPU에는 하드웨어 적으로 여러 장치들이 존재하며, 프로그램 내에서도 오류를 발생시켜 더이상 연산을 하지 못하도록 한다. 

 

컴퓨터의 연산 과정 (CPU 와 RAM)

CPU는 RAM(메모리)에 있는 데이터를 가져와 레지스터에 저장한 다음 ALU(산술 논리 장치)를 통해 연산이 진행된다. 그 다음 다시 메모리에 값을 저장하게 된다. 핵심은 메모리에 저장된 정보가 CPU로 복사되어 연산이 수행되고, 다시 메모리에 저장된다는 것이다.

etc-image-5

위 사진에서는 최대 메모리 주소 값이 42억번대 이므로, 32 bit 주소체계의 컴퓨터라고 할 수 있다. 약 42억 바이트에 대한 주소를 관리할 수 있게 되는데 이는 약 4GB 정도 된다. 즉, 16GB 혹은 32GB 메모리를 사용하더라도 실제로 컴퓨터가 관리할 수 있는 최대 주소는 4GB까지 밖에 안되는 것이다. 따라서 현재 운영체제에서는 64bit를 주로 사용

 

 

 

해당 게시글의 출처 :

https://www.inflearn.com/course/%EB%84%93%EA%B3%A0%EC%96%95%EA%B2%8C-%EC%BB%B4%EA%B3%B5-%EC%A0%84%EA%B3%B5%EC%9E%90/dashboard

 

넓고 얕게 외워서 컴공 전공자 되기 - 인프런 | 강의

넓고 얕게 외워서 컴퓨터 공학 전공자가 되고 싶은 모든 비전공 초보자를 위한 강의입니다. 컴퓨터 구조, 운영체제 등 컴퓨터 공학 전공 필수과목에서 어떤 것을 배울 수 있는지 빠른 시간에 알

www.inflearn.com

http://john-home.iptime.org:8085/xe/index.php?mid=board_XylG00&document_srl=3124 

 

논리 게이트-ALU 구축 - 컴퓨터구조 - 가래들공방

http://www.csc.villanova.edu/~mdamian/Past/csc2400fa13/assign/ALU.html 원본출처 논리 게이트-ALU 구축 1. 소개 이 튜토리얼의 목표는 간단한 AND, OR, NOT 및 XOR 논리 게이트에서 복잡한 회로를 구축하는 기본 사항을

john-home.iptime.org:8085

https://ehpub.co.kr/%EA%B3%84%EC%82%B0%EA%B8%B0-%EA%B5%AC%EC%A1%B0-8-%EA%B0%80%EC%82%B0%EA%B8%B0adder/

 

[계산기 구조] 8.가산기(Adder) – 언제나 휴일

이번에는 정보처리기사 필기 과목인 전자계산기 구조에서 가산기를 알아보기로 해요. 가산기(Adder)입력한 값의 합(Sum)과 자리올림(Carry)을 구하는 논리 회로반가산기(Half Adder)와 전가산기(Full Adde

ehpub.co.kr

https://wansook0316.github.io/cs/structure/2020/03/24/%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EA%B8%B0%EC%96%B5%EC%9E%A5%EC%B9%98%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4.html

 

[가볍게 이해하는 컴퓨터] 04: 기억장치에 대한 이해 | 완숙의 에그머니🍳

Be On My Wave 🌊 | 뚜렷한 목표, 치밀한 계획, 우직한 실천

wansook0316.github.io