CS 박사되깅 3주차 메모리 관리

윤현승·2025년 9월 21일

CS 스터디

목록 보기
3/9

메모리 관리는 컴퓨터 시스템에서 프로그램의 실행과 자원 활용의 핵심 역할을 하며, 시스템의 효율성과 안정성, 보안까지 좌우한다. 메모리 관리를 배우는 이유는 한정된 물리적 자원(메모리)을 효율적으로 사용할 수 있게 하고, 여러 프로그램을 동시에 빠르고 안정적으로 실행할 수 있게 하기 때문이다.

페이징

페이징은 프로세스의 주소 공간을 일정 크기의 페이지 단위로 쪼개어, 물리 메모리의 프레임에 불연속적으로 할당하는 방식이다. 페이징은 외부 단편화(continuous space가 부족해 할당이 불가능해지는 공간 낭비.)는 해결할 수 있으나, 내부 단편화(각 페이지가 프레임에 다 채워지지 않아 남는 공간이 다른 프로세스에 사용될 수 없는 현상)는 발생한다. 예시로, Windows, Linux 등 거의 모든 범용 OS에서 프로세스 메모리 관리에 페이징을 사용한다.

내부 단편화와 외부 단편화는 메모리 관리에서 발생하는 "공간 낭비"의 원인이지만, 발생 원인과 현상이 다르다.

내부 단편화 (Internal Fragmentation)

  • 정의: 고정된 크기의 메모리 블록을 할당할 때, 실제 필요한 메모리보다 더 큰 블록이 할당되어 남는 공간이 낭비되는 현상.
  • 예시: 100MB 크기의 파티션(블록)에 80MB짜리 프로세스를 할당하면 20MB가 남지만, 이 20MB를 다른 프로세스에서 사용할 수 없어 낭비된다.
  • 주로 발생하는 경우: 고정 크기 분할/페이지 할당 방식에서 흔함.

외부 단편화 (External Fragmentation)

  • 정의: 전체적으로 남아있는 메모리 공간은 충분하지만, 메모리의 빈 공간이 여러 군데로 흩어져 있어 연속된 큰 공간이 없어 새로운 프로세스가 할당되지 못하는 현상.
  • 예시: 50MB짜리 빈 공간이 두 군데에 흩어져 있어 총 100MB가 남아 있지만, 80MB짜리 프로세스를 할당할 때 연속된 공간이 없어 할당이 불가한 상황.
  • 주로 발생하는 경우: 동적 분할(가변 크기 할당) 방식에서 흔함.

사진출처:https://hojunking.tistory.com/109

요약 비교

  • 내부 단편화: "블록 안이 남는 것"(사용하지 않는 잔여 공간)
  • 외부 단편화: "블록 사이가 끊긴 것"(자투리 공간들이 모여 있어도 큰 할당이 불가능)

세그멘테이션

세그멘테이션은 프로그램을 논리적 단위(코드, 데이터, 스택 등)로 나눠 각각 크기가 다른 메모리 영역에 배치한다. 세그멘트 크기가 가변적이기 때문에, 삭제·할당·조정에서 연속 공간에 빈틈(홀)이 생기며, 이로 인해 외부 단편화 문제가 발생한다. 그럼에도 사용하는 이유는 코드와 데이터의 분리를 통한 보호·공유가 가능하고, 논리적 단위별로 접근 권한을 부여할 수 있기 때문이다. 단점으로는 외부 단편화와 동적 메모리 관리의 어려움, 장점은 내부 단편화가 없고 보호와 공유에 효과적이라는 점이 있다.

가상 메모리 - 페이지 폴트

가상 메모리는 실제보다 큰 메모리 공간을 제공하는 기술로, 보조저장장치(디스크)를 실제 메모리처럼 사용할 수 있게 한다. 예를 들어, 여러 프로그램을 동시에 실행하면서 실제 메모리 용량을 초과하더라도 실행이 가능하다(대개 Windows PC에서 여러 앱을 띄울 때 등). 페이지 폴트는 프로세스가 필요한 페이지가 실제 메모리에 없을 때 발생하는 예외로, 운영체제가 디스크에서 필요한 페이지를 메모리로 불러오는 과정을 포함한다. 페이지 폴트가 너무 자주 발생하면 시스템 성능 저하가 생기므로, 효율적인 페이지 교체가 중요하다.

페이지 교체 알고리즘

  • FIFO(First-In First-Out): 가장 먼저 들어온 페이지를 먼저 내보낸다. 이해와 구현이 쉽지만 Belady의 anomaly 현상이 생길 수 있다.
  • LRU(Least Recently Used): 최근에 사용된 적이 없는 페이지를 우선 교체. 실제 사용 환경과 가깝지만 구현이 복잡할 수 있다.
  • LFU(Least Frequently Used): 사용 빈도가 가장 낮은 페이지를 교체. 비활성 페이지 제거에 적합하지만, 최근 갑자기 사용이 많아진 페이지를 보호하는 데에는 한계가 있다.
  • 기타 OPT, Clock 등도 존재하며 실제 구현 환경과 특성에 따라 적합한 방식을 선택해야 한다.

페이지 교체 알고리즘은 페이지 폴트 발생 시 어떤 페이지를 교체할지 결정한다. FIFO 방식은 오래된 페이지부터 제거하지만, 페이지 프레임 수가 증가해도 오히려 페이지 폴트가 증가하는 Belady anomaly(비정상적 현상)가 등장할 수 있다. LRU, LFU, OPT 등의 방식이 있고, 실제 운영체제에서는 LRU 변형(Clock 등)이 가장 널리 채택된다. LRU는 최근 사용되지 않은 페이지를 교체하여 실제 사용 패턴에 가깝고, LFU는 사용 빈도가 낮은 페이지를 교체한다. FIFO는 단순하지만 성능에서 단점이 있어 일부 특수 상황에서만 사용된다.

profile
윤현승입니다!

5개의 댓글

comment-user-thumbnail
2025년 9월 21일

단편화 관련 표가 있어서 더 쉽게 이해했어요!

답글 달기
comment-user-thumbnail
2025년 9월 21일

시각 자료가 있으니까 차이를 이해하기 더 쉬워져서 좋았어요

답글 달기
comment-user-thumbnail
2025년 9월 21일

사진 덕분에 단편화 이해가 잘 됐습니다!!

답글 달기
comment-user-thumbnail
2025년 9월 22일

내부, 외부 단편화 그림이 있어서 이해하기 쉬웠습니다

답글 달기
comment-user-thumbnail
2025년 9월 22일

사진이 보기 좋아요!

답글 달기