[sutdy: OS]- 8. paging

uriyang
IOXIO
Published in
4 min readJun 8, 2020
Photo by Hamed Daram on Unsplash

# 컨셉

  • 공간 관리(memory) 문제를 해결하는 방식 <-> 프로세스는 시간 관리(?)
    - 메모리 용량은 한정적이므로, 여러 응용 프로그램의 사용을 위해 효율적인 메모리 관리 기법이 필요 (메모리 단편화 해결)
    - Segmentation: 가변 크기의 논리 세그먼트 (code, stack, heap)
    - Paging: page라는 고정 크기의 단위로 나눔
    - Memory Pool: 필요한 메모리 공간을 필요한 크기, 개수 만큼 사용자가 미리 할당받아 놓고 필요할 때마다 사용하고 반납하는 기법 (C의 malloc이나 C++ new 연산자)

#페이징 개요

  • page: 보조기억장치를 이용한 가상(논리) 메모리를 동일한 크기의 블록으로 나눈 것
  • frame: 물리적 메모리(RAM)을 같은 크기의 블록으로 나눈 것
  • 페이지와 프레임을 대응시키기 위해 page mapping 과정이 필요해서 paging table을 만든다.
  • 가상 메모리 사용, 외부 단편화(조각화) 해결, 내부 단편화 존재

#장단점

  • 장점
    - Flexibility: 주소 공간 추상화를 효과적으로 지원함
    - Simplicity: 여유 공간 관리가 용이함
    - 외부 단편화 (External Fragmentation) 없음
    - 빠른 할당과 해제
    - 메모리 일부를 디스크로 쉽게 Page out
    - 페이지 보호 및 공유 용이
  • 단점
    - 내부 단편화 존재
    - 메모리 참조 오버헤드
    - 페이지 테이블에 필요한 스토리지
    - 페이지 단위를 작게하면 내부 단편화 문제의 해결이 가능하지만, page mapping 과정이 많아지므로 비효율적

# Address translation(주소 변환)

  • 버퍼 메모리가 있는 컴퓨터에서 논리 주소를 실제 주소로 변환함과 동시에 논리 주소 또는 실제 주소를 버퍼 메모리 상의 실제 주소로 변환하는 것.
  • VPN: 가상 페이지 번호, page table 안의 index
  • PFN: 물리 주소
  • offset: 페이지 내 offset

## 페이징 테이블

  • 가상 주소를 물리 주소로 매핑하는 데 사용하는 데이터 구조
  • OS는 VPN으로 배열을 인덱싱 하고 page table entry(레코드)를 찾음.

## 페이징테이블 엔트리

  • Valid Bit: 특정 번역이 유효한지 여부를 나타냄
  • Protection Bit: 페이지를 읽거나 쓸 수 있는지 또는 실행할 수 있는지를 나타냄
  • Present Bit: 이 페이지가 물리 주소나 디스크 (swapped out)에 있는지를 나타냄
  • Dirty Bit: 페이지가 메모리로 가져온 이후 수정되었는지를 나타냄
  • Reference Bit (Accessed Bit): 페이지가 액세스했음을 나타냄

## 페이징 요구

  • OS는 시스템의 프로세스에 의해 할당된 모든 데이터의 cache처럼 메인 메모리를 사용함.
  • 적은 I/O, 적는 메모리, 빠른 대응, 더 많은 프로세스

## 페이징 폴트

  • 잡못된 PTE에 엑세스(RAM상에 프로그램 데이터를 쓸 장소가 없을 경우) 할 때, CPU에서 발생하는 예외
  • Major Page Faults
    - 페이지가 유효하지만 메모리에 로드되지 않음
    - OS는 컨텐츠를 찾을 수 있는 위치에 대한 정보를 유지함
    - 디스크 I/O 필요
  • Minor Page Faults
    - 디스크 I/O 없이 Page Fault를 해결할 수 있음
    - 지연 할당을 위해 사용됨
    - prefetched 페이지에 액세스

--

--