4GB 제한의 진실, 32비트 Windows (XP, Vista, 7)클라이언트


지난 ‘Windows 메모리 FAQ’에서 Windows 메모리에 대한 이야기를 드렸는데요, 특히 Windows 클라이언트의 4GB 제한에 대해서 여러분들의 아주 뜨거운(?) 반응이 있었습니다. 그래서 지난 번에 약속 드린 ‘Easy Transfer를 이용한 마이그레이션’은 다음 포스팅으로 미루고 오늘은 ‘4GB 제한의 진실, 32비트 Windows 클라이언트‘라는 주제로 Q&A 형식으로 이야기를 나누도록 하겠습니다.
Q1) 왜 Windows 클라이언트는 4GB까지만 지원하나요?
1. Windows XP가 처음 출시된 초기만 해도 4 기가 바이트(GB) 메모리라는 게 서버에서도 거의 사용되지 않는 고사양의 메모리였으므로 4GB를 이상 지원을 고려할 필요가 없었습니다. (당시는 일반적으로 사용하는 서버의 메모리가 512MB 혹은 그 이하였던 시절 이였습니다, 64MB 서버도… ^^)
2. Windows XP SP2가 출시될 시점에 윈도우 클라이언트도 4GB 메모리 필요성의 조짐이 보였습니다, 그래서 당시 Windows 개발팀에서는 윈도우 클라이언트에서 4GB 이상 메모리 지원을 검토하였습니다.
3. 그런데 윈도우 클라이언트에서 4GB 이상의 메모리를 관리(Memory Management)하면 블루스크린(Crash), 시스템 행(System Hang), 부팅이 되지 않거나 혹은 비디오 카드 같은 장치의 드라이버 문제로 장치를 인식하지 못하는 문제가 빈번하게 발생하는 것을 볼 수 있었습니다. (대부분 Memory corruption)
4. 원인은 윈도우 클라이언트를 위해 만들어진 3’rd Party 디바이스 장치 드라이버(Driver)가 4GB 이상 메모리 환경을 고려하지 않고 만들어졌기 때문에 발생한 문제였습니다.
5. 이런 장치 드라이버 호환성 문제를 피하기 위해 윈도우 클라이언트(XP, Vista, 7)에서는 4GB까지만 메모리 관리(Memory Management)를 할 수 있도록 한 것 입니다.
Q2) 4GB메모리가 전부 보이지(인식)되지 않고 3(.xx)GB 정도로 보여요, 왜 그런가요?
아래 그림은 제 Windows 7에서 시스템 정보(msinfo32.exe)를 실행시켜 얻을 결과입니다, 실제 설치된 메모리는 4GB지만 윈도우가 이용할 수 있는 실제 메모리는 3GB로 인식하고 있습니다.
clip_image002
하나 더 아래 그림은 작업 관리자에서 나타난 값입니다, 마찬가지로 실제 메모리를 3GB 정도만 인식하고 있는 것을 볼 수 있습니다.
clip_image004
결론부터 말씀 드리면 이 현상의 원인은 컴퓨터의 칩셋(Chipset)과 연결된 장치(비디오 카드, Lan 카드 같은)가 가지고 있는 메모리 때문에 실제 장착된 메모리보다 적게 나타나는 것입니다. 윈도우는 ‘실제 메모리’에 나타난 ‘전체’ 크기 만큼의 메모리만 사용할 수 있므며(즉 위와 같은 경우에는 전체 4GB를 사용하지 못합니다) 이는 하드웨어 이슈 입니다. 이와 연관있는 디바이스 요소로는 System BIOS, Motherboard Resources (I/OxAPIC), Memory Mapped I/O, PCI Express Configuration Space, Additional PCI Device Memory (Graphics Aperture), VGA Memory 등이 있습니다.
[이유는 아래와 같습니다]
어려운 이야기가 될 수 있으니 쉬운 이해를 위해 먼저 아래 그림을 보시죠. 시스템이 시작할 때 Physical Address Map(이하 PAM)이라는 걸 만듭니다, PAM은 RAM과 각 장치들이 가지고 있는 메모리의 주소 정보로 일종의 ‘순서’ 혹은 ‘차례’를 만들어 Windows에게 넘겨줍니다, 그러면 Windows는 PAM  범위의 메모리만 사용(Access) 할 수 있습니다.
그런데 PAM이 만들어 질때 메모리(RAM)만 가지고 만드는 것이 아니고 모든 종류의 장치가 가진 디바이스 메모리(비디오 카드, Lan 카드가 가지고 잇는 메모리를 칭함)까지 포함합니다, 처음에는 RAM만 가지고 PAM을 만들어 가다는 중간에 디바이스 메모리가 끼어들게 됩니다, 그러면 PAM 중간에 디바이스 메모리가 포함되고 다시 PAM에 추가되다만 나머지 RAM이 PAM에 추가 되는데 이때 추가된 RAM이 4GB 범위 밖에서 만들어집니다. x86 Standard Memory management Mode를 사용하는 32-bit Windows는 4GB 메모리 영역까지만 사용(Access) 할 수 있는데 디바이스 메모리 때문에 RAM이 4GB 범위 밖으로 밀려나 해당 범위의 메모리가 보이지 않게 되는  것입니다.
clip_image006
위 그림은 총 4GB메모리 환경에서 디바이스 메모리가 총 500MB이기 때문에 사용할 수 있는 총 메모리가 3.5GB로 줄어든 예입니다. 밀려난 500MB는 윈도우가 Access 할 수 없는 영역이기 때문에 사용할 수 없습니다. 이 이슈는 하드웨어에서 해결해야 할 이슈입니다. (이전에 사용한 ‘문제’라는 표현은 오해를 가져 올수 있어 ‘이슈’로 변경하였습니다, 여기서 하드웨어란 칩셋을 의미합니다 )
*참고로 32비트 Windows 서버 관련한 4GB 제한에 대한 이야기는 이전에 ‘누가 내 메모리를 훔쳤나?’라는 글로 포스팅한 적이 있습니다, 서버에 관심 있으신 분들은 참고로 읽어 보시기 바랍니다.
Q3) 정말 디바이스 장치들이 메모리 중간에 끼어 들어 메모리가 밀려났는지를 어떻게 해야 볼 수 있죠?
이전에 어떻게 해야 볼 수 있을까 고민 많이 했는데(디버거 봐야 하나.. 등등 ^^;) 의외로 장치 관리자(devmgmt.msc)에서 간단하게 보실 수 있었습니다. 아래 내용은 32비트 클라이언트뿐만 아니라 64비트와의 비교를 보여드리기 위해 제 테스트 머신에 듀얼 부팅으로 Windows Vista 32비트와 64비트를 설치해 테스트를 진행하였습니다.
32 비트 Windows 클라이언트
아래 그림은 32비트 Vista 작업 관리자(taskmgr.exe)에서 보이는 Physical Memory의 모습입니다, 4GB를 장착했지만 전체가 3.3GB정도가 나옵니다.
clip_image008
그렇다면 ‘작업 관리자’가 말하는 Windows가 실제 인식한 Physical Memory 범위는 어떤 모습일까요? 아래 그림은 Meminfo.exe를 이용하여 Windows가 실제 인식하는 Physical Memory 범위를 출력한 결과입니다. (meminfo는 전에 소개해 드렸던 Windows Internals 5’th Edition을 쓴 Alex Ionescu가 만들었습니다)
clip_image010
메모리를 표기할 때 16진수로 표현하고 이를 00000000~FFFFFFFF로(0MB에서 4GB)로 표현합니다. 위 결과를 보시면 Physical Memory 범위가 ‘00001000~0009F000’과 ‘00100000~CFDFF000’ 두 범위로 나눠져 있으며 대략 3.4GB 정도의 크기 입니다.
그럼 두 범위에 중간에 빠진 ‘0009F000~00100000’과’CFDFF000~FFFFFFFF’ 사이 영역은 왜 Windows에서 인식하지 못한 것 일까요? 앞에서 말씀 드렸듯이 디바이스가 해당 영역을 점유해 윈도우가 사용(Access)할 수 있는 메모리가 아니기 때문입니다.
디바이스가 점유한 모습은 ‘장치 관리자(devmgmt.msc)’를 통해 확인 하실 수 있습니다, ‘장치 관리자(devmgmt.msn) > 보기 > 리소스(연결별) > 메모리’를 선택합니다, 그러면 아래 그림과 같이 비디오 카드 Radeon X13000이 ‘D0000000~DFFFFFFF’(대략 268MB)과 ‘FE900000~FEAFFFFF’(대략 2MB) 영역, 즉 Physical Memory 범위에서 제외되었던 곳에 자리 잡고 있음을 확인 할 수 있습니다.
clip_image012
32비트에서는 4GB에서 밀려난 메모리를 볼 수 없습니다, 그럼 밀려난 나머지를 보기 위해 우리 64비트를 살펴보도록 하죠~
64비트 Windows 클라이언트
아래는 64비트 Vista 작업 관리자(taskmgr.exe)에서 보이는 Physical Memory의 모습입니다, 4GB 모두 보입니다.
clip_image014
Meminfo로 본 Physical Memory 범위입니다, 64비트라 Address 범위부터가 다르죠? Memory Address가 4GB를 넘고 메모리 또한 4GB 범위 모두 나타납니다.
clip_image016
장치 관리자에서 본 모습입니다.
clip_image018
32비트에서 본 것과 마찬가지로 위 빨간 박스의 부분은 268MB정도 되고 아래가 2MB정도가 됩니다. 중간에 비디오 카드가 끼어 들었지만  4GB 이후 주소인 ‘0000000100000000~000000012C000000(실제 메모리 5GB 쯤의 자리)’에서 나머지 720896KB(대략 720MB)를 인식한 것을 볼 수 있습니다. 즉 디바이스가 메모리를 4GB 영역 밖으로 밀어냈다고 해도 128GB까지 인식하는 64bit Addressing 때문에 문제없이 모든 Physical Memory가 보입니다.
처음에 드렸던 예로 이런 상황에서 64비트를 그림으로 표현 하면 아래와 같습니다.
image
Q4) 그럼 32비트 클라이언트가 4GB 이상을 사용(Access, Addressing)하려면 어떻게 해야 할까요?
정답은 32비트 클라이언트는 4GB 이상을 사용할 수 있는 방법이 없습니다, 4GB 이상 메모리의 사용이 필요하다면 64-bit Windows 클라이언트를 사용하십시오.
현재는 32-bit 환경에서 64-bit 환경으로 넘어가기 위해서는 우선 64비트로의 인식전환이 필요할 것입니다. 다음으로 64비트 전용 응용프로그램들이 많이 나와야 할 것 입니다, 32비트 응용프로그램을 에뮬레이션 하기 위한 WOW 64 Subsystem이 있기는 하지만 모든 응용프로그램에 호환성을 보장하지 않고 32비트 응용프로그램 구조상 64비트 Windows에서 실핼 할 때 64비트가 제공하는 무한(?)한 메모리를 이용할 수 없는 제한이 있습니다.
*64비트 윈도우와 응용프로그램에 대한 이야기는 예전에 포스팅 한 글이 있습니다, 읽어 보시고 추가적인 이해에 도움이 되셨으면 합니다.
Windows 64bit Computing에 대한 오해 혹은 잘못된 상식
http://blogs.technet.com/sankim/archive/2007/12/28/windows-64bit-computing.aspx
Q5) Windows XP를 보면 PAE를 지원하는데 이는 XP도 PAE를 사용하면 4GB 이상을 사용할 수 있다는 의미 아닌가요?
Windows XP SP2 부터 나온 DEP(Data Execution Prevention)를 사용하기 위해서는 기본적으로 PAE가 활성화(Enable)되어 있어야 합니다, 그래서 PAE 기능을 활성화 할 수 있도록 한 것입니다. 이는 Windows Kernel에서 32bit에서는 존재하지 않는 64bit PTE table의 field를 이용하기 때문입니다.
To use these processor features, the processor must be running in Physical Address Extension (PAE) mode. However, Windows will automatically enable PAE mode to support DEP. *해당 문서를 보시려면 여기를 클릭하세요.
참고로 PAE를 활성화 하는 경우와 반대의 경우 윈도우가 시작 시 로드하는 커널 파일은 아래와 같습니다.
CPU 수에 따른 환경
기본
PAE 활성
Uniprocess(단일 CPU)
Ntoskrnl.exe
Ntkrnlpa.exe
Multiprocess(다중 or 코어 CPU)
Ntkrnlmp.exe
Ntkrpamp.exe
Q6) 번 외 질문인데요, 도구마다 메모리 측정 결과가 각기 조금씩 다른 경우가 있어요 왜 그렇죠?
위 그림에서 작업관리자는 3.3인데 왜 meminfo는 3.4냐고 반문하실 수도 있습니다 또한 제가 종종 받는 질문 중 하나가 작업 관리자에서 ‘사용가능’ 항목과 성능 모니터에서 ‘Available %메모리%’의 값이 다르다는 것입니다. 이는 각 도구마다 메모리를 계산하기 위한 항목 수집 기준이 조금씩 달라서입니다, 크게 차이가 나는 것이 아니므로 이번 포스팅에서는 무시하셔도 좋습니다. 언제 작업 관리자에 나온 항목에 대한 자세한 설명을 드리겠습니다. (약속만 드리고 지키지 못하는 것들이 많지만 이번 약속은 !!)
그럼 여러분 좋은 하루 되세요~
* 이전에 댓글에 추가로 명시 했습니다만 ‘장치 메모리’, 혹은 ‘MMIO’라고만 명시 한것에 대해서 모호하다는 의견이 있어 본문 내용과 하단 부분에 함께 추가 합니다. ^^ 4GB 전체 사용하지 못하는 이슈에 영향을 끼치는 디바이스 요인으로 System BIOS, Motherboard Resources (I/OxAPIC), Memory Mapped I/O, PCI Express Configuration Space, Additional PCI Device Memory (Graphics Aperture), VGA Memory *등(헥헥헥..)이 있습니다. 그러나 말씀안드려도 이들 모두 ‘장치 메모리’의 범주 임을 알 수 있는 센스~!
[참고자료]
Pushing the Limits of Windows: Physical Memory, Written by Mark Russinovich *이번 포스팅의 대부분의 아이디어가 이 글에서 나왔습니다, 꼭 한번 읽어 보시기 바랍니다.
Windows Internals, Chapter 7 Memory Management
Intel 64 and IA-32 Architectures Software Developer’s Manual, Intel 64 and IA-32 Architectures
Comments (86)

  1. Anonymous says:

    어제 저녁에 읽어 보고 링크의 글 내용중 몇가지에 대해서..

    ‘이 기술을 적용하면 32비트 윈도의 메모리 한계를 최대 64GB까지 확장한다.’

    => 정확하게는 32비트 Addressing을 36비트로 변환하여 64GB까지 액세스 메모리 영역을 확장합니다. 이 구조하에 Windows에서는 PTE의 Size를 확장하여 64GB Physical Memory에 액세스가 가능하도록 구현합니다.

    ‘4GB란 용량은 앞서 말한 것처럼 물리 메모리가 아니라 주소 공간을 뜻한다. 이 4GB의 가상 공간을 2개로 쪼개 2GB는 커널 모드, 나머지 2GB를 유저 모드에 할당한다.’

    =>  여기서 주소 공간이 바로 앞에서 설명 드린 Virtual Address Space 입니다.

    ‘꼼수를 이용해 4GB 이상의 메모리를 쓴다?’

    => PE모드에서 변경했다는 것 같은데.. 정확히 이부분은 어떻게 한것인지 궁금하네요, 방법을 아시는분 계시면 저에게 알려주시면 감사하겠습니다.

    **그리고 이 포스트를 쓸 때 MMIO가 할당 되는 부분은 써야 할지 말아야 할지 고민했었습니만 이 부분은 하드웨어(정확히 말하면 Chipset)에서 다뤄야 할 사항이므로 자세한 내용 설명 없이 넘어갔었습니다(이것까지 쓰면 참 길어지죠). 혹시 이 부분을 확인 하기 위해 몇 대 컴퓨터에서 테스트 하시는 분들이 계시다면(왜곡 될수 있는 답을 얻을 가능성 높음) 그것 보다는 Intel Processor Manual을 구해 보시기를 추천해 드립니다, 이 모든 구조가 바로 Processor와 Chipset과 관련이 있습니다. 참고로 Intel Manual은 Intel 홈페이지에서 무료로 PDF로 제공 됩니다, 얼마전까지 책을 무료로 배송해 줬던걸로 아는데 어딘지 기억이.. . ^^;

  2. Anonymous says:

    안녕하세요? 안녕하세요님,

    이전에 제가 속한 모임에서 동일한 이야기를 한적이 있는데요, 그때 이야기를 답변으로 대신 합니다.

    ——————

    워킹셋(Working Set)은 프로세스가 사용하는 물리메모리 영역이라고 해도 다른 프로세스도 공유해서 쓰는 항목이라 이것을 더하면 실제 물리 메모리보다 더 나올 테고요, Private는 가상메모리-실제메모리(Page out)+디스크(Page in)-입니다.

    리소스 모니터의 해당 ‘사용중(In Use)’은 MM의 Translating a valid virtual address에 사용 되는 pfn을 뒤져서 valid에서 Active 한 메모리의 합 입니다. Windbg를 실행하시고 !memusage를 실행하시면 valid에 active와 동일함을 확인 할 수 있습니다.

    ——————

    감사합니다. 🙂

  3. Anonymous says:

    ^^; 감사합니다. 새해 봅 많이 받으세요~

  4. Anonymous says:

    부용님, 치즈 김밥님 올려주신 댓글 잘보았습니다. 🙂

    좋은 하루 되세요~

  5. Anonymous says:

    Catts님// 말씀 감사합니다, 그 사실(?) 알고 있었어요 🙂 즐거운 하루 되세요~

  6. Anonymous says:

    안녕하세요?

    HW기술 vs SW지원 / 물리메모리 vs 가상메모리 =>네, 맞아요 🙂 이 부분이 많은 분들이 혼돈을 가지고 계신 부분입니다. 방문 감사합니다.

  7. Anonymous says:

    안녕하세요? 🙂

    자세한 분석이 필요하겠지만 개인적으로 새로운 그래픽 카드와 관련 문제가 있지 않을까 조심스럽게 예측해 봅니다. Windows는 컴퓨터 H/W 구성이 4GB를 지원 요구사항을 만족시키지 못하면 드라이버 호환 문제를 피하기 위해 By design으로 총 사용 가능한 메모리를 3.12GB로 제한 합니다.  혹시 교체한 그 VGA가 문제가 아닐까 우선 생각해보고요. 혹시 랩디스크와 같은 3'rd party를  의심 하신다면 '안전모드'에서도 동일한지 확인해 보시면 Clear하게 확인 가능하지 않을까 생각해봅니다.

    즐거운 봄 되세요 🙂

  8. Anonymous says:

    ^^ 감사합니다.

    공부할 대한 범위를 정하는 것도 참 중요한것 같아요..

    방문 다시한번 감사드려요~

  9. Anonymous says:

    안녕하세요? 방문감사드립니다.

    4GB로 바꾼다는 것이 정확히 어떤 의미 인지 모르겠네요 ^^;. 시스템 정보에 보여주기를 4GB로 보여준다는 의미인지(그것은 Vista SP1에 추가됨)아니면 정말 Memory Manager가 4GB 전체를 Addressing의미인지 확인해 봐야 할 것 같습니다. 후자의 경우는 불가능 하고요, 이전에 외부 툴을 사용해 보이지 않는 부분을 다룰수 있다는 글들은 본적이 있습니다만 그렇다고 해도 그것이 실제 Windows Memory Manager가 4GB를 Addressing할 수 있다는 의미는 아닙니다.

  10. Anonymous says:

    안녕하세요?

    그 글을 읽었을때 느낌은 VA, PA 두 개념이 짬뽕 되었다는 것입니다. 그냥 한번 쓱 읽고 잊는 다면 모를까 정말 정확한 이해와 실질적 필요가 있다면 혼돈을 줄 가능성이 아주 높습니다. 실질적으로 Memory를 다룰때 대부분 이 두 개념을 혼돈해 엉뚱한 방향으로 나가는 것을 종종 볼때가 있습니다. 이 두가지를 구분 하는 것은 별을 5개 주어도 아깝지 않을 만틈 아주 중요합니다.

    전산용어가 그런것 같습니다, 동일한 컨셉을 가지고도 몇가지 씩 다른 용어가 있고, 부르는 사람마다 다르고 넓게 보고 이야기 하느냐 아니면 하나 하나 쪼개서 부를 것이냐, 범용이냐 특화냐, 범용이라 생각하고 사용했었는데 알고 보니 특화된 부분에서도 쓰이고.. 그 반대인 경우도 많고, 쪼개서 쓰는것이 맞느냐 아니냐.. ㅎㅎ 🙂

    어서 빨리 용어의 통일이 와야 한텐데요.. 그런데 너무 빨리 변하는게 이바닥 생리라.. ^^

    감사합니다.

  11. Anonymous says:

    이런 말씀들으면 힘이 불끈 불끈!!

    감사합니다 🙂

  12. Anonymous says:

    제 글과 비슷하다는 의미시지요? 기술 이야기는 비슷할 수도 있다고 생각합니다… 저도 Mark Rusinovich의 글을 뼈대로 했으므로 나쁘게 생각하지는 않습니다만 몇가지 오류가 눈에 걸리네요.

    그중에 가장 큰것이 글쓰신 분께서 Virtual Address와 Physical Address를 혼돈하고 계신듯 합니다, 둘은 전혀 다른 의미 입니다. virtual Address는 Process가 사용하기 위한 가상의 메모리 공간을 이야기 하고 Physical Address는 시스템에서 사용하는 실제 메모리 공간(칩셋이 알려준)을 의미 합니다. Virtual Address와 Physical Address를 혼돈한다면 상당히 어렵습니다.

    그리고 4GB 전체 사용하지 못하는 이슈에 영향을 끼치는 디바이스 요인으로 MMIO 뿐만 아니라 System BIOS, Motherboard Resources (I/OxAPIC), Memory Mapped I/O, PCI Express* Configuration Space, Additional PCI Device Memory (Graphics Aperture), VGA Memory등이 있습니다.

    이 포스팅을 쓸때 더 자세한걸 쓰려다가 너무 깊어질것 같아 이 정도(?)까지 썼는데 나중에 시간 나면 이부분도 더 소개해 드리도록 하겠습니다. 🙂

    그리고 /userva는 Exchange Server와 같이 이 옵션을 Aware하는 어플리케이션에서 적용 해야 합니다. 그렇지 않은 경우에는 의미가 없으며, 메모리에 민감(?)한 응용프로그램은 동작자체를 하지 못하는 경우가 있을 수 있습니다(이 일로 Troubleshooting을 한 경험이 있습니다) 또한 /3GB로 인해 PTE Leak 이슈가 나타날 수 있습니다, 해당 글에서 언급한 ‘/3GB /userva’ 옵션을 사용해도 문제는 마찬가지 입니다.

    이 이슈를 정확히 이해하려면 Windows Kernel 뿐만 아니라 Processor도 이해하고 있어야 합니다. 이 이슈를 자꾸 하드웨어의 여러 기술에 접합시켜 이해하려면 더 복잡해지고 엉뚱한 답이 나올수 있으므로 지양해야 합니다.

  13. Anonymous says:

    안녕하세요? 🙂

    디바이스 드라이버는 Windows가 Access할 수 있고 관리(Memory Management) 가능한 물리 메모리에 올라 갑니다(PCI 메모리에는 올라갈 수 없습니다), 윈도우 Virtual Address Space에서 System Space 공간에 올라 갑니다. Windows Internals에서 Memory Managemnet를 참조해 주세요. 그리고 윈도우 MM을 이해하시려면 Windows Internals과 함께 Intel Processor를 이해 하셔야 합니다. *Intel 메뉴얼 3A의 Chapter 3/ Protected-Mode Memory Management를 참조하십시오.

    감사합니다.

  14. Anonymous says:

    Native 4GB Memory addressing은 못하겁니다. 아마 Cache(?) 용도로 사용될듯 하네요.

  15. Anonymous says:

    네, 하드웨어에서 Physical Memory를 4GB로 보여 주지 않는한 Memory addressing이 불가능 합니다.

  16. Anonymous says:

    안녕하세요?

    먼저 아래 정의를 읽어 주십시오.

    [질문 1.]

    DEP를 사용하면 별도의 데이타 공간을 필요로 하나요?  

    답변

    :아래 질문 2를 읽어 보시면 이해가 되시겠지만, 아닙니다.

    [질문 2.]

    DEP를 쓰려는데 왜 PAE가 필요한가요?

    답변

    :DEP에서 PAE가 필요한 이유는 32bit에서는 존재하지 않는 64bit PTE table의 field를 이용하기 때문입니다.

    [질문 3.]

    PAE가 가상메모리를 커널1,유저3으로 변경하나요? 그렇다면 /3GB는 왜 필요한건가요?

    답변

    : 아래 두개의 정의를 읽어 주십시오.

    PAE의 정의

    :PAE는 4GB이상의 물리메모리(Physical Memory)를 지원하기 위해 Intel Pentium Pro이후 부터 Intel에서 제공하는 메모리 어드레스 확장 기술 입니다,

    4GT (/3GB)의 정의

    :4GT(4-gigabyte tuning)는 가상메모리 공간(virtual address space)의 응용프로그램(application)에 3 GB, 시스템(system)을 2GB에서 1GB로 줄이는 기술입니다. 가상메모리 튜닝 기술!

    *즉 PAE를 Enable 한다고 가상 메모리 응용프로그램2:시스템2에서 응용프로그램3:시스템1로 변환 하는 것이 아닙니다. 2:2에서 3:1로 변환하는 것은 4GT입니다.

    개인적으로 개인 사용자들이라면 4GT에 대해서 고민할 필요가 없다고 생각합니다. 일반 응용프로그램이 가상메모리를 2GB이상 필요로 하는 경우는 흔하지 않습니다. 데이타베이스를 이용하는 서버 제품의 경우 유저모드의 넉넉한 메모리 확보를 위해 4GT를 사용하곤 하는데 이 때문에 드물지만 문제가 발생하는 경우가 있습니다.

    4GT로 응용프로그램 영역를 3GB로 늘렸다는 것은 시스템 영역을 2GB에서 1GB로 줄였다는 의미가 됩니다, 이러한 연유로 시스템 관련 메모리 리소스 부족을 불러 일으킬 수 있습니다. 쉬운 예를 들어 네트워크 Connection이 많이 일어나는 응용프로그램의 경우에는 가상메모리의 시스템 영역에 연결정보를 저장하는데 Conncetion이 지나치게(?) 많이 연결되는 경우 2GB였을때는 끄떡 없었지만 1GB로 줄어 메모리 부족 때문에 더 이상 연결이 되지 않는 문제가 발생할 수 있습니다. 이러면 연결 되어 있던 클라이언트들은 사용에 문제가 없지만 새로 연결하려는 클라이언트는 연결에 실패하게 되죠. 이런 경우 Platform을 지원하는 엔지니어와 해당 어플리케이션 지원 엔지니어간의 논쟁이 일어날 가능성이 높습니다.(경험담)쿄쿄쿄!

    좋은 하루 되세요~

  17. Anonymous says:

    🙂 네~ 쾌춘한 하루되세요~ 🙂

  18. Anonymous says:

    안녕하세요? Reminisce님,

    먼저 댓글 늦어 죄송합니다. 최근에 슈퍼 비지한 관계로 들어와 보지 못했습니다. ^^;

    댓글에 많은 말씀을 해주셨는데요, 언급하신 내용에 대해서 도움을 드리게 위해 답글을 답니다.

    1. 결국 커널의 문제를 디바이스 드라이버 핑계를 대고 있다는 느낌이 드네요 -_-;

    => 말씀의 뜻은 Windows 클라이언트 커널이 4GB 이상을 수용 할 수 없는것을 디바이스 드라이버에게 화살을 돌리고 있다는 뜻 같은데 맞나요? 그렇다면 오해 이십니다. Windows Vista 이후 부터는 Windows Server와 동일한 커널을 사용합니다, 단지 클라이언트에서 4GB 제한을 둔것 뿐이죠. 만약 커널의 문제 때문이라면 Windows Server 2008 (혹은 R2)도 동일한 문제가 생겨야합니다. ^^

    2. 제한적 64비트가 중간단계에서 필요했는데 뛰어넘다보니 결국 4기가 메모리도 제대로 활용할 수 없게 된 것으로 보입니다.

    => 말씀하신 애플이 구현 한것이 어떤것을 의미 하시는지 잘 모르겠습니다만 프로세서(CPU)가 32비트면 표현 범위가 2의 32승으로 어떤 수를 써도 그 한계를 벗어 나지 못합니다. 그래서 Intel 계열 프로세서가 채용한 것이 바로 36비트 어드레싱을 위한 PAE입니다. 만약 말씀하시는 그 중간 단계가 PAE를 말씀하시는 거라면 위 글에도 언급했듯이 프로세서가 지원하는 기능을 OS가 사용해 확장하는 것입니다, 물론 Windows도 PAE를 이용해 4GB이상의 메모리 사용이 가능하고요.

    3.64비트 윈도우와 32비트 윈도우에서 사실상 큰 속도 체감을 할 수 없는 이유는 병목현상의 해결이 바로 보일 만큼의 램의 차이나 모든 디바이스 드라이버가 64비트로 동작하는 것이 아니기 때문일 것입니다.

    =>

    1) 체감면에서는__

    당연히 64비트를 사용하면 더 빠른 처리가 가능합니다, 그러나 그것은 프로세서가 빨라서도 아니고 다른 구조를 가져서도 아닌 바로 64비트 어드레싱으로 인해 더 많은 메모리를 사용 할 수 있다는 것입니다, 즉 그 의미는 4GB 이상 대용량의 메모리를 사용하는 어플리케이션을 이용해야 64비트의 참맛(!)을 느낄 수 있다는 의미 입니다. 일반적으로 데이타 베이스와 같은 어플리케이션에서 대용량 메모리를 사용하는데요, 아직은 그런류의 대용량 메모리를 필요로 하는 응용프로그램을 일반 사용자가 겸험하기는 쉽지 않습니다.

    2) 언급하신 드라이버에 대해서는__

    64비트 OS에서 디바이스 드라이버는 반듯이 64비트용이어야 합니다, 32비트용 디바이스 드라이버는 64비트 OS에서 구동되지 못합니다.

    3) 참고로 64비트가 성능이 좋다고 할 수 있는 이유를 말씀드리면. OS는 자신이 사용하는 메모리 이외에 기억저장소로 하드디스크를 사용합니다. 만약 시스템이 메모리가 아닌 하드디스크에서 데이타를 읽어야 한다면 어떨까요? 하드디스크는 메모리보다 훨씬 읽기/쓰기 성능이 낮기 때문에 OS 전체 성능에 영향을 줄것 입니다. 만약 응용프로그램이 15GB의 메모리를 사용할때 메모리에 15GB 모두 올려놓고 사용하는 것과 메모리에 4GB, 하드디스크에 11GB를 올려 놓는것 이 두가지 어느 경우가 더 좋은 성능을 낼까요? 당연히 답은 당연히 전자겠죠? 그래서 64비트를 사용하는 것입니다.  64비트 응용프로그램과 OS에 대한 바른 이해는 이전에 쓴 http://blogs.technet.com/sankim/archive/2007/12/28/windows-64bit-computing.aspx 글을 참고 하여 주십시오.

    4.  CPU 때문에라도 뭔가 사용자들은 자신의 CPU가 32비트로 동작한다면 당한듯한 느낌이 든다고 해야 할까요? 64비트 CPU 그럼 왜 만든 건데? 이런 거 말입니다.

    => 이는 64비트 컨셉에 맞지 않는 사용 때문인듯 합니다. 64비트라고 해도 일반 사용자 분들은 대부분 64비트OS에 32비트 응용프로그램을 사용하시는 것 같습니다, 위에 참고하시라고 말씀드린 링크의 글에도 언급했지만 64비트 OS에서는 64비트 응용프로그램을 사용해야 합니다.

    5. 그런대 애플처럼 중간단계를 제시했다면 어떠했을까 하고 생각해보는 것이죠 ㅡㅡ;

    => Windows에서 32비트와 64비트의 중간 단계는 36비트 어드레싱이 가능한 PAE라고 할 수 있는데요 이것도 사실은 프로세서에서 구현한것을 OS가 적용한 것 입니다. 혹시 애플의 그 중간 단계가 어떤것을 말씀하시는지 제게 알려 주실수 있을까요? 아마 PAE와 유사한 방법이 아닐까 예상됩니다만..

    댓글 감사드리고요 앞으로도 방문 부탁드리겠습니다. ^^

    즐거운 겨울 되세요~

    감사합니다.

  19. Anonymous says:

    안녕하세요?

    말씀하신 클라이언트/서버 4GB제한의 차이는 ‘클라이언트’와 ‘서버’의 컨셉의 차이로 이해 하셔야 합니다. 서버이기 때문에 가능하다는 생각은 잘못된 생각입니다.

    32비트 한계로 인한 4GB 제한은 CPU의 PAE를 통해 해결되어 128GB까지 가능합니다, 이는 CPU로 인해 가능해진 것이지 서버 제품이기 때문에 4GB이상 ACCESS가 가능한것이 아닙니다. PAE라는 것이 바로 36bit Addressing입니다.

    그리고 64Bit 환경은 앞으로 근미래에 어떻게 변할지 모르겠지만 현재는 Enterprise Server를 위함이라고 보시는 것이 맞습니다, 아무리 32bit를 PAE로 확장한다고 해도 64bit의 1테라바이트의 메모리를 가지는 것은 불가능 하기 때문입니다. 1테라를 가지는 시스템을 예로들면 대형 DBMS를 구동하기 위함입니다.

    그리고 드라이버 문제는 생각하시는 것 처럼 *절대* *쉽게* 해결 할 수 있는 것이 아닙니다. 단순히 서버 장비용 디바이스가 좋은 좋은 부품(?)이나 구조(?) 혹은 서버용이라고 이름 붙였다고 몇배 이상 비싼것이 아닙니다.

    감사합니다.

  20. Anonymous says:

    헬마님/ 먼저 방문 감사드립니다.

    헬마님께서 PAE를 잘못 이해하고 계시는듯 합니다, 그리고 이 글에서 언급한 Physical Address Map를 다시 읽고 이해해 주십시오.

    1. 윈도우 OS의 구조적 한계라고 생각하시는 PAE에 대한 가설은 PAE자체를 잘못 이해하고 계십니다. PAE는 CPU의 Addressing을 36bit(32bit가 아니고)로 Addressing을 확장 하는 기술입니다. 즉 PAE를 enable해서 4GB이상이 보이니 이는 OS의 구조적 결함이라는 가설은 잘못되었습니다, 왜냐면 PAE를 Enable 하면 32bit가 아닌 36bit addressing을 하기 때문입니다.

    참고로 PAE는 OS가 아닌 CPU에서 만들어진 기술이고 이를 OS가 적용한 것입니다.

    2, 추가적으로 정확한 이해를 위해 다시 한번 Physical Address Map를 설명한 부분을 다시 한번 읽어 주십시오. PAM을 이해 하시면 제 의도를 명확히 이해하시리라 믿습니다.

    p.s . PAE, /3gb 이것에 대한 궁금증과 오해가 많은것 같습니다, 이와 관련해서 글을 쓰려고는 하는데 제가 11월 부터 지금까지 슈퍼 비지(Super Busy??)해서 못쓰고 있습니다. (아.. 꼭 다음달에는 써야지..)

  21. Anonymous says:

    혹시 ‘MMIO’ 혹은 ‘장치 메모리’라는 단에를 애매하게 느끼시는 분들을 위해 본문 맨밑에 관련 내용을 추가 하였습니다. 도움 되시길 빕니다. 🙂

  22. Anonymous says:

    안녕하세요? 보이지 않는 부분을 Cache(?) 처럼 사용하는 3’rd Party 제품이 있다고 들은거는 같은데 정확히는 모르겠습니다. ^^; 혹시 아시게 되면 저도 좀 알려주세요. 🙂

  23. Anonymous says:

    안녕하세요? 아하하님.

    "3gb의 메모리 사용할때와 4gb의 메모리 사용할때의 차이"라는 의미를 조금 자세히 알려 주실 수 있을까요? 해석(?)의 차이가 있을 수 있어서요.

    p.s. 슈퍼 비지했던 관계로 답변이 늦어 죄송합니다 ^^;

  24. Anonymous says:

    네, 감사합니다. 🙂

    읽어 보니 아마도 별도의 Cache 영역으로 사용하도록 하는 것 아닌가 예측되네요. 이런 프로그램을 사용해도 결국 윈도우 자체의 addressing은 초기 실제 보이는 영역(예를들면3.5GB)에서만 이뤄집니다.

  25. Anonymous says:

    네~ 감사합니다 🙂

  26. Anonymous says:

    randtat 님,

    readyfor4gb는 저희 제품이 아니고 제가 모르는 제품이기 때문에 제가 뭐라 말씀드리기 어려울 것 같습니다. ^^;

  27. Anonymous says:

    안녕하세요 🙂

    각 디바이스는 그 디바이스의 필요에 따라 자신만이 사용할 수 있는 메모리를 가지고 있습니다. 1: 매핑은 아니고요, 그냥 메인 보드에서 컴퓨터에 달린 모든 메모리를 싸그리 긁어서 그 크기주소를 운영체제에게 알려주므로 인해서 나타나는 문제입니다. 싸그리 긁어 알려준 주소 중간 중간에 각 디바이스만 접근할 수 있는 메모리가 껴있거든요. 그래서 Access 하지 못하는 것입니다. 흠.. 이 내용이 그리 쉬운 내용은 아닙니다 (나름 쉽게 풀어 쓴다고 하기는 했지만) 시간 여유 있으실때 몇번 다시 읽어 보시면 이해가 되시리라 믿습니다.

  28. Anonymous says:

    참! 위에 참고로 말씀드리면 그래픽 GUI는 Windows Vista 이후 부터는 Kernel이 아닌 User mode에서 관리 합니다.

  29. Anonymous says:

    안녕하세요?

    댓글 질문을 세가지 주셨는데 그중 마지막 내용은 타인에 대한 비난이 될수 있어 승인을 하지 않았습니다. 해주신 말씀은 감사하나 제가 신경쓸만한 일은 아닌듯 합니다 ^^

    1. WDDM은 시스템 메모리 설명이 주가 아닙니다. 그리고 두번째 설명하신 WDDK는 아마 WDK를 의미하시는 것 같은데 마찬가지로 Device driver를 위한 Build kit입니다.

    2. 세번째 댓글에서 말씀하신 그 이야기는 좀 핀치가 어긋나 있습니다.

    3. Windows Memory를 알기위해 읽어야 할 것은 WDDM이 아니라 Windows Internals입니다.

    4. 실제 Memory의 정보를 컨트롤(?) 하는 것은 Processor이므로 더 깊게 아시기 원하신 다면 Intel Processor Manual을 읽어야 합니다.

    5. 마크루시노비치는 Computing Archtecture입니다. IBM에서 Supercomputing을 설계했고, Winternals에서 Windows Core Tool을 만들었으며, Microsoft에서는 Windows Kernel 6.1을 설계했고, 현재 Windows Azure 팀에서 진두지휘하고 있습니다. 참고로 3'rd edition부터 Windows internas(그때는 inside) 책에 참여한 Mark는 당시 코드에 access 할 수 없어 각 모듈을 역어셈블리해 구조를 파악한 후 solomon에게 확인 받는 방식으로 책을 썼다고 알려져 있습니다. 천재죠..

    6. 이전에 제가 일했던 팀에서는 기본적으로 디버깅을 이해해야 합니다, 그래야 월급이 나오죠. 저 같은 사람도 하는데 Mark를 디버깅이라는 테크닉의 범주로 좁혀 부르는건 실례라고 생각합니다.

    7. 디버깅이 모든 슈퍼 만능 해결책이���고 오해하시는 분들이 많은것 같아 말씀드리는데, 디버깅은 당시 메모리의 상태를 찍은 사건 현장 사진을 분석하는 것과 같은것입니다. 현장 사진에서 사건의 단서를 찾을 수도 있고 아닐 수도 있죠. 디버깅을 한다고 윈도우 모두를 알고 있을것이라는 환상은 잘못된 것입니다.

    8. 마크루시노비치는 저희 회사에 매년있는 conference에서 만났 보았습니다. 뭐 친분이 있는 사이는 아니고요(워낙 높은 분이라 감히..) 종종 메일에서 뵙는분 정도? 예전에 같이 찍은 사진도 올릴려고 했는데 주위사람들의 반대때문에.. ㅜㅜ

    감사합니다.

  30. Anonymous says:

    안녕하세요? 아미노상태님

    제가 H/W 전문가가 아니므로 의견을 드리는 것 보다는 참고하실만한 문서를 알려드립니다. 관련 내용은 아래 문서의 그림만 보셔도 상당 부분 쉽게 이해가 가능하실 듯 합니다. (특히 5Page 부분)

    http://www.kingston.com/newtech/MKF_520DDRwhitepaper.pdf

    방문 감사드립니다. 감사합니다.

  31. Anonymous says:

    Windows에서도 4GB 이상이 사용 가능합니다 🙂

    Windows는 Client나 Server나 동일한 Kernel을 사용하기 때문에 원칙적으로 4GB 이상을 사용할 수 있습니다. 그러나 본문의 Q1에서 드린 답변처럼 일반 클라이언트 환경에서 4GB 이상 사용할 경우 4GB 이상에서 드라이버 문제 가능성 때문에 4GB이상 사용할 수 없도록 제한(Disable)을 걸었습니다. *이는 4GB 이상 메모리에 대한 테스트가 안된 드라이버가 많은 Windows Client 환경에서 문제의(대혼란) 소지를 막기 위함으로 보는 것이 맞습니다.* 그래서 4GB이상을 사용하기 원하신다면 Client가 아닌 Server 버전 혹은 X64 Editioin을 사용하시기를 권장합니다.

    그리고 Linux에서 패치로 사용 가능한 메모리를 높일(?) 수 있다는 표현을 하셨는데, 윈도우도 동일합니다, 제가 이전에 포스팅한 글을 읽어 주십시오.

    Windows 최대 메모리 크기(Size)

    http://blogs.technet.com/sankim/archive/2009/04/15/windows-size.aspx

    보시는 것 처럼 서비스팩이 올라갈때 마다 사용가능한 메모리가 커지는 것을 볼 수 있습니다. 이는 단순히 커널의 확장만으로 가능한 것이 아니라 H/W Vender에서 제공하는 메모리 크기를 확장해줘야 운영체제가 그에 맞는 메모리를 수용할 수 있도록 코딩이 되는것입니다. 패치를 해서 올라갔다는 것 보다는 *시간이 흘러 기술이 발전하면서 H/W에서 인식가능한 메모리가 높아져갔고 그에 맞춰 높은 메모리수용할 수 있도록 커널이 발전 되어 왔다고 이해하는 것이 맞습니다.*

    참고로, 128GB 메모리가 한 메인 보드에 차례대로 꽃혀 있다면 메모리와 CPU간의 거리가 얼마나 될지 생각해 보면 메모리와 CPU간 통신에도 물리적 거리때문에 성능에 큰영향을 미칠것 입니다, 그렇기 때문에 이를 보완 하기 위해서 NUMA 아키텍쳐라는 것이 있습니다, 물론 이를 위해서 H/W에서 그에 맞는 물리적, 소프트웨어적인 환경을 구축해 줘야 합니다.운영체제는 그 H/W적 환경을 효율적으로 이용할 수 있도록 코딩을 하는 것이고요. 이것이 H/W와 S/W의 ecosystem이라고 할 수 있습니다, 누구 하나만 발전한다고 환경계를 바꿀 수 없는..

    도움 되셨으면 합니다..

    감사합니다.

  32. Anonymous says:

    안녕하세요?

    4GB중에 1GB 그래픽 카드를 설치 할 때 3GB로 윈도우가 인식된다면 512MB를 설치하면 3.5GB로 인식하겠지요. 🙂

    감사합니다.

  33. Anonymous says:

    kblive! 님/

    비난에 동조했다는 말씀은 좀 많이 억지신것 같은데.. 어딜봐서?.. ^^;;;

    MS 직원이라 우회하시며 '저'나 '제 블로그'에 올수 있는 링크를 제공하지 안아도 어느날 트래픽이 증가한 날을 보면 그분께서 저를 언급하신 시기더군요.. 저야 뭐 제 블로그를 찾아주시는 분들이 늘어나 감사할 따름입니다..

    아마 다른 커뮤니티랑 안좋은 일이 있었고 저와 비교 당하시면서 엉뚱하게 저에게 화살이 날라온거 아닌가 싶습니다. 게중에는 그분 글의 오류를 이 포스트에 댓글로 물으시며 확인 하는 분들이 있었는데 그걸 답한것이 그분께는 상처가 된것 싶네요. 그런 용도(?)로 사용하기 위한 질문인지 몰랐고 설사 알았다고 해도 잘못된 내용을 확인하려는 분들의 질문을 답하지 않을수도 없고요..

    전 인터넷에서 일어나는 이런 류의 일에 나름 무심한 편입니다, 하지만 좀 아쉬운건 하고 싶은 말이 있으면 여기와서 직접 하시면 좋을 것 같다는 생각이 드네요.

  34. Anonymous says:

    잉? 제 이야기가 같은데 왜 있죠? 뭔일 있었나요? 왜 남들이랑 싸우다 엉뚱한 절 걸고 넘어지시지는지… ㅜㅜ 근데 열폭이 뭐에요?

    이왕이면 MS직원이라고 하시지 말고 sankim 블로그라고 써주시거나 링크까지 달아주시면 제 블로그 방문자 수를 늘릴 수 있을텐데요..

  35. Anonymous says:

    안녕하세요? 먼저 칭찬의 말씀 감사드립니다. 🙂

    여쭤보신 IE 이슈는 저는 본적이 없습니다. 제 제 경험에 기반해 말씀드리면 말씀하신 사항은 윈도우에 설치된 3’rd Party component가 문제를 일으켰을 가능성이 99.99%입니다. 유사한 이슈를 아주 예전에 몇번 처리한 적이 있었고 저의 경우 모두 3’rd Party의 문제였습니다.

    믿겨지지 않으신다면 Windows를 Clean 설치 하시고 아무것도 설치 하지 않은 상태에 몇일간 놓아 보시기 바랍니다, 아마 그럼 제가 말씀 드린내용이 이해가 되실것입니다. 그래도 나타난다면 설치된 3’rd party 드라이버 문제일 가능성은 99.99999999%입니다.

    알레르기 원인인 꽃가루 때문인지 아니면 먼지 때문인지 알아내기 위해서 먼지가 있는 곳 혹은 꽃가루가 있는 환경에 노출해 원인을 확인한 뒤 그에 맞는 치료가 시행되듯이, 해당 문제를 해결 하시기 위해서는 IE를 하루종일 켜 놓은게 문제인지, 아니면 IE 이외에 다른 App가 문제인지, 혹은 드라이버가 문제인지 문제 재현 Step을 Isolation 하셔야 합니다. 단순히 적어주신 내용만 봐서는 IE의 문제라고 보기에는 조금 무리가 있습니다.

    그리고 최근 간단한 TR에 대한 이야기를 포스팅 했습니다. 참고하여 주십시오.

    http://blogs.technet.com/sankim/archive/2010/03/31/windows-ie.aspx

    Tag들 중에 Troubleshooting을 천천히 읽어 보시는 것도 도움이 되시리라 믿습니다.

    방문 감사드립니다.

  36. Anonymous says:

    안녕하세요? sankim 입니다.

    위 두 댓글이 같은 분께서 올리신것 같아 두 댓글에 대한 답변을 함께 드리겠습니다.

    ??? 은 kim님께서 위에 올리신글_

    ||=> 은 그에 대한 저의 답변입니다.

    ???질문1에 대한 답변들은 틀린 답변인듯하네요.. 이러한 이류로 4g만 인식하게 했다…는 부분은 전혀 맞는 말씀이 아닙니다.. 마이크로소프트를 과소평가한듯 합니다만..

    ||=> 먼저 제가 일하는 회사에 대한 긍정적인 평가로 이해되는데요, 감사합니다. 🙂

    그러나 클라이언트 제품에 대한 4GB 제한을 건것은 마이크로소프트의 능력이라기 보다는 말씀드린 클라이언트용 3’rd Party 드라이버들이 애초에 32bit 환경에서 4GB이상을 고려할 필요가 없었으므로 그러한 디자인이 나온 결과입니다.

    ???32비트에서도 4기가를 사용가능한데 개발을 안했다는듯이 표현이 된듯합니다.. 하지만 4기가를 사용할수는 있습니다. 물론 마이크로소프트에서 제공하진 않지만 툴을 쓰면 4기가뿐만 아니라 128기가 까지 확장해서 사용이 가능하지요 여기서 잠깐 넘어갈께 있는데 윈도우 서버용은 엄밀히 말씀드리면 이러한 기능들을 처음부터 설계했습니다. 정확히 말씀드리면 36비트 라고 말씀드려야지요.. 그래서 128기가 까지 인식이 되는데..

    ||=> 네 PAE를 이용한 Address 확장으로 36비트 사용이 가능합니다. 그러나 위 본문에서 말씀드린대로 클라이언트는 PAE에 의한 Address 확장을 사용할 수 없습니다. 물론 DEP를 위해 PAE가 Enable되어 있지만 이는 Windows Kernel에서 32bit에서는 존재하지 않는 36bit PTE table의 field를 이용하기 때문입니다.

    ???마이크로 소프트는 메모리를 4기가 이상을 지원되는걸 꺼려서 개발은 못한것이 아닙니다..

    프로그래밍에 어느정도 지식이 있다면 왜 4기가 이상 지원을 해봐도 효율이 없는지 계산이 나옵니다.. 32비트에선 4기가 이상이 지원안되는게 아니라 개발할 필요성이 없는것이지요..

    사실상 32비트의 한계라고 해도 마찬가지 말씀일수 있겠네요.

    ||=> 말씀하시는 4GB이상 지원하지 않는다는 것은 가상메모리(Virtual Memory)를 말씀하시는 것 같습니다, 그러나 여기서 말하는 실제 물리메모리(Physical Memory)와는 다릅니다. 그리고 32bit에서는 4GB 이상을 사용할 수 있도록 AWE API가 지원됩니다.

    ??? 그러면 서버처럼 36비트로 만드냐.. 그것또한 말이 안되는 방식입니다. 서버는 32비트와 36비트가 공존한다고 보면되겠는데.. 36비트 방식은 그 투자에 비해 얻을수 있는 해택이 적습니다..

    ||=> 아니요 엄청납니다! 32비트의 경우 사용할 수 있는 물리메모리가 4GB이지만, 36비트의 경우 128GB로 엄청난 차이를 보입니다. 32에서 36으로 숫자 4만 추가 되었다고 단순한 수의 차이가 아닙니다. 2에 32승과 2의 36승은 넘사벽의 차이를 보입니다.

    ???그러면 64비트로 넘어가봅시다. 64비트는 이런한 제한들이 아주 속 쉬원하게 풀리지요. 물론 한계가 없는것은 아니지만 지금당장 64비트의 한계까지 성능을 요구하는게 있을지 모르겠습니다.

    ||=> 64비트의 무한(?)의 메모리 공간을 요구하는 곳은 우리나라만 봐도 많이 있습니다, 특히 대용량 메모리를 필요로하는 DBMS의 경우가 그렇습니다, 제가 지원한 사이트중에는 64Way에 512GB의 메모리를 사용합니다. 앞으로 더욱 더 그 수요가 많아 질 것 입니다.

    ???64비트의 운영체제는 오래전에 나왔습니다. 지금에서 windows7이 나오면서 일반 유저들도 많이 많긴 했지만. xp역시 64비트가 존재했지요.

    ||=> 아주 오래된것은 아닙니다, XP SP2이후 부터 X64용 제품이 나왔고 이 XP SP2 64비트 커널은 Windwos Server 2003 x64 버전과 동일한 커널을 사용해 왔습니다, 즉 나온건 5년 남짓입니다.

    ???마이크로 소프트는 많은 소프트웨어와 하드웨어적인 문제점을 해결하는데 많은 시간을 투자했을겁니다. 32비트를 괜히 고수할 필요는 없지요. 32비트를 고수한다고 해서 수입이 늘어나는것도한 아니지요 하지만 사용자들과 많은 프로그램 역시 32비트에 충분한 만족을 .. 솔직히 말하자면 만족을 못한다해도 그 당시 32비트를 넘어서는 고가의 하드웨어는 수요가 없었지요.. 지금역시 마찬가지입니다..

    ||=> 다시 말씀 드리지만 4GB에 대한 제한은 일반 사용자들 PC에 한합니다, 예전부터 기업용 서버 제품에서는 4GB를 넘는 8GB, 32GB의 메모리를 장착한 서버들이 즐비합니다.

    ???4기가이상 메모리가 과연 효과가 있을까요..?

    ||=> 서버제품은 그렇습니다, 그리고 많은 메모리를 필요로 하는 작업을 수행하는 클라이언트들도 그런 이유로 64비트 버전을 사용합니다.

    ???그 가격이면 차라리 ssd가 더욱 체감성능에 도움이 될지도 모르겠습니다.

    ||=> SSD는 성능 향상을 주겠죠, 그러나 SSD는 하드디스크 즉 이차적인 메모리 공간이지 실제 수행하는 1차적 저장 장치인 메모리입니다, 여기서 SSD와 메모리를 매치 시키는 것을 옳지 않습니다.

    ???마이크로소프트가 128비트의 운영체제를 개발한다는 소식은 들었습니다. 32비트의 운영체제는 단종시킬려고 해도 수많은 하드웨어들이 뒷받침되지 못해 쉽사리 32비트는 버릴수는 없지만. 그렇다고 제 자리 걸음을 하고 있다고 보진 않습니다.

    ||=> 128비트에 대한 소문은 Windows 7이 나오고 있는것으로 아는데 저의 사견으로는 낭설일 가능성이 높습니다. 현제 이론적으로 구현 가능한 64비트의 최대 메모리에 아직 눈꼽(?) 만큼도 올라서지 않았기 때문입니다. 일반인들이 오해하시는게 64비트가 된다고 CPU 수행 성능이 빨라지는 것이 아닙니다, 처리할 수 있는 메모리 영역이 커지는 것입니다.

    ???결론을 말씀드리면 32비트에서는 4g이상 지원은 가능합니다만 그것은 32비트의 한계로 인해 효율적인 지원이 안된다라는 것을 강조해 드리고 싶습니다.

    ||=> 제가 4GB 제한이라고 쓴 글은 제목에도 있듯이 클라이언트에 대한 제한입니다.

    이해에 도움이 되셨기를 빕니다.

    방문 감사합니다.

  37. Anonymous says:

    안녕하세요?

    "터미널서버인 경우에는 어플리케이션의 프로세스가 사용자 세션마다 둥실둥실떠있으므로 터미널세션의 프로세스 당 사용가능한 메모리 최대가 4GB 라는 의미도 되나요?" => 이 의미가 유사하게 맞고요…

    그러나 정확히 말씀드리면 Windows에서 실행 되고 있는 프로세스마다 2GB의 User mode 메모리가 할당됩니다. 즉 터미널 세션이 3개 열려있고 프로세스 이름이 a.exe라면 각기 다른 세션에서 a.exe가 3개 실행되고 각기 다른 3개의 가상메모리가 생기는 것입니다. 사실여기서 터미널 세션은 중요하지 않습니다. Windows MM입장에서는 3개의 이름이 같은 프로세스가 실행되는 것이니까요.

    그리고 "프로세스마다 2GB"라고 명시한것은 가상메모리가 4GB이고 이중 User는 2GB, Kernel은 2GB를 할당한다고 할때 해당 프로세스를 위한 메모리는 User mode 2GB입니다, Kernel은 공유합니다.

    이 포스팅에 주신 질문들만 모아도 포스팅하나 쓰겠다는 생각이 드네요.. 쿄쿄

    p.s. 가상메모리에 대해서쓴다고 한지가 꽤된것 같은데.. 허… 참.. 일이 정말 몰릴때는 미친듯이 밀려들어오는군요.. ㅜㅜ

  38. Anonymous says:

    안녕하세요? 만약 H/W가 4GB가 지원이라면 윈도우도 4GB가 됩니다. 윈도우는 H/W가 제공하는 리소스를 사용할 뿐 메모리 리소스의 확장은 할 수는 없습니다.

  39. Anonymous says:

    (아래 분들 죄송합니다만 댓글 승인하지 않았습니다)

    ㅋㅋ님/ 제 부덕입니다 🙂

    허허.. 참. 님/ 동감합니다, 감사합니다.

    무명님/ 말씀하신 그것.. 원래 작정하면 끝이 없는것 같습니다. 🙂

  40. Anonymous says:

    대리인님, 주제넘은 말씀인지 모르겠습니다만 아무리 웹에서 대화라 해도 가능하면 서로 인사로 시작하면 좋을 듯 합니다, 다짜고짜 질문부터 하시면.. 갑자기 학원 선생님이 된 기분이.. ^^;

    답변을 드리면 아래 문의에 대한 해답을 얻기 위해서는 PAE, 4GT, PA(Physical Address), VA(Virtual Address)의 컨셉을 정확히 이해 하셔야 합니다. PAE는 Physical Address에 적용되는 것이고 4GT는 Virtual Address에 적용되는 것 입니다.  즉  PAE => PA, 4GT => VA.

    [질문1]

    1. PAE기술이 가상주소공간에 대한 어떠한 변형을 가합니까? 즉, 기본적으로 유저+커널=2+2인 상태에서 이것을 3+1로 자동적으로 변형시킨다던지, 아니면 늘어나는 실제주소만큼 가상주소공간이 스케일업 됩니까?

    [답변1]

    아니요, PAE가 Enable 된다고 말씀하신 것처럼 4GB의 가상주소의 크기가 변하지는 않습니다. PAE로 또한 2/2모델이 3/1이 된다거나 하지 않습니다, 이것은 4GT에서 가능합니다. PAE는 MMPTE 안의 PageFrameNumber를 늘려 Access 할 수 있는 메모리의 범위가 늘어 나는 것이지 말씀하신 것처럼 VA의 크기를 늘려서 4GB 이상 메모리에 Access가 가능도록 하는 것이 아닙니다 또한 4GT 같이 VA의 2:2 모델을 변경하는 것이 아닙니다.

    그런데 정말 아주 설마 혹시나 해서 여쭤보는데 PAE때문에 가상주소가 변하는 OS가 있나요? ^^;;

    [질문2]

    2. 4GT(/3gb)만이 가상주소공간에 대한 변형을 하는 것이고, PAE는 가상주소와는 무관하다고 한다면 이는 틀린 말이 됩니까?

    [답변2]

    4GT는 가상주소 User mode/Kernel Mode 2:2을 3:1로 변경합니다, 그리고 ‘가상주소와 무관하다’는 의미가 ‘VA 크기 혹은 모델과 관계없다’로 받아 들여지는데 맞는 지요? 그렇다면 틀린 말이 아닌 맞는 말입니다.

    4GB 이야기가 끝나니까 이곳 저곳 PAE에 대한 이야기가 많이 있네요, 이전 부터 PAE를 주제로 써야 겠다고 생각했는데 계획한 글도 있고 바쁘기도 해서 미루고 있었는데 빠른 시간 내에 PAE에 대해서 써야겠네요. 그때를 기대해 주세요 

    그럼 즐거운 주말 보내시기 바랍니다.

  41. Anonymous says:

    안녕하세요:) 말씀하신대로 메모리가 없는 그래픽 카드라면 4GB가 다 나타날 수도 있겠지요. 하지만 다른 시스템에 붙은 메모리 (System BIOS, Motherboard Resources (I/OxAPIC), Memory Mapped I/O, PCI Express Configuration Space, Additional PCI Device Memory (Graphics Aperture), VGA Memory *등(헥헥헥..))로 인해 감소 되는 것은 예상해보셔야 합니다. 윈도우는 H/W에 올라가는 운영체제일뿐, H/W에 어떤 가감을 할 수 없습니다. (왼손은 도울뿐??) 그래픽 카드의 MMIO는 윈도우에서 사용하는 메모리 처리를 하는 것이 아니라 그래픽 처리를 위해 각 좌표에 대학 기억및 처리를 하는것으로 알고 있습니다. 수고하셔요

  42. 듣보잡 says:

    역시 실력으로 응수 하셨군요. 배우기라는분이 올린 여러글들을 읽어 보았습니다, 혼자 독학하면서 상당히 많은 부분 잘못 이해하고 글을 쓴것 같네요 그글을 많은사람들이 읽어볼텐데 걱정입니다. 앞으로도 등불같은 블로그가 되어주세요.

  43. 궁금이 says:

    PCI 메모리에 디바이스 드라이버가 올라가는 것 아니였나요?

  44. 허허.. 참.. says:

    허허.. 참.. 어의 없네요..

    http://www.ebuzz.co.kr/content/buzz_view.html?ps_ccid=80663

  45. 그러면 says:

    32비트 클라이언트에서는 4GB를 전부 사용하는 방법은 없나요?

  46. tedhaha says:

    정말 멋진 포스팅 감사합니다

    메모리를 4GB로 올리며 향간에 들리는 소문따라 진상을 파악하고자 찾아다녔는데…

    이 포스팅을 통해 확실히 이해했습니다.

    다시 한번 감사합니다^^  (–)(__)

  47. 게이버 says:

    4GB에서 제한이 걸린것은 32비트 환경이기 때문입니다.

    2^32 = 4294967296Bytes = 4.0GB

    4GB이상의 메모리를 사용하지 않아서 제한을 건것이 아니고 32비트의 구조상 한계때문에 자연스럽게 4GB로 제한이 걸린것이며 만약 구조한계를 해결할 수 있었다면 64비트 운영체제를 만들 필요는 없었습니다.(사실 서버 버전에서는 메모리 관리 부분에만 비트수를 늘리긴 했지만 어디까지나 서버이기 때문에 가능한 것일겁니다..)

    드라이버 문제는 쉽게 해결 가능했을겁니다.

    윈도 버전이 바뀔때마다 새로 드라이버를 만들어야 했고, 서비스팩 2 출시때부터 4GB 이상 메모리지원을 할 생각이 있었다면, 윈도 비스타때부터 4GB이상 메모리 지원 드라이버를 개발하도록 제조사에 권유해 크래시등의 문제는 생기지 않았겠지요.

    주절주절 쓰다보니 말이 길어졌네요.^^

  48. pgmjeong says:

    리눅스에서는 4G바이트 이상 사용이 가능합니다.

    32비트에서요

    그렇다고해서 무조건 4GB이상 사용가능한것은 아니구요

    하나의 프로그램은 위에 포스팅하신분의 글처럼 4GB바이트를 커널이랑 디바이스랑 사용하고 남은 부분을 어플에서 사용합니다.

    그건 어디까지나 가상메모리에서 그런것이구요

    피지컬은 지금 제가 사용하고 있는 장비에서는 64GB까지

    인식하고 사용하고 있습니다.

    커널에서 64GB를 관리를 하고 어플당 얼마씩 쪼개서 가상메모리로 사용하도록 주는거죠

    리눅스가 이렇게 사용이 가능한것은 커널패치만으로 가능합니다.

    몇년전가지는 8GB가 한계였던 것으로 기억합니다.

    커널을 패치를 하면 그이상 사용가능하구요

    윈도우도 MS에서 패치를 하면 사용가능하지 않을까 하는 생각을 해보네요. 그냥 이건 단순히 제 생각입니다.

  49. 스카이블루 says:

    좋은글 감사합니다 항상 궁금해 했던 부분이었습니다.

    그런데 인터넷을 돌아다녀보면 32비트 운영체제에서

    4기가를 사용할수 있도록 바꿔주는 프로그램이 있었습니다.

    비스타/7 에만 해당되는거 같았습니다만..  제가 그래서

    해보니 윈도우상에서 4GB로 변해 있더군요…  숫자수치

    상만 바뀐건지 위의 글을 읽어보면 제가한행위는 말이

    안되는것이긴 한데요..  실제로 적용됬다면…

    Memory dump 가 종종 일어날 가능성이 높은것일까요?

  50. kjh says:

    안녕하세요..

    이 글보고 드디어 제 OS의 문제 원인을 알았습니다.

    DDR2 1gb 두개를 장착 했는데도 불구하고 2048mb가 아니라 2046mb/2047mb로 표기된 이유를요,

    감사합니다~

  51. 대리인 says:

    질문좀 하겠습니다.

    1. PAE기술이 가상주소공간에 대한 어떠한 변형을 가합니까? 즉, 기본적으로 유저+커널=2+2인 상태에서 이것을 3+1로 자동적으로 변형시킨다던지, 아니면 늘어나는 실제주소만큼 가상주소공간이 스케일업 됩니까?

    2. 4GT(/3gb)만이 가상주소공간에 대한 변형을 하는 것이고, PAE는 가상주소와는 무관하다고 한다면 이는 틀린 말이 됩니까?

  52. 이재윤 says:

    안녕하세요!!!

    글 잘 읽었습니다.

    위에 커멘트에 보니깐. ebuzz에 글의 내용이 보이는데.

    ebuzz 글을 쓰신 기자분의 가상메모리 개념은 제가 볼때는 헷갈리신게 아니고 독자에게 의미전달을 하려고 한것 같네요.

    그리고 MMIO 뿐만 아니라 System BIOS, Motherboard Resources (I/OxAPIC), Memory Mapped I/O, PCI Express* Configuration Space, Additional PCI Device Memory (Graphics Aperture), VGA Memory등이 있습니다. 라고 하셨는데

    위에서 말한게 MMIO에 다 포함되는 내용 같네요. 어차피 물리적 장치가 붙으면 램에 맵핑을 해서 동작을 하니깐요.

    맵핑된 램에 자료가 업되면 장치로 정보가 보내지는 구조는 어느 하드웨어나 다 그러니깐요.

  53. 궁금이 says:

    안녕하세요? 언제나 상킴님의 글 잘 읽고 있는 사람입니다. 질문이 있어 댓글을 남김니다.

    웹에 아래같은 글이 있는데요 DEP를 사용하면 별도의 데이타 공간을 필요로 하나요? 그리고

    DEP를 쓰려는데 왜 PAE가 필요한가요? PAE가 가상메모리를 커널1,유저3으로 변경하나요? 그렇다면 /3GB는 왜 필요한건가요? 제가 알고 있는것과 달라서 질문드립니다. 부탁드립니다.

    PAE라는 실제 주소 확장은 기존의 유저 모드에서 사용할 수 있는 2GB의 메모리 주소를 좀 더 확장시켜서 Windows의 퍼포먼스를 증가시키는 목적을 가진 스케일 업(scale up) 기술입니다. 그런데 이 기술은 기본적으로 활성상태로 놓여있습니다. 왜냐하면 Windows XP의 서비스팩 2가 출시되면서 DEP라는 데이타 영역을 보호하는 기술이 나오게 되는데, 위에서도 설명을 했지만 이것이 바로 데이타 실행 방지 기술입니다. 그런데 데이타 영역은 고정되지 않고 유동적으로 변화할 수 있으므로 가상 주소 공간도 이에 따라서 융통성 있게 변화(scale flexibly)를 해야 합니다. 2^32 = 4GB를 넘어서려면 32비트가 아닌 36비트 주소도 만들어야 하므로 주소 재지정이라는 주소 변환 기술이 필요하며, 변환을 통해서 실제 메모리에 접근을 하게 됩니다. 그래서 DEP도 기본적으로 PAE라는 기술이 요구됩니다.

  54. Ekmemory says:

    안녕하세요.

    일기 너무 어려운 데 어째든 잘 보고 갑니다.

    너무 좋은 정보 무료로 제공해 주셔서 감사합니다.

    하시는 공부 잘 되시길 축복합니다.

  55. Joshua says:

    안녕하세요.

    제가 궁금한점이 있어서 이렇게 글을 올립니다.

    현재 서버를 64 비트로 마이그레이션중에 궁금한점이 있어서요.

    몇몇 어플리케이션이 아직 64비트를 지원하지않고 32비트만 지원하므로 어쩔수없이 64 버전 윈도우서버에 32비트 어플리케이션을 설치하여서 사용중인데요.

    아무리 메모리를 많이 설치한다고 해도 실제 어플리케이션은 4GB 메모리가 사용할수 있는 최대 메모리라고 알고있습니다.

    여기서 질문.

    터미널서버인 경우에는 어플리케이션의 프로세스가 사용자 세션마다 둥실둥실떠있으므로 터미널세션의 프로세스 당 사용가능한 메모리 최대가 4GB 라는 의미도 되나요?

    아님 동일한 어플리케이션의 프로세스가 세션마다 둥실둥실 여러개 실행되어있어도 그 메모리의 값을 몽땅 더해서 4GB를 넘지 못한다는 의미인가여?

    갑자기 궁금해서여..어차피 32비트 어플리케이션을 사용할 수 밖에 없지만 궁금해서여…

  56. 치즈 김밥 says:

    어디 가보니 2GB 커널공간을 이상한 적체소 같이 표현한데다 PAE가 가상 메모리 공간을 변경하는 거라고 그림까지 그려서 설명하는 곳을 보았습니다. 글 전체적인 흐름은 분명 틀렸는데 맞는 일부 부분을 sankim님의 글 일부를 캡쳐해 비교하면서 sankim이 한말과 자기 주장이 같다고 주장하고 있습니다. 그리고 그곳에 sankim님에 대한 이야기도 있더군요 ㅎㅎㅎ

    아직도 많은 사람들이가상메모리에 대해서 잘못할고 있는거같은데 Sankim님께서 블로그로 정리 한번 깔끔하게 해주셨으면 좋겠네요.

  57. 헬마 says:

    글 잘 읽었습니다.

    윈도 XP SP1 의 경우는 32비트라도 PAE 옵션을 켜면 4기가이상을 정상적으로 사용할 수 있는데요.( 드라이버 호환성에 문제가 없어서 정상작동한다면.. ) 그렇다면, 32비트의 구조적 문제로 4기가 제한이 있다는 글은 오류가 아닐까 합니다.

    저는 단지 윈도 OS 의 메모리 공간설계의 구조적 한계로 보고 있습니다.

  58. 루루 says:

    안녕하세요.

    메모리관련으로 문의 드립니다.

    제가 지식이 좀 약해서 이해가 안되서 그래요 ㅠㅠ

    xp상에서 4GB를 다 인식 못하는건 알고 있는대.

    인식 못하는 이유가 컴퓨터 안에서 사용되는 메모리들의 합이 4GB가 넘어서 인식 못하는거로 알고 있고요.

    근대 여기서 외장 그래픽 카드

    즉 1GB짜리 그래픽 카드를 꼽았을때와

    512MB를 꼽앗을떄의 차이가 있는건가요?

  59. 아하하 says:

    안녕하세요

    단순하게 질문드릴께요 그럼 32bit 윈도우 7 에서의

    3gb의 메모리 사용할때와 4gb의 메모리 사용할때의

    차이는 눈꼽만큼도 없는거예요?

  60. 지나가는이 says:

    안녕하세요 상킴님,

    정말 궁금했던 부분이었는데 글 잘 읽고 갑니다.

    결국 제가 가장 헷갈렸던 부분이 HW기술 vs SW지원 / 물리메모리 vs 가상메모리였던 것이네요.

    앞으로도 좋은 글 부탁 드립니다.

    감사합니다.

  61. Reminisce says:

    안녕하세요, 도움이 되는 글 재미있게 읽었습니다.

    사실 머리가 쥐가 나면서 읽었지요 ㅡㅡ;

    음, 지금 이글을 보면서 머리가 복잡해지는 이유는 애플의 스노우 레퍼드 때문입니다.

    결국 커널의 문제를 디바이스 드라이버 핑계를 대고 있다는 느낌이 드네요 -_-; 제한적 64비트가 중간단계에서 필요했는데 뛰어넘다보니 결국 4기가 메모리도 제대로 활용할 수 없게 된 것으로 보입니다. 애플이 왜 그렇게 했는 지 많은 생각이 들게 해주네요.

    64비트 윈도우와 32비트 윈도우에서 사실상 큰 속도 체감을 할 수 없는 이유는 병목현상의 해결이 바로 보일 만큼의 램의 차이나 모든 디바이스 드라이버가 64비트로 동작하는 것이 아니기 때문일 것입니다. 그렇지만 모두가 64비트로의 활용을 바라고 있잖아요. CPU 때문에라도 뭔가 사용자들은 자신의 CPU가 32비트로 동작한다면 당한듯한 느낌이 든다고 해야 할까요? 64비트 CPU 그럼 왜 만든 건데? 이런 거 말입니다. 그래서 64비트를 설치하지만 그 망할 호환성에서 좌절을 겪는 분들이 꽤 많습니다.

    그런대 애플처럼 중간단계를 제시했다면 어떠했을까 하고 생각해보는 것이죠 ㅡㅡ;

    그런데 또 생각해보면 Windows의 경우에도 64비트 운영체제네 뭐네 하지만 결국 32비트 응용프로그램은 32비트로 동작하게 해주고 있습니다. 이걸 그냥 바꿔서 해석해보면 스노우 레퍼드의 경우 그냥 그런 거구나 하고 단순하게 넘어갈 수도 있더라구요 ㅡㅡ;

    그냥 지금 머리속이 복잡해져서 이거저거 생각하다가 주저리 적고 갑니다;;

  62. 안녕하세요 says:

    안녕하세요 상킴님 언제나 좋은글 잘보고있습니다

    한가지 궁금해서 여쭤보는데요 윈도우 7에 보면 리소스 모니터가 있잖아요? 거기보면 실제 메모리에 사용중이라는것이 있는데 이게 어떻게 수집된 갑인가요? 혹시 리소스모니터에 나오는 커밋,작업집합,공유가능,개인 이런 값이 합해진 건가요?

  63. KimS says:

    글을 대충읽어봤는데..

    32비트에서도 4기가를 사용가능한데 개발을 안했다는듯이 표현이 된듯합니다..

    하지만 4기가를 사용할수는 있습니다.

    물론 마이크로소프트에서 제공하진 않지만 툴을 쓰면 4기가뿐만 아니라 128기가 까지 확장해서 사용이 가능하지요

    여기서 잠깐 넘어갈께 있는데 윈도우 서버용은 엄밀히 말씀드리면 이러한 기능들을 처음부터 설계했습니다. 정확히 말씀드리면 36비트 라고 말씀드려야지요..

    그래서 128기가 까지 인식이 되는데..

    서버는 일단 넘어가고 다시..

    마이크로 소프트는 메모리를 4기가 이상을 지원되는걸 꺼려서 개발은 못한것이 아닙니다..

    프로그래밍에 어느정도 지식이 있다면 왜 4기가 이상 지원을 해봐도 효율이 없는지 계산이 나옵니다..

    32비트에선 4기가 이상이 지원안되는게 아니라 개발할 필요성이 없는것이지요..

    사실상 32비트의 한계라고 해도 마찬가지 말씀일수 있겠네요.

    그러면 서버처럼 36비트로 만드냐..

    그것또한 말이 안되는 방식입니다. 서버는 32비트와 36비트가 공존한다고 보면되겠는데.. 36비트 방식은 그 투자에 비해 얻을수 있는 해택이 적습니다..

    그러면 64비트로 넘어가봅시다. 64비트는 이런한 제한들이 아주 속 쉬원하게 풀리지요. 물론 한계가 없는것은 아니지만 지금당장 64비트의 한계까지 성능을 요구하는게 있을지 모르겠습니다. 64비트의 운영체제는 오래전에 나왔습니다. 지금에서 windows7이 나오면서 일반 유저들도 많이 많긴 했지만. xp역시 64비트가 존재했지요.

    마이크로 소프트는 많은 소프트웨어와 하드웨어적인 문제점을 해결하는데 많은 시간을 투자했을겁니다. 32비트를 괜히 고수할 필요는 없지요.

    32비트를 고수한다고 해서 수입이 늘어나는것도한 아니지요

    하지만 사용자들과 많은 프로그램 역시 32비트에 충분한 만족을 .. 솔직히 말하자면 만족을 못한다해도

    그 당시 32비트를 넘어서는 고가의 하드웨어는 수요가 없었지요.. 지금역시 마찬가지입니다..

    4기가이상 메모리가 과연 효과가 있을까요..?

    그 가격이면 차라리 ssd가 더욱 체감성능에 도움이 될지도 모르겠습니다.

    마이크로소프트가 128비트의 운영체제를 개발한다는 소식은 들었습니다. 32비트의 운영체제는 단종시킬려고 해도 수많은 하드웨어들이 뒷받침되지 못해 쉽사리 32비트는 버릴수는 없지만. 그렇다고 제 자리 걸음을 하고 있다고 보진 않습니다.

    결론을 말씀드리면 32비트에서는 4g이상 지원은 가능합니다만 그것은 32비트의 한계로 인해 효율적인 지원이 안된다라는 것을 강조해 드리고 싶습니다.

  64. kim says:

    안녕하세요 우연히 들리게됬는데..

    저는 현제 프로그래밍 관련되 일을 하고있습니다..

    글 내용중 마음에 들지 않는 부분이 좀 있네요.

    질문1에 대한 답변들은 틀린 답변인듯하네요..

    이러한 이류로 4g만 인식하게 했다…는 부분은 전혀 맞는 말씀이 아닙니다..  

    마이크로소프트를 과소평가한듯 합니다만..

    그렇게 쉬운 문제가 아니라는것을 강조하고 싶습니다.

  65. 아노미상태 says:

    안그래도 32비트상에서의 4기가 사용 문제에 의문이 많았는데 이렇게 정확한 정보를 얻을 수 있게 해줘서 고마워요. 아무리 수를 써도 3기가 정도쯤이 한계군요.

    그런데 궁금한게 있습니다. 램을 듀얼채널로 구성시 대역폭이 늘어나, 동일 메모리량의 싱글채널보다 효율이 뛰어나다고 알고 있습니다.

    그럼, 32비트 상에서 2기가 램 두개를 듀얼로 구성한 4기가 메모리.

    이거 듀얼채널의 대역폭 늘어나는 효과는 제대로 발현 되는건가요? 이거 정말 궁금한데 아시는 분도 없구요.

    알고계시면 답변 부탁드려요~

  66. 아노미상태 says:

    링크해 주신 문서 고맙습니다.

    덕분에 듀얼채널에 대한 이해의 폭이 좀 더 넓어지기도 했고 구체적인 항목도 알 수 있게 됐습니다.

    사실 저는 윈7 32비트 상에서 4기가 듀얼채널 구성시 3기가밖에 사용 못하는 것을 보고, 대역폭이 늘어나는 듀얼채널의 기능은 제대로 되는건지 궁금했습니다.

    그건 sankim님 께서 하드웨어 전문가가 아니므로 의견을 주시기 힘들다고 말씀하셨으니 다시 여쭐 문제는 아니겠군요. 고맙습니다 앞으로 유익하고 오리지널리티 있는 정보를 얻기 위해 자주 들를 것 같네요~.    

  67. hkmade says:

    안녕하세요. windows메모리에 관한한 아마 최고의 한글문서가 아닐까 생각합니다. ^^ 다름이 아니라 한가지 여쭈어볼께 있어서..

    예전에 Windows98에서는 종종 있었던 현상인데 IE를 거의 하루종일 켜두고 있으면 시스템 메모리는 정상인데 화면의 아이콘이나 화면에 뿌려진 그래픽이 깨지는 현상입니다. 아마 커널에서 관리하는 그래픽관련 메모리쪽의 오류로 기억을 하고 있는데.. XP에서도 IE6, IE7에서 이런 현상이 회사에서 발견되고 있습니다. 물리적인 PC메모리나 그래픽 메모리는 여유가 있는데 (내부 업무를 IE를 통한 웹화면으로 하루종일 처리합니다.) 관련한 정보를 얻을 수 있을까요? (기술문서나 참고할 사이트가 있을까요?)

  68. 메소나이 says:

    굉장히 좋은 글 잘읽었습니다.

    항간에서는 램디스크를 사용하여 4GB에서 인식 안되는 부분의 메모리를 활용할 수 있다고들 하는데 이는 잘못된 지식인거네요?

  69. 메소나이 says:

    http://liverex.tistory.com/313

    위 블로그를 보면 ReadyFor4GB 라는 프로그램을 이용하는 방법이 나와있네요~ 시간 되시면 한번 봐보셔요~ ^^

  70. 메소나이 says:

    결론은 이런 별도의 프로그램을 이용하여 나머지 메모리를 다른 용도로 사용할 수는 있어도, 4GB이상을 정상적으로 인식한 것처럼은 만들 수 없다는 것이겠네요.

    답변 감사합니다~ 정말 많은 도움이 되었습니다 ^^

  71. 못배운놈 says:

    열폭의 절정이군요.. 잡지 말고 그 후에 쓴 잘못된 글에 대해서는 아직 언급이 없네요, 아님 아직도 모르고 있는걸 수도.

    winnwe.com/…/74-Windows%EC%97%90%EC%84%9C-MMIO%EB%8A%94-%EC%95%84%EB%8A%94%EB%8D%B0-%ED%95%98%EB%93%9C%EC%9B%A8%EC%96%B4-%EC%98%88%EC%95%BD%EA%B3%BC-%EA%B7%B8%EB%9E%98%ED%94%BD-%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%8A%94-%EB%AA%A8%EB%A5%B8%EB%8B%A4

  72. cdaeyong says:

    ready for 4GB 라는 툴을 이용하면 작업관리자의 성능탭에서 실제 물리메모리가 4G가로 나오는 것을 확인하였습니다..

    커널을 변경하는 것 같은데..저두 안정성이 어떨지 몰라 사용은 안하고 있습니다..

    이 툴을 이용하면 4GB 를 다 사용하게 되는 것인지 저두 의문입니다..

  73. minho says:

    좋은글 잘 읽었습니다.

    '4GB메모리가 전부 보이지않는 문제'에서 이해가 되지 않는것이 있어 질문을 드립니다.

    4기가 메모리가 인식되지 않는 것은 각 장치가 가지고 있는 메모리 때문이라고 하셨는데. 비디오카드를 제외한 각 장치들의 메모리가 메인 메모리에서 할당을 받는 것인지 아니면 진짜 물리메모리를 각자 장치마다 가지고 있는 것인지 알고 싶습니다.  할당 받는 것이라면 2기가 를 꼽았을 경우 실제로는 1.5기가로 표시되어야겠지만 2기가로 표시가 됩니다.  할당 받지 않는 것이라면 말이 되지만 왜 진짜 물리메모리와 메인 메모리를 1대1 맵핑을 시키는지 의문이 듭니다.  시작 위치만 파악하고 직접쓰는 것과의 차이를 모르겠습니다.

  74. says:

    좋은 글 잘 읽었습니다~

    메모리에 대해서 서치하다가 들어왔는데, 그동안의 궁금증이 모두 해결되었어요^^

    댓글에 일일이 답변 다시는 것도 쉬운 일이 아닐텐데 친절하게 대답해주시는 모습 보기 좋습니다 ㅎㅎ

    그럼 새해 복 많이~:)

  75. 안녕하세요. 잘 이해가 가지 않아서 질문드립니다. says:

    xp sp3 32비트 +  4기가 램을 사용시, 램을 사용하지 않는 내장형 그래픽카드라면 작업관리자에서 실제 메모리가 4기가로 표시되나요? 아니면 강제적으로 3250mb 이외의 725램을 기존의 그래픽카드에 강제 할당해서 그래픽카드를 강화시키나요? 말하자면 최대 사용가능한 램은 3250mb로 고정된 값이고 그외 725mb는 강제적으로 그래픽카드에 할당되서 그래픽카드의 성능을 향상시키는 것인가요? 결론적으로 둘 중하나인것 같은데… 표시되지는 않은 램이 최대 4기가에서 그래픽카드등의 램 때문에 빠진것인지요? 아니면 최대 3250mb 으로 정해지고 나머지는 그래픽카드등으로 강제 할당된것인지요? 헷갈리네요.  글 재주가 없어서 죄송합니다. 이해되셨나요?  

  76. 안녕하세요. 추가 질문입니다 says:

    제가 윈 7 얼티 64비트 쓰고있는데요

    설치된메모리 4기가 (사용가능3.5기가) 라고 뜨거든욤

    윗글에서 말씀하신대로 64비트는 128기가 라고 하셨잖아요 ?

    그런데 메인보드가 최대 4기가밖에 인식 못한다면

    32비트와 다를게 없어지는건가요 ??

  77. MK says:

    안녕하세요 상욱님. 그쪽 계통(?) 쪽에서 일을 하시니 전문지식에 머리가 아파옵니다 ^^

    우연히 링크타고 들어온 블로그에서 엄청난 글을 발견했네요. PC매장에서 일을 하고 있어서 관심있게 읽어봤습니다. 정말 여쭙고 싶은게 너무 많아 글로 쓰지를 못하겠네요. 간략히..

    1. 제 PC는 4G 장착과 VGA 512MB, 램디스크 512M를 사용하고 있습니다. VGA 교체 혹은 램디스크 설정, 해제시에도 항상 3.5G 로 인식을 합니다.

    2. 판매되는 PC를 항상 확인하는것이 XP 32bit에서 내장 VGA 일때 3.25G 혹은 3G 로 인식이 된다거나 VGA 메모리 용량 관계없이 3.25G, 혹은 3G 고정되는 경우 이렇게 2가지를 여쭙고 싶습니다.

    슈퍼비지 아니실때 천천히 답변 달아주시면 감사하겠습니다 ^-^

  78. 덜배운놈 says:

    어느 사이트 가보니까 WDDM을 이해해야 윈도우 메모리를 이해할 수 있다는 글이 있더군요. 그게 사실인가요요? 그리고 마크루시노 비치가 디버깅 전문가입니까?

  79. 덜배운놈 says:

    상킴님 실래지만 디버깅할줄 아시나요?그리고 WDDK쓸줄 아시나요? 예전글보니까 마크루시노비시를 아시는것 같은데 어떻게 아세요?

  80. kblive! says:

    링크를 타고 왔습니다. 배우기라는 사람 자신의 잘못을 인정하기 보다는 상킴님이 자신의 비난에 동조했고 그걸 MS라는 회사 전체로 확대하는 글이 있더군요. 또 이전에 상킴님의 권위를 빌리기 위해 상킴님의 글을 무단으로 퍼서 자신의 글과 비교하며 MS 직원도 이렇게 썼으니 나도 맞다고 쓴걸 보았습니다. 무단 펌질도 문제지만 전체를 보면 틀린걸 일부를 가져다가 맞다고 주장하는게 문제인것 같습니다. 게다가 상킴님에 대해서 이해를 하지 못하고 쓴글이라느니 마켓팅 블로그라느니라는 말도 서슴없이 하던데 그 불법 펌질과 함께 이부분에 대해서 문제 제기하실 생각은 없으신지요?

  81. randtat says:

    readyfor4gb라는 유틸리티로 32비트에서도 4gb인식 후 모두 사용이 가능하다는데 가능한 일인가요~?

  82. Choi says:

    여러군데 검색해서 얻은정보로 겨우겨우 알아가고 있었는데,

    이 글보니 너무 이해도 쉽고, 감사드립니다.

    그렇다면, 32비트에서 4GB를 쓴다는 가정하에 디바이스메모리쪽에서 비디오메모리가 많이 차지하는걸로 아는데, 비디오메모리의 양을 줄이면 실제 사용할수 있는 램의 양을 늘릴수 있지 않을까요?

  83. Choi says:

    실제사용되는 램의 양은 결국 디바이스 메모리 때문이라면,

    디바이스 메모리(비디오메모리 부분)를 줄일수는 없을까요?

  84. 주영돈 says:

    대단하십니다..허허허허허…..만약 사용하는 소프트 웨어가 32bit에서만 구동이 가능하다면 어쩔수 없는 선택이 되겠군요…RAM은 8GB장착시켜놨는데…..OTL………..

  85. 재크 says:

    좋은정보 너무 감사드립니다.