출처:http://blog.paran.com/athirst/19416168

 

사실 1~2년 전까지만 해도 데스크탑 PC, 노트북 PC에서 4GB 메모리를 쓸 일은 거의 없었다고 해도 좋습니다. 4GB 메모리를 PC에 꽂으려면 수십 만원은 기본으로 들어가야 했고 이 정도 메모리가 있어야 빠르게 작동하는 게임과 소프트웨어도 없었습니다. 이 정도의 대용량 메모리는 기껏해야 고급형 서버에서 볼 수 있었습니다.

그렇지만 시간이 흘러 메모리 값이 점차 저렴해지고 프로그램이 쓰는 메모리 용량이 늘면서 서버만의 영역처럼 느껴지던 ‘마의 4GB’가 일반 PC 사용자 손이 닿을 정도가 되었습니다. 단 15만원이면 PC에 4GB의 메모리를 꽂아 과거 고성능 서버처럼 강력한 성능을 누려볼 수 있게 된 셈입니다. 단순히 메모리 가격이 저렴해진 것 뿐 아니라 4GB 이상의 메모리를 꽂아 쓸 수 있도록 다른 기술의 발전도 함께 이뤄졌습니다. 인텔 EM64T, AMD64같은 CPU 기술, 8GB 메모리까지 꽂아 쓸 수 있는 인텔 965 칩셋, 64비트 윈도우와 리눅스는 이제 주변에서 쉽게 찾아볼 수 있습니다.

그렇지만 모든 최신 기술은 ‘모르면 당하는’ 법입니다. 기껏 비싼 돈을 들여 대용량 메모리를 꽂았더니 윈도우 등록 정보에는 엉뚱한 용량이 뜬다면 어떤 느낌을 받겠습니까? 물론 황당한 느낌이겠지만 그것은 결코 하드웨어 불량이 아닙니다. 대부분의 운영체제가 4GB 이상의 메모리를 인식하지 못한다는 사실, 4GB도 전부 인식하지 않는다는 사실을 몰랐기 때문입니다. 쓰고 있는 64비트 CPU를 더 잘 쓰는 법, 4GB 또는 그 보다 많은 메모리를 제대로 다 쓰는 것도 방법이 있습니다. 그 방법을 하나씩 살펴보는 시간을 마련했습니다.

■ 이론과 현실은 다르다?! 이론은 4GB, 실제는 3GB



기껏 4GB 메모리를 꽂았는데 이런 화면을 보게 된다면 누구나 기분이 좋을 리 없다

메인보드는 분명히 8GB 메모리를 꽂을 수 있다고 되어 있는데 운영체제의 등록 정보에는 단 3GB만 나온다면 누구나 황당한 표정을 지을 것입니다. 꽂은 부품이 뭔가 불량이 아닐까 하는 걱정과 함께 뭔가 잘못 손댄 부분이 없는지 하는 후회가 머리 속을 맴도는 것이 당연합니다. 그렇지만 이 문제는 한 가지 사실을 이해해야만 문제를 납득하고 해결의 길을 걸을 수 있습니다.


‘32비트 환경에서는 답이 없다’

이 말을 이해하려면 먼저 ‘32비트’라는 말의 뜻을 알아야 합니다. 최초의 컴퓨터인 에니악 이후 모든 디지털 컴퓨터는 0(전기 신호 없음)과 1(전기 신호 있음)의 두 가지 신호를 조합해 자료를 처리해 왔습니다. 이 0과 1의 조합을 ‘비트’라고 합니다. 컴퓨터는 이들 비트를 따로 처리하지 않고 몇 개의 비트를 묶어 처리할 수 있는 데이터의 종류와 폭을 늘려왔습니다. 우리나라 개인용 컴퓨터는 8비트부터 시작했고 16비트, 32비트 순서로 진화해 왔습니다.

