개발공부/운영체제

[OS] 메모리 단편화

개발자 찐빵이 2021. 11. 11. 20:14
728x90
반응형

메모리 단편화

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

내부 단편화

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

예시

메모장을 켰는데 OS가 4kb를 할당해줬다.
그런데 사실상 1kb만큼만 사용하고 있을 때 필요 이상으로 프로세스가 메모리를 할당받았으므로 내부 단편화가 3kb만큼 생긴 것이다.

외부 단편화

메모리가 할당되고 해제되는 작업이 반복되어서 작은 메모리가 중간 중간 존재할 때, 사용하지 않는 메모리가 많이 존재해서 총 메모리 공간은 충분하지만 실제로 할당할 수 없는 상태

예시

메모리 처음 주소에 8mb짜리 프로세스가 할당 되엇고 이어서 16mb 프로세스가 할당되었다.
8mb짜리 프로세스를 종료시키면 메모리 처음 주소부터 8mb만큼 공간이 생긴다.
이런 식으로 계속해서 빈 메모리가 쌓인다.
빈 메모리 공간 중에 가장 큰 공간이 8mb라고 하면, 9mb짜리 프로세스를 할당해야 할 때 마땅한 공간은 없지만 전체적으로 메모리 여유는 있을 때 외부 단편화가 생겼다고 한다.

메모리 사용 방법

First Fit : 메모리를 할당할 때, 가장 먼저 발견한 곳에 집어넣는 방법
Best Fit : 메모리를 할당할 때, 사용 가능한 공간 중 가장 작은 곳에 집어넣는 방법. 정렬이 필요하다.
Worst Fit : 메모리를 할당할 때, 사용 가능한 공간 중 가장 큰 곳에 집어넣는 방법. 정렬이 필요하다.

공간 효율성 : Best Fit > First Fit > Worst Fit
시간 효율성 : First Fit > Best Fit = Worst Fit

메모리 단편화 해결 방법

페이징 기법

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

페이지 : 보조기억장치를 이용한 가상 메모리를 같은 크기의 블록으로 나눈 것
프레임 : RAM을 페이지와 같은 크기로 나눈 것

특징

페이지와 프레임을 대응시키기 위해 page mapping 과정이 필요해서 paging table을 만든다.
연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화를 해결한다.
페이지 단위에 알맞게 꽉 채워 쓰는게 아니므로 내부 단편화가 존재한다.
가상 메모리를 사용한다.

페이지 단위를 작게하면 내부 단편화 문제를 해결할 수 있겠지만, 페이지 매핑 과정이 많아지므로 오히려 효율이 떨어질 수 있다.

세그멘테이션 기법

가상메모리를 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당하여 실제 메모리 주소로 변환하는 방법.

특징

세그먼트들의 크기가 다르기 때문에 미리 분할할 수 없고, 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법이다.
각 세그먼트는 연속적인 공간에 저장되어 있다.
세그먼트 mapping을 위해 세그먼트 테이블이 필요하다.
프로세스가 필요한 메모리 만큼 할당하므로 내부 단편화를 해결한다.
프로세스가 메모리를 해제하면 생기는 외부 단편화가 존재한다.
가상 메모리를 사용한다.

참고 사이트

메모리 단편화
메모리 단편화가 무엇이고 왜 발생하는가
메모리 단편화

반응형