메모리 관리 기법인 페이징(Paging)과 세그먼테이션(Segmentation)에 대해 알아보려 한다.
❓ 메모리는 왜 관리해야 할까?
❗️ 일반적으로 컴퓨터는 한 프로세스만 실행하지 않고, 여러 프로세스를 동시에 번갈아 수행(Multi Programming)한다.
이를 위해서는 주기억장치(Main Memory)에 여러 프로레스를 적재해야 한다.
이때 메모리를 적절히 분할하지 않으면, 실행 속도가 느려지거나 일부 프로세스가 제대로 동작하지 않을 수 있기 때문에
메모리 관리 기법을 통해 여러 프로세스가 원활히 실행되도록 해야 한다.
단편화(Fragmentation)
페이징과 세그먼테이션에 대해 알아보기 전에, 먼저 단편화가 무엇인지 알아보자.
단편화란 "기억 장치의 빈 공간 또는 자료가 여러 조각으로 나뉘는 현상"이다.
이는 앞서 언급한 것처럼 메모리를 적절히 분할하고 관리하지 못했을 때 발생하는 대표적인 문제이다.
단편화는 내부 단편화와 외부 단편화로 나뉜다.
내부 단편화
내부 단편화는 고정된 블록(Frame)에 비해 요청한 메모리 크기가 작아, 블록 내 사용되지 못하고 남는 공간이 발생하는 현상이다.

한 프레임의 크기는 10K이고, 요청한 메모리 크기는 6K이므로 요청 프로세스를 메인 메모리에 적재할 수 있다!
다만, 4K의 메모리는 사용하지 않게 되므로 내부 단편화가 발생한다.
외부 단편화
외부 단편화는 연속된 메모리 영역들 사이에 사용되지 않는 공간의 생성으로 인해 프로세스가 적재되지 못하는 현상이다.

요청한 메모리 크기 3K는 메인 메모리 내에 빈 공간의 총합(4K)으로만 따진다면 적재할 수 있지만,
이는 연속된 공간이 아니므로 요청 프로세스를 적재할 수 없어 외부 단편화가 발생한다.
페이징(Paging)
페이징은 이러한 외부 단편화를 해결하기 위해 프로세스를 일정한 크기의 페이지로 분할해서 메모리를 적재한다.
이는 프로세스 전체가 연속된 공간에 위치할 필요가 없기 때문에 외부 단편화 문제를 해결할 수 있다.
하지만 페이징 단위를 크게 잡을 경우 내부 단편화 문제가 발생할 수 있다.

프로세스는 일정한 크기의 페이지(Page) 단위로 분할되어 논리 메모리(Logical Memory)에 저장된다.
메인 메모리(Physical, Main Memory) 역시 페이지와 동일한 크기로 프레임(Frame)을 나눠 각각을 frame number로 구별한다.
페이지 테이블은 논리적 주소의 페이지가 어느 프레임에 매핑되는지를 기록한다.
세그먼테이션(Segmentation)
세그먼테이션은 프로세스를 논리적 단위로 분할하여 메모리에 적재하는 기법이다.
즉, 페이징처럼 일정한 크기가 아닌 코드 / 데이터 / 스택 / 힙 단위로 세그먼트를 나누기 때문에 각 세그먼트의 크기는 일정치 않다.

세그먼트 테이블에서 limit은 각 세그먼트의 크기를 의미하며,
base는 메인 메모리에서 세그먼트가 적재되기 시작한 주소를 의미한다.
세그먼테이션 기법은 서로 다른 크기로 세그먼트를 분할하기 때문에 내부 단편화가 발생하지 않는다.
하지만 메인 메모리 내에 연속으로 적재되는 것이 아니기 때문에 외부 단편화 문제가 발생한다.
마무리
이렇게 페이징(Paging)과 세그먼테이션(Segmentation) 기법을 각자 알아보았다.
둘은 각각 외부/내부 단편화를 해결해주지만, 결국 내부/외부 단편화를 야기한다.
따라서 두 단점을 보완하는 세그먼테이션-페이징 혼용 기법이 등장하였다!
해당 기법은,
- 논리 메모리에서 코드 / 데이터 / 스택 / 힙을 기준으로 세그먼트를 나누고, 각 세그먼트는 다시 페이지 단위로 분할한다.
- 세그먼테이션 테이블은 각 세그먼트의 권한을 비트로 표시하고, 해당 세그먼트의 페이지 테이블 시작 주소를 저장한다.
- 페이지 테이블은 주소마다 frame number를 관리한다.

:)
출처
https://server-technology.tistory.com/444
'Computer Science > 운영체제' 카테고리의 다른 글
| [OS] 시스템 콜(System Call) (3) | 2025.08.14 |
|---|---|
| [OS] 프로세스 동기화(Process Synchronization) (5) | 2025.08.03 |
| [OS] IPC(Inter-Process Communication) (4) | 2025.07.31 |
| [OS] GC(Garbage Collection, 가비지 컬렉션) (1) | 2025.07.21 |
| [OS] 프로세스(Process) vs 스레드(Thread) (0) | 2025.06.19 |