지금의 PC에 들어가는 CPU는 싸구려 CPU와 100만원짜리 쿼드코어 CPU를 가리지 않고 ‘32비트’ 기술을 씁니다. 물론 그 속을 들여다보면 몇몇 부분은 향상된 64비트 단위로 처리를 하고 있지만 그 기본은 여전히 32비트입니다. 최신형 코어2 쿼드 CPU도 알고 보면 그 기본은 1985년에 나온 80386 CPU의 것입니다. 이 80386부터 내려온 32비트 CPU 기술을 IA(인텔 아키텍처)-32라고 부릅니다. IA-32의 기본은 최신 인텔, AMD, VIA CPU 속에도 여전히 살아 있습니다.

32비트 CPU 기술은 이론적으로 2의 32제곱 바이트, 쉽게 말해 4GB까지 메모리를 인식하고 쓸 수 있습니다. 그래서 대부분의 사용자들이 ‘따로 손을 대지 않고도 4GB까지는 문제 없다’고 생각하는 것입니다. 그렇지만 진짜 4GB까지는 문제가 없을까요? 꼼꼼히 따지면 그렇지도 않습니다.


왼쪽은 4GB 메모리를 꽂았을 때, 오른쪽은 2GB 상황에서 윈도우 운영체제의 논리 메모리
분할 상황을 나타낸 것이다. 32비트 환경에서는 아무리 애써도 3GB 이상 사용자 영역을 늘리지 못한다.

컴퓨터의 메모리를 논리적으로 따져보면 크게 ‘사용자 영역’과 ‘시스템 영역’으로 나뉩니다. 사용자 영역은 사용자가 실행한 프로그램이 쓰는 공간, 시스템 영역은 운영체제의 커널 등 하드웨어와 운영체제의 핵심 자료가 저장되는 전용 공간입니다. IA-32 기술은 4GB의 메모리 가운데 3GB를 사용자 영역, 1GB를 시스템 영역으로 삼도록 하고 있습니다. 윈도우는 따로 옵션을 주지 않는 한 어플리케이션은 2GB까지만 쓰고 상위 1GB는 동적 링크 라이브러리(DLL), 16비트 프로그램 등 시스템 영역이 아닌 프로그램만 제한적으로 받아들입니다.

만일 메모리 용량이 3GB보다 작으면 시스템 영역은 사용자 영역과 메모리를 공유하므로 드러나는 문제는 아무것도 없습니다. 그렇지만 3GB를 넘으면 사용자 영역 공간만 운영체제가 인식해 최대 쓸 수 있는 메모리 용량을 3GB로 보여주고 맙니다. 이 제한은 CPU를 비롯한 32비트 PC 기술의 한계로서, 어떤 운영체제를 써도 이 속박을 벗어날 수 없습니다. 윈도우만의 문제가 아니라 리눅스, 유닉스도 이 쇠사슬을 풀어낼 수 없습니다.



PAE는 32비트 운영체제에서도 4GB 메모리를 쓸 수 있게 돕지만 어디까지나 변칙일 뿐이다

물론 ‘꼼수’가 전혀 없는 것은 아닙니다. 인텔 및 신형 AMD CPU를 쓴 몇몇 서버 PC는 32비트 운영체제를 쓰면서도 4GB가 넘는 메모리를 달기도 합니다. 그것을 PAE(Physical Address Extension, 실제 주소 확장)이라고 합니다. 펜티엄 프로 이후에 나온 CPU에 들어간 PAE는 메모리 컨트롤러(메인보드 칩셋)이 4GB가 넘는 메모리를 꽂을 수 있도록 되어 있다면 최고 64GB까지 메모리를 쓸 수 있도록 합니다. 그렇지만 운영체제가 직접 메모리를 관리하는 것이 아닌 일종의 꼼수인 만큼 신뢰성과 호환성이 떨어지는 문제가 남습니다.

