일반인들은 잘 모르겠지만 현재 PC들은 32비트 시스템과 64비트 시스템이 섞여 있습니다. 64비트 시스템이라는 것은 기본적인 CPU 연산이 64비트로 구성되어 있다는 것이고 32비트 시스템이라는 것은 CPU가 32비트를 기반으로 연산을 한다는 의미입니다.


이렇게 말하면 잘 모르겠지요.


그래서 요즘은 이렇게 이야기 하지요.

"64비트 시스템이 아니면 램을 4GB이상 못쓴다."


과연 이게 맞는 말일까요? 솔직히 틀린 말은 아닙니다. 데스크탑용 Windows의 경우 32비트 에디션을 쓰면 4GB를 인식 못합니다. 물리적 메모리 주소를 32비트의 경우 그 이상 못 쓰기 때문입니다. 하지만 CPU의 설계자들은 이미 이를 예상하고 32비트에서 4GB이상의 메모리를 쓸 수 있게 설계를 해 놓았습니다.


일명 물리적 주소 확장(Physical Address Extention = PAE)이라고 해서 펜티엄 시리즈부터 이를 추가해 놓았습니다. 그리고 OS에서도 이를 쓸 수 있게 조치가 취해져 있습니다. 다만 OS에서 소프트적으로 제한을 걸었다는 것 뿐이지요.


https://ko.wikipedia.org/wiki/%EB%AC%BC%EB%A6%AC_%EC%A3%BC%EC%86%8C_%ED%99%95%EC%9E%A5


일단 위키피디아를 참고하면 Windows의 서버용 OS(데이터센터 에디션)에서 메모리 제한이 풀려있습니다.


출처인 Microsoft 홈페이지 내용을 보시면 더 정확합니다. https://msdn.microsoft.com/en-us/library/aa366778.aspx


Windows 2003 R2 Enterprise와 Windows 2008 Enterprise, Datacenter에서는 32비트 버전도 4GB이상의 메모리를 쓸 수 있습니다. (각각 16GB와 128GB를 쓸 수 있습니다.) 이렇게 제한을 건 이유는 당연히 가격문제 때문입니다. Enterprise 버전은 다들 알다시피 가격이 어마어마합니다. 그리고 소매점에서 구하는 것이 아닌 하드웨어와 함께 구매하게 되어있지요. 만약 가정용, 소매점 버전에 이 정도 차등의 제한을 걸지 않았다면 우리는 정말 비싼 가격으로 Windows를 쓰고 있을 것입니다.


자 이제 리눅스로 와 볼까요? 리눅스는 애초에 가격적인 문제가 없습니다. 당연히 메모리 문제를 PAE를 활성화 하는 것으로 해결했습니다. Windows는 제한을 걸었지만 리눅스는 그럴 필요가 없기에 PAE를 활성화한 커널을 설치하는 것으로 32비트에서 4GB이상의 메모리를 쓸 수 있습니다. 하지만 이를 이용하는 사람은 많지 않습니다. 왜냐하면 64비트전환이 이미 2008년부터 성공적으로 진행되었기 때문입니다. 그 당시부터 나오던 말이 "64비트 CPU를 쓴다면 그냥 64비트 버전을 쓰는 것이 가장 좋다. 실제로 성능이 1.5배 좋아지기 때문이다." 라는 말이 돌고 있었습니다. 실제로 그러기도 했고 당시 64비트 CPU는 AMD의 Athlon64뿐이었는데 Atholn64는 32비트 호환모드는 소프트에뮬레이션을 했기에 딜레이가 느껴졌습니다.


게다가 64비트 전환을 하려면 CPU만 64비트이기만 해도 안 되고 OS도 64비트를 지원해야 하며 심지어 프로그램도 64비트용으로 컴파일 되어야 합니다. 여기서 리눅스는 오픈소스의 힘을 발휘하여 Athlon64에서 완벽한 성능을 뿜어내게 되었습니다.


리눅스는 64비트커널이 2.6부터 지원되어졌으며 64비트 컴파일러가 이미 2000년 중반에 보편화 되었고 64비트 컴파일러를 통해 만들어진 64비트 프로그램이 2000년대에 당연히 지원되어졌습니다. 이제는 구형 시스템에서 돌아가지 않는 이상 32비트를 굳이 써야하는 경우가 없어졌다고 봐야 할 겁니다.


만약 리눅스가 PC의 대세였다면 이미 2000년대 중반에 64비트 전환이 완벽하게 이루어졌을 것입니다. 실제로 서버의 경우에는 64비트 전환이 그렇게 이미 이루어졌습니다.


하지만 다들 알다시피 PC의 대세는 Windows였고 Windows를 만든 마이크로소프트는 AMD보다는 인텔과 더 친했기에 AMD64용 OS보다는 인텔의 IAT64에 더 관심을 갖고 있었습니다. 하지만 마이크로소프트도 IAT64가 기존의 프로그램을 쓸 수 없다는 큰 단점이 있다는 것을 알고 지원을 적당히 해주다가 빠졌다고 합니다. 그리고 AMD64용 OS를 뒤늦게나마 따로 내놓게 됩니다.(WindowsXP x64 Edition) 그리고 Windows Vista부터 64비트 버전(AMD64용)을 홍보하면서 이를 퍼지길 기다렸는데 Vista는 다들 알다시피 망했지요.


그러니까 당시 CPU의 대세는 사실 인텔이 아닌 AMD였고 AMD의 CPU는 64비트OS가 아니면 성능이 떨어지는 문제가 있었습니다. 이는 AMD의 문제가 아닌 32비트OS를 쓰는 것이 문제였다고 봐야 합니다. 인텔도 AMD64호환 CPU를 내놓지만 역시 AMD의 기술을 이용했기에 같은 문제가 있었습니다. (물론 인텔에서는 AMD64라고 하지 않고 x64라고 부르기는 합니다. 하지만 AMD에서 크로스 라이센스로 받아온 기술입니다.) 어쨌건 메모리의 크기를 제한하는 것을 홍보한 덕에 64비트 OS가 어느정도 빠르게 확산되었고 요즘 PC에 32비트 버전을 깔면 멍청하다는 소리를 듣게 되었습니다.


어쨌건 이렇게까지 하면서 64비트 전환이 이뤄졌을까요?


제 생각이지만 아직까지도 32비트 프로그램이 굴러다니는 이상 전환은 요원하다고 보고 있습니다. 멀리 갈 것도 없이 PC게임들은 아직도 32비트로 구동되는 경우가 많고 4GB이상의 메모리를 요구하지만 정작 바이너리는 32비트인 경우가 대부분입니다. 64비트 CPU에서 32비트 구동은 조금 느리게 구르게 되어있습니다. 요즘 CPU가 워낙 빨라서 성능 차이는 많이 줄었지만 그래도 묘하게 성능이 아쉬운 것이 많습니다.


결론은

아직도 Windows에서는 64비트 전환이 이루어지지 않았다.

리눅스에서는 64비트 전환이 거의 완벽히 이루어졌다.


정도로 할 수 있겠습니다.


다만 전문 프로그램의 경우 64비트버전만 제공하는 경우가 늘고 있는 것으로 보아 Windows의 64비트 전환도 10년 내에는 완벽히 이루어지지 않을까라는 생각이 드네요. (리눅스는 10년도 전에 전환이 거의 다 되었는데!)

,