Virtual Memory

OH JU HYEON·2022년 7월 17일
1

CS

목록 보기
11/11
post-thumbnail

Virtual Memory

Virtual Memory란?

간단하게 말 하면 Virtual Memory는 프로세스 전체가 메모리에 올라오지 않아도 실행이 가능하게 하는 메모리인데 물리 메모리와 논리 메모리를 분리해 메모리 크기를 걱정하지 않고 프로그램을 작성할 수 있도록 해준다. 프로그래머는 이 Virtual Memory 덕분에 물리 메모리의 크기에 구애받지 않으면서 작업할 수 있는 커다란 작업 공간을 얻게 된 셈이다.

Virtual Memory의 모든 프로세스는 물리 메모리와 별개로 자신이 메모리 어느 위치에 있는지 상관없이 0번지부터 시작하는 연속된 메모리 공간을 갖게 된다. 논리적 메모리 주소와 비슷해 보이지만 논리적 메모리 주소는 물리적 메모리 주소 공간에 비례하다는 점이 다른 점이다. Virtual Memory는 물리 메모리 공간이 아니라 가상의 주소 공간을 가지게 된다.

설명

운영체제는 Virtual Memory를 통해 프로그램의 논리적 주소 영역에서 필요한 부분만 물리적 메모리에 적재하고 직접적으로 필요하지 않은 메모리 공간은 Swap 영역(디스크)에 저장하게 된다.

조금 더 풀어서 설명하면 물리적 메모리에는 바로 사용할 프로세스만 올라가게 된다. 바로 사용되지 않을 프로세스들은 Swap 영역에 보관되는 것이다. 이렇게 되면 같은 10의 물리 메모리 공간이 있다고 하더라도 기존에 사용되지 않는 프로세스까지 몽땅 올라가 있는 것에 반해 당장 사용되어 질 프로세스만 올라가게 되고 사용되지 않을 프로세스는 Swap 영역에 보관이 되니 더 효율적으로 메모리를 사용할 수 있게 되는 것이다.

Demand Paging, 요구 페이징

당장 사용될 주소 공간을 Page 단위로 적재해야 하는데 특정 Page에 대해 CPU의 요청이 들어오면 해당 Page를 메모리에 적재시켜준다. 위에서 말 한 내용과 비슷하지만 당장 실행에 필요한 Page만 적재하기 때문에 메모리 사용량이 감소하며 프로세스 전체를 메모리에 적재하는 입출력 오버헤드도 감소하게 된다.

각 Page가 메모리에 존재하는지는 유효/무효 비트를 두어 체크를 하기 때문에 알 수 있다.

Page Fault, 페이지 부재

Page Fault는 메모리에 적재된 페이지 중에 사용 페이지가 없는 경우인데 위에서 말한 유효/무효 비트로 체크하여 무효 페이지에 접근하게 된 경우를 말한다.

무효 페이지에 접근하게 되면 주소 변환을 담당하는 하드웨어인 MMU(Memory Management Unit, 메모리 관리 장치)가 Page Fault Trap을 발생시키게 되고 Page Fault를 처리하게 된다. 조금 더 설명을 하자면 아래와 같다.

먼저, CPU가 Page를 참조하고 Page Table에서 유효/무효 비트를 통해 Page가 무효 상태임을 확인한다. (이때 상태는 물리 메모리에 올라와 있지 않고 스왑 영역에 보관중인 상태이다.) 이다음 MMU에서 Page Fault Trap을 발생시키고 Swap 영역에서 Page를 빈 프레임에 적재하고 Page Table을 업데이트한다.

페이지 교체 알고리즘

Page Fault가 발생하면 요청된 페이지를 디스크에서 메모리로 가져오는데 이때 물리적 메모리에 공간이 부족하면 메모리에 올라와 있는 페이지를 디스크로 옮겨서 메모리 공간을 다시 확보해야 한다. 이것을 페이지 교체라고 하고 어떤 페이지를 교체할 것인치 결정하는 것이 페이지 교체 알고리즘이다.

페이지 교체 알고리즘은 FIFO 최적 페이지 교체 LRU LFU 등이 있고 아래와 같다.

알고리즘설명
First in First Out메모리에 올라온 Page 중 가장 오래된 Page를 교체한다.
최적 페이지 교체앞으로 가장 오랫동안 사용되지 않을 Page를 찾아 교체한다.(단, 실제 구현이 어렵다고 한다.)
Least Recently Used가장 오랫동안 사용되지 않은 Page를 교체한다.
Least Frequently Used참조 횟수가 가장 적은 Page를 교체한다. 비용대비 성능이 좋지 않아 잘 쓰이진 않는다고 한다.

장점 및 단점

Virtual Memory를 사용하면 사용자의 프로그램이 물리적 메모리보다 커져도 실행이 가능하고 메모리 격리로 보안이 좋아지며 외부 단편화가 발생하지 않는다는 장점은 있지만 가상 메모리를 물리적 메모리로 바꾸는 프로세스가 다소 느리기 때문에 일반적인 성능이 눈에 띄게 감소할 수 있다.

profile
읽기만 해도 이해가 되는 글을 쓰기 위해 노력합니다.

0개의 댓글