결국 뭔가 편법을 쓰지 않는다면 32비트 운영체제와 CPU 환경에서 4GB 메모리를 전부 마음대로 쓰는 방법도, 4GB가 넘는 메모리를 꽂아 쓰는 방법도 마땅한 것이 없다는 결론이 나옵니다. 게임과 동영상을 편집하는 데 메모리 용량이 크면 좋다고 해서 4GB를 꽂으려 하는 분들이 있다면 ‘운영체제와 CPU부터 확인하라’는 말씀을 드리고 싶습니다.

■ IA-32를 개조하다?! 64비트 확장 기술

80386이 처음 나올 때만 해도 PC에는 많아야 4MB의 메모리를 꽂아 썼습니다. 그런 만큼 당시에는 4GB의 한계의 벽에 이르려면 꿈 같은 시간이 흘러야 했다고 믿었던 것도 당연했으며, 강산이 두 번 바뀌는 20년 동안 잘(?) 버텨줬습니다. 그렇지만 서버를 비롯해 4GB 한계에 이른 컴퓨터가 나타나기 시작하면서 CPU, 운영체제 제조사들은 ‘포스트 IA-32’를 준비하기 시작했습니다.





IA-64 아키텍처를 쓴 인텔 아이태니엄. 시도는 좋았지만 주변 환경이 나빠 대중화는 실패했다

32비트의 한계를 뛰어 넘는 가장 좋은 방법은 새로운 64비트 기술로 새로운 CPU를 만드는 것입니다. 실제로 인텔은 처음에 아예 모든 CPU를 64비트로 바꿀 생각을 품고 HP, 실리콘그래픽스(SGI) 같은 RISC CPU 제조사와 손잡고 새로운 CPU를 만들어 냈습니다. 그것이 IA-64 기술을 쓴 ‘아이태니엄(Itanium)’입니다. 인텔은 아이태니엄을 먼저 수퍼컴퓨터와 고성능 서버 시장에 먼저 소개하고 차츰 그 기술을 넓혀 PC 시장까지 모든 CPU를 IA-64 기술로 도배(?)할 생각을 품었습니다.


그렇지만 이런 인텔의 생각은 처음부터 삐걱거렸는데, IA-64 기술은 종전 IA-32 규격에 맞게 만든 프로그램과 호환성이 그리 좋지 않았습니다. 사실 CPU 제조사들이 64비트 기술 CPU를 만드는 데 주저한 이유가 호환성 때문인데, 8비트에서 16비트, 16비트에서 32비트는 나름대로 여러 기술을 더하고 빼가며 큰 불편함이 없을 정도의 호환성을 지켜냈습니다. 그렇지만 아이태니엄은 종전 PC용 프로그램(x86)을 잘 실행하지 못했고 실행이 된다 해도 성능이 떨어졌습니다. 생각만큼 IA-64 프로그램도 다양하게 나오지 않아 서버와 수퍼컴퓨터를 빼면 아이태니엄과 IA-64에 매력을 갖는 사람은 없었습니다. 상황이 그렇게 되자 공동 개발 파트너인 HP는 아이태니엄 개발에서 손을 뗐고, 6년이 지난 지금까지 최고급 서버와 수퍼컴퓨터 시장을 벗어나지 못하고 있습니다.

인텔의 64비트 전환 시도는 무참한 실패로 끝났고 32비트의 한계를 안은 채 시간은 계속 흘러갔습니다. 그 사이 인텔은 마땅한 방법을 찾지 못한 채 PAE같은 편법에 의존할 수 밖에 없었습니다. 여기에 나름대로 해답을 낸 것은 CPU 기술의 선도 기업인 인텔이 아닌 ‘영원한 2인자’ AMD였습니다.


AMD는 인텔보다 먼저 32비트 기술을 확장한 64비트 명령어, AMD64를 발표해 기선을 잡았다
 

