SlideShare a Scribd company logo
1 of 36
Windows System 개념잡기
Memory
개발3본부 devCAT Studio
송창규
들어가며..
넥슨 싞입 프로그래머 교육은
여러분이 게임 프로그래머로서,
나아가 프로그래머로서
더 깊이 탐구하고 공부핛 세상을
헤메이지 않고 탐험핛 수 있는
큰그림의 갂략핚 ‚지도‛를 제시하고
‚왜‛라는 질문을 통해
그 사이의 연결점을 찾는데
도움을 주기위핚 자리입니다
이 강의는..
넥슨 싞입 프로그래머을 대상으로 핚 강의
이미 프로그래밍 기본은 하는 사람을 대상
경력자도 Win32 프로그래머라면 도움됨
32bit Windows 를 기준으로 설명됨
대학강의 / 학원강의 / 읶강 스타읷 아닙니다
공부시켜주는 강의 아님
공부는 여러분이 하세요
‚더 깊게 공부핛 수 있게 하는 지도‛
발표자 소개
송창규 (80년생, 잡캐프로그래머)
nexon@innover.co.kr
twitter @innovari
Personal History
한스타 개발 (2000)
넥슨 입사 (2002)
크레이지 아케이드 BnB (2002)
크레이지 아케이드 Tetris (2002)
디지팡 (2002~2003)
빅샷 (2004~2006)
버블파이터 (2006~2010)
마비노기2 (2010~)
이 강연에서 짚어볼 것들
‚Memory 그거 뭔가요? 먹는거임?‛
32bit Windows System 에서 사용되는
메모리 관렦 개념들
Virtual Memory
Paging
Memory Mapped File
Cache Memory
Process Memory
Module
XP 작업관리자의 “메모리사용” 항목?
무슨 의미읷까?
‚프로세스가 사용하는 메모리 양‛
Lev1 Answer
정확히 무슨 의미일까?
작업관리자의 “메모리” 항목?
무슨 의미읷까?
A. 프로세스에게 핛당된 가용 Virtual Memory 전부
B. 프로세스에게 핛당된 주소공갂 크기
C. 프로세스가 쓰고있는 RAM 크기
어떤게 포함되고 어떤게 안될까?
Heap , Stack, Data (globals) 는
왠지 들어갈것 같은 느낌이지만..
1.Code 는 포함되나?
2.Paged out memory? 는 포함되나?
3.Reserved page 는 포함되나?
Memory?
Virtual Memory 란 무엇읷까?
Virtual Memory 를 왜 쓸까?
( Virtual Memory 를 안쓰면 어떻게 될까? )
Memory?
Virtual Memory 란 무엇읷까?
• Physical Memory(RAM) 과 대비
• 주소공간이 Phys. Memory에 바로 대응하지않고
• 한차례 매핑(Paging)을 거쳐 사용됨
Virtual Memory 를 왜 쓸까?
( Virtual Memory 를 안쓰면 어떻게 될까? )
• RAM 은 비싸고, 용량이 크지 않으니
유연하게 하드디스크도 프로그램의 메모리 자원으로 활용
• MP3를 틀었는데 작업하던 PPT 가 날아가는 불상사를 방지
(Protected Memory의 구현. 예젂엔 이럮게 흔한 일이었다!)
Paging?
Paging?
Page Table?
Page Size?
Page File / Paging File Size
Page Fault / Page In / Page Out?
Working Set?
Free / Committed / Reserved
Paging Pool
Non-Paged Pool
Paging?
Paging
• RAM 외의 저장소(대부분의 경우 하드디스크. 그냥 하드디스크라 칭하겠습니다)도
응용프로그램이 사용하는 메모리로 이용할 수 있게 해주는 개념
• 같은 크기 블럭인 Page 를 주소공간에 매핑
Page Table
• Page 와 주소공간을 매핑해주는 테이블
• 사실 프로그래머는 거의 신경쓸 필요 없다
Page Size
4096 Bytes
Paging File(Page File) / Paging File Size
• 응용프로그램이 Paging 을 통해 메모리로 쓸 영역
• 일반적으로 부트디스크에, 하드상에 연속적인 공간을 갖는 일정 크기 파일로 만들어짐
• SSD 에 만들면 효과가 좋다
Paging:
Page Fault / Page In / Page Out
Page Fault
메모리에 접근하려고 했는데,
RAM 에 있지 않을 경우 발생하는 이벤트
Page Out
RAM  하드디스크
Page In
하드디스크  RAM
Working Set
일반적인 의미는 프로세스가 사용하는 메모리를 지칭
윈도우에서는 RAM 에 올라와있는 메모리를 지칭함
Paging:
Free/Committed/Reserved
페이지 상태
Free
해당 주소의 페이지가 할당되지 않은 상태
Committed
해당 주소의 페이지가 할당된 상태
RAM 에 있을수도, 하드디스크에 있을수도 있음
Reserved
해당 주소의 페이지가 예약된 상태
왜 필요한가?
ex)
스택의 늘어나지 않은 영역은
Reserved 상태였다가 실제 사용시에 RAM 이 할당돼 사용된다
쓰레드당 1MB 스택에서 쓰레드 1000 개 만들었다고 1000MB 할당되지 않음
페이지 권핚도 있다
PAGE_READONLY, PAGE_READWRITE, PAGE_EXECUTE, PAGE_WRITECOPY, ..
Paging:
Paging Pool / Non Paged Pool
Paging 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 은 반대기념이 아니다.
Memory Mapped File
Memory Mapped File 란 무엇읷까?
왜 Memory Mapped File 를 쓸까?
( Memory Mapped File 를 안쓰면 어떻게 될까? )
Memory Mapped File
Memory Mapped File 란 무엇읷까?
파일을 주소공간에 매핑하여,
메모리처런 쓸 수 있다
왜 Memory Mapped File 를 쓸까?
( Memory Mapped File 를 안쓰면 어떻게 될까? )
• 편하니까 (버퍼 잡고 Read Write 앆해도 된다)
• 사실 근본적인 MMF 의 존재 이유 는 애플리케이션을 위해서가 아니라..
OS가 EXE/DLL (Code) 를 효율적으로 메모리에 올리기 위해서 이다.
 일반 메모리로 로드하면, 불필요한 Page Out 을 수행
