본문으로 건너뛰기

SSAFY CS 스터디: 이취컴 Chapter 3-5 정리

Chapter 03 운영체제 - 5 가상 메모리

p.205~222


물리 주소와 논리 주소

  • 물리 주소: 메모리의 하드웨어 상 실제 주소 체계
  • 논리 주소: 프로세스마다 부여되는 0번지부터 시작하는 체계

CPU와 프로세스는 물리 주소가 아닌 논리 주소를 사용한다.

MMU

메모리 관리 장치 (Memory Management Unit)
CPU와 메모리 사이에 위치하여 논리 주소를 물리 주소로 변환


스와핑과 연속 메모리 할당

스와핑

하단의 '대상'에 해당하는 프로세스를 보조기억장치의 스왑 영역으로 쫓아내고,
확보된 메모리에 다른 프로세스를 적재하여 실행하는 메모리 관리 기법

대상: 메모리에 적재된 프로세스 중 현재 실행중이 아닌 프로세스

  1. 입출력 작업 중인, 대기 상태의 프로세스
  2. 오랫동안 사용되지 않은 프로세스

스왑 아웃: 메모리의 프로세스가 스왑 영역으로 이동하는 것
스왑 인: 스왑 영역의 프로세스가 메모리로 이동하는 것

※다시 스왑 인 될땐 이전의 물리 주소와는 다른 주소에 적재될 수 있다.

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

  • 연속 메모리 할당: 프로세스에 연속적인 메모리 공간을 할당하는 방식
    • ex. 프로세스 A 다음에 프로세스 B 할당

👉️ 프로세스의 실행과 종료가 반복되며 메모리 사이사이 빈 공간 발생 -> 외부 단편화


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

스와핑과 연속 메모리 할당의 2가지 문제점

  1. 외부 단편화
  2. 물리 메모리보다 큰 프로세스 실행 불가
    • 메모리가 4GB짜리면 이것보다 큰 프로그램 실행 불가...

가상 메모리

실행하려는 프로그램의 일부만 메모리에 적재해, 실제 메모리보다 큰 프로세스도 실행할 수 있도록 하는 메모리 관리 기법
👉️ 보조기억장치 일부를 메모리처럼 사용하거나 프로세스의 일부만 메모리에 적재한다.
ex. 페이징, 세그멘테이션

노트

가상 메모리 체계의 논리 주소 공간을 가상 주소 공간이라고 한다.

페이징

프로세스의 논리 주소 공간을 페이지로 나누고, 물리 주소 공간을 동일 크기의 프레임으로 나누어
페이지를 프레임에 할당하는 가상 메모리 관리 기법. (페이지는 불연속적으로 배치될 수 있음)

외부 단편화가 발생하지 않으며, 세그멘테이션보다 더 범용적으로 사용된다.

  • 페이지 아웃: 페이지가 메모리에서 스왑 영역으로 이동하는 것
  • 페이지 인: 스왑 영역의 페이지가 메모리로 이동하는 것

세그멘테이션

프로세스를 가변 크기의 세그먼트로 분할하여 관리하는 방식. (코드, 데이터 영역 등 유의미한 논리 단위로 분할)
👉️ 외부 단편화 발생 가능

페이지 테이블

프로세스의 페이지 번호에 대응하는 프레임 번호가 저장된 테이블 프로세스마다 각자의 테이블을 가지고 있다.

페이지 테이블 엔트리(PTE)

페이지 테이블을 구성하는 각각의 행.
👉️ 페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 참조 비트, 수정 비트로 구성

  1. 유효 비트: 해당 페이지에 접근 가능한지 여부 (1: 메모리 / 0: 스왑 영역)
    • 페이지 폴트: CPU가 유효 비트 0인 페이지에 접근하려 할 때 발생하는 예외(인터럽트)
CPU의 페이지 폴트 처리 과정
  1. 기존 작업 백업
  2. 페이지 폴트 루틴 실행: 대상 페이지를 메모리로 가져오고 유효 비트를 1로 변경
  3. 메모리에 적재된 페이지를 실행
  1. 보호 비트: 페이지 접근 권한을 제한하여 페이지를 보호하려는 목적의 비트 (rwx 순)
  2. 참조 비트: 적재 이후 CPU가 페이지에 접근하여 읽거나 쓴 적 있는지의 여부 (있으면 1, 없으면 0)
  3. 수정 비트: 페이지에 데이터를 쓴 적 있는지의 여부 (= 더티 비트)
    • 1이면 수정된 적 있다는 뜻이므로, 페이지를 메모리에서 삭제할 때 보조기억장치에 쓰기 작업 필요

