6-3. 가상 메모리 소개

1. 가상 메모리의 등장 배경

운영체제 설계에서 메모리 관리는 매우 중요한 부분입니다. 초기 운영체제는 물리 메모리를 직접 관리하는 단순한 방식을 사용했습니다. 하지만 여러 프로그램이 동시에 실행되면서, 각 프로그램이 사용하는 메모리 공간을 효율적으로 관리해야 할 필요성이 생겼습니다. 단순 메모리 할당 방식은 다음과 같은 문제점을 가지고 있었습니다.

  • 메모리 단편화: 프로그램 실행과 종료가 반복되면서 물리 메모리에 작은 틈새(단편)들이 생겨, 큰 메모리 공간을 할당하기 어려워집니다.
  • 주소 공간 충돌: 여러 프로그램이 물리 메모리의 특정 영역을 공유하면서, 주소 공간이 충돌하여 프로그램 실행에 오류가 발생할 수 있습니다.
  • 메모리 부족: 물리 메모리의 크기가 제한적이므로, 실행하려는 프로그램의 크기가 물리 메모리보다 클 경우 실행이 불가능합니다.

이러한 문제점을 해결하기 위해 가상 메모리(Virtual Memory)라는 개념이 도입되었습니다. 가상 메모리는 각 프로세스에게 물리 메모리보다 훨씬 더 큰 메모리 공간을 제공하는 기술입니다. 프로세스는 마치 자신에게 모든 메모리가 할당된 것처럼 생각하고 실행될 수 있으며, 실제 물리 메모리 관리는 운영체제가 담당합니다.

2. 가상 메모리의 개념

가상 메모리는 프로세스에게 물리 메모리보다 더 큰 주소 공간(가상 주소 공간)을 제공하여, 마치 모든 메모리를 독점하는 것처럼 사용할 수 있게 해줍니다. 실제 프로그램의 코드, 데이터는 물리 메모리 또는 보조 기억 장치(예: 하드 디스크)에 저장됩니다. 운영체제는 필요한 부분만 물리 메모리에 적재하고, 나머지 부분은 보조 기억 장치에 저장해두는 방식을 사용합니다.

가상 메모리 구조 설명 뒤

가상 메모리 시스템은 크게 다음과 같은 구성 요소로 이루어져 있습니다.

  • 가상 주소 공간(Virtual Address Space): 각 프로세스에게 할당되는 논리적인 주소 공간. 프로세스는 이 공간을 사용하여 메모리에 접근합니다.
  • 물리 주소 공간(Physical Address Space): 실제 물리 메모리의 주소 공간.
  • MMU(Memory Management Unit): CPU 내부에 있는 하드웨어 장치로, 가상 주소를 물리 주소로 변환(Address Translation)하는 역할을 담당합니다.
  • 페이징(Paging) 또는 세그멘테이션(Segmentation): 가상 주소 공간을 관리하고 물리 메모리에 매핑하는 방식.

1) 주소 변환 (Address Translation)

가상 메모리의 핵심 기능은 주소 변환입니다. 프로세스가 메모리 접근을 시도할 때, MMU는 가상 주소를 물리 주소로 변환합니다. 이 과정에서 운영체제는 페이지 테이블(Paging) 또는 세그먼트 테이블(Segmentation)과 같은 자료 구조를 사용하여 주소 변환 정보를 관리합니다. 주소 변환 과정을 통해 프로세스는 자신에게 할당된 가상 주소 공간 내에서 메모리를 사용하고, 운영체제는 이를 효율적으로 물리 메모리에 매핑합니다.

2) 스와핑 (Swapping)

가상 메모리가 물리 메모리보다 클 경우, 일부 데이터를 보조 기억 장치로 옮겨두는 작업을 수행합니다. 이를 스와핑(Swapping)이라고 합니다. 스와핑은 다음과 같은 상황에서 발생합니다.

  • 페이지 부재(Page Fault): 프로세스가 접근하려는 메모리 페이지가 물리 메모리에 없을 경우, 운영체제는 해당 페이지를 디스크에서 읽어와 물리 메모리에 적재합니다.
  • 메모리 부족: 물리 메모리가 부족할 경우, 운영체제는 사용하지 않는 페이지를 디스크로 내보내고(Swap Out), 필요한 페이지를 디스크에서 가져옵니다(Swap In).

3. 가상 메모리의 장점

가상 메모리는 다음과 같은 장점을 제공합니다.

  • 더 큰 주소 공간 제공: 물리 메모리의 크기에 제약 없이, 프로세스에게 더 큰 주소 공간을 제공하여 더 많은 데이터를 처리할 수 있습니다.
  • 메모리 효율성 향상: 실제로 사용되는 부분만 물리 메모리에 적재하여, 메모리 사용량을 효율적으로 관리합니다.
  • 프로세스 격리: 각 프로세스는 독립적인 가상 주소 공간을 가지므로, 서로의 메모리 영역에 접근할 수 없어 안정성이 향상됩니다.
  • 프로그래밍 단순화: 개발자는 물리 메모리 크기를 고려하지 않고 프로그램을 작성할 수 있습니다.

4. 페이징과 세그멘테이션

