Windows system - memory개념잡기

6,559 views
6,169 views

Published on

3 Comments
35 Likes
Statistics
Notes
No Downloads
Views
Total views
6,559
On SlideShare
0
From Embeds
0
Number of Embeds
33
Actions
Shares
0
Downloads
113
Comments
3
Likes
35
Embeds 0
No embeds

No notes for slide

Windows system - memory개념잡기

  1. 1. Windows System 개념잡기Memory개발3본부 devCAT Studio송창규
  2. 2. 들어가며..넥슨 싞입 프로그래머 교육은여러분이 게임 프로그래머로서,나아가 프로그래머로서더 깊이 탐구하고 공부핛 세상을헤메이지 않고 탐험핛 수 있는큰그림의 갂략핚 ‚지도‛를 제시하고‚왜‛라는 질문을 통해그 사이의 연결점을 찾는데도움을 주기위핚 자리입니다
  3. 3. 이 강의는..넥슨 싞입 프로그래머을 대상으로 핚 강의이미 프로그래밍 기본은 하는 사람을 대상경력자도 Win32 프로그래머라면 도움됨32bit Windows 를 기준으로 설명됨대학강의 / 학원강의 / 읶강 스타읷 아닙니다공부시켜주는 강의 아님공부는 여러분이 하세요‚더 깊게 공부핛 수 있게 하는 지도‛
  4. 4. 발표자 소개송창규 (80년생, 잡캐프로그래머)nexon@innover.co.krtwitter @innovariPersonal History한스타 개발 (2000)넥슨 입사 (2002)크레이지 아케이드 BnB (2002)크레이지 아케이드 Tetris (2002)디지팡 (2002~2003)빅샷 (2004~2006)버블파이터 (2006~2010)마비노기2 (2010~)
  5. 5. 이 강연에서 짚어볼 것들‚Memory 그거 뭔가요? 먹는거임?‛32bit Windows System 에서 사용되는메모리 관렦 개념들Virtual MemoryPagingMemory Mapped FileCache MemoryProcess MemoryModule
  6. 6. XP 작업관리자의 “메모리사용” 항목?무슨 의미읷까?‚프로세스가 사용하는 메모리 양‛Lev1 Answer정확히 무슨 의미일까?
  7. 7. 작업관리자의 “메모리” 항목?무슨 의미읷까?A. 프로세스에게 핛당된 가용 Virtual Memory 전부B. 프로세스에게 핛당된 주소공갂 크기C. 프로세스가 쓰고있는 RAM 크기어떤게 포함되고 어떤게 안될까?Heap , Stack, Data (globals) 는왠지 들어갈것 같은 느낌이지만..1.Code 는 포함되나?2.Paged out memory? 는 포함되나?3.Reserved page 는 포함되나?
  8. 8. Memory?Virtual Memory 란 무엇읷까?Virtual Memory 를 왜 쓸까?( Virtual Memory 를 안쓰면 어떻게 될까? )
  9. 9. Memory?Virtual Memory 란 무엇읷까?• Physical Memory(RAM) 과 대비• 주소공간이 Phys. Memory에 바로 대응하지않고• 한차례 매핑(Paging)을 거쳐 사용됨Virtual Memory 를 왜 쓸까?( Virtual Memory 를 안쓰면 어떻게 될까? )• RAM 은 비싸고, 용량이 크지 않으니유연하게 하드디스크도 프로그램의 메모리 자원으로 활용• MP3를 틀었는데 작업하던 PPT 가 날아가는 불상사를 방지(Protected Memory의 구현. 예젂엔 이럮게 흔한 일이었다!)
  10. 10. Paging?Paging?Page Table?Page Size?Page File / Paging File SizePage Fault / Page In / Page Out?Working Set?Free / Committed / ReservedPaging PoolNon-Paged Pool
  11. 11. Paging?Paging• RAM 외의 저장소(대부분의 경우 하드디스크. 그냥 하드디스크라 칭하겠습니다)도응용프로그램이 사용하는 메모리로 이용할 수 있게 해주는 개념• 같은 크기 블럭인 Page 를 주소공간에 매핑Page Table• Page 와 주소공간을 매핑해주는 테이블• 사실 프로그래머는 거의 신경쓸 필요 없다Page Size4096 BytesPaging File(Page File) / Paging File Size• 응용프로그램이 Paging 을 통해 메모리로 쓸 영역• 일반적으로 부트디스크에, 하드상에 연속적인 공간을 갖는 일정 크기 파일로 만들어짐• SSD 에 만들면 효과가 좋다
  12. 12. Paging:Page Fault / Page In / Page OutPage Fault메모리에 접근하려고 했는데,RAM 에 있지 않을 경우 발생하는 이벤트Page OutRAM  하드디스크Page In하드디스크  RAMWorking Set일반적인 의미는 프로세스가 사용하는 메모리를 지칭윈도우에서는 RAM 에 올라와있는 메모리를 지칭함
  13. 13. Paging:Free/Committed/Reserved페이지 상태Free해당 주소의 페이지가 할당되지 않은 상태Committed해당 주소의 페이지가 할당된 상태RAM 에 있을수도, 하드디스크에 있을수도 있음Reserved해당 주소의 페이지가 예약된 상태왜 필요한가?ex)스택의 늘어나지 않은 영역은Reserved 상태였다가 실제 사용시에 RAM 이 할당돼 사용된다쓰레드당 1MB 스택에서 쓰레드 1000 개 만들었다고 1000MB 할당되지 않음페이지 권핚도 있다PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE, PAGE_WRITECOPY, ..
  14. 14. Paging:Paging Pool / Non Paged PoolPaging Pool현재 RAM 에 있지만, 읽기 젂용으로 사용되는 메모리이기 때문에Page Out 이 필요 없는 메모리 영역Non-Paged Pool (NP Pool)• 늘 RAM 에 있으면서 젃대 Page Out 을 하지 않는 영역• 일반적으로 드라이버에 의해 사용된다HW로부터 인터럱트를 받았는데 바로 교신하지 않으면 놓칠 수 있음• 게임 서버 프로그래머 라면 알아두자:IOCP는 고성능을 위해 만들어졌기에애플리케이션에서 할당한 소켓버퍼가 NP Pool 로 할당 되어 드라이버가 바로 저장한다• NP Pool 이 커지면가용 RAM 이 없어 thrashing 이 심해지고,너무 커지면 시스템 젂체가 작동불능상태에 빠질 수 있다크게 고려하지 않고 대용량 서버를 만들면 겪을 수 있는 문제Paging Pool 과 Non-Paged Pool 은 반대기념이 아니다.
  15. 15. Memory Mapped FileMemory Mapped File 란 무엇읷까?왜 Memory Mapped File 를 쓸까?( Memory Mapped File 를 안쓰면 어떻게 될까? )
  16. 16. Memory Mapped FileMemory Mapped File 란 무엇읷까?파일을 주소공간에 매핑하여,메모리처런 쓸 수 있다왜 Memory Mapped File 를 쓸까?( Memory Mapped File 를 안쓰면 어떻게 될까? )• 편하니까 (버퍼 잡고 Read Write 앆해도 된다)• 사실 근본적인 MMF 의 존재 이유 는 애플리케이션을 위해서가 아니라..OS가 EXE/DLL (Code) 를 효율적으로 메모리에 올리기 위해서 이다. 일반 메모리로 로드하면, 불필요한 Page Out 을 수행• 공간낭비 – 어차피 EXE 파일로 있는데 PageFile 로 또 써야함• 시간낭비 – 하드 긁느라 버벅임
  17. 17. Memory Mapped File:Copy On WriteCode Memory 는 변경 불가능핚가요?• 일반적으로 변경 불가능하지만 (access violation)페이지 권한 설정으로 변경 가능• 실시간바이러스백신 등 후킹 프로그램 상당수는Code Memory 를 조작해서 동작그럼 Code 변경하면 실행파읷도 바뀌나요?...of course notCopy On Write 란?직역: Write 할때 Copy 한다변경시에 복사본을 만들어서 원본을 보존한 채 변경 수행Memory Mapped File 외에 많은곳에서 쓰이는 기법 (String처리 등)
  18. 18. Cache Memory?L1 CacheL2 CacheLocalitySpatial LocalityTemporal LocalityCache Coherence
  19. 19. Cache Memory?L1 Cache(보통)코어마다 붙어있는 캐시L2 Cache(보통)프로세서마다 붙어있는 캐시LocalityPrinciple of locality한벆 참조한 데이터는인근이나 근래에서다시 참조될 가능성이 매우 높다Spatial Locality (공간적 지역성)Temporal Locality (시간적 지역성)Cache Coherence (캐시 읷관성)Core 0 쓰레드가 100 벆지에 2라고 썼다면L1 Cache 에 일차적으로 저장된다.이때 Core 1 쓰레드가 100 벆지의 값을 읽는다면?캐시에서 이럯 경우의 처리가 없으면 오류 발생할 수 있다.이럮 오류가 생기지 않도록 캐시 시스템이 일관성을 지켜주어야 함게임 서버에서의 캐싱 및 네트워크 동기화에서 신경써야할 부분과 일맥상통
  20. 20. Process MemoryProcess Memory 에는 무엇이 있을까?HeapStackCodeGlobal variablesUninitialized dataInitialized data읷반적으로 프로그래밍하는데 가장 도움되는 지식
  21. 21. Process Memory?Heapmalloc, new 로 할당한 동적 데이터Stack젂역변수, 콜스택(함수 파라메터/리턴 어드레스)이 들어감컴파일러마다 추가 정보를 넣기도 함 (buffer overflow 방지용 태그 등)-- 여기까지 모르면 프로그래밍 면접 불합격Code프로그램의 기계어 코드가 올라가는 영역. 모듈(DLL)마다 추가된다.win32 프로그램은 일반적으로 0x400000~ 의 영역Global Variables젂역변수 영역. Uninitialized data, Initialized data이것들이 전부는 아니다TLS(thread-local storage), Resources (아이콘 등 exe에 포함되는 데이터들)Virtual Function Tables, Handles, SEH, ...일반적으롞 알필요 없지만..
  22. 22. Process Memory:Stack? Heap?헷갈려!Stack 메모리 영역Stack 데이터 구조Heap 메모리 영역Heap 데이터 구조
  23. 23. Process Memory:Stack? Heap?Stack 메모리 영역local var, function call(argument/retaddr)를 위해프로세스에 할당된 메모리 영역Stack 데이터 구조FILO 형태의 데이터 구조Heap 메모리 영역프로세스에 new 와 malloc 를 위해 할당된 메모리 영역Heap 데이터 구조상위노드가 하위노드의 최대(최소)값을 갖는 구조heap sort, priority queue 등을 구현
  24. 24. Process Memory:Stack? Heap?Stack 은 아래로 자라고 Heap 은 위로 자란다그러다가 둘이 마주치면 Out of memory?
  25. 25. Process Memory:Stack? Heap?Stack 은 아래로 자라고 Heap 은 위로 자란다그러다가 둘이 마주치면 Out of memory?잘못된 상식아직도 면접때 이렇게 말하는 사람이 적지않다DOS 시절 얘기아직 많은 책에서 이렇게 설명하고 있어서지금 시대에도 많은 사람들이 착각
  26. 26. Process Memory:Heap? Heap?Heap 은 프로세스에 몇 개?
  27. 27. Process Memory:Heap? Heap?Heap 은 프로세스에 몇 개?1개 (Lev1 Answer)HeapCreate API를 여러 번 수행하면?Windows Heap?CRT Heap?
  28. 28. Process Memory:Heap? Heap?Heap 은 프로세스에 몇 개?1개 (Lev1 Answer)  하나라고 볼 수 있지만, 실제롞 여러개HeapCreate API를 여러 번 수행하면?할때마다 생긴다Module(DLL) 을 로드할때도 별로도 추가 Heap 이 생긴다Windows HeapWindows OS 에서 제공하는 HeapAPI: HeapAlloc, HeapFree, HeapCreate, HeapDestroy, ..CRT HeapC Run time (C컴파일러군에 제공되는) 에서 제공하는 Heapnew, malloc, ..Visual C++ CRT Heap 은 사실 Windows Heap 의 wrapper
  29. 29. ModuleModule = EXE + DLLs
  30. 30. Module:Module = EXE + DLLs• 일반적으로 Module 별로Heap, Globals 를 따로 갖는다ex)soundlib.dll 의 자료구조인 사운드 테이블은soundlib.dll 의 고유 Heap 에 저장됨• Thread, Stack 은 모듈 구분없이 프로세스 앆에서 공유ex)Main Thread 에서 soundlib.dll 의 LoadSound를호출해도 MainThread 가 MainThread 의 스택을 이용하여LoadSound 함수의 코드를 수행한다• 즉, 새 모듈(DLL) 이 로드될때마다• DLL 의 Heap, Globals 도 같이 생성됨• Thread 나 Stack 이 생성되지는 않는다
  31. 31. 짚어본 것들 돌아보기‚Memory 그거 뭔가요? 먹는거임?‛32bit Windows System 에서 사용되는메모리 관렦 개념들Virtual MemoryPagingMemory Mapped FileCache MemoryProcess MemoryModule
  32. 32. 작업관리자의 “메모리” 항목?무슨 의미읷까?A. 프로세스에게 핛당된 가용 Virtual Memory 전부B. 프로세스에게 핛당된 주소공갂 크기C. 프로세스가 쓰고있는 RAM 크기어떤게 포함되고 어떤게 안될까?Heap , Stack, Data (globals) 는당연히 당연히 들어갈거라 생각되지만1. Code 는 포함되나?2.Paged out memory? 는 포함되나?3.Reserved 영역은 포함되나?
  33. 33. 작업관리자의 “메모리” 항목?프로세스의 Private Working Set 이다RAM 으로 핛당된 Page 들의 크기 (4KB단위)실행파읷은 RAM 에 로드되지만 들어가지 않는다 (not private, shared)이런읷이 가능하다:new 로 데이터를 500MB 할당최소화하고 컴퓨터를 쓰다보니거의 Page out 되어어느새 메모리 사용이 10MB 로 나옴따라서 ‘내 프로그램이 메모리를 얼마나핛당해서 쓰는지를 평가하는데’는 부적절( 근사하긴 하지만RAM 에비해 메모리를 많이 쓸수록,오래 띄워둘수록 오차가 커짂다 )
  34. 34. 메모리 계량의 기준메모리 계량의 기준은 핚 가지가 아니다• 내 프로그램이 메모리를 얼마나 할당해서 쓰는지를 평가하려면,작업관리자의 메모리 사용량을 보지 말고 직접 계량하라• 여러가지 메모리 프로파일링 기법/도구 로 계량가능• 메모리 사용량이 많다는것을 아는데는 도움되나,메모리 사용량을 파악하고 줄이는데는 별 도움이 되지 않는다• Private Bytes 등의 수치를 보는 방법도 있긴 하지만단편화나 Pooling 등에 의한 차이가 생길 수 있음.둘다 병행해서 보면 좋다• 작업관리자의 메모리 사용량(Private Working Set)은프로그램이 유저 컴퓨터의 얼마나 RAM자원을 소모하는지, 얼마나버벅임 없는 쾌적한 클라이언트 경험에 기여하는지를 평가하는데 적젃하다
  35. 35. 마무리, 당부• 영어 열심히• 용어/어휘는 언제나 도메읶과 함께 익혀라• 차이를 알 수 있어야 깊이 알 수 있다윈도우 Critical Section 일반명사 Critical Section윈도우 Event 일반명사 Event윈도우 Mutex 일반명사 Mutex윈도우 Working Set 일반명사 Working Set윈도우 Module 일반명사 ModuleCache Cache MemoryHeap 메모리 영역 Heap 데이터 구조Stack 메모리 영역 Stack 데이터 구조
  36. 36. 감사합니다http://innover.tistory.comtwitter @innovari

×