[OS] 가상메모리와 페이지폴트

jiseong·2022년 3월 1일
5

T I Learned

목록 보기
184/291

메모리

메모리란 프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 기억장치이다.

하드웨어 관점에서 메모리의 종류는 다음 사진과 같이 4가지가 존재하며 DRAM(RAM, DDR4) 등의 메모리, CPU 안에 있는 레지스터캐시등을 주기억장치라고 하며 HDD는 보조 기억장치로 분류된다.

CPU가 메모리에 더 빨리 접근할 수 있는 순서

프로그램이 CPU에서 사용되기 위해서는 메인 메모리(RAM)에 적재되어 있어야 한다.

하지만 점점 커지는 프로그램에 의해 여러 프로세스를 동시에 실행하는 시스템에서는 메모리 용량 부족 이슈가 발생했고 이를 해결하고자 가상 메모리란 기법이 생겨나게 되었다.

가상 메모리

메모리 관리 기법 중 하나로 보조기억(HDD)의 일부를 주기억(RAM)으로 활용하게끔 하여 실제 주기억장치보다 큰 메모리 영역을 제공하는 방법으로도 사용된다.

가상 메모리 기법을 사용하면 메인메모리(RAM)의 속도와 하드디스크의 용량의 장점을 가질 수 있다.

가상 메모리의 핵심은 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않고 실행에 필요한 일부분만 메모리 올라간다는 점으로 프로세스들의 내용(페이지) 중 현재 실행에서 덜 중요한 것들을 하드 디스크의 공간에 옮겨 놓음으로써 적은 양의 메모리로 큰 효율을 낼 수 있다.

Page table(os가 관리)

그렇다면 하드 디스크에 옮겨놓은 내용(페이지)들을 사용하려고 할 때 어떻게 참조할것인지 궁금해질텐데 이는 Page table을 사용하여 관리하기 때문에 필요할 때 참조할 수 있다.

page table에는 내용(페이지)들이 저장되어 있는 주소값이 들어있으며 valid bit를 사용하여 물리적 메모리에 올라가 있는지 아닌지를 나타낸다.

페이지라는 말이 자주 언급되는데 페이지는 메모리를 효율적으로 사용하고자 프로세스를 일정 크기로 나눈 단위라고 생각하면 된다.

페이지(Page): 가상 메모리를 사용하는 최소 크기 단위.

프레임(Frame): 물리 메모리를 사용하는 최소 크기 단위.

위의 그림을 보면 page table에는 페이지의 일부만 물리적 메모리에 올라가 있는 것을 볼 수 있다.

이는 앞서 언급된 내용으로 프로그램을 실행 시 프로세스를 구성하는 모든 페이지를 물리적 메모리에 올리지 않고 당장 필요한 페이지만 메모리에 올리기 때문이며 이런 방식을 요구 페이징(Demand paging)이라고도 한다.

요구 페이징 방식을 사용함으로써 다음과 같은 장점을 얻게 된다.

  • 현재 필요한 페이지만 메모리에 적재하기 때문에 메모리 사용량이 감소한다.

  • 물리적 메모리 용량의 제약에서 벗어날 수 있게 해준다.

  • 프로세스 전체를 메모리에 올리지 않기 때문에 입출력의 오버헤드가 줄어든다.

그리고 요구 페이징 방식을 사용하기 때문에 CPU가 프로그램을 실행하면서 필요한 페이지가 물리적 메모리에 없는 경우도 생기게 되는데 이것을 페이지 폴트(Page Fault)라고 한다. 이 경우 보통은 스왑 영역(가상 메모리라고 생각해도 좋다)에서 페이지를 찾아서 물리적 메모리에 로드하게 된다.

페이지 폴트의 과정들은 다음과 같이 일어나게 된다.

  1. invalid 페이지에 접근하면 MMU가 trap을 발생하여 운영체제에 알린다.

  2. 운영체제는 CPU의 동작을 잠시 멈춘다.

  3. 운영체제는 요구된 페이지를 가상 메모리에서 찾는다.

  4. 해당 페이지를 물리적 메모리의 비어있는 프레임에 로드한다.

  5. 페이지 테이블을 최신화한다.

  6. 중단되었던 CPU를 다시 시작한다.

하지만 위의 과정에서 물리적 메모리에 비어있는 프레임이 존재하지 않는 경우에는 어떻게 할것인지에 대한 의문이 생길 수 있다. 이때 사용하는 것이 Page Replacement 알고리즘이며 페이지 폴트를 최소화하기 위한 메커니즘이기도 하다.

이 알고리즘의 핵심은 현재 자신이 차지하고 있는 프레임을 지금 당장 실행해야 할 페이지에게 넘겨줄 Victim Frame을 찾는 과정이다.

  1. FIFO(First In First Out): 가장 먼저 물리 메모리에 적재된 페이지를 선택하는 방식.

  2. LRU(Least Recent Used): 가장 오랫동안 사용되지 않았던 page를 선택하는 방식.

  3. LRU Approximation: LRU와 같지만, 페이지에 Second-Chance를 준다.

3번을 clock alogirthm이라고도 하는데 모든 페이지에 reference bit를 가지게 하여 초기에는 모두 0이다가, CPU를 점유중인 프로세스로부터 참조되면 bit가 1로 올라게 되고 이 상태에서 Page Replacement가 진행될 경우 한쪽방향으로 페이지 테이블을 참조하여 1인 경우 0으로 변경하면서 0 bit를 가진 페이지를 만나게 되면 replacement 대상이 되는 것이다.

추천 동영상

  1. What is RAM
  1. 우테코 - 현구막의 리눅스 메모리 관리

좀 더 자세히 알고 싶다면 MMU 개념도 같이 알아보면 좋다.


Reference

0개의 댓글