** 추가: 어정쩡하게 쓴 64비트의 내용과 램디스크 내용이 더욱더 글을 혼돈에 빠트린거 같아 죄송합니다.

하지만 기본적으로 MMIO에 대한 내용과 PCI hole에 대한 내용을 이해하신다면...적어도 32비트 OS에서 4기가 램에 대한 내용은 정확하게 이해하실수 있으며, 

또한 바이오스의 도움(remapping)으로 64비트 OS인 경우 MMIO를 위한 어드레싱 범위의 이동을 통해 4기가 램을 100% 활융할수 있습니다(confirmed) ==> 혹시나 여전히 4기가중 3.x 기가만 사용가능하다고 나오는 경우 최신의 바이오스로 업데이트하신후 remapping 기능을 활성화 하시길 바랍니다. (64비트 OS의 경우에만 해당)


글을 32비트 OS에서 4기가 램으로 한정을 해서 작성했어야 되는데, 어정쩡하게 64비트와 램디스크 영역까지 확대해서 혼란만 가중시킨거 같네요.

이미 많은 분들이 읽어버려서 다시 쓰기는 힘들고 해서, 이렇게 글 서두에 남기고 다음부터는 좀더 신중하게 작성하도록 하겠습니다. 


** 추가2:  4기가 램을 설치한 경우 두줄로 요약하면, 

(1) 32비트 OS 경우 MMIO 를 위해 예비된 메모리 번지 영역때문에 4기가 메모리를 100% 활용하지 못함 

(2) 64비트 OS 경우 (대부분의 경우라면) 바이오스의 리매핑 기능을 통해 MMIO 영역을 4기가 이상으로 보낼수가 있으므로, 4기가 메모리를 100% 활용할수 있음


** 추가3: 좀더 이해하도록 쉽게 그림과 예를 들어 새롭게 글을 작성했습니다.

참조: http://tpholic.com/xe/3885733




안녕하세요 [안젤러스]입니다. 


먼저 그동안 제 잘못된 지식으로 본의 아니게 질답란에 엉뚱한 답변을 달아서.. 혼돈을 더욱 가중시킨거 같아 먼저 죄송하다는 말씀을 드리면서 글을 시작합니다. 


오늘 이야기하고 싶은 부분은 최근까지도 질답란에 심심치 않게 꾸준히 올라오는 [32비트 OS에서의 4기가 램]에 대한 이야기입니다. 

(부제: PCI hole)


가장 빈번하게 질문되는 내용을 요약하면 크게 다음과 같이 두가지 경우로 나눌수 있을거 같습니다. 


[1] 32비트 OS에서는 (노트북 기준으로) 대략 3.x 기가 까지만 인식이 된다고 한다. 그러면 4기가를 사용하게 되면 낭비인가? (==> YES)

==> 그동안 이 부분에 대해 NO 라고 답변드렸던것에 대해 다시한번 잘못된 정보였음을 알려드립니다. 

[2] 그렇다면, 4기가 사용자의 경우 나머지 인식이 되지 않는 부분을 램디스크로 활용가능한가? (==> Probably, NO)



그렇다면, 4기가 램을 설치했을때 일정 부분의 램이 낭비(좀더 기술적으로는 OS에 미할당) 되는 이유는 무엇일까요?

이 점을 이해하기 위해서는 PCI memory address range (또는 Memory mapped IO, MMIO) 와 더불어 PCI Hole에 대해서 이해하게 되면 의외로 쉽게 풀리는 문제입니다. 



보통 메모리 영역(address range)는 다음 그림과 같이 두가지 부분으로 나뉘게 됩니다. 


[A] 파란색 영역 - OS에 할당되는 영역

[B] 주황색 영역 - PCI memory addressing range (or Memory Mapped IO) 영역 (일명 PCI Hole)


Picture4.jpg


32비트 운영체제의 경우 많은 분들이 아시듯이, 어드레싱 가능한 범위는 2^32 = 2^10 * 2^10 * 2^10 * 2^2 = 4GB 까지입니다. 

따라서 이론적으로는 0 ~ 4GB 메모리를 모두 어드레싱 가능합니다.


