아카이브

외부 단편화, 내부 단편화 본문

운영체제

외부 단편화, 내부 단편화

주멘이 2018. 6. 2. 16:07

< 단편화 (fragmentation) >


 기억 장치의 빈 공간 또는 자료가 여러 개의 조각으로 나뉘는 현상

- RAM에서 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태


< 내부 단편화 >

- 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비 되는 현상

- 예) OS가 프로세스에 4kb를 할당. 하지만 사실상 1kb만 사용하고 있을 경우 내부 단편화가 3kb만큼 발생


< 외부 단편화 >

- 메모리가 할당 및 해제 작업의 반복으로 작은 메모리가 중간중간에 존재

중간중간에 생긴 사용하지 않는 메모리가 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상황

여유 공간이 여러 조각으로 나뉘는 현상

- 예) 메모리 시작 주소부터 8mb의 프로세스가 할당되고, 바로 이어서 16mb의 프로세스가 할당된 경우 

 8mb의 프로세스를 종료하면 메모리 시작 주소부터 8mb의 공간이 발생


< 문제 해결 방법 >

1. 페이징 ( Paging ) 기법 - 가상 메모리 사용, 외부 단편화 해결, 내부 단편화 존재

- 보조기억장치의 블록을 페이지, RAM의 블록을 프레임이라고 칭함

사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 기법

- 페이지와 프레임 대응을 위해 paging table 생성

- 연속적이지 않은 공간도 활용할 수 있기에 -> 외부 단편화 해결

- 페이지 단위에 맞게 사용하지 않으므로 -> 내부 단편화 존재

페이지 단위를 작게하면 -> 내부 단편화 해결할 수 있지만 ? page mapping 과정이 많아지므로 효율 감소


2. 세그멘테이션 ( Segmentation ) - 가상 메모리 사용, 외부 단편화 존재, 내부 단편화 해결

- 페이징 기법은 가상 메모리를 "페이지"라는 같은 크기로 분할했지만, 이와 반대로 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당

- 각 세그먼트는 연속적인 공간에 저장되어 있음

- 크기가 다르기 때문에 미리 분할해 둘 수 없고 메모리에 적재될 때 빈 공간을 찾아 할당

- segment table이 필요함 ( 각 세그먼트의 항목별 시작 주소와 길이 정보 )

필요한 메모리 만큼 사용하기 때문에 내부 단편화 해결 -> 그러나 프로세스가 메모리를 해제하면 생기는 외부 단편화는 존재

3. 메모리 풀 ( Memory Pool )

- 필요한 메모리 공간을 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법

- 미리 공간을 할당해놓고 사용하고 반납 -> 외부 단편화 해결

- 필요한 크기만큼 할당 -> 내부 단편화 해결

- if ( 단편화로 인한 낭비량 < pool을 만들었지만 사용하지 않을 때 누수양 ) 오히려 낭비

메모리의 할당, 해제가 잦은 경우 효과적인 기법

- 미리 할당하기 때문에 메모리 누수가 존재 



출처

https://m.blog.naver.com/s2kiess/220149980093

http://sycho-lego.tistory.com/10




'운영체제' 카테고리의 다른 글

기억장치 배치전략(최초 적합/최적 적합/최악 적합)  (0) 2018.06.02
데드락, 교착상태  (0) 2018.06.02
Cache 정리  (0) 2018.05.29
스케줄링 알고리즘  (0) 2018.05.29
동시성(Concurrency)과 병렬성(Parallelism)  (0) 2018.05.29