티스토리 뷰
1. 외부 단편화란?
외부 단편화란 남아 있는 총 메모리 공간이 요청 메모리 공간보다 크지만, 남아 있는 메모리 공간이 연속적으로 위치하지 않아 요청한 메모리를 적재할 수 없는 현상이다.
아래 예시를 보자.
- 남아 있는 총 메모리 공간 : 100MB (50 + 50)
- 요청 메모리 크기 : 80MB
총 메모리 공간만 보았을 때 충분히 요청 메모리를 적재할 수 있으나, 남아있는 두 메모리가 연속적으로 위치하지 않아 적재할 수 없다.
1-1. 외부 단편화가 발생하는 이유
총 메모리 공간은 충분함에도 남아 있는 메모리들이 연속적으로 위치하지 않기 때문이다.
2. 외부 단편화 해결하기
외부 단편화가 발생한 이유는 남아있는 메모리가 연속적으로 위치하지 않았기 때문이다. 그렇다면 남아 있는 메모리를 연속적으로 위치할 수 있도록 압축하면 된다.
왼쪽처럼 남아 있던 두 메모리(50MB, 50MB)를 연속적으로 위치하게 하여 요청 메모리(80MB)를 적재할 수 있도록 한다. 압축 덕분에 오른쪽처럼 요청 메모리를 나눠서 적재할 수 있게 되었다.
3. 내부 단편화란?
내부 단편화란 남아 있는 메모리 영역의 크기가 요청 메모리보다 커, 요청 메모리 적재 시에 사용되지 않는 메모리가 생기는 것을 의미한다.
아래 사진을 보면 남아 있는 메모리 영역의 크기는 100MB이고 요청 메모리의 크기는 80MB이다. 남아있는 메모리의 크기가 요청 메모리보다 크므로 적재할 수 있다.
요청 메모리를 적재하게 되면 (100MB - 80MB)인 20MB가 남게 된다. 남은 20MB는 사용되지 않는 메모리가 되는데, 이를 20MB만큼 내부 단편화가 발생했다고 한다.
4. 단편화 해결하기
4-1. 페이징 기법
페이징이란 프로세스를 일정한 크기로 쪼개어 메모리에 적재하는 방식이다. 물리 메모리 공간 또한 페이지와 동일한 크기의 프레임으로 쪼개어진다.
페이징 기법은 외부 단편화 문제를 해결할 수 있다. 외부 단편화가 발생한 이유는 남아 있는 메모리가 연속적으로 위치하지 않았기 때문이다. 프로세스를 일정한 크기로 나눈 페이지를 프레임에 불연속적으로 배치할 수 있기 때문에 외부 단편화 문제를 해결할 수 있다.
아래 사진을 보면 프로세스를 일정한 크기로 나누어 4개의 페이지가 만들어졌고, 각 페이지를 프레임에 불연속적으로 배치하였다. 페이지를 물리 메모리에 불연속적으로 배치할 수 있는 이유는 페이지 테이블(Page Table)을 사용하기 때문이다. 페이지 테이블에는 (페이지 번호, 프레임 번호) 단위로 저장하고 있으며 특정 페이지가 어느 프레임에 저장되어 있는지 기록한다.
4-1-1. 페이징 기법의 문제점
페이징 기법은 외부 단편화를 해결할 수 있지만, 내부 단편화 문제를 일으킨다.
ex) 프로세스의 크기가 3100B이고 페이지의 크기가 1000B이다. 프로세스를 페이지 크기 쪼개면 4개의 페이지가 생성되는데, 마지막 페이지의 경우 900B 공간이 남게 된다. 900B 여유 공간이 남지만 다른 프로세스가 사용할 수 없기 때문에 내부 단편화가 발생한다.
4-2. 세그먼테이션 기법
세그먼테이션 기법이란 프로세스를 일관된 크기가 아닌 서로 다른 크기의 단위인 세그먼트로 분할하는 방식이다. 세그먼트는 사용자 메모리 영역인 코드, 데이터, 힙, 스택 등의 단위이다.
프로세스를 쪼갠 세그먼트를 물리 메모리에 적재하기 위해서 세그먼트 테이블을 사용한다. 세그먼트 테이블은 (base, limit)으로 매핑하여 기록하고 있다.
- base : 세그먼트가 적재된 물리 메모리의 시작 주소
- limit : 세그먼트의 크기
4-2-1. 세그먼테이션 기법의 문제점
세그먼테이션 기법은 내부 단편화가 발생하지 않지만 외부 단편화는 발생한다. 내부 단편화가 발생하지 않는 이유는 일관된 크기로 메모리를 쪼개는 것이 아닌 서로 다른 크기로 프로세스를 쪼개기 때문이다. 따라서 내부 단편화가 발생하지 않는다.
그렇다면 외부 단편화가 발생하는 이유는 무엇일까? 세그먼테이션 기법은 프로세스를 서로 다른 크기의 세그먼트로 쪼개는 방식이다. 세그먼트는 물리 메모리에 연속적으로 적재되는 것이 아니기 때문에 중간중간 사용되지 않는 메모리 영역이 생긴다. 남아 있는 메모리들이 연속적으로 위치하지 않기 때문에 요청 메모리를 적재할 수 없는 외부 단편화 문제가 발생한다.
참고
https://thebook.io/080367/0069/
https://daco2020.tistory.com/174