Computer Science/Operation System

[OS] Virtual Memory와 Paging기법

검은 까마귀 2024. 1. 15. 17:45

2024.01.12 - [Computer Science/Operation System] - [OS] 메모리 관리 전략 & Paging / Segmentaion 기법

 

[OS] 메모리 관리 전략 & Paging / Segmentaion 기법

거의 OS의 최종장이라고 할 수 있을지는 모르겠으나 내 나름의 커리큘럼에서는 최종장까지 왔다. 내가 느낀 OS의 장점은 보안 관련도 있겠지만, 어떻게 자원을 효율적으로 관리하느냐? 이다. 앞

blaj2938.tistory.com

 

위에 포스팅에서 가상메모리 방식에 대해서 살짝이나마 찍.먹. 했다. 가상메모리를 제대로 알아보고 어떤식으로 동작하는지 공부하고, 그에 따른 paging, Page Falut, Thrashing,  Demand Paging도 알아 보겠다.

# Paging 기법

이전 포스팅에서 잠깐 공부하긴 했지만 메모리관리 전략 측면에서 불연속적 메모리관리, 가상 메모리 방식의 사용과 Page 단위로 나누어서 진행한다는 것만 알았다.

 

Paging방식도 두가지로 메모리에 load하는 방식이 있다. Pre-Paging(Anticipatory paging, 예상 페이징)기법 과 Demand Paging기법 이렇게 나누어져 있다. Pre-Paging은 Load될거 같은것을 미리 Load해오는 것이다. 1차원이기 때문에, 원하는 CPU에서 필요한 page가 없는 경우도 있기 때문에 Demand Paging기법을 사용한다.

# Demand Paging(Lazy Loading)기법

Demand Paging기법은 CPU에서 page를 로드 할때 필요한것 만 요청해서 받아오는 것이다. 그렇다면 불필요한 Page들은 어디에 저장되느냐? 보조기억장치에 저장이된다. 그래서 앞으로 자주 등장하겠지만 Lazy Loading이 일어나게 된다. 이전 포스팅에서 작성했던 Swapping과는 완전히 대조된다. Swapping은 앞서 설명했지만 프로세스의 모든 메모리가 시작하자마자 보조기억장치부터 주 기억장치까지 저장이 된다는 것이다.

 

 

하지만 Lazy Loading에도 문제점이 있다. 위에 설명한 것처럼 필요할때마다 보조기억장치에서 주 기억장치로 Load되는 것이기 때문에 CPU에서 필요한 page가 없을 수도 있다. 그래서 우리는 그것을 Page Fault 라고 한다. 즉, 다시말해 메인 메모리에 CPU가 필요한 page가 없는 경우이다.

 

근데 Page Fault 가 Exception인지 Interrupt인지 아직 뜨거운 감자인거 같다. 많은 포럼에서도 논쟁이 뜨겁다.

https://stackoverflow.com/questions/43458341/difference-between-an-interrupt-and-a-page-fault

 

Difference between an interrupt and a page fault

In operating systems, what is the difference between a page fault and an interrupt? I know that page fault is when the MMU(Memory Management Unit) cannot find the allocated location in the virtual ...

stackoverflow.com

 

다시 돌아와서, Demand Paging은 Virtual Memory에 필요한 Page만 Load하고 사용하게된다. 필요한 page만 불러와도 올라와있던 Page가 사용아 안되면 자리만차지하고 있게 되고 CPU가 다른 page가 필요했을 때 Page Fault가 나게된다.

그럴때 우리는 Page Repalcement Algorithm을 사용해야한다.

# Page Repalcement Algorithm

교체되는 page를 Victim Page라고 부르게된다. 이것을 기억하고 교체 알고리즘에 대해서 알아보자.

  • First-in First-out(FIFO) 알고리즘
    • 가장 간단한 방법으로 가장 처음 들어간 page가 가장 빨리 나오게 된다.
  • Optimal 알고리즘
    • Process가 앞으로 사용할 Page를 알아한다.
    • 최적의 알고리즘 ➡️ 구현 불가
  • LRU 알고리즘
    • 가장 오래 사용하지 않은 Page를 교체한다.
    • Page가 사용될 시간을 예측 ➡️ 가장 오랜기간 사용되지 않은 page
    • page의 교체횟수는 많지만 FIFO보다 효율
  • LFU 알고리즘
    • 참조횟수가 가장 작은 page를 교체
    • 여러개일때는 LRU 기반으로 가장 오래 사용되지 않은 페이지 교체
  • MFU 알고리즘
    • 참조횟수가 가장 많은 page를 교체

공부하면서 해당 문제가 있는데 풀어보면 좋을거 같다.

 

결론적으로 돌아와서, Page Falut가 난 채로 메모리를 가만히 둘수는 없으니깐 위에 있는 알고리즘을 통해서 교체한다는 것이다. Page Fault가 발생하는 경우는 비었거나 없거나 이다.

# Trashing(스레싱)

프로세스에서 page falut가 발생하는 것이다. 결과적으로 다중 프로그래밍이 되면 당연히 Paging Falut가 날것이다. 프로세스에서 Paging Falut 자주 일어나게 되면 cpu의 성능은 급격하게 저하될것이다. 이를 Trashing 이라고 한다.

 

MPD는 메모리에 동시에 올라가 있는 프로세스의 수이다. 

 


사실 이거보다 더 복잡하다. page를 fetch하는 방법부터, page falut가 발생했을때 교체알고리즘 대신 대안책들이 있지만, 사실 쓰다가 다 지웠다. 스레싱 해결 알고리즘 등등....!

반응형