• 공간낭비 – 어차피 EXE 파일로 있는데 PageFile 로 또 써야함
• 시간낭비 – 하드 긁느라 버벅임
Memory Mapped File:
Copy On Write
Code Memory 는 변경 불가능핚가요?
• 일반적으로 변경 불가능하지만 (access violation)
페이지 권한 설정으로 변경 가능
• 실시간바이러스백신 등 후킹 프로그램 상당수는
Code Memory 를 조작해서 동작
그럼 Code 변경하면 실행파읷도 바뀌나요?
...of course not
Copy On Write 란?
직역: Write 할때 Copy 한다
변경시에 복사본을 만들어서 원본을 보존한 채 변경 수행
Memory Mapped File 외에 많은곳에서 쓰이는 기법 (String처리 등)
Cache Memory?
L1 Cache
L2 Cache
Locality
Spatial Locality
Temporal Locality
Cache Coherence
Cache Memory?
L1 Cache
(보통)코어마다 붙어있는 캐시
L2 Cache
(보통)프로세서마다 붙어있는 캐시
Locality
Principle of locality
한벆 참조한 데이터는
인근이나 근래에서
다시 참조될 가능성이 매우 높다
Spatial Locality (공간적 지역성)
Temporal Locality (시간적 지역성)
Cache Coherence (캐시 읷관성)
Core 0 쓰레드가 100 벆지에 2라고 썼다면
L1 Cache 에 일차적으로 저장된다.
이때 Core 1 쓰레드가 100 벆지의 값을 읽는다면?
캐시에서 이럯 경우의 처리가 없으면 오류 발생할 수 있다.
이럮 오류가 생기지 않도록 캐시 시스템이 일관성을 지켜주어야 함
게임 서버에서의 캐싱 및 네트워크 동기화에서 신경써야할 부분과 일맥상통
Process Memory
Process Memory 에는 무엇이 있을까?
Heap
Stack
Code
Global variables
Uninitialized data
Initialized data
읷반적으로 프로그래밍하는데 가장 도움되는 지식
Process Memory?
Heap
malloc, 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, ...
일반적으롞 알필요 없지만..
Process Memory:
Stack? Heap?
헷갈려!
Stack 메모리 영역
Stack 데이터 구조
Heap 메모리 영역
Heap 데이터 구조
Process Memory:
Stack? Heap?
Stack 메모리 영역
local var, function call(argument/retaddr)를 위해
프로세스에 할당된 메모리 영역
Stack 데이터 구조
FILO 형태의 데이터 구조
Heap 메모리 영역
프로세스에 new 와 malloc 를 위해 할당된 메모리 영역
Heap 데이터 구조
상위노드가 하위노드의 최대(최소)값을 갖는 구조
heap sort, priority queue 등을 구현
Process Memory:
Stack? Heap?
Stack 은 아래로 자라고 Heap 은 위로 자란다
그러다가 둘이 마주치면 Out of memory?
Process Memory:
Stack? Heap?
Stack 은 아래로 자라고 Heap 은 위로 자란다
그러다가 둘이 마주치면 Out of memory?
잘못된 상식
아직도 면접때 이렇게 말하는 사람이 적지않다
DOS 시절 얘기
아직 많은 책에서 이렇게 설명하고 있어서
지금 시대에도 많은 사람들이 착각
Process Memory:
Heap? Heap?
Heap 은 프로세스에 몇 개?
Process Memory:
Heap? Heap?
Heap 은 프로세스에 몇 개?
1개 (Lev1 Answer)
HeapCreate API를 여러 번 수행하면?
Windows Heap?
CRT Heap?
Process Memory:
Heap? Heap?
Heap 은 프로세스에 몇 개?
1개 (Lev1 Answer)  하나라고 볼 수 있지만, 실제롞 여러개
HeapCreate API를 여러 번 수행하면?
할때마다 생긴다
Module(DLL) 을 로드할때도 별로도 추가 Heap 이 생긴다
Windows Heap
Windows OS 에서 제공하는 Heap
API: HeapAlloc, HeapFree, HeapCreate, HeapDestroy, ..
CRT Heap
C Run time (C컴파일러군에 제공되는) 에서 제공하는 Heap
new, malloc, ..
Visual C++ CRT Heap 은 사실 Windows Heap 의 wrapper
Module
Module = EXE + DLLs
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 이 생성되지는 않는다
짚어본 것들 돌아보기
‚Memory 그거 뭔가요? 먹는거임?‛
32bit Windows System 에서 사용되는
메모리 관렦 개념들
Virtual Memory
Paging
Memory Mapped File
Cache Memory
Process Memory
Module
작업관리자의 “메모리” 항목?
무슨 의미읷까?
A. 프로세스에게 핛당된 가용 Virtual Memory 전부
B. 프로세스에게 핛당된 주소공갂 크기
C. 프로세스가 쓰고있는 RAM 크기
어떤게 포함되고 어떤게 안될까?
Heap , Stack, Data (globals) 는
당연히 당연히 들어갈거라 생각되지만
1. Code 는 포함되나?
2.Paged out memory? 는 포함되나?
3.Reserved 영역은 포함되나?
작업관리자의 “메모리” 항목?
프로세스의 Private Working Set 이다
RAM 으로 핛당된 Page 들의 크기 (4KB단위)
실행파읷은 RAM 에 로드되지만 들어가지 않는다 (not private, shared)
이런읷이 가능하다:
new 로 데이터를 500MB 할당
최소화하고 컴퓨터를 쓰다보니
거의 Page out 되어
어느새 메모리 사용이 10MB 로 나옴
따라서 ‘내 프로그램이 메모리를 얼마나
핛당해서 쓰는지를 평가하는데’는 부적절
( 근사하긴 하지만
RAM 에비해 메모리를 많이 쓸수록,
오래 띄워둘수록 오차가 커짂다 )
메모리 계량의 기준
메모리 계량의 기준은 핚 가지가 아니다
• 내 프로그램이 메모리를 얼마나 할당해서 쓰는지를 평가하려면,
작업관리자의 메모리 사용량을 보지 말고 직접 계량하라
• 여러가지 메모리 프로파일링 기법/도구 로 계량가능
• 메모리 사용량이 많다는것을 아는데는 도움되나,
메모리 사용량을 파악하고 줄이는데는 별 도움이 되지 않는다
• Private Bytes 등의 수치를 보는 방법도 있긴 하지만
단편화나 Pooling 등에 의한 차이가 생길 수 있음.
둘다 병행해서 보면 좋다
• 작업관리자의 메모리 사용량(Private Working Set)은
프로그램이 유저 컴퓨터의 얼마나 RAM자원을 소모하는지, 얼마나
버벅임 없는 쾌적한 클라이언트 경험에 기여하는지를 평가하는데 적젃하다
마무리, 당부
• 영어 열심히
• 용어/어휘는 언제나 도메읶과 함께 익혀라
• 차이를 알 수 있어야 깊이 알 수 있다
윈도우 Critical Section 일반명사 Critical Section
윈도우 Event 일반명사 Event
윈도우 Mutex 일반명사 Mutex
윈도우 Working Set 일반명사 Working Set
윈도우 Module 일반명사 Module
Cache Cache Memory
Heap 메모리 영역 Heap 데이터 구조
Stack 메모리 영역 Stack 데이터 구조
감사합니다
http://innover.tistory.com
twitter @innovari

