백과 블로그
홈블로그소개

백과의 개인 블로그 입니다. Contact : ksu9801@gmail.com

운영체제

운영체제의 메모리 관리 기법 (가상 메모리) 알아보기 ep.01

백과
2025년 7월 28일
5분 읽기
목차
📚 가상 메모리
✅ 개념 정리
📌 물리 주소와 논리 주소
📌 스와핑과 연속 메모리 할당
📌 연속 메모리 할당과 외부 단편화
📌 페이징을 통한 가상 메모리 관리
📌 페이징
📌 세그멘테이션
📌 페이징에서의 스와핑

목차

📚 가상 메모리
✅ 개념 정리
📌 물리 주소와 논리 주소
📌 스와핑과 연속 메모리 할당
📌 연속 메모리 할당과 외부 단편화
📌 페이징을 통한 가상 메모리 관리
📌 페이징
📌 세그멘테이션
📌 페이징에서의 스와핑

image

📚 가상 메모리

  • 운영체제에서는, 메모리를 관리하기 위해 가상 메모리 기법을 사용한다.
  • 프로세스는, CPU 에 의해 할당 받아 실행되기 위해서 메모리에 반드시 저장되어야 한다.
  • CPU는 이 프로세스들을 실행하기 위해, 메모리 몇번지에 무엇이 저장되어있는지 알 필요가 있습니다.
  • 하지만, 실제로는 CPU 내부의 저장 공간 부족, 효율성, 주기적인 메모리에 적재된 프로세스 삭제/등록등 여러 사유로 인해서 메모리의 모든 정보를 알고 있을 수 없습니다.
  • 때문에, CPU는 다음 소개할 개념들을 통해 메모리에 적재된 프로세스의 주소를 인식하고 관리하게 됩니다.

✅ 개념 정리

  • CPU 가 메모리에 적재된 프로세스의 주소를 인식하고 관리하기 위한 물리/논리 주소, 가상 메모리, 페이징 의 개념에 대해서 알아보자

📌 물리 주소와 논리 주소


  • CPU 와 프로세스는 메모리의 하드웨어 상 실제 주소인 물리 주소가 아니라, 다른 주소 체계를 이용한다. 논리 주소
  • 논리 주소는 프로세스 마다 부여되는 가상의 논리 주소이다.
  • 즉, 물리 주소는, 중복 될 수 없으나, 논리 주소는 얼마든지 중복될 수 있다.

왜? 논리 주소를 사용하는가?

  • 물리 주소는 실제 메모리(RAM)의 주소이다.

  • 물리 주소 공간은 RAM 크기에 따라 고정된 범위를 가진다.

  • 예를 들어, 8GB 메모리를 가진 PC는 8GB 만큼의 물리 주소 공간을 가진다.

  • 그렇다면, 하나의 프로세스가 1GB의 메모리를 사용한다면, 동시에 최대 8개의 프로세스만 실행할 수 있을까?

  • 실제로는 그렇지 않다. 프로세스가 실행되기 위해 전체가 메모리에 올라올 필요는 없으며, 실행에 필요한 일부 페이지만 물리 메모리에 올라간다. 나머지는 뒤에서 알아볼 가상 메모리에 보관된다.

  • 이처럼 실행 중인 프로세스의 일부분만 물리 메모리에 올라가므로, 물리 주소에 어떤 프로세스의 어떤 페이지가 매핑될지는 상황에 따라 계속 바뀐다.

  • 뒤에서 설명할 스와핑과 연관 있다.

  • 예를 들어, 프로세스 A가 물리 주소 0x1000을 사용하고 있다가 컨텍스트 스위칭 등으로 인해 메모리에서 내려갔다가 다시 올라올 경우, 0x1000은 더 이상 A의 데이터가 아닌, 다른 프로세스의 데이터가 저장된 주소일 수 있다.

  • 이런 이유로, 프로그램 입장에서는 항상 일관된 주소를 사용하는 것이 중요하다.

  • 그래서 운영체제는 논리 주소(또는 가상 주소)라는 개념을 도입해, 프로세스마다 독립된 주소 공간을 제공한다.

  • 이를 통해 가용성(더 많은 프로세스 실행 가능), 안정성(주소 충돌 없음), 보안성(프로세스 간 메모리 접근 차단) 등의 다양한 이점을 얻을 수 있다.

  • 같이 보면 이해하기 편한 질문

  • 하지만 논리 주소를 사용할때 결국 실행될 때는 실제 메모리에 있는 물리 주소를 참조해야 한다.
  • 즉, 논리 주소로 물리 주소를 알 수 있어야 한다는 것이다. (상호작용을 위해)
  • 때문에 MMU(Memory Management Unit) 이라는 하드웨어를 통해 논리 주소를 물리 주소로 변환하여 사용하게 된다.

image

📌 스와핑과 연속 메모리 할당


  • 메모리에 적재된 프로세스들 중, 현재 실행되고 있지 않은 프로세스도 있을 수 있다.
  • 메모리에 올라가 있어도 결국 실행하는 주체는 CPU 이기 때문에, CPU 가 바쁘거나 스케줄링 순서 우선순위가 밀린다면, 실행되지 못하고 대기 상태일 것이다.
  • 실행되지도 않는 친구가 비교적 적은 메모리 영역에 계속해 저장되고 있는 건 낭비이다.
  • 따라서, 이러한 프로세스들을 임시로 스왑 영역에 보내고, 확보된 공간에 다른 프로세스를 적재하여 실행하는 메모리 관리 방식을 스와핑 이라고 한다.

