# Heap management
- Heap Structure
- allocation : malloc, new, free, delete
- Free List : Heap의 사용가능한 공간을 linked list로 구성
- Free함수의 역할 : Free List로 반환되는 공간이 기존 가용한 공간과 병합이 가능한 경우는 하나의 큰 공간으로 병합하고 아닌 경우에는 새로운 포인터로 연결
- Fragmentation : allocation과 reverse의 반복과정에서 생기는 작은 메모리 hole
- fragmentation이 많이 발생하면 메모리할당을 제대로 수행할 수 없음
- Buddy Allocator, Slap Allocator
: http://jiming.tistory.com/131
- Buddy Allocator의 Free
: 인접한 buddy 들이 가용 상태인 경우 이를 병합함으로써 쉽게 큰 크기의 가용한 메모리 공간을 확보할 수 있음
# Free List
- Lisked List, Bitmap
Free List가 주어지면 런타임에 어떤프로세스가 메모리 요청을 했을 때 메모리 할당에 대한 정책
- 메모리 fragments를 줄이기 위해 메모리 할당시에 적용되는 정책
: Best-fit, First-fit, Worst-fit
- Best-fit으로 allocation하는 것이 항상 좋은 결과를 가져오지 못하는 이유
: 시간이 지남에 따라 First-fit, Worst-fit에 비해 작은 크기의 hole들이 생성되기 때문에 Fragmentation 문제가 더 심각해 질 수 있음
- Memory Pool
; uni 사이즈로 메모리 요청을 수행하도록 함
: 여러 사이즈를 메모리 노드들을 동일한 사이즈끼리 묶어서 관리(다양한 사이즈를 지원할 수 있음)
: but, 사이즈 별로 불균현의 문제를 가지고 있음
# Static vs Dynamic
- Static : execution 전, pre-runtime, offline, static analisys,
- Dynamic : execution 후, runtime, online
- Static Allocation : 프로그램이 수행되기 전에 미리 메모리를 할당하는 것 (Code(text) Segment, Data Segment)
변수의 lifecycle이 프로그램의 시작과 끝에 일치하는 것
- Dynamic Allocation : (Stack Segment, Heap Segment)
*Activation Records(Stack Frames/Acivation Frames)
: 프로시저가 수행되기 위해 필요한 정보들을 저장하고 관리하기 위해 stack에 저장되는 데이터 구조
: 라이프사이클은 해당되는 함수가 시작되고 수행이 끝날 때까지임
: 함수 호출과 리턴은 Stack의 push, pop operation과 정확이 매칭됨
'System > Etc.' 카테고리의 다른 글
[OS 기초] Segmentation and Paging 2 (0) | 2015.11.02 |
---|---|
[OS 기초] Segmentation and Paging (0) | 2015.10.02 |
[OS 기초] Linking and Loader (0) | 2015.09.30 |
[OS 기초] Deadlock (0) | 2015.09.30 |
[OS 기초] Process Synchronization (0) | 2015.09.25 |