CPU 동작 원리
개요
ENIAC
학창시절 정보와 컴퓨터 시간에 컴퓨터의 역사에 대해 공부해본 적이 있을 것이다.
거기엔 에니악이라는 엄청나게 큰 기계가 나온다.
2차 세계 대전이 한창일 때 미국 정부는 벤실베이니아 대학교의 전기 공학부의 한 연구팀과 계약을 체결했다. 바로 대포의 탄도를 정확하게 계산할 수 있는 완전 전자식 컴퓨터를 개발하는 것이었다. 이렇게 완성된 애니악은 초당 5000개의 방정식을 처리할 수 있었다. 그러나 애니악은 하나의 기계라기 보단 하나의 시설과 같이 굉장히 컸다.
무려 높이 5.5미터 길이 24미터 폭 1미터 무게는 30톤에 달했다.
UNIVAC
애니악의 성공으로 에커트와 모클리는 컴퓨터가 세상에 미치는 긍정적인 영향을 세상에 보여주기 위해 회사를 설립했는데 애니악보다 작아지고 개선된 컴퓨터였다.
또한 전자 타자 키보드등의 입출력 장치를 포함해서 데이터를 쉽게 입력할 수 있게 되었다.
무게는 약 8톤이었다.
그러나 UNIVAC은 설계상의 결함으로 어려움을 겪었는데 이는 깨지기 쉬운 유리 진공관을 사용했기 때문이고 이러한 진공관은 파손에 취약하고 상당한 양의 열을 발생시켰다.
트랜지스터
우선 진공관에 대해 알아보자. 진공관은 1904년 플레밍이 발명한 것으로 당시 무선 통신이 발전하면서 전자 신호를 증폭하고 제어할 수 있는 장치가 필요했기 때문이다.
마이크에서 소리가 전기 신호로 변환되는데 이 신호는 매우 약하다 따라서 진공관을 통해 큰 전류 변화를 만들어내어 강한 전기 신호로 만드는 것이다.
진공관은 진공 속에서 금속이 가열될 때 전자가 방출되는 현상을 통해 방출된 전자를 전기장으로 제어하여 정류, 증폭등의 특성을 갖도록 설계한 부품이다.
빨간색의 음극은 가열되어 전자를 방출한다.
회색 선의 그리드는 전자의 흐름을 제어하는 전극이다.
파란색의 양극은 전자를 끌어당기는 전극이다.
이렇게 음극에서 방출된 전자는 그리드를 통과한 후 양극으로 이동한다. 이 때 그리드에 걸리는 전압을 조절하면 전자의 흐름을 제어할 수 있어 신호를 증폭하거나 스위치처럼 사용할 수 있다.
이렇게 변환하여 듣는 아날로그 신호는 특유의 따뜻한 소리를 내어 아직까지도 진공관 앰프와 같이 고급 오디오 장치에 사용된다.
컴퓨터에 사용되었던 것은 진공관이 스위치 역할을 할 수 있기 때문인데 컴퓨터는 1과 0의 이진수로 모든 계산을 수행한다. 이를 위해 전기가 흐르거나(1) 안흐르는(0) 스위치가 필요했다.
그리드에 전압을 걸면 전자가 흐르고 전압을 걸지 않으면 전자가 흐르지 않았고 이를 통해 계산을 수행했던 것이다.
컴퓨터는 1953년 맨체스터 대학에서 트랜지스터 기반 컴퓨터를 구축하는 방법을 발견하면서 모든 것이 바뀌었다.
초기 트랜지스터는 게르마늄을 소재로 사용했기에 일정 온도 범위를 유지해야했고 정제가 어려웠다.
그러다 1954년 벨 연구소에서 실리콘을 소재로 사용하는 트랜지스터를 연구하기 시작했다.
실리콘은 사슬 모양의 구조로 다음과 같다.(SiO2)
최외각 전자는 4개로 다른 실리콘 원자들과 전자를 공유하며 강하게 결합하고 있다.
이렇게 순수한 상태에선 전류가 흐르지 않게된다.
전자가 통하게 만들려면 인위적으로 전자를 하나 제거해야한다.
그럼 빈 구멍이 생기고 전자가 이동하게 되며 전자의 이동 방향과 반대 방향으로 전류가 흐르게 된다.
또한 전자가 하나 많은 원자를 첨가하면 남는 전자가 이동하며 전류가 흐르게 된다.
전자가 하나 부족한 경우를 P(Positive)형 반도체라고 하며 전자가 하나 추가된 경우를 N(Negative)형 반도체라고 한다.
이를 연결한다.
그렇게 되면 둘의 경계면에서는 N형 반도체에 있는 자유전자가 P형 반도체의 양공에 이끌려 결합하게 된다.
이렇게 되면 P형 반도체 경계의 원자는 음전하를 띄게 되고 반발력을 가져 더 이상 전자들이 넘어오지 못한다.
또한 양전하를 띈 원자의 영향으로 양공이 이동하지 못하게 된다.
이 곳을 공핍영역이라고 한다.
공핍영역의 가장자리에는 전하가 달라지게 되고 +에서 -방향으로 전기장이 생성된다.
이런 상황에서 P형 반도체 쪽에 -, N형 반도체 쪽에 +전압을 가하면 양전하를 띈 양공들이 -방향으로 끌리게 되고 반대쪽에선 전자들이 +쪽으로 끌려오게 된다.
공핍영역이 더 확대되는 것이다.
반대의 전압을 가하면 반대가 된다.
공핍영역에서 P형 반도체의 가장자리 경계에는 음전하를 띄게 되기 때문에 전자들이 넘어오지 못하지만 전압을 더 세게 걸게 되면 이 힘을 무시하고 넘어갈 수 있다. 이렇게 되면 전류가 흐르게 된다.(순방향)
이렇게 하고 얇은 N형 반도체 옆에 P형 반도체를 하나 더 붙여본다.
PNP의 형태다.
이런 상황에서 왼쪽 PN에 순방향으로 전압을 걸어준다. 그렇다면 N형 반도체를 향해 전자가 이동하게 되고 전류가 흐르게 된다.
그리고 NP에는 역방향 전압을 걸어준다.
이렇게 되면 왼쪽에는 전류가 흐르고 오른쪽에는 전류가 흐르지 않게된다.
여기서 순방향에 전압을 높여주게 되면 N형 반도체를 뛰어 넘는 양공들이 생기게 된다. 이런 식으로 전압을 조절하여 전류를 흐르게도 할 수 있고 흐르지 않게도 할 수 있는 것이다.
이런 원리로 스위치 역할을 하는 것이 바로 트랜지스터다.
이제 트랜지스터 여러 개를 결합하여 논리 게이트를 만들 수 있다.
예를 들어 두 개의 트랜지스터를 연달어 연결하면 두 개의 트랜지스터에 모두 전압이 걸렸을 때 전류가 흐르게 된다.
AND 연산을 할 수 있게 된다.
이제 트랜지스터를 위 아래로 구성하면 OR게이트를 만들 수 있다.
또한 출력선을 앞으로 당겨보면 전류가 흐르게 되고 전압이 걸리면 전류는 원래의 흐름대로 흐르기 때문에 NOT게이트를 구성할 수 있게 된다.
이들 회로를 합하여 XOR 게이트도 만들 수 있다.
이렇게 기본 회로를 구성하였으니 덧셈 회로를 만들면 된다.
컴퓨터는 2진법을 사용하니 12와 10을 더해보자.
각각 이진법으로 1100, 1010이 된다.
이들을 더하면 십진법 더하기와 마찬가지로 1과 1이 만나면 합은 0이 되고 올림수는 1이 나온다.
1과 1이 만나서 합이 0이라면 이건 XOR게이트라고 할 수 있고 1과 1이 만나서 자릿수가 올라가면 이건 AND게이트라고 할 수 있다.
여기까지가 개념적인 부분이고 기술이 발전하면서 이 기기들을 충분히 작게 만들 수 있게 되었다. CPU에 들어가는 트랜지스터는 이미 미세먼지보다도 작은 크기로 만들어진다.
레지스터
이렇게 굉장히 빠른 연산을 할 수 있는 요소가 생겨났다. 그럼 컴퓨터의 기억장치로부터 명령어를 읽어와서 실행시키면 되는데 이전에 작성한 대로 보조 메모리는 속도가 느리지만 영구적이고 메인 메모리는 속도가 빠르지만 영구적이지 않다는 특징이 있었다.
따라서 CPU는 보조 메모리가 아닌 메인 메모리와 소통하는데 그나마 빠른 메인 메모리도 CPU의 속도에 비하면 느리다.
그래서 CPU에 캐시메모리를 만들어 이 곳에 데이터를 저장한다.
캐시 메모리는 L1~L3까지 있고 L1이 CPU가 가장 먼저 접근하는 메모리로 속도가 가장 빠르고 용량이 작다.
여기서 CPU 내부에는 레지스터라는 기억 공간이 있다.
여러가지 종류가 있다.
- 프로그램 카운터: 다음에 수행할 메모리의 주소
- 메모리 주소 레지스터: 주소를 넘겨받아 데이터를 가져온다.
- 메모리 버퍼 레지스터: 이 데이터나 명령을 일시적으로 저장한다.
- 명령어 레지스터: 위에서 받아온 명령어는 명령어 레지스터로 이동하고 연산에 사용될 데이터는 누산기 레지스터로 이동한다. 최종 결과는 메모리 버퍼 레지스터로 전달한다.
제어 장치는 명령어 레지스터에 있는 명령어를 받아 해석하고 해석된 명령을 시스템에 지시한다.
예를 들어 프로그래밍 언어에서 A = A + B라는 명령어를 작성하고 실행하면 이는 어셈블리어로 바뀌게 된다.
ADD R1, R2
- 프로그램 카운터가 명시된 메모리에서 주소를 가져온다.
- 이 주소를 넘겨받아 데이터를 가져온다.
- 가져온 명령어를 명령어 레지스터에 저장한다.
- ALU에서 덧샘을 수행한다.
- 결과를 R1에 저장한다.
이런 사이클을 초당 수십억 번 반복하며 프로그램이 실행되는 것이다.