개발 지식/기본지식 · 2025. 5. 15.

메모리 관리란

728x90
# 메모리란
메인 메모리, RAM을 의미한다.
프로그램 실행 시 필요한 주소, 정보들을 저장하고 가져다 사용할 수 있게 만드는 공간

 

메모리 관리가 필요한 이유

메모리 관리는 컴퓨터 시스템의 안정성과 성능을 유지하기 위해 꼭 필요한 작업이다.

 

시스템 자원의 효율적 분배

컴퓨터는 물리 메모리(RAM)가 한정되어 있으므로, 여러 프로그램이 동시에 실행되더라도 각각에게 적절한 크기의 메모리를 효율적으로 나누어줘야 한다. 이를 제대로 관리하지 않으면 특정 프로그램이 과도하게 메모리를 차지하거나, 다른 프로그램의 메모리 공간을 침범해 시스템 전체의 오류를 일으킬 수 있다.

 

프로세스 간 보호

다른 프로그램의 메모리 공간 침범이 시스템 전체의 오류를 일으키는 이유는 각 프로그램(프로세스)은 자신만의 메모리 공간을 가져야하기 때문이다. 만약 잘못된 접근으로 다른 프로그램의 데이터를 덮어쓰면 보안 문제 또는 시스템 크래시가 발생할 수 있다. 따라서 운영체제는 메모리를 격리하고, 서로 침범하지 못하게 보호해야한다.

 

성능 유지와 자원 회수

프로그램이 사용한 메모리는 필요 없어진 시점에서 바로 회수해야한다. 만약 사용이 끝난 메모리를 계속 점유하고 있다면, 시스템은 점점 사용할 수 있는 메모리가 줄어들게 되고, 이는 성능 저하나 시스템 중단으로 이어질 수 있다. 이처럼 메모리 누수는 장시간 실행되는 프로그램에서 매우 치명적인 문제이다.

 

또한, 자주 사용하는 데이터는 메모리에, 덜 쓰는 데이터는 디스크로 욺겨 성능을 향상시킬 수 있다. CPU는 메모리 접근 속도에 크게 의존하기 때문에 효율적인 메모리 배치가 중요하다.

 

자동화, 안정성 증가

Java, Python 등은 가비지 컬렉터(GC) 를 통해 메모리를 자동 관리한다. 따라서 개발자가 직접 할당/해제 하지 않아도 되어 개발 부담이 줄고 안정성이 증가했다.

 

 

시스템 자원의 효율적 분배, 프로세스 간 보호, 성능 유지, 오류 방지 등 컴퓨터가 올바르게 동작하기 위해 반드시 필요한 핵심 기능이며, 운영체제와 프로그래머 모두가 챔임을 나눠 수행해야하는 중요한 역할이다.

 

 


스와핑(Swapping)

Swapping 이란, 운영체제가 현재 메모리에 있는 프로세스를 디스크(보조 저장장치)로 욺기고, 다시 필요한 시점에 메모리를 되돌리는 작업을 말한다.

 

즉, 메모리가 부족할 때 당장 사용하지 않는 프로그램을 잠시 밖에 내보내는 것이다.

 

Swapping을 하는 이유는 메모리는 한정되어 있고, 실행해야 할 프로그램은 너무 많기 때문이다.

 

표준 Swapping 방식으로는 round-robin 과 같은 스케줄링의 다중 프로그래밍 환경에서 CPU 할당 시간이 끝난 프로세스의 메모리를 backing store(보조기억장치, e.g 하드디스크)로 내보내고 다른 프로세스의 메모리를 불러들일 수 있다.

 

주기억장치(RAM)로 불러오는 과정 : swap-in
보조기억장치로 내보내는 과정 : swap-out

 

 

Swapping의 동작 과정

 

  1. 여러 프로세스가 실행 중인데 RAM이 꽉 찼다.
  2. 운영체제는 당장 CPU를 쓰지 않는 프로세스를 선택한다.
  3. 해당 프로세스를 디스크(스왑 공간)으로 이동시킨다.
  4. 메모리에 빈 공간이 생기고, 필요한 새 작업을 수행한다.
  5. 나중에 디스크로 내보낸 프로세스를 다시 불러오면,
  6. 원래 위치로 돌아가 실행을 재개한다.

 

스왑 공간(Swap Space)

  • 스와핑을 위해 디스크의 일부를 가상 메모리 영역으로 설정
  • 리눅스에서는 /swapfile 또는 별도의 파티션으로 설정됨

 

단점

단점 설명
속도가 느림 디스크 접근은 RAM보다 훨씬 느림 (수백 배 이상)
CPU 대기 시간 증가 자주 스와핑되면 프로그램 실행이 지연됨 ("스래싱" 현상)
전체 성능 저하 너무 많은 스와핑이 발생하면 시스템 전체가 느려짐

 

 

Swapping은 단편화를 유발할 수 있다.

운영체제가 Swapping을 통해 프로세스를 메모리에서 디스크로 욺겼다가 다시 불러올 때,

원래 위치에 넣지 못하면 다른 곳에 배치하게 된다.

 

이 과정이 반복되면 메모리 공간이 연속적으로 유지되지 못하고 조각조각 흩어지게 된다.

 

