운영체제(5) - 가상 메모리

2025. 12. 20. 17:49·CS/운영체제

물리 주소와 논리 주소

  • CPU와 프로세스는 메모리의 하드웨어 상 실제 주소인 물리 주소 이용 X
  • 논리 주소 사용: 프로세스마다 부여되는 0번지부터 시작되는 주소 체계
  • 실제로 정보가 저장되어 있는 하드웨어 상의 메모리와 상호작용 하기 위해서는 반드시 논리 주소와 물리 주소 간의 변환이 필요
  • 메모리 관리 장치(MMU): CPU와 메모리 사이에 위치, CPU가 이해하는 논리 주소를 메모리가 이해하는 물리 주소로 변환

스와핑과 연속 메모리 할당

스와핑

  • 메모리에 적재된 프로세스들 중에서는 대기 상태가 되었거나 오랫동안 사용하지 않은 프로세스가 있을 수 있다
  • 스와핑: 이러한 프로세스들을 임시로 스왑 영역이라는 보조기억장치의 일부인 영역으로 쫓아내고 프로세스를 쫓아낸 자리에 생긴 메모리 상의 빈 공간에 다른 프로세스를 적재하여 실행하는 메모리 관리 방식
  • 스왑 아웃: 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
  • 스왑 인: 스왑 영역에 있는 프로세스가 다시 메모리로 옮겨오는 것

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

  • 연속 메모리 할당: 프로세스에 연속적인 메모리 공간 할당

  • 연속 메모리 할당은 외부 단편화 문제가 있다
  • 프로세스의 실행과 종료를 반복하며 메모리 사이 사이에 빈 공간이 생김

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

  • 스와핑, 연속 메모리 할당 문제
    • 외부 단편화
    • 물리 메모리보다 큰 프로세스를 실행할 수 없음
  • 가상 메모리: 실행하고자 하는 프로그램의 일부만 메모리에 적재해, 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 만드는 메모리 관리 기법

페이징

  • 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 나누고, 물리 주소 공간을 페이지와 동일한 크기의 프레임이라는 일정한 단위로 나눈 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법
    • 프로세스를 구성하는 페이지는 물리 메모리 내에 불연속적으로 배치될 수 있음

  • 페이지라는 일정한 크기로 잘린 프로세스들을 메모리에 불연속적으로 할당할 수 있다면 연속 메모리 할당처럼 프로세스 바깥에 빈 공간이 생길 수 없음
  • 스와핑 사용 가능
    • 프로세스 전체가 스왑 아웃/인 되는 것이 아니라 페이지 단위로 페이지 아웃/인 됨
  • 프로세스를 실행하기 위해 전체 프로세스가 메모리에 적재될 필요 없음

  • 물리 메모리 내에 페이지가 불연속적으로 배치되어 있다면, CPU 입장에서는 다음으로 실행할 페이지의 위치를 찾기 어렵다

세그멘테이션

  • 프로세스를 일정한 크기의 페이지 단위가 아닌 가변적인 크기의 세그먼트 단위로 분할
  • 세그먼트의 크기가 일정하지 않기 때문에 외부 단편화가 발생할 수 있음

페이지 테이블

  • 프로세스의 페이지와 실제로 적재된 프레임을 짝지어주는 정보
  • 프로세스마다 각자 페이지 테이블 정보를 갖고 있으므로, CPU가 서로 다른 프로세스를 실행할 때는 각 프로세스의 페이지 테이블을 참조하여 메모리에 접근

  • 페이지 엔트리: 페이지 테이블을 구성하고 있는 각각의 행들

유효 비트

  • 해당 페이지에 접근이 가능한지 여부
  • `1`: 페이지가 메모리에 적재되어 있음, `0`: 페이지가 메모리에 적재되어 있지 않음
  • CPU가 유효 비트가 `0`인 페이지에 접근하려고 하면 페이지 폴트라는 예외 발생
  • 페이지 폴트 처리 과정
  1. 기존 작업 내용 백업
  2. 페이지 폴트 처리 루틴 실행. 페이지 폴트 처리 루틴은 원하는 페이지를 메모리로 가져와 유효 비트를 1로 변경해주는 작업
  3. 페이즈 폴트 처리 루틴 실행 후, 메모리에 적재된 페이지 실행