AMD는 2003년 말에 코드명 ‘K8’로 불리는 ‘애슬론 64’를 발표합니다. 이 CPU는 한층 더 강력해진 실수 연산 기술과 메모리 컨트롤러를 CPU로 옮겨와 당시 인텔의 주력 모델이던 펜티엄 4보다 한 차원 다른 성능을 냈습니다. 그렇지만 애슬론 64의 핵심은 바로 ‘PC용 64비트 기술’로 광고하던 AMD64 아키텍처입니다.

사실 AMD64는 인텔이 꿈꾸던 ‘완전한 64비트 CPU’와 거리가 먼 ‘기본은 32비트 CPU’입니다. 그 속을 들여다보면 20년 넘게 써온 IA-32가 들어 있습니다. 모든 것을 새로 짜야 하는 새로운 64비트 CPU 대신 32비트 CPU의 기술을 바탕으로 문제는 고치고 기술은 한 층 새롭게 한 ‘새로운 개념의 64비트 CPU’가 AMD의 생각이었습니다.

AMD64는 종전 IA-32 명령어에 64비트 정수 연산 기술과 추가 레지스터, 40비트 메모리 관리 기술을 더해 IA-32 프로그램의 호환성을 해치지 않으면서 64비트 프로그램을 만들 수 있게 했습니다. 완전한 64비트 CPU는 아닌 만큼 성능이 눈에 띄게 빨라지는 효과는 없지만 작으나마 64비트 전용 프로그램을 빠르게 실행할 수 있는 계기를 만들었고, 꽂을 수 있는 메모리 용량을 1TB(2의 40제곱)까지 늘렸습니다. 초기에는 AMD64 명령어를 쓸 수 있는 운영체제가 드물어 이 부분은 그리 소비자들의 눈에 띄지 못했지만, 리눅스를 시작으로 한 운영체제가 AMD64에 맞게 바뀌기 시작하고, 마이크로소프트도 윈도우 XP 프로페셔널 x64 에디션을 내놓으며 뒤늦게나마 빛을 보기 시작했습니다.

‘32비트 CPU 기술을 확장한 64비트’ 개념은 인텔도 갖고 있었습니다. 코드명 ‘얌힐(Yamhill)’로 불리던 그 프로젝트는 오랫동안 인텔에서도 지지부진한 채 잊혀져 갔습니다. 그러다 AMD가 AMD64 명령어를 개발하고 있다는 소식이 알려지면서 인텔도 이 계획에 불을 당깁니다. 그 사이 마이크로소프트 등 OS 제조사들의 요구를 받아들여 AMD64와 인텔의 64비트 기술의 기본 호환성을 갖추도록 내용을 수정해 2004년 말에 ‘EM64T(Extended Memory 64bit Technology, 64비트 메모리 확장 기술)’를 발표합니다. 이 기술은 프레스콧 코어 펜티엄 4에 실리기 시작해 지금은 거의 모든 인텔 PC용 CPU에 실려 있습니다.

AMD64와 EM64T는 개념이 비슷한 64비트 확장 기술이지만 조금씩 차이가 있습니다. 운영체제의 호환성을 지키고자 기본은 같도록 하고 있지만 작은 부분은 차이가 있습니다. 그래서 ‘인텔이 시간이 없어 AMD64를 이름만 바꿔 내놓았다’는 소문은 사실과 다릅니다. AMD64가 EM64T에 영향을 준 것은 사실이지만 인텔 또한 비슷한 개념의 기술을 준비하고 있었다는 점, 그러한 것이 서로의 기술에 차이를 가져왔다는 점도 변함 없는 사실입니다.



(표 1) 64비트 CPU 기술이 들어간 인텔, AMD CPU 목록

■ CPU만 바뀐다고 달라지나?! 64비트 운영체제

AMD64의 등장과 함께 PC와 노트북 PC, PC 서버에서 4GB가 넘는 메모리를 ‘안전하고 확실하게’ 쓸 수 있는 길이 열렸습니다. 하지만 아무리 CPU가 64비트 기술이 있다 해도 운영체제가 바뀌지 않으면 아무런 도움이 되지 않습니다. CPU와 운영체제는 손바닥처럼 함께 64비트의 길을 걷지 않으면 소리가 나지 않습니다.

