컴퓨터공학 공부

컴퓨터공학 공부 다시 시작하기 13주차 - 가상 메모리를 위한 TLB 이해, 요구 페이징 개념 이해, 페이지 교체 정책 정리

개발학생 2025. 1. 28. 15:54
반응형

1. 가상 메모리를 위한 TLB 이해

MMU와 TLB(컴퓨터 구조)

MMU

- 물리 주소를 확인하기 위해 메모리를 갔다와야 하는 구조

  -> 메모리 계층 구조상, 메모리에 접근하는 데 CPU 입장에선 상당한 시간이 걸림(예: 200 cycle)

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0

TLB

- Translation Lookaside Buffer의 약어로, 페이지 정보를 캐쉬함 

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0

페이징 시스템과 공유 메모리(IPC)

- 프로세스 간 동일한 물리 주소를 가리킬 수 있음: 공간 및 메모리 할당 시간을 절약하기 위함

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0



물리 주소 데이터 변경시

- 물리 주소에 데이터 수정 시도시, 물리 주소를 복사할 수 있음 (copy-on-write)

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0

2. 요구 페이징 개념 이해

요구 페이징(Demand Paging 또는 Demanded Paging)

- 프로세스의 모든 데이터를 메모리로 적재하지 않고, 실행 중 필요한 시점에서만 메모리로 적재

- 선행 페이징(anticipatory paging 또는 prepaging)의 반대 개념 

- 더 이상 필요하지 않은 페이지 프레임은 다시 저장매체에 저장함 (페이지 교체 알고리즘 필요) 

페이지 폴트(page fault)

- 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트(중단) 현상

- 이 현상이 일어나면, 운영체제가 해당 페이지를 물리 메모리에 올림

페이지 폴트와 인터럽트

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0

사용자/커널 모드와 프로세스, 인터럽트

- 인터럽트는 미리 정의되어, 각각 번호와 실행 코드를 가리키는 주소가 기록되어 있음

  -> 실행 코드는 운영체제 내부 코드이며, 주소는 컴퓨터 부팅 시 운영체제가 IDT(Interrupt Descriptor Table)에 기록한 것

- 예시로 인터럽트가 발생하면  IDT(Interrupt Descriptor Table)를 확인

   -> 시스템콜 인터럽트 명령은 0 x 80 번호로 미리 정의되어 있고 이 인터럽트에 해당하는 운영체제 코드가 system_call() 함수라면.. IDT에는 0 x 80 -> system_call()과 같은 정보가 기록되어 있는 것 

출처: 온라인 강의

페이지 폴트가 자주 일어나면: 스레싱(Thrashing)

- 반복적으로 페이지 폴트가 발생해서, 과도하게 페이지 교체 작업이 일어나 실제로는 아무 작업도 하지 못함

 

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0

페이지 폴트가 안 일어나게 하려면?

- 향후 실행/참조될 코드/데이터를 미리 물리 메모리에 올리면 됨
- 앞으로 있을 일을 예측하는 것은 불가능

3. 페이지 교체 정책 정리

페이지 교체 정책(page replacement policy)

- 운영체제가 특정 페이지를 물리 메모리에 올리려 할 때 물리 메모리가 다 차있다면, 
  기존 페이지 중 하나를 물리 메모리에서 저장 매체로 내리고(저장) 새로운 페이지를 해당 물리 메모리 공간에 올린다.

  => 어떤 페이지를 물리 메모리에서 저장 매체로 내릴 것인지 Page Replacement(Swapping) Algorithm으로 결정

페이지 교체 알고리즘(Page Replacement Algorithm) 종류

FIFO

- 선입선출: 가장 먼저 들어온 페이지를 교체

OPT

- 최적 페이지 교체 알고리즘 (OPTimal Replacement Algorithm)
- 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체
- 일반 OS에서는 구현 불가

LRU

- LRU(Least Recently Used) Page Replacement Algorithm
- 가장 오래 전에 사용된 페이지를 교체
- OPT 교체 알고리즘이 구현이 불가하므로, 과거 기록을 기반으로 시도

페이지 스왑 알고리즘 종류

LFU

- LFU(Least Frequently Used) Page Replacement Algorithm
- 가장 적게 사용된 페이지를 내리자

NUR

- NUR(Not Used Recently) Page Replacement Algorithm
- 최근에 사용하지 않은 페이지부터 교체하는 기법
- 각 페이지마다 참조 비트(R), 수정 비트(M)을 둠 (R, M)
   -> (0, 0), (0, 1), (1, 0), (1, 1) 순으로 페이지 교체

세그멘테이션 (Segmentation) 기법

- 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트(Segment)로 분할
- 페이징 기법에서는 가상 메모리를 같은 크기의 블록으로 분할
- 예: x86 리얼모드

  CS(Code Segment), DS(Data Segment), SS(Stack Segment), ES(Extra Segment) 로 세그먼트를 나누어, 메모리 접근

세그멘테이션 기법

- 세그먼트 가상주소

   -> v = (s,d): s는 세그먼트 번호, d는 블록 내 세그먼트의 변위

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0

- 세그멘테이션은 크기가 다른 segment 단위로 물리 메모리에 로딩

출처: https://www.fun-coding.org/post/virtualmemory.html#google_vignette&gsc.tab=0

반응형