내부 단편화

페이지의 크기보다 작은 크기로 분할되어 발생하는 메모리 낭비 현상
ex. 페이지 크기가 10KB 일 때, 107KB 프로세스를 페이징하면 마지막 페이지에 3KB의 낭비 발생

페이지 테이블 베이스 레지스터 (PTBR)

프로세스의 페이지 테이블이 적재된 메모리 주소를 저장하는 레지스터
각 PCB에 기록되며, 다른 프로세스로 문맥 교환될 시 변경된다.

👉️ 페이지 테이블은 이처럼 메모리에 '적재될 수 있다'.

응 적재 안할 수도 있어

설마 모든 프로세스의 페이지 테이블을 적재할거임? 그건 비효율적이라 OS는 이를 지양한다.

노트

1. 메모리 접근 횟수

'메모리 상의 페이지 테이블 접근 -> 메모리 상의 프레임 접근' 이라는 2배의 접근 시간이 발생하므로,
TLB(Translation Look-aside Buffer)라는 캐시 메모리를 사용한다.

✨ TLB

페이지 테이블의 캐시. 참조 지역성 원리에 기반해 자주 사용할 법한 페이지 위주로 페이지 테이블 일부 저장.
👉️ TLB 히트 시 메모리 상의 페이지 테이블 접근 필요X -> 메모리 접근이 1회로 줄어든다.

2. 메모리 용량

한 프로세스가 클수록 페이지 테이블도 커지기에 전체를 다 메모리에 두는 것은 메모리 낭비이다.

✨ 계층적 페이징 (다단계 페이지 테이블)
  1. 페이지 테이블을 여러 페이지로 나눈다.
  2. CPU와 가장 가까이 위치한 페이지 테이블을 Outer 페이지 테이블, 그 외를 Inner 페이지 테이블이라고 한다.
  3. Outer 페이지 테이블의 각 엔트리는 Inner 페이지 테이블의 주소를 가리킨다.

Outer 페이지 테이블만 메모리에 적재되고, Inner 페이지 테이블은 필요할 때마다 스왑 영역에서 메모리로 가져온다.

페이징 주소 체계

페이징의 논리 주소는 <페이지 번호, 오프셋>으로 구성된다.

  • 페이지 번호: 몇 번째 페이지에 접근해야 하는지
  • 오프셋: 접근하려는 주소가 페이지(프레임) 시작 주소로부터 얼마나 떨어져 있는지

페이지 교체 알고리즘

  • 요구 페이징: 모든 페이지를 적재하지 않고, 필요한(요구되는) 페이지만 메모리에 적재하는 기법
  • 순수 요구 페이징: 아무 페이지도 적재하지 않은 상태에서 프로세스를 실행
    • 첫 실행부터 페이지 폴트 발생, 점차 빈도 줄어듬
요구 페이징에서의 처리 과정
  1. CPU가 페이지 접근 명령어 실행
  2. 유효 비트가 1일 경우, 프레임에 접근
  3. 유효 비트가 0일 경우, 페이지 폴트 발생
  4. 페이지 폴트 처리 루틴 실행: 페이지를 적재하고 유효 비트를 1로 수정
  5. 다시 1로 반복
  • 페이지 교체 알고리즘: 메모리에 적재된 페이지 중 스왑 아웃할 페이지를 선택하는 알고리즘
    • 알고리즘에 따라 페이지 폴트 빈도가 달라지므로, 컴퓨터 전체 성능과 직결된다.
    • 페이지 폴트시 보조기억장치에 접근하므로 성능 저하가 크다 ㅜ
    • 스래싱: 프로세스 실행보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제

FIFO

메모리에 먼저 적재된 페이지를 먼저 스왑 아웃하는 방식
💥 초기에 적재해 줄곧 사용하던 페이지가 스왑 아웃될 수 있음.

최적 (Optimal)

앞으로 가장 적게 '사용할' 페이지를 스왑 아웃하는 방식
💥 예측이 어려워 실제로 구현하기 어려움.

LRU

가장 적게 '사용한' 페이지를 스왑 아웃하는 방식
👉️ 보편적으로 사용되는 페이지 교체 알고리즘의 원형.

페이지 폴트의 종류

보조기억장치 입출력 작업이 필요하냐 아니냐에 따라 다음과 같이 나뉜다.

  • 메이저 페이지 폴트: 스왑 영역에서 페이지를 가져와야 하는 경우
  • 마이너 페이지 폴트: 페이지가 메모리에 있지만 페이지 테이블에 반영되지 않은 경우