CS/운영체제

메모리 관리 - 가상 메모리(Virtual Memory)

leah-only 2025. 1. 22. 16:38

OS가 메모리를 관리해야 하는 이유

각 프로세스는 자신만의 독립된 메모리 공간을 가지고, 다른 프로세스의 메모리 공간에 접근이 불가

오직 운영체제만 운영체제 메모리 영역과 사용자 메모리 영역의 접근에 영향을 받지 않음

→ 운영체제만 메모리를 관리할 수 있기 때문에 적절한 관리가 필요함

 

메모리 관리를 위한 전략

  • 가상 메모리 (Swapping, 페이징, 세그멘테이션)
  • 메모리 할당 (고정 분할 / 가변 분할)
  • 단편화 해결 (압축 / 메모리 재배치)

가상 메모리 (Virtual Memory)란?

실제 물리 메모리보다 더 큰 가상의 메모리 공간을 프로그램에게 제공하는 것

  • 가상 메모리의 목적 : 물리적 메모리의 제한을 극복하고, 더 많은 프로그램을 동시에 실행하기 위해 가상의 주소 공간을 제공
  • 작동 원리 : 프로그램이 필요한 부분만 메모리에 올려 사용하고, 나머지는 보조 기억 장치(하드 디스크 등) 에 저장하여 필요할 때 불러오는 방식으로 동작
  • 장점
    • 메모리 효율성 증가 : 물리적 메모리보다 더 많은 프로그램을 실행할 수 있다
    • 응답시간 단축 : 필요한 부분만 메모리에 올려 빠르게 접근할 수 있다
    • CPU 이용률 향상 : 여러 프로그램을 동시에 실행하여 CPU를 효율적으로 활용할 수 있다
  • 단점
    • 성능 저하 : 보조 기억 장치에서 데이터를 불러오는 과정에서 속도가 느려질 수 있다
  • 추가 
    • 메모리 공유 : 여러 프로세스가 동일한 메모리 영역을 공유하여 효율적인 자원 활용과 프로세스간 통신이 가능

주소 공간

가상 메모리를 구현하기 위한 한 가지 수단

 

특징

  • 추상화된 메모리 : 운영체제는 실제 물리적인 메모리를 여러 개의 가상적인 메모리 공간으로 나누어 관리
  • 프로그램의 모든 것 : 주소 공간에는 프로그램이 실행되는 데 필요한 모든 정보가 담겨있다. 
  • 다양한 영역 : 코드 영역, 데이터 영역, 스택 영역, 힙 영역 등이 있다.

왜 주소 공간이 필요할까? 

  • 여러 개의 프로그램이 동시에 실행될 수 있도록 한다. 
  • 프로그램이 다른 프로그램의 메모리 영역에 접근하는 것을 막아 시스템의 안정성을 높인다.
  • 프로그램의 편의성 : 프로그래머는 물리적인 메모리 주소를 직접 관리하지 않고, 주소 공간을 통해 간접적으로 메모리를 사용할 수 있다. 

가상 주소 & 물리 주소 

가상 주소 

  • 논리적 주소 
  • 프로세스가 메모리에 적재되기 위한 독자적인 주소 공간
  • 각 프로세스마다 독립적으로 할당되며, 0번지부터 시작

물리적 주소 

  • 실제 메모리 주소
  • 프로세스가 실제로 메모리에 적재되는 위치

가상 주소와 물리 주소 변환 

가상 주소는 메모리관리장치(MMU)에 의해 물리주소로 변환된다.

가상 메모리는 페이지 테이블로 관리된다.

이 때 속도 향상을 위해 TLB를 사용한다.

 