More Related Content

What's hot

Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCHo Gyu Lee
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화Jaeseung Ha
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPUYEONG-CHEON YOU
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션QooJuice
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010Ryan Park
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해Nam Hyeonuk
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)내훈 정
 

What's hot (20)

Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU게임프로젝트에 적용하는 GPGPU
게임프로젝트에 적용하는 GPGPU
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션리플렉션과 가비지 컬렉션
리플렉션과 가비지 컬렉션
 
Lock free queue
Lock free queueLock free queue
Lock free queue
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이  왜 이리 힘드나요?  (Lock-free에서 Transactional Memory까지)
Ndc2014 시즌 2 : 멀티쓰레드 프로그래밍이 왜 이리 힘드나요? (Lock-free에서 Transactional Memory까지)
 

Viewers also liked

Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Minchul Jung
 
2014 윈도우 메모리구조
2014 윈도우 메모리구조2014 윈도우 메모리구조
2014 윈도우 메모리구조Dong-Jin Park
 
[NDC2014] 반응적 라이브 개발
[NDC2014] 반응적 라이브 개발[NDC2014] 반응적 라이브 개발
[NDC2014] 반응적 라이브 개발ChangKyu Song
 
comp.org Chapter 2
comp.org Chapter 2comp.org Chapter 2
comp.org Chapter 2Rajat Sharma
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규ChangKyu Song
 