보호 비트

  • 페이지 보호 기능을 위해 존재
  • `r`(읽기), `w`(쓰기), `x`(실행)의 조합으로 페이지에 접근할 권한 제한
  • 예) 보호 비트가 `100` 으로 설정된 페이지는 읽기만 가능

참조 비트

  • CPU가 해당 페이지에 접근한 적이 있는지의 여부를 나타냄
  • `1`: 페이지를 적재한 이후에 CPU가 읽거나 쓴 페이지
  • `0`: 적재한 이후에 한 번도 읽거나 쓴 적이 없는 페이지

수정 비트 (더티 비트)

  • 해당 페이지에 데이터를 쓴 적이 있는지 여부
  • `1`: 변경된 적이 있는 페이지
  • `0`: 변경된 적이 없는 페이지 (한 번도 접근한 적 없거나 읽기만 했던 페이지)
  • 수정 비트가 1일 경우, 페이지를 메모리에서 삭제해야 할 때 페이지의 수정 내역을 보조기억장치에도 반영해 두어야 하므로 보조기억장치에 대한 쓰기 작업 필요

 

  • 페이징은 내부 단편화 발생 가능
  • 모든 프로세스가 페이지 크기에 딱 맞게 잘리는 것이 아님
  • 예) 페이지 크기는 10KB인데 프로세스의 크기가 107KB인 경우 마지막 페이지는 3KB만큼 남음

  • 어떤 프로세스를 실행하려면 이 프로세스의 페이지 테이블이 메모리에 적재된 위치를 알아야 함
  • 페이지 테이블 베이스 레지스터(PTBR): 특정 프로세스의 페이지 테이블이 적재된 메모리 상의 위치를 가리키는 레지스터
  • PTBR은 프로세스마다 가지는 정보이므로 각 PCB에 기록되며, 다른 프로세스로의 문맥 교환이 발생할 때 변경
  • 모든 프로세스의 페이지 테이블을 메모리에 두는 것은 1️⃣메모리 접근 횟수가 많아지고 2️⃣메모리 용량을 많이 차지함

메모리 접근 횟수

  • 모든 프로세스의 페이지 테이블이 메모리에 적재되어 있을 경우, CPU는 페이지 테이블에 접근하기 위해 한 번, 실제 프레임에 접근하기 위해 한 번, 총 두 번 메모리에 접근해야 한다
  • 이를 해결하기 위해 TLB라는 페이지 테이블의 캐시 메모리가 사용됨
    • TLB: 참조 지역성의 원리로 자주 사용할 법한 페이지 위주로 페이지 테이블의 일부 내용 저장
  • TLB 히트: CPU가 접근하려는 논리 주소의 페이지 번호가 TLB에 있을 경우, TLB는 CPU에게 해당 페이지 번호가 적재된 프레임 번호를 알려줌 → 한번만 메모리에 접근하면 됨
  • TLB 미스: 페이지 번호가 TLB에 없는 경우 메모리 내의 페이지 테이블에 접근해야 함

메모리 용량

  • 페이지 테이블의 크기가 생각보다 작지 않음
  • 계층적 페이징: 페이지 테이블을 페이징하는 방식
  • 프로세스의 페이지 테이블을 여러 개의 페이지로 자르고, CPU와 가까이 위치한 바깥 쪽에 페이지 테이블(Outer 페이지 테이블)을 하나 더 두어 잘린 페이지 테이블의 페이즈들을 가리킴
  • Outer 페이지 테이블만 메모리에 유지하면 잘린 페이지 테이블의 일부가 보조기억장치에 있더라도 Outer 페이지 테이블을 통해 언제든 접근 가능