문제는 CPU가 컴퓨터 주변장치와 서로 데이타 정보를 주고 받기 위해서 Memory Mapped I/O라는 기법을 사용합니다 (MMIO는 쉽게 말해서 메모리의 특정 주소를 주변장치와의 I/O를 위해 사용하는 것입니다. 예를 들어 애플리케이션이 비디오 메모리에 특정 데이타를 써놓거나 또는 비디오 메모리의 특정 영역의 데이타를 가져오고 싶다면, 해당되는 메모리 주소를 통해서 이러한 I/O를 수행하게 됩니다)


MMIO를 위한 특정 메모리 어드레스 영역이 할당되어지게 됩니다. 또한 이 부분은 OS에서는 접근이 불가능한 메모리 어드레스 영역이 됩니다.


따라서, 32비트 OS의 경우 언제나 MMIO를 위해서 할당되는 부분만큼의 메모리 영역을 제외하고 나머지 부분만이 OS에서 어드레싱이 가능합니다. 

(참고로, MMIO를 영역은 보통 맨 끝인 4기가부터 시작해서 첫번째 512KB는 바이오스가 차지라며 그 다음 부터 IO cards, networking, PCI hubs, bus bridges, PCI-Express, Video/graphics cards 등을 위해 할당합니다)


예를 들어, MMIO를 위해 총 0.9GB의 어드레스 영역이 필요하다면, 

[a] 3.1GB ~ 4GB 에 해당되는 어드레스 영역은 MMIO를 위해 할당되며, 

[b] 0 ~ 3.1GB 에 해당되는 어드레스 영역이 OS에 할당됩니다. 


즉, 1G, 2G, 또는 3GB의 램을 설치한 경우 설치된 램의 100%가 3.1GB 어드레스 영역에 존재하므로 100% OS에서 할당(어드레싱 가능)이 됩니다. 

하지만 4GB의 램을 설치하는 경우 0.9GB 정도의 램은 어드레싱이 불가능하여 (MMIO 영역으로 reserved가 됬기때문에), 이 만큼의 램을 낭비하게 되는 것과 마찬가지인 경우가 발생합니다. 



또 다른 예로, 데스크 탑의 경우 종종 1기가 이상의 비디오 램을 가지는 경우가 많으며, 심지어 SLI를 이용해서 이러한 비디오 카드를 2개를 사용하는 분들도 있습니다. 

이러한 경우 MMIO 영역이 2.x GB 가 넘어가므로, 결국 3기가 램을 설치해도.... 100% 다 활용하지 못하는 경우가 발생할수도 있습니다. 

(데탑에서 1기가 이상 비디오 램을 가진 그래픽 카드를 사용하시는 분들은 차후에라도 여유가 되신다면,  4기가 이상 램을 설치하신 다음 64비트 OS를 사용하시는 것을 권장합니다)



한가지 덧붙힌다면, PCI Hole 이라는 이름 처럼 64비트 OS를 설치하신다고 해도...다음의 그림처럼 4기가 영역부터 일정부분 구멍(hole)이 생깁니다. 

(이유는 바이오스 자체에서 OS 진입전에 MMIO를 위한 영역을 잡아야되는데...설치된 OS가 32비트인지 64비트인지 알수가 없기때문에...현재로서는 4기가부터 시작해서 필요한 부분만큼 빼는 형태로 되어 있습니다) ==> 만약 온전히 64비트 운영체제가 대중화되어서 더이상 32비트 운영체제에 대한 지원이 필요없게 된다면..MMIO 어드레스 영역을 아주 한참 뒤로 밀면...이러한 문제는 더이상 발생하지 않을거 같습니다 ^^ ==> (추가: 이미 최신의 바이오스에서 64비트 OS의 경우에 대해 MMIO 영역을 4기가 이상의 영역으로 remapping 하는 기능이 이미 구현되어 있는것을 뒤늦게 알게되었습니다. 따라서 최신의 64비트 OS를 사용하시고 최신의 바이오스를 사용하시고 칩셋이 리매핑을 지원하는 경우라면...64비트 OS의 경우 PCI hole이 3 ~ 4기가 영역이 아닌 4기가 이상의 어드레스 번지로 리매핑되는 것을 확인했습니다^^; 따라서 이런 경우라면 4기가를 100% 활용가능합니다.) ==> 무지를 깨닳게 해주신 흠야님께 감사드립니다.


* 주의 1) 다음 그림은 윈도우즈 XP 64비트 시절에 작성된 문서를 참조하였습니다. 