그 결과 → 외부 단편화가 발생된다.

 


단편화

메모리 공간이 여러 조각으로 나뉘어져, 전체 용량은 충분한데도 연속적으로 공간을 찾을 수 없어 할당이 어려운 상태

 

단편화 종류

단편화 설명 해결방법
외부 단편화

(External
Fragmentation)
메모리 전체 공간 중 사용되지 않는 빈 공간이 여기저기 흩어져 있음
하나로 이어진 큰 공간이 없어서 연속적인 할당 어려움

예시,
100MB 프로그램을 넣고 싶은데,
30MB, 40MB, 50MB의 빈 공간이 흩어져 있어 못 넣는 상황
압축(compaction),
페이징(paging),
세그먼트(Segmentation)
내부 단편화

(Internal
Fragmentation)
메모리 블록을 할당할 때, 필요한 크기보다 더 큰 공간이 할당됨
그 안에서 사용하지 못하는 남는 공간이 낭비됨

예시,
어떤 프로그램은 28KB가 필요한데, 시스템이 32KB 단위로만 할당해주면
남은 4KB는 쓸 수 없고 그냥 낭비됨
더 작은 단위로 블록을 쪼개거나, 가변 크기 할당 전략 사용

 

 

압축(compaction)
더보기

프로세스가 사용하는 공간들을 한쪽으로 몰아, 연속 공간을 확보하는 방법

 


메모리 관리 방법

 

연속 할당 (Contiguous Allocation)

프로세스에게 연속적인 메모리 공간을 할당하는 방식

초기의 간단한 메모리 관리 기법

 

  • 최초 적합(First fit)
    • 가장 처음 만나는 빈 메모리 공간에 프로세스 할당
  • 최적 적합(Best fit)
    • 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 적은 곳에 프로세스 할당
  • 최악 적합(Worst fit)
    • 빈 메모리 공간의 크기와 프로세스의 크기 차이가 가장 큰 곳에 프로세스 할당

 

페이징 (Paging)

메모리를 같은 크기 페이지(Page) 단위로 나누어 프로세스를 비연속적인 프레임에 나눠서 저장

프로세스가 메모리 전체를 연속적으로 차지하지 않아도 됨

 

장점

외부 단편화압축 작업을 해소

물리 메모리를 효율적으로 활용 가능

물리 메모리는 Frame 이라는 고정 크기고 분리되어 있고,
논리 메모리(프로세스가 점유)는 페이지라 불리는 고정 크기의 블록으로 분리된다.

물리 메모리에 저장될 때, 연속되어 저장될 필요가 없고 물리 메모리의 남는 프레임에 적절히 배치됨

 

단점

► 페이지 테이블이 필요하다. → 추가 오버헤드 발생

내부 단편화 문제의 비중이 늘어난다.

 

세그먼테이션 (Segmentation)

프로그램을 논리적인 단위(세그먼트)로 나누어 메모리에 할당(ex. 코드, 데이터, 스택 등)

 

장점

논리적 구조 반영 → 모듈화에 유리

접근 제어보호에 유리함

 

단점

외부 단편화 발생 가능

세그먼트 테이블 관리 필요

 

메모리 풀(Memory pool)

필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법

 

메모리의 할당, 해제가 잦은 경우에 메모리 풀을 쓰면 효과적

미리 할당해놓고 사용하지 않는 순간에도 계속 할당해놓으므로 메모리 누수가 있는 방식

 

장점

► 내부/외부 단편화 문제 해소

► 할당/해제 성능 향상

► GC 부하 감소

 

단점

► 미리 할당된 메모리 낭비 가능

► 설계 및 구현 복잡도 증가

 

가상메모리 (Virtual Memory)

물리 메모리가 부족할 때, 디스크의 일부를 메모리처럼 사용하는 기술

페이지 단위로 필요한 데이터만 메모리에 적재

 

장점

► 실제 메모리보다 큰 프로그램 실행 가능

► 메모리 사용의 유연성 증가

 

단점

► 디스크 접근이 느림 → 성능 저하 가능

► 스와핑, 페이지 홀트가 과도하면 스레싱 발생

 

캐시메모리 (Cache Memory)

CPU와 메모리 사이에 있는 고속 임시 저장소

자주 사용하는 데이터를 캐시에 저장해 속도 향상

 

장점

► 처리 속도 향상 (멤모리 접근 속도 개선)

 

단점

► 용량이 작고, 비용이 비쌈

► 캐시 미스 발생 시 성능 저하

 

동적할당메모리 (dynamic Memory Allocation)

프로그램이 실행 중에 필요한 만큼 메모리를 할당하거나 해제

 

장점

메모리 낭비 방지

► 다양한 크기의 요청에 유연하게 대응

 

단점

메모리 누수 또는 단편화 발생 가능

► 오류 발생 시 디버깅이 어려움

728x90

'개발 지식 > 기본지식' 카테고리의 다른 글

프로세스 간 통신(IPC) 란  (0) 2025.05.16
터미널 기본 명령어 / 실습  (0) 2025.05.14
스레드와 동시성  (0) 2025.05.13
프로세스 관리  (0) 2025.05.08
운영체제(OS)의 일반적인 작동 원리  (0) 2025.05.02