가상 메모리를 구현하는 주요 방식은 페이징과 세그멘테이션입니다. 두 방식은 가상 주소를 물리 주소로 변환하는 방법과 메모리 관리 방식에서 차이를 보입니다.

1) 페이징 (Paging)

페이징 방식은 가상 메모리와 물리 메모리를 고정 크기(Page Size)의 블록인 페이지(Page)로 분할하여 관리합니다.

  • 가상 주소: 가상 주소는 페이지 번호와 페이지 내 오프셋으로 구성됩니다.
  • 물리 주소: 물리 주소는 페이지 프레임 번호와 페이지 내 오프셋으로 구성됩니다. (페이지 프레임은 물리 메모리의 페이지에 해당)
  • 페이지 테이블: 가상 페이지 번호와 물리 페이지 프레임 번호를 매핑하는 자료 구조입니다. MMU는 페이지 테이블을 사용하여 가상 주소를 물리 주소로 변환합니다.
  • 장점: 외부 단편화가 발생하지 않아 메모리 관리가 용이하고, 프로세스 간 메모리 공유가 간단합니다.
  • 단점: 내부 단편화(페이지 크기보다 작은 메모리를 할당받는 경우)가 발생할 수 있습니다.

페이징 방식 설명 뒤

2) 세그멘테이션 (Segmentation)

세그멘테이션 방식은 프로그램을 논리적인 단위(세그먼트, Segment)로 분할하여 관리합니다. 각 세그먼트는 코드, 데이터, 스택 등 프로그램의 특정 부분을 나타냅니다.

  • 가상 주소: 세그먼트 번호와 오프셋으로 구성됩니다.
  • 세그먼트 테이블: 각 세그먼트의 시작 주소와 크기를 저장하는 자료 구조입니다.
  • 장점: 프로그램의 논리적인 구조를 반영하여, 코드 공유와 메모리 보호에 유연성을 제공합니다.
  • 단점: 외부 단편화가 발생할 수 있습니다.

세그멘테이션 방식 설명 뒤

5. 페이징과 세그멘테이션의 비교

특징 페이징 세그멘테이션
메모리 분할 고정 크기 페이지 가변 크기 세그먼트
주소 변환 페이지 테이블 세그먼트 테이블
단편화 내부 단편화 외부 단편화
메모리 공유 용이 유연성 제공
논리적 구조 반영 X 반영 O
장점 단순한 메모리 관리, 메모리 공유 용이 프로그램의 논리적 구조 반영, 메모리 보호 우수
단점 내부 단편화 발생 외부 단편화 발생

1) 페이징과 세그멘테이션의 결합

최근 운영체제는 페이징과 세그멘테이션을 결합한 방식을 사용합니다. 세그멘테이션을 통해 프로그램의 논리적 구조를 유지하면서, 페이징을 통해 메모리 관리를 효율적으로 수행합니다. 이러한 방식을 사용하면 세그먼트 단위로 메모리 보호 및 공유를 수행하고, 페이지 단위로 물리 메모리 할당 및 스와핑을 관리할 수 있습니다.

6. 가상 메모리 관리의 실제

가상 메모리는 운영체제의 핵심 기능 중 하나이며, 여러 기술과 기법이 함께 사용됩니다.

1) 페이지 교체 알고리즘

페이지 부재가 발생하면 운영체제는 물리 메모리에 페이지를 적재해야 합니다. 이때, 메모리가 가득 차 있다면, 기존 페이지 중 하나를 선택하여 디스크로 내보내야 합니다. 이러한 페이지를 선택하는 알고리즘을 페이지 교체 알고리즘이라고 합니다. 대표적인 페이지 교체 알고리즘으로는 FIFO(First-In, First-Out), LRU(Least Recently Used), OPT(Optimal) 등이 있습니다.

2) 스와핑과 성능

스와핑은 가상 메모리의 핵심 기능이지만, 디스크 I/O를 발생시키므로 시스템 성능에 영향을 줄 수 있습니다. 과도한 스와핑은 시스템의 반응 속도를 느리게 만들 수 있으며, 이를 스래싱(Thrashing)이라고 합니다. 스래싱을 방지하기 위해 운영체제는 메모리 사용량을 모니터링하고, 필요에 따라 프로세스의 메모리 사용량을 조절합니다.

3) 메모리 할당 및 관리

가상 메모리 시스템은 프로세스에게 메모리를 할당하고 관리하는 역할을 합니다. 운영체제는 페이지 테이블, 세그먼트 테이블, 메모리 맵과 같은 자료 구조를 사용하여 메모리 할당 정보를 관리합니다. 또한, 메모리 할당 요청에 따라 물리 메모리를 할당하고, 필요에 따라 메모리 회수 작업을 수행합니다.

7. 결론

가상 메모리는 현대 운영체제의 핵심 기술이며, 메모리 관리의 효율성을 높이고, 여러 프로세스 간의 자원 공유를 가능하게 합니다. 페이징과 세그멘테이션은 가상 메모리를 구현하는 주요 방식이며, 각 방식의 장단점을 고려하여 운영체제가 설계됩니다. 가상 메모리 기술을 이해하는 것은 운영체제, 시스템 프로그래밍, 컴퓨터 아키텍처 분야에서 매우 중요합니다.

비슷한 글 추천

Comments (0)

No comments yet. Be the first to comment!