만약...최신의 바이오스를 사용하며 최신의 OS를 사용하는 경우에 해당 영역이 4기가 이상 어딘가로 할당된다면, 64비트 OS의 경우 MMIO를 위해서 reserved 된 3.x GB ~ 4GB 어드레스 영역을 OS가 사용가능하므로 4기가 램을 100% 활용할수 있을것입니다.  (64비트이니까 이론적으로 어드레싱 가능한 영역은 거의 무한이므로...4기가 이상 어떤곳도 MMIO로 할당이 가능할것입니다...다만 이렇게 되는 경우 반드시 64비트 디바이스 드라이버를 사용해야 안정성을 확보할수 있을것입니다)


(댓글중 흠야님과 소심남님의 글을 참조하시길 바랍니다.)



Picture5.jpg




[리매핑-Remapping]

32 비트 OS의 경우 4GB까지 어드레싱이 가능하지만, MMIO를 위한 어드레스 영역을 미리 할당해야되는 문제점때문에 4기가 메모리를 설치한다고 해도 MMIO 영역만큼의 메모리를 활용하지 못합니다. 이러한 문제점을 해결하기 위해서 PAE(Physical Address Extension) 을 사용해서 2^36 까지의 메모리를 억세스하며,,,.. 4기가 이상의 메모리 (즉, 5 또는 6기가)를 설치한 후 4기가 이상 부분으로 MMIO를 옮기는 방법 (Remapping) 이 있다고 합니다. 


하지만,, 개인적으로는 어차피 4기가 이상 메모리를 설치했으며, 특별히 3.0GB ~ 4.0GB 대의 메모리 어드레스를 사용해야될 특별한 이유가 없는 한 64비트 OS를 설치하시면 됩니다. 




[잘못생각하기 쉬운것들 - Pitfalls]

[1] 4기가 메모리를 100% 활용하기 위해서는 64비트 OS를 설치해야된다? ==> NO (또는 YES)

32비트 OS든 64비트 OS든 MMIO 어드레스 영역은 필요하며, 현재 설치된 메모리가 4기가라면 첫번째 그림과 같이 MMIO를 제외한 나머지 영역만이 OS에 할당됩니다.

즉 OS에 상관없이 여전히 3.x 만이 OS에 할당됨.

(주의 1을 참조하시길 바랍니다. 최신의 바이오스를 이용해서 MMIO를 4기가 이상으로 옮긴다면.. 4기가 램을 100% 활용가능할것입니다.)


[2] 32비트 운영체제에서 4기가 메모리를 100% 할용하기 위해서 램디스크를 활용한다? ==> 아마도 NO 일것입니다. (자신없음; 밑에 추가설명)

정확하게 확인한것은 아니지만, 램디스크를 영역이 MMIO 영역에 잡힐수 없으므로 만약 521M 정도를 램디스크로 잡는다면, (4GB - MMIO 를 위한 어드레스 영역 -512MB) 영역이 OS가 활용가능한 영역이 될것입니다. 결국 512MB (램디스크로 할당한 만큼)를 또 까먹게 되게 됩니다. 


개인적으로 생각하는 바람직한 램디스크 사용은 어쩔수 없이 32비트 OS를 사용해야되는데 램이 6기가 처럼 4기가가 넘는 경우 (위에서 밝혔듯이, 4기가 이상은 32비트 OS에서 어드레싱이 불가능하므로, unmanaged 영역으로 분류가 됩니다), 2G의 unmanaged 영역을 램디스크로 잡아서 활용하는 경우라 생각됩니다. 



[3] 그럼 4기가는 정말 낭비인가요? ==> partially Yes

주위 깊게 글을 읽으신 분이라면, MMIO에서 가장 많은 부분을 차지하는 것은 비디오 램 크기에 해당되는 영역때문이라는 것을 쉽게 아실수 있습니다. 

따라서, 자신의 랩탑이 가지는 비디오램이 작을 수록 MMIO가 차지하는 영역의 크기가 작으므로 3기가 이상 (3.5기가까지) 사용가능하므로

4기가 장착한다고 해도 크게 손해보는 것은 아닐 것입니다.. 다만, 장착된 비디오램이 크기가 어느정도 크다면  램을 4기가 이상으로 늘려주시고 64비트 이상으로 가거나 아니면 3기가 정도 램으로 사용하시는 것이 낭비를 줄일수 있는 방법일것입니다. 


