CS 상식 - 운영체제

[CS 상식 - 운영체제] 페이징

beginner-in-coding 2025. 2. 20. 18:49
  • 가상 메모리 (virtual memory): 실행하고자 하는 프로그램의 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게하는 기술
  • 가상 메모리의 기법: 페이징세그멘테이션

01. 페이징

  • 외부 단편화의 발생 원인: 각기 다른 크기의 프로세스가 메모리에 연속적으로 할당되었기 때문
  • 페이징 (paging)
    • 순서
      1. 프로세스의 논리 주소 공간을 페이지 (page)라는 일정한 단위로 자름
      2. 메모리 물리 주소 공간을 프레임 (frame)이라는 페이지와 동일한 크기의 일정한 단위로 자름
      3. 페이지를 프레임에 할당하는 가상 메모리 기법
  • 적재될 필요가 없는 페이지들을 보조 장치로 스왑 아웃되고, 실행에 필요한 페이지들은 메모리로 스왑 인되는 것
    • 페이지 아웃 (page out): 페이지 단위로 스왑 아웃
    • 페이지 인 (page in): 페이지 단위로 스왑 인
    • 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다는 의미

02. 페이지 테이블

  • 문제: 프로세스가 메모리에 불연속적으로 배치되면 CPU는 다음에 실행할 명령어 위치를 찾기 어려움
  • 해결: 페이지 테이블 (page table)
    • 프로세스가 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 하는 것
  • 페이지 번호를 이용해 어떤 페이지가 어떤 프레임에 할당되었는지 알려줌
  • 각각의 프로세스마다 페이지 테이블이 존재, 각 프로세스의 페이지 테이블들은 메모리에 적재되어 있음
  • 페이지 테이블 베이스 레지스터 (PTGR: Page Table Base Register): 프로세스의 페이지 테이블이 적재된 주소를 가리킴
  • 단점: 메모리 접근 시간이 두배로 늘어남 (페이지 테이블, 프레임)
  • 해결 방안: TLB
    • TLB (Translation Lookaside Buffer): 페이지 테이블의 캐시 메모리
    • 페이지 테이블의 일부 내용을 저장
    • 참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 가져와 저장
    • TLB 히트 (TLB hit): CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우
    • TLB 미스 (TLB miss): 페이지 번호가 TLB에 없을 경우 페이지가 적재된 프레임을 알기 위해 메모리 내의 페이지 테이블에 접근하는 방법

03. 페이징에서의 주소 변환

  • 특정 주소에 접근하기 위한 두 가지 정보가 필요
    • 어떤 페이지/프레임에 접근하고 싶은지
    • 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져있는지
  • 페이징 시스템에서의 논리 주소: 페이지 번호 (page number) + 변위 (offset)
    • 페이지 번호: 접근하고자 하는 페이지 번호
    • 변위: 접근하려는 주소가 페이지 프레임의 시작 번지로부터 얼마나 떨어져있는지 알기 위한 정보
    • 논리 주소<페이지 번호, 변위> → [페이지 테이블] → 물리 주소<프레임 번호, 변위>

04. 페이지 테이블 엔트리 (PTE: Page Table Entry)

  • 페이지 테이블의 각각의 행들
  • 페이지 테이블 엔트리에 저장되는 중요한 정보들
    1. 유효 비트 (valid bit): 현재 해당 페이지에 접근 가능 여부 (적재되어 있음:1, 적재되어 있지 않음:0)
      • 페이지 폴트 (page fault): 유효 비트 0인 경우에 접근하면 발생 (Exception)
      • 페이지 폴트를 처리하는 과정
        • CPU는 기존의 작업 내역을 백업
        • 페이지 폴트 처리 루틴을 실행
        • 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 후 유효 비트를 1로 변경
        • 페이지 폴트를 처리했다면 CPU는 해당 페이지로 접근 가능
    2. 보호 비트 (protection bit): 페이지 보호 기능을 위해 존재하는 비트
      • 읽기 (R) / 쓰기 (W): 2 가지로 나누는 방법
        • 비트 0: 읽기만 가능
        • 비트 1: 읽기 / 쓰기 가능
      • 읽기(R) / 쓰기 (W) / 실행 (X): 3 가지로 나누는 방법
        • 비트 0: 불가능
        • 비트 1: 가능
    3. 참조 비트 (reference bit): CPU가 이 페이지에 접근한 적이 있는지의 여부를 나타냄
      • 비트 0: 접근한적 없음
      • 비트 1: 접근함
    4. 수정 비트 (modified bit): 해당 페이지에 데이터를 쓴 적 있는지 없는지 수정 여부를 나타냄
      • == 더티 비트 (dirty bit)
      • 비트 0: 변경된 적이 없는 페이지 (접근은 존재했어도 읽기만 함)
      • 비트 1: 변경된 적이 있는 페이지
      • 존재 이유: 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 진행해야하는 지 판단하기 위해

05. 페이징의 이점 - 쓰기 시 복사

  • 쓰기 시 복사 (copy on write): 프로세스 간 페이지를 공유하는 방법
  • 방법
    • 부모 프로세스를 이용하여 자식 프로세스를 만드는 경우, 처음에는 부모 프로세스와 동일한 프레임을 가리킴
    • 읽기 상태만 진행한다면 위와 같은 상태가 유지
    • 쓰기 상태를 진행한다면 자식 프로세스에게 고유한 페이지를 할당
  • 장점: 프로세스 생성 시간 줄이고 메모리 공간 절약 가능

06. 계층적 페이징

  • 계층적 페이징 (hierarchical paging): 프로세스를 이루는 모든 페이지 테이블 엔트리를 항상 메모리에 유지하지 않는 방법
  • == 다단계 페이지 테이블 (mulrilevel page table)
  • 방법
    • 프로세스의 페이지 테이블여러 개의 페이지로 자름
    • 바깥쪽에 페이지 테이블을 하나 더 두어 잘린 페이지 테이블의 페이지들을 가리키게 하는 방식
  • 바깥 페이지 번호 → 페이지 테이블 엔트리
  • 안쪽 페이지 번호 첫 번째 페이지 테이블의 페이지 번호
  • 주소 변환 방법
    • 바깥 페이지 번호를 통해 페이지 테이블의 페이지 찾음
    • 페이지 테이블의 페이지를 통해 프레임 번호를 찾고 변위를 더함으로써 물리 주소 얻음