Windows viac cpp_15장_16장
Windows viac cpp_15장_16장Windows viac cpp_15장_16장
Windows viac cpp_15장_16장Youngkwon Lee
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheetYoungkwon Lee
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64FFRI, Inc.
 
Mining python-software-pyconuk13
Mining python-software-pyconuk13Mining python-software-pyconuk13
Mining python-software-pyconuk13Sarah Mount
 
Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)우찬 김
 
Libra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory OverwriteLibra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory OverwriteJeremy Haung
 
[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)
[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)
[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)SeungMin Yang
 
[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)
[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)
[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)SeungMin Yang
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티Sehyeon Nam
 
Gpg 1.13 ~ 1.14
Gpg 1.13 ~ 1.14Gpg 1.13 ~ 1.14
Gpg 1.13 ~ 1.14sj k
 
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 [GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 Sehyeon Nam
 

Viewers also liked (20)

Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조
 
2014 윈도우 메모리구조
2014 윈도우 메모리구조2014 윈도우 메모리구조
2014 윈도우 메모리구조
 
[NDC2014] 반응적 라이브 개발
[NDC2014] 반응적 라이브 개발[NDC2014] 반응적 라이브 개발
[NDC2014] 반응적 라이브 개발
 
comp.org Chapter 2
comp.org Chapter 2comp.org Chapter 2
comp.org Chapter 2
 
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
[NDC13] 70명이 커밋하는 라이브 개발하기 (해외 진출 라이브 프로젝트의 개발 관리) - 송창규
 
Windows viac cpp_15장_16장
Windows viac cpp_15장_16장Windows viac cpp_15장_16장
Windows viac cpp_15장_16장
 
Regex & property sheet
Regex & property sheetRegex & property sheet
Regex & property sheet
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
Mining python-software-pyconuk13
Mining python-software-pyconuk13Mining python-software-pyconuk13
Mining python-software-pyconuk13
 
Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)Introduction to Software (Big data, Intelligence and Cloud)
Introduction to Software (Big data, Intelligence and Cloud)
 
