티스토리 뷰

Programming

외부단편화 내부단편화

오야토 2023. 9. 22. 11:39
1. 외부 단편화(External Fragmentation)
메모리에 남아있는 공간이 여러 조각으로 나뉘어 발생하는 현상이다.

 

현재 빈 공간은 50MB + 50MB로 100MB이다.

요청하는 메모리는 70MB이다.

요청하는 메모리의 크기가 남아있는 총 빈 공간보다 작지만 할당할 수 없어 메모리 공간을 낭비한다.

왜일까?

-> 주소를 연속적으로 할당해서 중간에 메모리가 남기때문이다.

 

[ 외부 단편화 해결법 ]

1. 압축 (Storage Compaction)

: 비어 있는 모든 공간을 한 곳에 재배치 후 하나의 빈 영역을 생성하지만 고비용으로 자주 사용하지 않는다.

2. 통합 (Coalescing)

:  빈 공간이 인접한 공간이 있을 경우 통합을 해 사용한다.

3. 재배치 (Relocation)

: 압출을 실행해 프로그램의 주소를 새롭게 지정해주는 기법이다.


 

2. 내부단편화(Internal Fragmentation)
: 주소를 불연속적으로 할당해 생기는 메모리 낭비 현상이다.

현재 50MB의 빈공간이 있다. C 프로세스가 빈공간에 실행될 예정이다.

45MB인 C프로세스가 실행되면 매모리의 공간은 5MB가 남게 된다.

남은 공간의 메모리가 적을 경우 새로운 프로세스가 들어오지 못해 내부 단편화 현상이 발생하게 된다.

 

[ 내부 단편화 해결 방법 ]

1.  Segmentation (세그멘테이션)

: 메모리가 적재될 때 빈 공간을 찾아 할당하는 방식으로 가상의 메모리가 세그먼트로 분할 후 실제 메모리 주소에 변환한다.

2. Memory Pool (메모리 풀)

: 사용자가 직접 정한 메모리량을 정해 사용하고 반납하는 방식이다.