이번엔 32비트 컴퓨터와 64비트 컴퓨터의 내부동작에 대해서 간략하게 포스팅 하려 합니다.
그리고 왜 32bit와 64bit 컴퓨터에서 메모리 인식범위가 차이가 날까 하는 의문에 대한 해답도 찾을 겁니다.
이 문제는 프로그래밍을 공부하는 분들이면 대부분 이해를 하고 시작하는 파트이기도 합니다.
아직 포스팅은 안했지만 C언어에서 메모리구조(세그먼트)에 관한 글을 조만간 정리해서 올리려 하는데, 이 부분에 대해서 아직 공부를 안하신 분이라면 이 글은 어려운 내용이 아니니 메모리구조를 공부하기전에 흥미롭게 읽어 주셨으면 합니다.
32bit 컴퓨터와 64 bit 컴퓨터의 레지스터
32bit 컴퓨터 cpu의 레지스터 처리값 32bit
64bit 컴퓨터 cpu의 레지스터 처리값 64bit
레지스터는 cpu가 사용하는 데이터를 담는 그릇이고 cpu는 레지스터를 이용해서 데이터를 처리합니다.
32비트 컴퓨터와 64비트 컴퓨터는 컴퓨터 설계부터 이렇게 이용하는 레지스터의 그릇의 값이 차이가 납니다.
그리고 이 그릇의 차이에 의해서 컴퓨터 앞에 32비트 64비트라는 수식어가 붙게 됩니다.
예전에 16비트 컴퓨터는 레지스터의 크기가 16비트겠죠.
우선 비트와 바이트의 단위에 대해서 정리하겠습니다.
컴퓨터는 전기 신호를 받아들이기 때문에 전기의 ON, OFF 두가지 상태(1과0)를 통해서 모든것을 표현해야 합니다. 그에 맞는 단위가 필요했는데 0과 1 두가지로만 표현되는 bit라는 단위입니다.
bit는 컴퓨터가 인식하는 최소 단위입니다.
bit는 단위가 너무 작기 때문에 이 bit를 일괄적으로 묶어 표현할 단위가 필요하게 됩니다.
그것이 byte인데 8개의 bit를 묶어서 표현하는 단위가 1byte입니다.
우선 디스크나 메모리 공간의은 비트단위로 쪼개어져 있지만 주소값의 단위는 byte라는 걸 알아두세요.
저장장치의 용량이 커져감에 따라서 일괄적으로 묶을 단위들이 필요했고, 우리가 흔히 쓰는 GB도 그 연장선에 있는 단위입니다. 하드웨어의 성능이 점점 발전하면서 이런 처리단위가 점점 커지고, 기존과 차이가 생기면서 생기는 문제는 흔히 윈도우에서는 호환성 문제라고 합니다. 같은 프로그램을 하더라도 32비트용 64비트용을 따로 만들기도 하죠.
이런 문제는 메모리 인식범위에도 영향을 주게 됩니다.
윈도우7는 32비트 와 64비트가 따로있는데, 64비트를 지원하는 cpu의 경우는 32비트도 보통 지원합니다.
32비트 cpu에 64비트 OS를 지원하게 하기도 하지만, 이경우는 단순히 설명하긴 어렵지만 대략 주소값을 전달할때 한번에 전달하는 걸 두번에 나눠 전달해야 합니다. 성능이 떨어질 수 밖에 없습니다.
32bit컴퓨터는 왜 메모리를 4GB바이트 까지만 사용할까?
레지스터는 한번에 처리할 수 있는 용량이 32bit기 때문에, 한번에 표현가능한 수의 최대값이 2의 32승이 됩니다.
레지스터가 한번에 표현할 수 있는 값의 크기는 cpu가 한번에 인식하여 처리할 수 있는 주소 값의 범위가 됩니다. 위에 4,294,967,296(외워 두시면 좋습니다.)
32bit 컴퓨터라 치면 표현할 수 있는 주소의 한계점이 약 42억개 정도이고 50억이상의 수를 표현하려면 레지스터의 크기가 32bit로 부족하기 때문에 주소값을 표현할 수 없게됩니다.
그래서 32bit 컴퓨터의 메모리 인식범위가 문제가 되는데요. 4GB가 한계라 하죠. 쉽게 말해서 32비트 컴퓨터는 숫자를 4,294,967,296이상을 모른다고 생각하시면 됩니다.
(하드디스크의 경우 4GB이상 장착이 가능한건 하드에 있는 데이터가 메모리에 로드된후 CPU가 메모리 공간의 주소를 가지고 데이터를 처리하기 때문입니다.)
왜 4GB일까?
4GB가 어떻게 계산되는지 한번 계산을 해보겠습니다.
32비트는 42억개정도의 주소공간을 사용할 수 있고 주소공간 하나당 크기는 1Byte입니다.
1Byte의 주소공간이 4,294,967,296개가 있으면 메모리용량은 4,294,967,296Byte가 됩니다.
아까 단위계산 표에서 1GB는 2의 30승byte 가 되기 때문에 위 계산을 토대로 4GB가 나오게 됩니다.
이 이상 메모리를 장착하면 주소값이 32bit를 넘어가기 때문에 32bit 시스템에서는 인식되지않습니다.
같은 방법으로 64bit 컴퓨터의 메모리 인식 범위는 어디까지 될까 계산해 볼 수 있습니다.
64bit 컴퓨터의 메모리 인식범위
엑사바이트라는 단위는 정말 생소하고 상상보다 엄청 큰 단위입니다.
제가 2000년 초반에 '무어의 법칙'(마이크로칩용량과 cpu 성능이 18개월마다 2배씩 증가한다는 법칙) 에 대해서 처음 읽었는데, 그때는 '뭐 그래?'하고 시큰둥하게 넘어 갔습니다. 그런데 지금 32비트 컴퓨터와 64비트 컴퓨터의 메모리 인식범위 차이만 봐도 엄청 나다고 생각되네요.
갈수록 하드웨어의 성능은 기하급수적으로 좋아지고 있는 것 같습니다.
요즘 컴퓨터 공부를 하면서 생각드는게 발전의 속도만 쫓아 가다보면 이것도 저것도 안되는 경우가 있는 것 같습니다. 그래서 생각났는데 예전에 CODE(코드)라는 책을 흥미롭게 읽은 적이 있습니다. 이 책의 시작은 모스부호에 관한 글로 시작하는데, 컴퓨터의 탄생배경을 정말 흥미롭게 기술한 책이고, 컴퓨터에 대해서 무지한 사람도, 그 과정을 쉽게 이해할 수 있게 설명해 놨습니다. 그렇다고 만만한 내용만은 아닙니다. 비록 최신 기술은 아니지만, 컴퓨터를 공부하는 사람이면 꼭 읽어봐야할 책이니 머리도 식힐겸 권해드립니다.