Welcome to TechNet Blogs Sign in | Join | Help

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에 추가되다만 나머지 RAMPAM에 추가 되는데 이때 추가된 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

Published Thursday, May 21, 2009 2:29 PM by sankim

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

# Sankim's Blog : Windows ????????? FAQ

Thursday, May 21, 2009 1:47 AM by Sankim's Blog : Windows ????????? FAQ

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

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

Sunday, May 24, 2009 10:23 AM by 듣보잡

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

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

Friday, May 29, 2009 2:10 AM by 궁금이

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

안녕하세요? :)

디바이스 드라이버는 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를 참조하십시오.

감사합니다.

Friday, May 29, 2009 3:30 AM by sankim

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

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

좋은 하루 되세요~

Monday, August 17, 2009 9:49 PM by sankim

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

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

Monday, August 17, 2009 10:09 PM by sankim

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

Tuesday, August 18, 2009 1:43 AM by 허허.. 참..

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

제 글과 비슷하다는 의미시지요? 기술 이야기는 비슷할 수도 있다고 생각합니다... 저도 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도 이해하고 있어야 합니다. 이 이슈를 자꾸 하드웨어의 여러 기술에 접합시켜 이해하려면 더 복잡해지고 엉뚱한 답이 나올수 있으므로 지양해야 합니다.

Tuesday, August 18, 2009 3:25 AM by sankim

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

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

'이 기술을 적용하면 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로 제공 됩니다, 얼마전까지 책을 무료로 배송해 줬던걸로 아는데 어딘지 기억이.. . ^^;

Tuesday, August 18, 2009 9:28 PM by sankim

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

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

Wednesday, August 19, 2009 6:42 AM by 그러면

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

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

Wednesday, August 19, 2009 10:07 PM by sankim

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

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

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

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

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

Wednesday, September 09, 2009 5:03 AM by tedhaha

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

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

감사합니다 :)

Wednesday, September 09, 2009 5:41 AM by sankim

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

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

2^32 = 4294967296Bytes = 4.0GB

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

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

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

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

Wednesday, September 09, 2009 12:11 PM by 게이버

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

안녕하세요?

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

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

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

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

감사합니다.

Wednesday, September 09, 2009 9:24 PM by sankim

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

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

32비트에서요

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

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

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

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

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

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

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

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

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

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

Monday, September 21, 2009 8:30 AM by pgmjeong

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

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이라고 할 수 있습니다, 누구 하나만 발전한다고 환경계를 바꿀 수 없는..

도움 되셨으면 합니다..

감사합니다.

Monday, September 21, 2009 9:45 AM by sankim

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

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

ㅋㅋ님/ 제 부덕입니다 :)

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

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

Tuesday, October 20, 2009 10:41 PM by sankim

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

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

Tuesday, October 20, 2009 10:43 PM by sankim

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

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

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

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

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

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

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

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

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

Sunday, October 25, 2009 9:25 PM by 스카이블루

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

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

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

Sunday, October 25, 2009 11:10 PM by sankim

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

안녕하세요..

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

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

감사합니다~

Monday, October 26, 2009 7:02 AM by kjh

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

질문좀 하겠습니다.

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

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

Thursday, October 29, 2009 5:34 PM by 대리인

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

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

답변을 드리면 아래 문의에 대한 해답을 얻기 위해서는 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에 대해서 써야겠네요. 그때를 기대해 주세요 

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

Thursday, October 29, 2009 9:56 PM by sankim

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

안녕하세요!!!

글 잘 읽었습니다.

위에 커멘트에 보니깐. 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에 다 포함되는 내용 같네요. 어차피 물리적 장치가 붙으면 램에 맵핑을 해서 동작을 하니깐요.

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

Friday, October 30, 2009 11:38 AM by 이재윤

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

안녕하세요?

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

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

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

감사합니다.

Friday, October 30, 2009 5:47 PM by sankim

Leave a Comment

(required) 
required 
(required) 

  
Enter Code Here: Required
 
Page view tracker