[운영체제] Virtual Memory(가상 메모리)

김성록·2023년 4월 2일
0

운영체제

목록 보기
13/14

가상 메모리에 대해 설명해보세요.


가상 메모리란?

  • 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다.

  • 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 올리고 나머지는 디스크에 저장한다.


가상 메모리의 배경

  • 프로세스가 실행되는 코드의 전부가 물리 메모리에 존재해야 한다.

  • 하지만 실제로는 코드의 일부에서만 대부분의 시간을 사용하고, 특정 순간에는 작은 양의 주소 공간을 사용한다.

  • 메모리 용량보다 큰 프로그램은 실행시킬 수 없다.


가상 메모리의 특징

  • 물리 메모리 크기에 제약받지 않는다.

  • 더 많은 프로그램을 동시에 실행할 수 있어 CPU의 활용률이 높다.


가상 메모리가 하는 일

  • 사용자에게 논리적 메모리와 물리적 메모리를 분리하여 인식하도록 한다.

    • 가상 주소 공간(Virtual Address Space)
      : 적은 양의 물리적 메모리만 사용 가능할 때에도 사용자에게 대용량의 가상 주소 공간을 제공할 수 있다.

    • 프로세스 간의 페이지 공유
      : 둘 이상의 프로세스가 파일 또는 메모리를 공유하게 해준다.


Demand Paging(요구 페이징)

  • 프로세스의 모든 데이터를 메모리에 적재하지 않고, 실제 필요한 page만 메모리에 올리는 것을 Demand Paging(요구 페이징)이라고 한다. 이를 통해 메모리 사용량이 감소하고, 프로세스 전체를 메모리에 적재하는 입출력 오버헤드가 감소한다.

  • 유효/무효 비트(valid/invalid bit)를 사용하여 page table에서 해당 page가 메모리에 있는지 확인한다.

    • 비트가 유효하면 해당 페이지가 메모리에 존재하고, 비트가 무효하면 메모리에 없음을 의미한다.
  • CPU가 접근하려는 페이지가 메모리에 없는 경우(무효 비트)를 Page Fault(페이지 부재)라고 한다. 페이지 부재가 발생할 경우 다음과 같은 과정을 통해 그 페이지를 메모리에 적재한다.

    • MMU가 운영체제에 Page Fault Trap(페이지 부재 트랩)을 발생시킨다.

    • 유효하지 않은 참조인 경우 프로세스를 종료시키고, 그렇지 않다면 빈 프레임을 찾아 페이지를 할당한다.

    • 프레임 번호를 설정하고, valid bit를 1로 변경시켜 페이지 테이블을 갱신한다.

    • 다시 명령어로 돌아가서 실행한다.


Page Replacement Algorithms(페이지 교체 알고리즘)

  • 이미 메모리에 있는 페이지 중 하나를 backing store에 보내고(page-out), 새로운 페이지를 메모리에 올리는(page-in) 작업을 페이지 교체라고 한다. 메모리가 가득 찼을 때 다른 프로그램이 새로 실행되거나 실행중인 프로세스가 다른 페이지를 요구할 때 발생한다. 이 때, page-out되는 페이지를 Victim Page(희생 페이지)라고 하는데, 희생 페이지를 정하는 것이 페이지 교체 알고리즘이다.

    • FIFO(First-In, First-Out)
      : 가장 단순한 알고리즘으로, 가장 먼저 page-in 한 페이지를 먼저 page-out 시킨다.

    • OPT(OPTimal)
      : 가장 오랫동안 사용되지 않을 페이지를 교체하는 방식이다. 미래의 참조를 모두 알고 있어야 하므로 구현이 어렵다.

    • LRU(Least-Recently-Used)
      : 가장 오랫동안 사용하지 않은 페이지를 교체하는 방식이다. OPT 알고리즘과 비슷한 효과를 내어 성능이 좋은 편이다.

    • LFU(Least-Frequently-Used)
      : 가장 참조 횟수가 적은 페이지를 교체하는 방식이다.

    • MFU(Most-Frequently-Used)
      : 가장 참조 횟수가 많은 페이지를 교체하는 방식이다.


Thrashing(스레싱)

  • Thrashing(스레싱)은 프로세스가 원활한 수행에 필요한 최소한의 page frame을 할당받지 못해서 반복적으로 page fault가 발생하고, 실행보다 swapping 하는데 더 많은 시간을 소모하여 CPU 이용률이 떨어지는 현상을 말한다.

  • CPU 이용률이 떨어지면 다중 프로그래밍의 정도(MPD, Multi-Programming Degree)를 높이게 되는데, 동시에 실행하는 프로세스가 많아질수록 각 프로세스에 할당된 메모리 page frame들은 더 작아지게 된다. 너무 적은 page frame을 할당받은 프로세스들은 page fault가 증가하게 되어 swapping이 증가하게 되고 결국 cpu의 이용률이 더 떨어지게 되는 악순환이 생긴다.


Thrashing 해결 방법

  • Thrashing을 해결하기 위해서 프로세스에게 적절한 frame을 할당해야 한다.

    • Working set
      : 지역성의 원리(프로세스가 특정 시간 동안 일정 장소를 집중적으로 참조하는 성질)를 이용하여 지역성 집합이 메모리에 동시에 올라갈 수 있도록 보장하는 메모리 관리 방법이다.

    • PFF(Page Fault Frequency)
      : page fault의 상한값과 하한값을 두고, page fault rate가 상한값을 넘으면 frame을 더 할당하고, 하한값보다 낮아지면 할당된 frame 수를 줄이는 방법이다.

profile
예비 개발자

0개의 댓글