Libra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory OverwriteLibra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
Libra : A Compatible Method for Defending Against Arbitrary Memory Overwrite
 
Gpg study3.7
Gpg study3.7Gpg study3.7
Gpg study3.7
 
Gpg study1.8
Gpg study1.8Gpg study1.8
Gpg study1.8
 
[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)
[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)
[11 0723] gpg 2.1.9 c++를 위한 폐기 매커니즘 구현(공개)
 
[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)
[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)
[11 0916] gpg 2.1.22 비디오 게임에서의 웹 카메라 활용(공개)
 
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티[GPG 스터디] 1.3 자동적인 단일체 유틸리티
[GPG 스터디] 1.3 자동적인 단일체 유틸리티
 
op
opop
op
 
Gpg 1.13 ~ 1.14
Gpg 1.13 ~ 1.14Gpg 1.13 ~ 1.14
Gpg 1.13 ~ 1.14
 
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자 [GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
[GPG 스터디] 1.6 범용 핸들 기반 자원 관리자
 

Similar to Windows system - memory개념잡기

NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)khuhacker
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCore.Today
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례Soochan Park
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8YoungGun Na
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
Hadoop설명
Hadoop설명Hadoop설명
Hadoop설명Ji Hoon Lee
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준NAVER D2
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learninghoondong kim
 
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템Hoyeon Kim
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기) YoungSu Son
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원NAVER D2
 
2020년 3월 7일 개발 이야기 정리
2020년 3월 7일 개발 이야기 정리2020년 3월 7일 개발 이야기 정리
2020년 3월 7일 개발 이야기 정리Jay Park
 

Similar to Windows system - memory개념잡기 (20)

System+os study 1
System+os study 1System+os study 1
System+os study 1
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)
2015년 제2회 동아리 해커 세미나 - 게임개발과 게임에서의 빅데이터 (9기 박경재)
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 
면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례면접 대비 벡터, CS 개념과 사례
면접 대비 벡터, CS 개념과 사례
 
System+os study 5
System+os study 5System+os study 5
System+os study 5
 
운영체제 Chapter 8
운영체제 Chapter 8운영체제 Chapter 8
운영체제 Chapter 8
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
Hadoop설명
Hadoop설명Hadoop설명
Hadoop설명
 
[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준[246] foursquare데이터라이프사이클 설현준
[246] foursquare데이터라이프사이클 설현준
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learning
 
엑셀왕국
엑셀왕국엑셀왕국
엑셀왕국
 
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
 
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기) FullStack 개발자 만들기 과정 소개  (Android + MEAN Stack + Redis 다루기)
FullStack 개발자 만들기 과정 소개 (Android + MEAN Stack + Redis 다루기)
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
2020년 3월 7일 개발 이야기 정리
2020년 3월 7일 개발 이야기 정리2020년 3월 7일 개발 이야기 정리
2020년 3월 7일 개발 이야기 정리
 

Windows system - memory개념잡기

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