64비트 운영체제는 마이크로소프트보다 리눅스 같은 오픈 소스 진영이 더 빠르게 움직였습니다. 수세 등 몇몇 리눅스 패키지는 AMD64 발표와 비슷한 시기에 64비트 모델을 내놓았고, 지금은 레드햇, 데비안, 수세 등 거의 모든 PC/서버용 리눅스 패키지가 64비트(x86-64) 패키지를 내놓고 있습니다.

이 분야에서 마이크로소프트의 움직임은 꽤나 더뎠습니다. MS는 윈도우 XP의 다음 모델부터 64비트 기술을 넣을 계획을 세웠기에 처음에는 윈도우 XP의 64비트 버전은 내놓을 계획이 없었습니다. 그렇지만 코드명 롱혼(지금의 윈도우 비스타)의 개발이 계속 늦어지면서 고급형 서버와 이 서버에 맞는 프로그램 개발을 서두르고자 윈도우 XP와 윈도우 서버 2003의 64비트 버전을 내놓았습니다. MS는 인텔과 AMD의 64비트 기술을 묶어 ‘x64’로 불렀고, 윈도우 XP 프로페셔널, 윈도우 서버 엔터프라이즈/데이터센터 서버가 x64 에디션 모델로 나왔습니다. 그렇지만 이들은 우리나라에 그리 널리 퍼지지 못했고, 성능 또한 32비트 버전보다 떨어져 그리 좋은 평가를 받지 못했습니다.

윈도우 비스타가 나온 지금은 윈도우와 리눅스 모두 자유롭게 64비트 기술을 쓸 수 있습니다. CPU만 64비트 기술에 맞춰져 있다면 x64 또는 x86-64 운영체제를 설치해 넉넉한 메모리와 빠른 속도를 느낄 수 있습니다. 윈도우 비스타는 32비트 버전을 쓰던 사람도 약간 비용을 들이면 64비트 판으로 업그레이드할 수 있어 부담이 적습니다.



(표 2) 64비트 CPU와 프로그램을 실행할 수 있는 운영체제 목록

대신 64비트 운영체제를 쓰려면 몇 가지 알아둬야 할 점이 있습니다. 이 점을 잊으면 정작 필요할 때 64비트 기술을 누리지 못하며, 오히려 눈물을 머금고 32비트 운영체제로 바꿔야 하니까 미리 확인하고 업그레이드를 결정해야 합니다.

▶ 64비트 드라이버와 프로그램이 충분한지 확인할 것

64비트 운영체제는 소프트웨어 작동 방식이 달라서 하드웨어와 관련이 있는 프로그램은 64비트 전용을 써야 합니다. 드라이버, 동영상 재생에 필요한 코덱, 바이러스 백신 등 시스템 프로그램은 64비트 전용 또는 호환이 검증된 것을 쓰지 않으면 문제가 생길 수 있습니다. 반드시 하드웨어 제조사 또는 칩 제조사에서 쓰고자 하는 64비트 운영체제의 드라이버가 있는지 확인해 주십시오.

▶ 운영체제의 최대 메모리 용량을 확인할 것

지금의 AMD64는 1TB, EM64T는 128GB까지 메모리 용량을 늘릴 수 있습니다. 그렇지만 운영체제가 이 CPU 기술에 맞는 메모리 용량을 전부 받아들이지 못하면 32비트 운영체제에 4GB 또는 그 이상의 메모리를 꽂은 것과 마찬가지 문제가 생깁니다. 더욱이 커널의 업그레이드가 빠른 리눅스/유닉스가 아닌 윈도우라면 쓰고 싶은 운영체제가 얼마나 많은 메모리를 관리해주는지 꼭 확인해야 합니다.

AND