티스토리 뷰

반응형

 윈도우 운영체제의 가상 메모리(Virtual Memory)는 RAM을 관리하는 방법 중 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 방식을 말한다. RAM의 부족한 용량을 보완하는 데 주로 쓰인다.

 

 윈도우 운영체제는 가동되고 있는 프로세스들의 내용(페이지) 중, 덜 중요한 것들을 하드 디스크의 공간에 옮겨 놓는다. (당연히 어디에 저장했는지도 기록해 놓는다.) 그리고 프로세스가 동작하는 도중, 메모리에 필요한 데이터(페이지)가 없으면 하드디스크를 찾아 해당 데이터를 가져온다. (이 과정에서 속도 저하가 발생. ROM이 RAM보다 느리기 때문.)



  

▶ 가상메모리로 메모리 용량을 확보한 모습. 하지만 가상메모리는 용량이 충분할 때도 쓰인다,

 



 가상메모리의 동작 프로세스를 설명하기에 앞서, 프레임과 페이지에 대해 간략히 정리하려고 한다. 프레임과 페이지의 정의는 아래와 같다.

  

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


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

  

 아직 자세히 설명하지는 않았지만, 가상 메모리의 내용을 물리 메모리에 로드하는 과정을 생각해보자. 로드할 때 무작위로 위치 및 크기를 설정하여 로드하면 메모리 공간에 빈공간이 발생하게 된다.  이를 최소화하기 위해 프레임과 페이지를 도입하였으며, 프레임과 페이지의 크기는 보통 같으며, 페이지는 프로세스의 구성요소라고 볼 수 있다. 



 포스팅의 맨처음에 언급했듯, 운영체제의 스와퍼(Swapper)는 물리 메모리에 동작하고 있는 모든 프로세스를 로드하지 않는다. 게다가 운영체제의 페이저(Pager)는 프로세스의 모든 페이지를 물리메모리에 로드하지 않는다.(물리 메모리를 효율적으로 사용하기 위해서이다.)  그러므로 프로그램의 페이지가 물리 메모리에 부재할 수 있는데, 이것을 페이지 폴트(Page Fault)라고 한다. 


 페이지 폴트가 발생하면, 해당 페이지를 가상 메모리에서 찾아야한다. 이 때 운영체제가 페이지 폴트를 해결하는 과정을 요구 페이징(Demand Paging)이라고 한다. 지금부터 요구 페이징의 과정에 대해 더 자세히 알아보도록 하겠다.


 


▶ 페이지 테이블과 가상메모리의 동작.

 



 먼저, 운영체제는 페이지 테이블(Page Table)로 가상 메모리를 관리한다. 페이지 테이블에는 각 페이지가 저장되어있는 주소값이 들어있다. 게다가, 페이지 테이블에는 Valid bit이 있어, 이를 이용해 해당 페이지가 어느 메모리에 있는지 표시할 수 있다. 그러므로 운영체제는 페이지 테이블로 가상 메모리에서 페이지를 쉽게 찾을 수 있다.


 운영체제가 페이지 테이블을 이용하여, 요구 페이징을 수행하는 과정은 아래와 같다.


 


1. CPU는 물리 메모리을 확인하여 페이지가 없으면 trap을 발생하여 운영체제에 알린다.

 

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


3. 운영체제는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인하고, 없으면 프로세스를 중단한다.

   

4. 페이지 폴트이면, 현재 물리 메모리에 비어있는 프레임(Free Frame)이 있는지 찾는다.

   

5. 비어있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화 한다.

 

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



 꼼꼼한 사람은 찾았겠지만, 굵은 글씨 처리가 된 부분이 조금 이상하다. 물리 메모리에 비어있는 프레임이 없으면 어떻게 될까? 프로세스를 멈출 수는 없으므로, 희생 프레임을 골라서 이를 가상 메모리에 저장 후 필요한 페이지를 물리 메모리에 로드한다!! 그리고 이 과정에서 페이지 교체 알고리즘(Page Replacement Algorithm)이 사용된다.

  

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

 

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

 

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

  

 페이지 교체 알고리즘은 위와 같은데, 1번과 2번은 명칭만으로도 쉽게 이해가 될 것이다. LRU Approximation에 대해 간략히 설명하자면, 각 페이지들을 Circular queue형태로 나타낸 후 LRU에 의해 희생 페이지(Victim Page)가 선택되었을 때 해당하는 queue의 bit가 0이면 해당 페이지를 제거한다. bit가 1이면 0으로 설정한다.(Second Chance) 


 

  

-끝-





출처 및 참고

https://ko.wikipedia.org/wiki/





«   2022/06   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함
Total
810,040
Today
21
Yesterday
243