image

  • 현재 실행되지 않은 프로세스를 메모리에서 스왑 영역으로 옮기는 것을 스왑 아웃
  • 스왑 영역에 있는 프로세스가 다시 메모리로 옮겨오는 것을 스왑 인 이라고 한다.
  • 스왑 아웃 -> 스왑 인 될 때는 다른 주소로 적재될 수 있다.

image

📌 연속 메모리 할당과 외부 단편화


  • 스와핑을 통해 사용되지 않는 프로세스를 스왑 영역에 보내, 알뜰하게 메모리 관리하는 건 알았다.
  • 이제 메모리 적재할 때 어떤 방식으로 적재 하는지 알아보자.
  • 가장 간편한 방법은 연속 메모리 할당 방법이다.
  • 프로세스 크기만큼 연속하여 메모리에 할당하는 방식이다.

image

  • 가령, 메모리 공간에 다음과 같은 용량을 차지할 A ~ D 까지의 프로세스를 연속 메모리 할당으로 적재한다면 다음과 같이 적재 될 것이다.

image

  • 문제는, 일부 프로세스가 완료되어, 메모리 반납이 이뤄진 후 발생하게 된다.
  • 만약, 프로세스B, 프로세스 D 가 실행 완료된다면 이렇게 될 것 이다.

image

  • 그리고, 새로운 프로세스 E가 들어오는데 이 프로세스는 60MB 의 용량을 필요해 한다.
  • 남은 공간은 20MB, 40MB 로 총 60MB 에 충족하지만, 연속되지 않아 들어갈 수 없는 문제가 발생한다

image

  • 이러한 문제를 외부 단편화 라고 한다.
  • 외부 단편화는 메모리 낭비, 큰 프로세스 적재 불가 등 메모리를 효율적으로 사용하지 못하는 현상이다.

📌 페이징을 통한 가상 메모리 관리


  • 앞서 본 바와 같이 스와핑과 연속 메모리 할당은, 외부 단편화 문제를 가지고 있다.
  • 또한, 물리 메모리 보다 큰 프로세스를 실행할 수 없는 문제점이 있다.
    • 4GB 컴퓨터 에서는, 4GB 이상의 프로세스를 실행 할 수 없다.
  • 이러한 문제를 해결하는 것이 가상 메모리 방식이다.

가상 메모리란?

  • 실행하고자 하는 프로그램의 일부만 메모리에 적재해, 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 만드는 메모리 관리 기법
  • 보조 기억 장치의 일부를 메모리처럼 사용하거나, 프로세스의 일부만 메모리에 적재함으로써 메모리를 실제 크기보다 더 크게 보이게 하는 기술이라고 할 수 있다.
  • 가상 메모리 기법으로 생성된 논리 주소 공간을 가상 주소 공간 이라고 한다.
  • 대표적인 가상 메모리 관리 기법에는 페이징과 세그멘테이션이 있다.

📌 페이징


  • 페이징은, 논리 주소 공간을 일정한 단위로 나눠, 할당하는 가상 메모리 관리 기법이다.
  • 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 나누고, 물리 주소 공간을 페이지와 동일한 크기의 프레임이라는 일정한 단위로 나눈다.
  • 이때, 프로세스를 구성하는 페이지는 여러개로 나눠지는데, 연속적이 아닌, 불연속적으로 배치될 수 있다.
    • 위에서 알아본 연속 메모리 할당과 매우 다른 부분이다.

image

  • 이런식으로 일정한 단위로 나눠 할당하게 되면, 외부 단편화가 발생하지 않게 된다.

📌 세그멘테이션


  • 세그멘테이션은, 일정한 단위로 나누지 않고, 가변적인 크기로 프로세스를 분할하는 방식이다.
  • 가변적인 크기를 세그먼트라고 한다.
  • 단, 세그먼테이션 기법을 사용하면 세그먼트의 크기가 일정하지 않아, 외부 단편화가 발생할 수 있다.

image

📌 페이징에서의 스와핑


  • 페이징 기법에서도 스와핑을 사용할 수 있다.
  • 연속 메모리 할당과 다른점은, 전체 프로세스가 스왑 인/아웃되는 것이 아니라, 나눠진 페이지 단위로 인/아웃 된다.
  • 이를 페이지 아웃, 페이지 인 이라고 한다.
  • 페이징 + 스와핑을 사용하면, 물리 메모리 용량보다 큰 프로세스를 실행할 수 있게 된다.
  • 가령, 5개의 페이지로 나눠진 프로세스가 존재한다고 가정하자.
  • 그 중, 일부 페이지는 페이지 아웃되어 스왑 영역에 저장되어 있다고 생각하자.
    • 스왑 영역은 보조 기억 장치로 운용된다.

image

  • 프로세스A 의 전체 페이지가 모두 메모리에 올라가 있지는 않지만, 만약 프로세스A의 페이지 4번이 실행에 필요하다면, 페이지 인시키고, 공간이 부족하다면 현재 실행중이지 않은 페이지 1번은 페이지 아웃시키며 효율적으로 운용할 수 있게 된다.
  • 현재 메모리에는, 30MB 만 올라가 있게 되어, 실제 프로세스A(50MB) 보다 메모리 공간을 덜 사용하는 것을 확인할 수 있다.
    • 즉, 물리 메모리 용량보다 더 큰 프로세스를 실행할 수 있음.
  • 하지만, 이렇게 불연속적으로 배치되어있고, 스왑영역에 배치되어 있다면, 정상적인 프로세스 실행을 위해, 다음 실행될 페이지의 위치를 찾기가 어렵게 되는 단점이 존재한다.
    • EX) 페이지 3번을 실행해야 하는데, 정확히 어디있는지 몰라, 전체 검색을 해야하는 오버헤드가 존재함.
  • 이를 위해서 페이지 테이블을 통해 각 페이지의 정보를 저장/관리 하게 된다.