메모리 단편화 [ 크래프톤 정글 43일차 ]

jinsung·2025년 6월 26일

크래프톤 정글 9기

목록 보기
41/59

그 시절... 메이플을 하다보면 조금씩 느려지고 렉이 걸려서.. 어렸을 때 "메이플 스토리 렉 안걸리는 법" 이라고 검색하면 나오는

누구나 한 번 쯤은 해봤을 디스크 조각모음

그 때 분명히 초딩이었는데..

서른살이 되어서 "메모리 단편화"로 만났구나. 이 무슨 운명의 장난인가.

메모리 단편화

메모리 단편화는 뭘까~용?

메모리에 충분히 공간이 있는데 할당이 불가능한 상태를 메모리 단편화라고 해요.

이건 또 내부 단편화외부 단편화로 구분할 수 있어요.

1. 내부 단편화

내부 단편화는 예를 들어서 메모리마다 10 만큼의 블록을 할당해주는데
이런 나는 1 만큼만 용량을 사용하고 있어요. 그럼 9 만큼의 공간이 발생하잖아요?

그럼 우린 이걸 내부 단편화가 발생했다고 합니다.

프로세스 B는 10만큼 할당된 거에서 10전부를 사용하고 있는데
프로세스 A는 10만큼 할당된 거에서 1만 사용하고 있어요.

이런 메모리 낭비가 심하군요 ㅠㅠ

2. 외부 단편화

외부 단편화는요.
메모리가 할당되고 해제되는 일이 반복되면서 빈 메모리가 중간 중간 존재하게 되는데요.
빈 메모리를 전부 다 합치면 프로세스를 실행할 공간이 충분한데
실제로는 할당할 수 없는 상황을 말해요.

이런 식이예요.

프로세스 A와 프로세스 B가 각각 1 씩 차지하고 있는 상황에서 5만큼의 공간이 필요한 프로세스 C가 들어왔어요.

근데 이런 ㅠㅠ 공간은 충분한데 C를 실행할 수가 없어요...

메모리 낭비가 심하네요..

3. 단편화 해결 방법

단편화가 발생하면 시스템 자원을 제대로 활용하지 못하니까, 운영체제나 메모리 관리자는 이런 문제를 해결하기 위한 다양한 전략을 사용해요.

2-1. 압축(Compaction)

외부 단편화를 줄이기 위해, 메모리 내 빈 공간들을 한 쪽으로 몰아서 연속된 공간을 확보하는 방식이에요.
즉, 프로세스를 이동시켜서 빈 공간을 정리하는 거죠.

하지만 이건 실행 중인 프로세스를 옮겨야 하니까, 오버헤드가 크고 현실적으로는 자주 쓰이지 않아요.
대신에 가상 메모리와 같은 기법들이 대체로 더 많이 쓰여요.

2-2. 메모리 할당 전략

다양한 할당 전략으로 외부 단편화를 줄이려 해요.

  • First Fit: 처음 만나는 충분히 큰 블록에 할당
  • Best Fit: 가장 작은 충분한 블록에 할당 (공간 낭비 최소화, 단편화는 심해질 수 있음)
  • Worst Fit: 가장 큰 블록에 할당 (큰 공간을 쪼개기 위함)

각 방법은 트레이드오프가 있어서, 상황에 따라 적절한 전략을 선택해요.

2-3. 페이징(Paging)과 세그멘테이션(Segmentation)

이건 운영체제 수준에서 단편화를 해결하는 핵심 기법이에요.

  • 페이징은 메모리를 고정 크기인 페이지 단위로 나눠서 사용해요.
    → 외부 단편화는 사라지지만, 페이지 하나에 남는 공간 때문에 내부 단편화는 존재할 수 있어요.

  • 세그멘테이션은 코드, 데이터, 스택 등 논리적인 단위로 메모리를 나눠요.
    → 내부 단편화는 줄어들 수 있지만, 외부 단편화는 여전히 발생할 수 있어요.

  • 현대 운영체제는 보통 두 기법을 조합해서 사용해요. (예: 세그먼트를 페이지로 나눔)

3. 디스크 조각모음 vs 메모리 단편화?

어릴 적 했던 디스크 조각모음은 하드디스크의 파일 단편화(fragmentation)를 해결하는 작업이에요.
파일이 저장될 때 여러 조각으로 나뉘어 있으면 성능이 떨어지니까, 이걸 정리해서 읽기 속도를 높이는 작업이었죠.

그러니까, "디스크 조각모음"은 저장 장치의 단편화,
"메모리 단편화"는 실행 중인 프로그램의 메모리 공간에서 일어나는 단편화예요.

둘 다 "조각이 생겨서 낭비되는 문제"라는 공통점은 있지만,
디스크는 저장 공간, 메모리는 실행 공간이라는 점에서 차이가 있답니다!

마무리

어렸을 땐 그냥 컴퓨터가 느려져서 했던 디스크 조각모음이,
어른이 되고 나선 메모리 단편화, 페이지, 할당 전략 등으로 다시 나타났네요..

그 때는 몰랐지... 초등학교 4학년 때 , 프로게이머랑 프로그래머랑 헷갈려서
되고싶은 직업에 프로그래머를 적었던게 여기까지 굴러오네

1개의 댓글

comment-user-thumbnail
2025년 6월 27일

나도 그때 초딩이었는데

답글 달기