* 아직은 많이 부족하기 때문에 제가 자신이 생길 때 까지 본 글은 제 블로그에 대한 링크만 허용합니다. 프로세스는 자신만의 메모리 공간을 가지고 있습니다. 모든 x86 시스템 (일명 32비트 OS)는 총 4G 까지 메모리를 사용할 수 있습니다. Windows의 메모리는 유저 메모리 공간과 커널 메모리 공간이 분리 되어 있습니다. 하지만 유저 프로세스는 실제로 0000,0000 ~ 7FFF,FFFF 까지 즉 2G의 메모리 공간만 사용하고 8000,0000 ~ FFFF,FFFF 는 커널 공간에서 사용하게 됩니다. 그리고 Windows는 여기에 아예 접근할 수 있는 메모리 자체를 분리해 버렸습니다. 보통은 유닉스 계열을 모놀릭 커널이라 부르고 Windows는 마이크로 커널이라 부르는데, 이는 바로 유저 프로세스 메모리 공간과 커널 메모리 공간을 정적으로 분리했기 때문입니다. (빠른 처리를 위해 Win32k.sys 서브시스템 및 TCP/IP등이 커널 모드에 있으니 정확한 의미의 마이크로 커널 운영체제는 아닙니다.) Windows는 이를 통해 커널의 안정성을 보장할 수 있습니다. 위와 같은 구조라면 Notepad.exe에 문제가 발생하더라도 해당 프로세스는 실행에 문제가 발생하겠지만 이는 커널까지 영향을 줄 수 없고, Iexplorer.exe 및 windbg.exe 까지 영향을 받진 않습니다. 메모리 사용의 효율성을 위해 VAD를 이용하여 메모리 주소를 사용합니다. 프로세스는 2G의 메모리를 사용한다고 생각하지만 실제로는 위의 그림과 같이 실제 사용하는 부분만 VAD로 정의 되어 실제 메모리나 Disk에 페이징 파일로 저장되게 됩니다. PeakVirtualSize 48 Mb 이 VAD는 Tree 구조로 되어 있는데 이 VAD의 총 합이 이 프로세스가 사용하는 총 메모리의 합이 됩니다. 위의 notepad.exe의 예를 보자면 (VadRoot 81afd5f0 Vads 101 … 우리는 각 VAD에 대한 정보를 좀 더 상세하게 확인 할 수 있습니다. kd> !vad 859aad30 |
[현상] [조치 사항] 간단하게 옵션을 통해서 문제를 우회 할 수 있습니다. 클러스터에 SQL Server 인스턴스 설치 시 : 클러스터에 SQL Server 노드 추가 시 : [기타] |
kd> .reload /user kd> !process 81b3a310 kd> .process 81b3a310 Max cache size is : 1048576 bytes (0x400 KB) kd> .reload /user |
LPC 통신 이란 프로세스와 커널 간 혹은 프로세스들 간에 LPC 메세지라고 하는 데이터 블럭을 이용한 고속 통신을 말합니다. - LPC 통신 방식 (출처 : http://www.zezula.net/en/prog/lpc.html) |
Microsoft의 Sankim 님께서 이전에 http://blogs.technet.com/sankim/archive/2007/08/20/remote-live-debugger.aspx 통하여 Windows Server의 라이브 디버깅에 대한 소개를 해주셨습니다. 하지만 스터디를 위하여 컴퓨터 2대와 Com 포트 케이블을 이용하는건 쉽지 않습니다. 물론 그냥 Windbg의 로컬을 선택하여 디버깅을 할 수 도 있습니다. 하지만 이 경우에는 OS 들이 동작 중이기 때문에 자세한 Callstack 등을 들여다 보기에는 한계가 있습니다. 그래서 Virtual PC를 이용하는 방법을 소개해 드립니다. 자료를 직접 작성할려구 했지만 좋은 자료가 너무 많아서 링크로 대신합니다…^^ |