[4] 끝으로 홀릭분들의 램 사용량이 3기가 이상은 되나요? 

이 문제는 자신의 컴퓨팅 습관을 주의 깊게 모니터링 해보셔야될문제라고 생각합니다. 

헤비하게 멀티태스킹을 하는 경우가 아니라면..아직까지는 3기 램으로도 충분히 꽤적한 환경을 즐길수 있지 않을까요?

주관적인 의견입니다. 


** 혹시라도 제글에 틀린점이 있다면 댓글로 달아주시거나 쪽지 주시면 감사하겠습니다. 




[램디스크 부분 추가]

사실 제가 램디스크를 사용중이 아니라서 정확하게 답변을 드리기가 힘든 부분입니다만..

구글링을 통해서 찾아낸 다음과 같은 내용을 기반으로 해서 저의 생각을 정리해보고, 다른 분들의 의견을 들어보도록 하겠습니다. 


먼저... 램디스크 프로그램중에 가장 대중적인 RAM DISK PLUS 홈페이지에서 가져온 내용입니다. 


RamDisk Plus 10 has a most unique feature. Our patent pending technology can access memory beyond the limitation imposed by a Windows 32-bit operating system! In other words, RamDisk Plus 10 can use "unmanaged" Windows' memory e.g. above 4GB. It can also use the stubbornly inaccessable memory between 3.2GB and 4GB.


[1] 위 글에서 보시면 "unmanaged"라는 용어는 4기가 이상 (즉 32비트 OS에서 아예 어드레싱 자체가 불가능한 영역)을 지칭하는 걸로 되어 있습니다. 

[2] 분홍색 글씨는 MMIO 를 위한 reserved 된 영역임을 쉽게 알수가 있습니다. 

==> 일단은 해당 내용만을 봐서는 램디스크를 이용하게 되는 경우 MMIO에 reserved 된 메모리 영역을 램디스크 플러스 10이라는 녀석이 어드레싱 가능하다고 되어 있습니다. 


하지만 다음 그림을 보면 조금 의문이 생깁니다 (구글링을 통해서 가져온 램디스크 플러스 9 사용예제라서 버전 10과는 다를수 있습니다. 

지금으로썬느 해당 버전을 사용하시는 분이 직접 캡쳐된 그림을 올려주시는게 가장 정확할거 같네요....)


ramdisk.jpg


일단 해당 시스템에는 메모리가 4기가 설치되어 있는걸로 보여집니다. 

제가 보기에는 사용 가능한 메모리는 3474MB (대략 3.4GB, 즉 0.6GB 정도의 MMIO에 reserved된 영역을 제외한 영역) 로 보고 하고 있는거 같습니다. 

문제는 그 다음 Windows-managed 와 Unmanaged 라고 보고하는 부분은 

순전히 램디스크 플러스가 계산하고 자신들의 용어를 사용한거 같아서, 용어의 정확성과 그 의미가 저에게는 불분명해보입니다. 

(혹시 clear하게 설명가능하신 분이 있다면 쪽지나 댓글로 남겨주시면...글을 보충하도록 하겠습니다)


아마도 가장 정확한것은 램디스크를 사용한후 시스템 정보 (System Information, 또는 msinfo32.exe 실행)를 통해서 운영체제가 사용가능한 램의 크기의 변화를 살펴보는 것일겁니다. 


아쉽게도 현재 제 환경에서는 측정이 불가능하니, 혹시 4기가 램에 32비트 운영체제 그리고 램디스크를 사용하고 계신 분이라면... 캡쳐를 통해서 좀더 정확한 정보를 제공해주실수 있을거라 생각합니다. 







[부록: 지난글 읽기]

2009/07/22 [LCD 간단정리] 링크: http://tpholic.com/xe/2013817

2009/07/23 [SSD 이야기 1편] 링크: http://tpholic.com/xe/2023635

2009/07/25 [SSD 이야기 2편] 링크: http://tpholic.com/xe/2040311

2009/08/02 [SSD 이여기 3편] 링크: http://tpholic.com/xe/2107150

2009/09/16 [SSD 이야기 4편] 링크: http://tpholic.com/xe/2128485