나만의 학습 기록

최종 목적은 기술 블로그💩

백엔드 공부

OS에 대한 전반적인 지식 (4) - 메모리 관리

밈밍민믹 2026. 4. 6. 18:30

벌써 OS에 대한 전반적인 기초 지식의 네번째 글인데요. 앞으로 IPC와 입출력 관리, Posix와 네트워크 기초에 대해서 학습한 이후에는 버전 관리 시스템인 Git 기본 사용법과 저장소 호스팅 서비스인 GitHub에 대해서 간략하게 알아본 이후에 관계형 데이터베이스에 대해서 학습해보도록 하겠습니다.

 


메모리 관리

  • 다중 프로그래밍 시스템에서 메모리의 사용자 영역을 여러 프로세스가 상주할 수 있도록 세분화하는 기법
  • 메모리의 효율적인 관리를 위한 가상 메모리 기법을 통해 메인 메모리보다 용량이 큰 기억 공간에 주소 지정이 가능한 메모리 관리 기법

 

가상 메모리

  • 컴퓨터 시스템에 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여 사용자들에게 매우 큰 메모리로 보이게 만드는 것
  • 즉, 메모리가 실제 메모리보다 많아 보이게 하는 기술로 가상 메모리의 주소와 실제 메모리의 주소는 일치하지 않는다.
  • 논리적 메모리라고도 부른다.

 

가상 메모리 관리 기법

프로세스를 메모리에 적재하는 과정에서 단편화와 같은 문제가 발생할 수 있습니다. 이를 포함한 메모리 관리 문제를 효율적으로 해결하기 위해 가상 메모리를 이용하며, 대표적인 구현 방식으로는 페이징과 세그먼테이션이 사용됩니다.

 

메모리 단편화

  • 할당된 메모리 사이에 빈 공간이 생기는 현상으로 새로 메모리를 할당하려 할 때, 남은 메모리 공간이 충분하여도 연속적인 공간으로 이뤄져야하는 메모리 할당으로 인해 할당하지 못하는 문제가 발생할 수 있다.

1-1. 외부 단편화

  • 남아 있는 총 메모리 공간이 요청 메모리 공간보다 크지만, 남아있는 메모리 공간이 연속적으로 위치하지 않아 요청한 메모리를 적재할 수 없는 현상

  • 이를 해결하기 위해서 압축하여 메모리를 나눠서 적재하면 외부 단편화를 해결할 수 있다.

 

1-2. 내부 단편화

  • 남아 있는 메모리 영역의 크기가 요청 메모리보다 커서 요청 메모리 적재 시에 사용되지 않는 메모리가 생기는 것

  • 외부/내부 단편화를 해결하기 위해서는 페이징 기법과 세그먼테이션 기법을 사용합니다. 

 

1. 페이징

  • 운영체제에서 메모리를 효율적으로 관리하기 위해 프로세스를 고정된 크기의 페이지 단위로 나눠 물리 메모리에 불연속적으로 할당하는 가상 메모리 기법으로 외부 단편화를 해결할 수 있다.
  • 물리 메모리에 실제로 필요한 페이지만 적재함으로 메모리 사용 효율성을 향상시킬 수 있으며, 각 프로세스의 메모리 공간을 분리하고 보호할 수 있다.

 

페이징 기법의 동작 원리

가상 주소를 물리 주소로 변환하고 프로그램을 실행하는 과정

  1. 가상 주소 분리
    • 가상 메모리의 주소는 페이지 번호와 페이지 오프셋으로 나뉘며, 페이지 번호를 사용하여 페이지 테이블에서 해당 페이지가 물리 메모리의 어느 프레임에 적재되어있는지 찾아낸다.
    • 페이지 번호 : 가상 주소가 어느 페이지에 속하는지 나타낸다.
    • 페이지 오프셋 : 해당 페이지에서의 특정 위치를 나타낸다.
  2. 페이지 테이블 참조
    • 페이지 테이블 : 가상 메모리에서 각 페이지가 물리 메모리의 어느 프레임에 위치하는지를 매핑하는 역할을 하는 중요한 데이터 구조
    • CPU가 가상 주소를 참조할 때, 페이지 테이블을 사용하여 가상 페이지 번호를 물리 프레임 번호로 변환합니다.
  3. 가상 주소 → 물리 주소 변환
    • 페이지 테이블에서 찾은 물리 프레임 번호에 페이지 오프셋을 더해 물리 주소를 계산합니다.
    • 물리 주소는 프로그램이 실제로 메모리에 접근할 위치를 나타냅니다. 
  4. 페이지 부재
    • 만약 프로그램이 접근하려는 페이지가 물리 메모리에 적재되지 않은 경우, 페이지 부재가 발생합니다.

 

2. 세그먼테이션

  • 세그먼트로 나눠 메모리를 할당하는 방식
  • 세그먼트는 크기가 가변적이고, 각각의 세그먼트는 코드, 데이터, 스택, 힙 등과 같은 논리적인 단위로 나눌 수 있으며, 내부 단편화를 완화할 수 있습니다.

세그먼테이션 기법의 동작 원리

  1. 가상 주소 구조
    • 가상 주소는 세그먼트 번호와 오프셋으로 나뉩니다.
    • 세그먼트 번호 : 프로세스에서 사용중인 세그먼트 중 하나를 나타냅니다.
    • 오프셋 : 해당 세그먼트 내에서의 위치를 나타냅니다.
  2. 세그먼트 테이블
    • 각 세그먼트는 세그먼트 테이블에 저장됩니다. 세그먼트 테이블은 세그먼트 번호와 대응되는 물리 주소를 저장하고 있으며, 세그먼트의 시작 위치와 길이를 기록하고 있습니다.
  3. 가상 주소  물리 주소 변환
    • CPU가 특정 주소에 접근할 때, 먼저 가상 주소의 세그먼트 번호를 참조하여 세그먼트 테이블에서 해당 세그먼트의 시작 주소를 찾습니다. 이후 가상 주소의 오프셋을 베이스 주소에 더해 물리 주소를 계산합니다.
    • 이때 오프셋이 세그먼트의 길이를 초과하면 잘못된 메모리 접근이 발생하여 예외 처리가 이뤄집니다.

 


3. 요구 페이징

  • CPU가 요청할 때 프로세스의 데이터를 메모리에 올리는 것을 의미한다. 즉, 처음부터 모든 데이터를 메모리로 적재하지는 않는다.

 

요구 페이징 방식에서는 필요한 페이지만 메모리에 적재하므로 프로세스가 접근하려는 페이지가 아직 물리 메모리에 없을 수 있습니다. 이때 발생하는 현상을 페이지 폴트라고 합니다.

 

페이지 폴트

  • 어떤 프로그램이 자신의 주소 공간(가상 공간)에는 존재하지만 시스템의 RAM에는 현재 존재하지 않는 데이터, 코드에 접근을 시도할 경우 발생하는 현상
  • 페이지 폴트가 발생할 경우, 운영체제가 해당 데이터를 메모리로 가져와 마치 페이지 폴트가 발생하지 않은 것처럼 프로그램이 계속적으로 작동하게 해준다.
  • 페이지 폴트가 자주 일어날 경우, 운영체제의 성능이 많이 저하되기에 최소화하는 방법으로 페이지 교체 정책을 이용하기도 한다.

 


이렇게 메모리 관리의 다양한 방식 중 가상 메모리를 중점적으로 학습해보았습니다. 내일은 IPC와 입출력 관리, Posix와 네트워크 기초에 대해서 작성하고 Git과 GitHub에 대해서 작성해보도록 하겠습니다.