페이징·세그멘테이션이 뭐예요?
페이징과 세그멘테이션을, 부품 창고 선반을 같은 크기 칸으로 나눌지 쓰임새대로 나눌지 고르는 이야기로 풀어봤어요.
선반 칸은 다 같은 크기인데, 짐은 크기가 제각각이에요.메모리(선반)를 어떤 크기로 나눠야 할지가 문제예요.
같은 크기 칸으로만 나누면 작은 짐은 빈 자리를 남기고, 큰 짐은 여러 칸으로 조각나요.칸 크기가 같으면 관리는 쉽지만, 짐의 모양과는 맞지 않아요.
페이징은 메모리를 같은 크기로, 세그멘테이션은 쓰임새대로 나눠요.둘 다 가상 주소를 실제 메모리 위치로 바꿔주는 방식이에요.
페이징은 칸 안에 자투리를, 세그멘테이션은 덩어리 사이에 빈틈을 남겨요.세그먼트를 다시 같은 크기 페이지로 자르는 혼합 방식도 있어요.
위치를 적을 때 페이지 테이블은 프레임 번호만, 세그먼트 테이블은 시작 위치와 길이까지 적어요.번지를 찾는 과정과 페이지 폴트는 가상메모리 페이지에서 다뤄요.
페이징은 메모리를 같은 크기 칸으로, 세그멘테이션은 쓰임새 단위(코드·데이터·스택 등)로 나누는, 가상 주소를 실제 메모리 위치로 바꾸는 두 가지 방식이에요.
페이징은 가상·물리 메모리를 모두 고정 크기(페이지/프레임)로 나누고 페이지 테이블로 대응시켜요. 구현이 단순하고 외부 단편화가 없지만, 마지막 페이지가 다 안 차면 내부 단편화가 생겨요. 세그멘테이션은 프로그램을 코드·데이터·스택처럼 의미 있는 단위(세그먼트)로 나누고, 세그먼트 테이블에 시작 위치와 길이를 적어요. 단위가 의미와 맞아 보호·공유가 쉽지만, 크기가 제각각이라 세그먼트 사이에 외부 단편화가 생길 수 있어요. Multics와 32비트 x86처럼 세그먼트와 페이징을 함께 쓴 시스템도 있었고, 현대 64비트 운영체제는 대부분 페이징 위주로 동작해요.
어른들은 이렇게 불러요
- 페이징
Paging - 메모리를 같은 크기 칸으로 자르는 방식. 내용과 상관없이 크기만 보고 나눠요.
- 세그멘테이션
Segmentation - 메모리를 쓰임새 단위로 자르는 방식. 코드·데이터·스택 구역 이야기는 여기서 봐요. → 작업 공간을 구역으로 나눠 쓰는 규칙
- 내부 단편화
Internal Fragmentation - 같은 크기 칸 안에 남는 자투리 공간. 페이징에서 생겨요.
- 외부 단편화
External Fragmentation - 덩어리와 덩어리 사이에 남아 못 쓰는 빈틈. 세그멘테이션에서 생기기 쉬워요.
- 페이지 테이블
Page Table - 가상 페이지와 실제 프레임의 대응표. 페이징의 핵심 구조예요. → 창고 전체를 내 것처럼 보여주는 가짜 지도
- 세그먼트 테이블
Segment Table - 세그먼트마다 시작 위치와 길이를 적은 표. 길이를 넘는 번지는 막아서 보호에도 쓰여요.
- 세그멘테이션 페이징
Segmented Paging - 세그먼트를 다시 페이지로 자르는 혼합 방식. 세그먼트로 보호·공유를 챙기고, 페이지로 외부 단편화를 피하려는 방식이에요.
- 가상메모리
Virtual Memory - 메모리를 프로세스마다 전용 공간처럼 보여주는 가짜 지도. 페이징·세그멘테이션은 이 지도를 구현하는 두 방법이에요. → 창고 전체를 내 것처럼 보여주는 가짜 지도