2015. 3. 18. 01:23ㆍ프로그래밍/서버
단편화(Fragmentation)
분할된 주기억장치에 프로그램을 할당하고 반납하는 과정을 반복하면서 사용되지 않고
남는 기억장치의 빈 공간 조작을 의미한다.
단편화의 종류
내부 단편화(Internal Fragmentation)
- 분할된 영역이 할당될 프로그램의 크기보다 커서 사용되지 않고 남아 있는 빈 공간.
외부 단편화(External Fragmentation)
- 분할된 영역이 할당될 프로그램의 크기보다 작아서 할당할 수 없어 모두 빈 공간으로 남아 있는 전체 영역.
단편화 해결 방법
통합(Coalescing) 기법
- 인접해 있는 단편화된 공간을 하나의 공간으로 통합하는 작업을 의미한다.
압축(Compaction) 기법
- 주기억장치 내에 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 가용 공간을 만드는 작업을 의미한다.
쓰레기 수집(GC)라고도 한다. 여러 위치에 분산된 단편화된 공간을 주기억장치의 한 쪽 끝으로 옮겨서 큰 가용 공간을 만든다.
가상메모리 구현 기법
페이징 기법 - 프로그램을 동일한 크기로 나눈 단위를 페이지라 하며 이 페이지를 블록으로 사용하는 기법.
세그먼테이션 기법 - 프로그램을 가변적인 크기로 나눈 단위를 세그먼트라 하며, 이 세그먼트를 블록으로 사용하는 기법.
메모리 풀(Memory Pool) 방식
정의 - 다량의 고정된 메모리를 할당하여 필요한 곳에 빌려주고 돌려받는다.
빈번한 메모리 할당과 해제를 필요로 할 때 사용한다.
장점
- 메모리 풀은 일정한 실행 시간으로 단편화 없이 메모리를 할당할 수 있다.
- 메모리 풀들을 계층구조적으로 그룹화할 수 있다.
- 고정된 크기의 블록 메모리 풀들은 각각의 할당된 메모리 블록에 대한 메타 정보 및
할당된 블록의 사이즈 같은 설명을 보관할 필요가 없다. 작은 크기의 할당에서 상당한 공간 절약을 할 수 있다.
단점
- 메모리 풀들은 메모리 풀을 사용하는 응용프로그램에 따라 조정된다.
구현
- 큰 메모리 블록을 힙으로 부터 할당 받는다.
- 할당 받은 페이지를 각 객체 크기의 블록으로 나눈다.
- 각 객체를 위한 블록을 순차적으로 링크한다.
- 이때 현시점에서 할당할 블록을 특정 포인터가 가리키게 한다.
- 메모리 요청이 생기면 현재 헤어 포인터가 가리키는 블록을 돌려준다.
- 할당이 일어난 후 헤더 포인터는 할당 직전에 가리키던 블록이 가리키던 블록이 가리키던 다음 블록을 가리킨다.
- 사용되던 메모리가 해제돼 메모리 풀로 돌아올 경우 헤더 포인터는 그 블록을 가리키고
방금 전까지 헤더 포인터가 가리키던 블록을 돌아온 블록의 다음 포인터가 가리키게 한다.
'프로그래밍 > 서버' 카테고리의 다른 글
동기화 (0) | 2015.07.23 |
---|---|
Thread (0) | 2015.07.23 |
Blocking vs Non-Blocking (0) | 2015.07.12 |
[서버] 데드 레커닝(Dead Reckoning) (1) | 2015.05.23 |
Overlapped I/O 모델 (0) | 2015.05.17 |
IOCP 정리 (0) | 2015.05.14 |
TCP/IP 프로토콜 개요 (1) | 2015.04.27 |