꾸준한 기록을

가상메모리(Virtual Memory)란 본문

프로그래밍 기초/운영체제

가상메모리(Virtual Memory)란

masiljangajji 2023. 12. 28. 23:16

가상메모리(Virtual Memory)란

OS에서 사용하는 메모리 관리 기법중 하나 입니다.
컴퓨터가 실제 이용가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 더 큰 메모리로 보이게 만드는 것으로
HDD의 일부 영역을 RAM처럼 사용함으로써 구현됩니다.

 

포토샵과 유투브를 실행해 RAM이 꽉 찬 상황을 가정하겠습니다.
기존의 방법으로는 RAM이 꽉 찬 상태에서 Word를 실행시키는 것은 불가능합니다.

 

하지만 RAM에 적재돼 있는 포토샵,유투브 중 사용하지 않는 프로세스를 가상메모리(HDD)로 보내 공간을 만들고

그 공간에 Word를 할당시킨다면 더 많은 프로세스를 실행 가능하게 만들고 더 큰 메모리를 사용하는것과 같은 효과를 나타내게 됩니다.

 

이는 프로세스들끼리 메모리 침범이 일어날 여지를 크게 줄이며
가상메모리라는 통일된 주소 공간을 배정할 수 있음으로 메모리 관리의 단순화를 돕습니다.

 

이것이 가상메모리를 사용하는 이유이며 동작방법에 대해 알아보겠습니다.

Page Table

Page Table은 RAM에 존재하는 실제 주소(Physical Address)와 HDD에 존재하는 가상 주소(Virtual Address)를

매핑한 테이블 입니다.

 

Page Table은 다음을 포함합니다.

  1. 페이지를 식별하는 번호인 Virtual Page Number
  2. 가상페이지가 현재 RAM에 어느 프레임에 매핑되어 있는지를 나타내는 Physical Frame Number
  3. 해당 페이지가 현재 RAM에 존재하는지 여부를 나타내는 Valid Bit

 

페이지와 프레임의 상태 관리를 위해 사용하며

이 가상주소는 사실 RAM에서 이런 주소야~ 라는 것을 알려줍니다.

 

Page는 가상 메모리의 최소 단위를 의미하며
Frame은 물리 메모리의 최소 단위를 의미합니다.
(Page Table은 MMU(Memory Management Unit)에 의해 관리됩니다.)


또 자주 사용되는 주소는 TLB(Translation lookaside buffer)라는 캐싱계층을 둡니다.

 

Page Fault , Swapping

Page Falut란 Page에 접근했으나 해당 페이지가 RAM에 존재하지 않는 경우를 의미합니다.

모든 페이지를 RAM에 적재해놓지 않고 필요한 페이지만 RAM에 적재하는 방식을 사용하기 떄문에 발생합니다.

실제 동작 순서는 다음과 같습니다.

TLB 확인 -> Page Table 확인 -> RAM에 Page 존재안함 -> Page Fault 발생

 

이를 해결하기위해 Page Replacement Algorithm에 따라 RAM에 로드된 페이지를 HDD로 보내게되고(Swap Out)
필요한 Page를 RAM에 로드하게 됩니다(Swap In).

 

이러한 과정을 Swapping이라 부릅니다.

 

하지만 이 방법도 메모리 부족을 완벽하게 해결할 순 없습니다.

너무 많은 프로세스를 실행시키게 되면 Swapping이 빈번하게 발생하게 되고 CPU 사용률이 줄어들게 됩니다.

OS는 CPU사용률이 줄어 더 많은 일을 주게되고 이는 더 많은 Page Fault , 더 적은 CPU 사용률을 만듭니다.

이런현상을 Thrashing이라 부릅니다.

 

따라서 가장 명확한 해결법은 메모리를 늘리는 것입니다.

 

Page Replacement Algorithm

LFD (Longest Forward Distance)

가장 좋은 알고리즘은 오프라인 알고리즘의 일종인 LFD(Longest Forward Distance)입니다.

LFD는 가장 먼 미래에 참조되는 페이지와 현재의 페이지를 바꾸는 알고리즘이며 가장 적은 스와핑이 일어납니다.

이는 매우 효율적이지만 현실에서는 미래에 사용될 것을 알 수 없기 떄문에 구현이 불가능합니다.

따라서 이 알고리즘은 성능에 대한 Upper Bound를 제공합니다.

ex) 내 알고리즘은 LFD에 비하면 이정도야~

 

FIFO (First In First Out)

가장 먼저 메모리에 적재된 페이지부터 교체하는 알고리즘입니다.

 

LRU (Least Recently Used)

최근에 사용되지 않은 페이지를 교체하는 알고리즘입니다.

최근에 사용되지 않음 = 가장 오랫동안 사용되지 않은 페이지 교체

 

 

도움이 되셨으면 좋겠습니다.

'프로그래밍 기초 > 운영체제' 카테고리의 다른 글

프로세스(Process)와 통신기법  (1) 2023.12.29
운영체제(Operating System)란  (1) 2023.12.28