꼬물꼬물

페이지 교체 알고리즘 본문

코딩/CS

페이지 교체 알고리즘

멩주 2022. 11. 1. 01:25

💡 페이지 교체 알고리즘이란?

  • 운영체제는 주기억장치보다 더 큰 용량의 프로그램을 실행하기 위해 프로그램 일부만 주기억 장치에 적재해 사용한다. 이를 가상 메모리 기법이라고 한다.
  • 페이징 기법으로 메모리를 관리하는 운영체제에서 필요한 페이지가 주기억장치에 적재되지 않았을 때, 어떤 페이지 프레임을 선택헤 교체할 것인지 결정하는 방법.

# 가상 메모리(Virtual Memory)

  • 물리 메모리 크기의 한계 극복을 위해.
  • 메인 메모리의 크기가 한정되어 있어 물리적인 메모리 크기보다 크기가 큰 프로세스는 실행시키기 어렵다.
  • 이를 실행시키기 위해 나온 방법이 바로 가상 메모리
  • 핵심은 프로세스 실행시, 필요한 부분만 메모리에 적제하는 것. 이것을 요구 페이징이라고 한다.
  • 프로그램에 실제 메모리 주소(물리주소)가 아닌 가상의 메모리 주소(가상/논리주소)를 주는 방식
  • 논리주소는 MMU를 통해 물리주소로 변환

장점

  • 물리 메모리 크기의 제약에 자유로워진다.
  • 더 적은 메모리를 차지해 많은 프로그램을 동시에 수행할 수 있다.

참고: 가상메모리란?

 

# 페이징(Paging)

사용하는 이유

  • 프로세스 실행 시, 모든 부분이 필요한 것은 아니다.
  • 필요한 부분만 메모리에 올려 메인 메모리에 올라가는 프로세스의 크기를 줄일 수 있다.
  • 프로세스를 페이지 단위로 나누어 실행에 필요한 부분과 필요 없는 부분으로 나눈다.
    • 당장 실행에 필요한 메모리만 메모리해 적재하는 기법이 요구 페이징이다.
  • 논리 주소의 메모리를 고정된 크기의 Page로 나누어 관리한다.

특징

  • 물리주소 공간은 연속적이지 않을 수 있다.
  • 페이지는 모두 같은 크기를 가진다.
  • 물리주소 공간을 페이지와 같은 크기로 나눈 것을 프레임이리거 한다.
  • Page Size는 하드웨어에 의해 정해진다.
  • Page Table을 사용해 논리주소에서 프레임을 가리키는 물리주소로 매핑한다.
  • 외부 단편화 X, 내부 단편화 발생

참고: 페이징이란?

 

상황

  • 요구 페이징에 의해 메모리가 꽉 차있다.
  • 필요한 페이지가 메모리에 없다.
  • 빈 프레임이 없을 경우, 희생당할 프레임을 골라야 한다. ⇒ 페이지 교체 알고리즘

 

1. FIFO(First In, First Out) 알고리즘

  • 가장 먼저 메모리에 올라온 페이지 교체
  • 특징
    • 구현은 간단하지만 성능은 좋지 않다.
    • 들어온 시간을 저장하거나 Queue를 사용해 구현 가능

2. OPT(Optional) 알고리즘

  • 앞으로 가장 오랫동안 사용하지 않을 페이지 교체
  • 특징
    • 모든 알고리즘 중 page-fault 발생이 적다.
    • 앞으로 사용할 페이지를 미리 알고 있어야 한다.
    • 실제로는 구현 불가능

3. LRU(Least Recently Used) 알고리즘

  • 가장 오랫동안 사용하지 않는 페이지 교체
  • 특징
    • 오랫동안 사용하지 않았다면 앞으로도 사용하지 않을 것
    • Optional과 비슷한 효과
    • 많은 운영체제가 선택

4. LFU(Least Frequency Used) 알고리즘

  • 참조 횟수가 가장 적은 페이지 교체
  • 교체 대상이 여러개라면 가장 오랫동안 사용하지 않은 페이지를 교체한다.
  • 특징
    • 많이 사용하지 않는다면 앞으로도 많이 사용되지 않을 것
    • 최근에 적재된 페이지가 교체될 수 있다.
    • 참조횟수 카운팅이 필요하다.
    • 초반에 많이 사용되고 나중에 사용되지 않을 경우 👎

5. MFU(Most Frequently Used) 알고리즘

  • 참조 횟수가 가장 많은 페이지를 교체
  • 특징
    • 참조 횟수가 많은 페이지는 이제 사용되지 않을 것이고, 적은 페이지는 최근에 사용된 것이라고 생각
  •  

'코딩 > CS' 카테고리의 다른 글

기초 정렬 알고리즘  (0) 2022.11.07
필터(Filter)와 인터셉터(Interceptor)  (0) 2022.11.01
CPU 작동 원리  (0) 2022.09.20
JDBC, SQL Mapper, ORM  (0) 2022.09.05
Day2 질문  (0) 2022.04.25