MMU (Memory Management Unit
가상 주소를 물리 주소로 변환하는 하드웨어 장치
페이지 테이블을 참조하여 변환 작업을 수행

 

페이지 테이블
가상 주소와 물리 주소를 매핑하는 정보를 담고 있는 테이블
각 프로세스마다 별도의 페이지 테이블이 존재
MMU는 페이지 테이블을 참조하여 주소 변환 작업을 수행

 

TLB (Translation Lookaside Buffer)
메모리와 CPU 사이에 있는 주소 변환을 위한 캐시 
즉 MMU가 자주 참조하는 페이지 테이블의 일부를 캐시하는 작은 메모리 
TLB를 통해 페이지 테이블 접근 횟수를 줄여 메모리 접근 속도를 향상시킴 

스와핑 (Swapping)

메모리 부족 상황에서 가상 메모리와 실제 메모리 사이에서 데이터를 이동시키는 과정

즉, 현재 사용하지 않는 데이터를 보조 기억 장치(HDD 등)로 옮기고, 필요할 때 다시 메모리로 가져오는 과정

 

스와핑 과정

  1. 페이지 폴트 (page fault) 발생 : 프로그램이 실행되는 도중에 메모리에 없는 데이터에 접근하려고 하면 페이지 폴트가 발생
  2. 스와핑 실행 : 운영체제는 메모리에 여유 공간을 만들기 위해 사용하지 않은 페이지를 선택하여 보조기억장치(HDD)로 옮김 (swap-out)
  3. 필요한 페이지 메모리로 이동 : 페이지 폴트가 발생한 페이지를 보조기억장치(HDD)에서 메모리로 가져옴 (swap-in)

장점

  • 메모리 부족 해결 : 사용할 수 있는 메모리 용량은 제한되어 있기 때문에 스와핑을 통해 사용하지 않는 데이터를 임시로 하드 디스크에 저장하여 메모리 공간을 확보하고, 더 많은 프로그램을 동시에 실행할 수 있도록 한다. 
  • 메모리 효율성 증가 : 물리적인 메모리 용량보다 더 많은 프로그램을 실행할 수 있다. 
  • 프로그램 실행 유지 : 메모리 부족으로 프로그램이 강제 종료되는 것을 방지 

단점

  • 성능 저하 : 보조기억장치(HDD)는 메모리보다 훨씬 느리기 때문에 스와핑이 자주 발생하면 시스템 성능이 저하된다.

페이지 폴트 (page fault)

프로세스가 참조하려는 데이터가 현재 메모리에 존재하지 않아 발생하는 오류

즉,  프로그램이 실행되는 도중에 필요한 데이터를 찾으려 했지만, 해당 데이터가 메모리에 없어서 발생하는 일종의 예외 상황

 

페이지 폴트 발생 및 스와핑 과정

  1. 페이지 폴트 (page fault) 발생 : 프로그램이 실행되는 도중에 메모리에 없는 데이터에 접근 시, OS에 페이지 폴트 알림
  2. 운영체제 개입 : 인터럽트를 받고, 페이지 폴트를 처리하기 위한 루틴을 실행
  3. 물리 메모리에 비어있는 메모리 프레임(페이지)를 찾는다. 만약 모든 메모리 프레임이 사용 중이라면, 스와핑이 발생
  4. 디스크에서 페이지 읽어오기 : 비어 있는 프레임에 해당 페이지를 로드하고 페이지 테이블을 업데이트하며, 변경된 물리 주소를 반영
  5. 프로그램 재시작 : 중단되었던 CPU를 다시 시작
페이지(page)
가상 메모리를 사용하는 최소 크기의 단위

 

프레임(frame)
실제 메모리를 사용하는 최소 크기의 단위

스레싱 (Thrashing)

가상 메모리 시스템에서 발생하는 심각한 성능 저하 현상

메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생

즉, 메모리가 부족하면 페이지 폴트가 발생하고 CPU 이용률이 낮아져 운영체제는 가용성을 더 높이기 위해 많은 프로세스를 메모리에 올림. 이 악순환이 반복되면 스레싱이 발생

 

스레싱 해결 방법

  • 물리 메모리 증설
  • 워킹 세트 (working set)
    • 프로세스가 자주 참조하는 페이지 집합을 미리 메모리에 로드
    • 탐색 비용 줄고 스와핑 줄어듦
  • PFF (Page Fault Frequency)
    • 페이지 폴트가 발생하는 빈도를 측정하여, 프로세스에 할당되는 메모리 크리를 조절하는 방법
    • 상한선에 도달 시 프레임을 늘리고, 하한선에 도달 시 프레임을 줄인

질문 List > 

Q1. 메모리 가상화가 생긴 이유는? 

물리적 메모리의 제한을 극복하고, 프로세스들이 독립적인 메모리 공간을 사용할 수 있도록 하기 위해 등장

 

Q2. 가상 메모리 계층 구조에 대해 설명해 주세요.

가상 메모리 공간과 물리 메모리로 나눌 수 있다.

가상 메모리 공간은 프로세스에게 할당되는 논리적 메모리 공간을 뜻하고 프로세스는 마치 자신만의 메모리를 독점적으로 사용하는 것처럼 프로그램을 작성할 수 있다. 

물리 메모리는 실제 컴퓨터에 존재하는 메모리 공간이다.

 

가상 메모리와 물리 메모리 사이의 변환은 MMU에 의해 이루어진다. MMU는 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환하는 역할을 수행한다. 

 

Q. TLB가 나오게 된 배경은 무엇이고, TLB 개념에 대해 설명해주세요.

Paging 기법은 Paging Table을 기반으로 실제 메모리에 접근하기 때문에 메모리 낭비가 발생하고, 느리다.

이를 좀 더 빠르게 만들기 위해 TLB가 나오게 되었다.

TLB는 MMU가 자주 참조하는 페이지 테이블의 일부를 캐시하는 작은 메모리 
TLB를 통해 페이지 테이블 접근 횟수를 줄여 메모리 접근 속도를 향상시킴 

 

로드맵 : https://github.com/devSquad-study/2023-CS-Study
질문 출처 : https://eunsun-zizone-zzang.tistory.com/48

'CS > 운영체제' 카테고리의 다른 글

메모리 할당 - 페이징(Paging) & Paged Segmentation  (0) 2025.02.03
메모리 할당  (0) 2025.01.23
CPU 스케줄링  (0) 2025.01.21
스레드와 멀티스레드  (0) 2025.01.16
멀티프로세스  (0) 2025.01.16