OS

[쉽게 배우는 운영체제] 9. 가상 메모리 관리

noahkim_ 2024. 12. 13. 02:20

조성호 님의 "쉽게 배우는 운영체제" 책을 정리한 포스팅 입니다

 

1. 가져오기 정책

  • 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올지 결정하는 정책
구분 요구 페이징 (Demand Paging)
미리 가져오기 (Pre-paging / Prefetching)
정의 페이지가 실제로 참조될 때 메모리로 로드
앞으로 필요할 것으로 예상되는 페이지를 미리 로드
로딩 시점 접근 시점 접근 이전
페이지 폴트 처음 접근 시 발생 줄어들 수 있음
성능 영향 초기 접근 시 지연 발생 적중 시 성능 향상 가능
지역성 활용 시간/공간 지역성에 의존
지역성을 예측하여 선제적 로드

 

지역성

  • 프로그램이 특정 메모리 영역에 집중적으로 접근하는 성질
지역성 유형 설명
공간 지역성
현재 위치에서 가까운 데이터에 접근할 확률이 높음
시간 지역성
최근 접근한 데이터에 다시 접근할 확률이 높음
순차적 지역성 데이터가 순서대로 접근되는 경향이 있음

 

 

2. 페이지 부재

  • 프로세스가 접근한 페이지가 현재 물리 메모리에 존재하지 않는 상황
  • 유효비트가 0일때 페이지 부재를 의미함

 

페이지 교체 알고리즘

  • 물리 메모리에 빈 프레임이 없을 때, 어떤 페이지를 내보낼지 결정하는 알고리즘
  • ✅ 페이지 부재 횟수, 페이지 성공 횟수에 따라 성능을 평가함
알고리즘 설명 특징
FIFO 가장 먼저 들어온 페이지를 제거함
구현 단순
OPT
가장 나중에 다시 사용될 페이지를 제거함
이론적 최적. 실제로는 구현 불가
LRU
가장 오랫동안 사용되지 않은 페이지 제거
지역성 반영. 구현 비용 큼
LFU 가장 사용 횟수가 적은 페이지 제거
과거 빈도 기반
NUR 가장 최근에 사용되지 않은 페이지 제거 Access Bit 활용

 

3. 스레싱과 프레임 할당

스레싱

  • 프로세스의 작업 집합을 유지할 만큼의 프레임이 부족해서 페이지 부재가 과도하게 발생하는 상황
  • ✅ 동시에 실행하는 프로세스가 너무 많음
  • ✅ 각 프로세스에 할당된 프레임 수가 너무 적음
  • ➡️ CPU가 실제 작업은 거의 못하고, 페이지 교체만 반복하는 상태

 

프레임 할당

  • 남은 물리 메모리 프레임을 각 프로세스에 어떻게 나누어 줄 것인가에 대한 정책
구분 정적 할당 동적 할당
정의 실행 시작 시 프레임 수 고정
실행 중 필요에 따라 프레임 조정
메모리 활용도 비효율 효율적
스레싱 대응 어려움 (발생 가능) 방지 가능
구현 복잡도 단순 복잡

 

표) 정적 할당 종류

더보기
할당 방식 설명 특징
균등 할당 모든 프로세스에 동일한 프레임 수 할당 단순하지만 비효율 가능
비례 할당 프로세스 크기에 비례해서 할당 균등보다 합리적

 

표) 동적 할당 종류

더보기
할당 방식 설명 기준
작업 모델 집합 최근 일정 시간동안 사용된 페이지 집합의 크기를 기준으로 최소 프레임 유지 지역성 기반
페이지 부재 빈도 페이지 부재율을 기준으로 프레임 조절 Fault Rate 기반

 

프레임 교체 범위

구분 전역 교체 지역 교체
대상 전체 프로세스의 모든 프레임 현재 실행 중인 프로세스의 프레임
영향 범위 다른 프로세스에 영향 있음 다른 프로세스에 영향 없음
장점 메모리 활용 유연 프로세스 간 간섭 없음
단점 스레싱 발생 (특정 프로세스가 프레임을 빼앗길 수 있음) 비효율 발생 가능

 

4. 프레임 공유

  • 같은 내용을 사용하는 프로세스끼리 물리 프레임을 공유하는 것
  • ✅ 프로세스의 code 부분은 공유 가능 (읽기전용)
  • ✅ 프로세스의 data 부분은 공유 불가 (내용이 바뀌기 때문)
  • ➡️같은 프로세스가 여러개 올라온다면, 프레임을 공유해서 사용하여 효율적으로 쓸 수 있음

 

쓰기 시점 복사

  • 데이터의 변화가 있을 때까지 복사를 미룸
  • 초기에는 코드 영역을 포함한 모든 영역을 공유
  • 실제로 프로세스가 데이터를 수정하려 할 때, 그때 데이터 복사를 진행함