페이징 주소 체계

  • 하나의 페이지 내에는 여러 주소가 포함되어 있기 때문에 페이징 시스템의 논리 주소는 기본적으로 `<페이지 번호, 변위>` 형태로 이루어져 있음
  • 페이지 번호: 몇 번째 페이지 번호에 접근할지
  • 변위: 접근하려는 주소가 페이지(프레임) 시작 번지로부터 얼마나 떨어져 있는지
  • 논리 주소 `<페이지 번호, 변위>` ⇒ 물리 주소 `<프레임 번호, 변위>` 로 변환

  • 예) CPU가 논리 주소 <5, 2>에 접근하면 5번 페이지는 1번 프레임에 있다는 것을 알고, CPU는 1번 프레임 변위 2에 접근하게 됨. 1번 프레임은 8번지부터 시작하므로 CPU는 10번지에 접근하게 됨

페이지 교체 알고리즘

  • 요구 페이징: 메모리에 프로세스를 적재할 때 메모리에 필요한 페이지만을 적재하는 기법
  1. CPU가 특정 페이지에 접근하는 명령어를 실행
  2. 해당 페이지가 현재 메모리에 있을 경우 (유효 비트가 1일 경우) CPU는 페이지가 적재된 프레임에 접근
  3. 해당 페이지가 현재 메모리에 없을 경우 (유효 비트가 0일 경우) 페이지 폴트가 발생
  4. 페이지 폴트가 발생하면 페이지 폴트 처리 루틴을 통해 해당 페이지를 메모리로 적재하고, 유효 비트를 1로 설정
  5. 다시 1의 과정 수행

FIFO 페이지 교체 알고리즘

  • 메모리에 가장 먼저 적재된 페이지부터 스왑 아웃하는 페이지 교체 알고리즘
  • 구현은 간단하지만, 초기에 적재되어 계속 참조되고 있는 페이지를 스왑 아웃할 수 있음

최적 페이지 교체 알고리즘

  • 앞으로 사용 빈도가 가장 낮은 페이지 교체하는 알고리즘
  • 가장 낮은 페이지 폴트율을 보장함
  • 미리 예측하기 어렵기 때문에 실제 구현이 어려움

LRU 페이지 교체 알고리즘

  • 가장 적게 사용한 페이지를 교체하는 알고리즘
  • 보편적으로 사용됨

페이지 폴트의 종류

메이저 페이지 폴트

  • 보조기억장치에서 CPU가 원하는 페이지를 읽어 들이기 위해 입출력 작업이 필요한 페이지 폴트
  • CPU가 접근하려는 페이지가 물리 메모리에 없을 때 발생

마이너 페이지 폴트

  • 보조기억장치와의 입출력이 필요하지 않은 페이지 폴트
  • CPU가 요청한 페이지가 물리 메모리에는 존재하지만, 페이지 테이블 상에는 반영되지 않은 경우에 발생

'CS/운영체제' 카테고리의 다른 글
  • 운영체제(6) - 파일 시스템
  • 운영체제(4) - CPU 스케줄링
  • 운영체제(3) - 동기화와 교착 상태
  • 운영체제(2) - 프로세스와 스레드
KDH.dev
KDH.dev
  • KDH.dev
    CodingHard
    KDH.dev
  • 전체
    오늘
    어제
    • 전체글 (105)
      • 코딩테스트 (74)
        • 프로그래머스 (13)
        • 백준 (61)
      • CS (27)
        • 네트워크 (5)
        • 컴퓨터구조 (5)
        • 운영체제 (6)
        • 자료구조 (5)
        • 데이터베이스 (6)
      • Spring (1)
      • Java (3)
        • 자료구조 (3)
        • 알고리즘 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    21736
    컴퓨터구조
    코딩테스트
    프로그래머스 Lv.0
    데이터베이스
    운영체제
    30804
    부트캠프후기
    프로그래머스
    자료구조
    멀티캠퍼스부트캠프
    자바
    14940
    네트워크
    백준
    CS
    16935
    [LG유플러스] 유레카 백엔드 개발자
    13913
    멀티캠퍼스it부트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
KDH.dev
운영체제(5) - 가상 메모리
상단으로

티스토리툴바