본문 바로가기

운영체제/Dynamic Storage Allocation

운영체제 - Dynamic Storage Allocation(Stack, Heap)

운영체제 - Dynamic Storage Allocation(Stack, Heap)


static allocation?

- 프로그램이 수행되기 전(컴파일 타임)에 미리 메모리를 할당하는 것,


static allocation

- Text(Code) segment, Data segment


dynamic allocation

- Stack segment, Heap segment


Static Allocation의 특징

- 변수의 life cycle이 프로그램의 시작과 종료와 일치


Q. 왜 dynamic allocation이 필요할까?

- 얼마만큼의 메모리 크기가 필요할 지 예측할 수 없기 때문



# Activation Record(= stack frames, activation frames)

- procedure가 수행되기 위해 필요한 정보들을 저장하고 관리하기 위해 stack에 저장되는 데이터 구조


# PCB(Process Control Block)

- 프로세스의 관리를 위해 운영체제가 유지해야 하는 정보들을 저장하는 데이터 구조

- PCB를 Array(static allocation), linked-list(dynamic allocation)으로 관리하느냐 차이에 따라 성격이 달라진다.


< free list >


# free list

- heap의 사용가능한 공간들을 연결한 리스트


# free()함수의 역할

- free list로 반환되는 공간이 기존 가용한 공간과 병합 가능한 경우 하나의 큰 공간으로 병합하고 아닌 경우 새로운 포인터를 추가한다.


힙 메모리 공간은 alloc()과 free()을 반복하다보면 각기 다른 메모리 청크(chunk)로 분할됨. => memory fragmentation




< memory fragmentation >


memory fragmentation을 해결하는 방법?

- Buddy allocation(2^k)

+ 장점 : 인접한 Buddy들이 가용 상태인 경우 이들을 병합함으로써 쉽게 큰 크기의 가용한 메모리 공간을 확보할 수 있다.

- paging


# free list policy

- cpu scheduling에서는 policy 정책에 따라 컴퓨터 시스템 성능이 크게 달라졌지만 free list policy는 무엇을 선택해도 그닥 영향이 없다.

① Best fit

- free list를 찾으며 제일 fitable한 block할당

- 단점 : 시간이 지남에 따라 first-fit, worst-fit에 비해 작은 크기의 hole들이 생성되기 때문에 fragmentation 문제가 더 심각해질 수 있다.

② First-fit

- free list에서 가장 첫 번째로 fit되는 block할당

③ Worst-fit

- 가장 큰 block 할당


# Heap implementation(= free list implementation)

1. bitmap

2. memory pool

- 힙 메모리 공간을 유저 요청에 따라 다양하게 메모리를 할당해주지 말고 단위 크기(unit size)로만 메모리를 할당해 주는 방식이다.

- 예를 들어, 전체 메모리 공간을 1K 할당만을 위한 공간, 2K 할당만을 위한 공간, 4K 할당만을 위한 공간으로 나누면 메모리 단편화 문제가

발생하지 않는다. 그러나, 사용자가 1K공간만을 지속해서 요구한다면 불필요하게 메모리 낭비가 발생할 수 있다.