CS

[OS] 가상 메모리(Virtual Memory System)란?

KJihun 2023. 10. 7. 11:54
728x90

가상 메모리 등장 배경

프로세스는 작업 처리를 위해 메모리를 할당 받아야 한다.

컴퓨터의 실제 메모리 공간보다 프로세스가 처리해야할 메모리 공간이 더 많을 수 있다.

이 부분을 해결하기 위해 가상 메모리가 등장하게 되었다.

가상 메모리는 물리 메모리보다 큰 프로세스나 여러 개의 프로세스들을 동시에 실행시킬 수 있도록 하기 위한 방법이다.

 

 

가상 메모리란?

가상 메모리(Virtual Memory)는 운영체제에서 실제 물리 메모리(RAM)보다 큰 주소 공간을 프로세스에 제공하기 위해 사용되는 기술이다.

 

CPU가 프로세스를 처리할 때, 특정 시점에 프로세스의 특정 메모리를 접근(액세스)하는 주소값은 아주 작을 것이다.

가상 메모리는 프로세스와 관련된 주소값을 저장하는 메모리 공간을 분리하여 관리함으로써

내 컴퓨터의 메모리가 실제 메모리보다 많아 보이게하는 기술이다.

이때 사용하는 개념이 가상 주소와 물리 주소이다.

 

 

가상 주소(Virtual Address)

① 프로세스가 참조하는 주소이다.

 

② 가상 주소는 프로세스마다 독립적으로 할당 되며, 프로세스는 자신만의 가상 주소 공간을 가지고 있다고 생각한다. 

 

③ 가상 주소는 논리적인 주소이다. 운영체제는 프로세스에게 연속된 가상 주소 공간을 제공하고, 이를 필요한 크기의 물리 메모리 페이지로 매핑 한다. 이 작업으로 메모리 공간의 낭비를 최소화 할 수 있다.

 

④ 만약, 가상 주소를 사용하지 않고 프로세스의 모든 데이터들을 물리 주소로 접근한다고 생각해보자. 여러 개의 프로세스들이 실행되면서 같은 물리 주소를 접근해서 데이터를 수정하고, 민감 데이터를 쉽게 읽어온다면 오류가 발생할 것이다.

 

⑤ 프로세스마다 다른 가상 주소를 사용하면 같은 물리 주소 위치를 가르키고 있을 수 있지만, 읽고 쓰고할 수 있는 공간은 가상 주소 공간에서만 제한되므로 실제 물리 주소의 데이터들이 수정되거나, 프로세스들이 동시에 접근해서 충돌하는 일은 없을 것이다. 

 

 

물리 주소(Physical Address)

① 실제 메모리의 주소이며 하드웨어에서 직접 접근 가능한 주소이다.

 

② 시스템 전체적으로 공유되는 주소이며, 여러 프로세스가 공유 메모리 영역을 사용할 때 사용된다.

 

③ 프로세스가 물리 주소로 접근하려면, 물리 주소를 가르키고 있는 가상 주소를 물리 주소로 변환해야 한다.


가상 메모리 동작 원리

프로세스는 생성될 때 메모리를 일정하게 할당 받는다. 그런데 프로세스가 모든 메모리 공간을 사용하는 것이 아니라, 처리해야할 데이터나 작업에 따라 공간을 모두 사용할 수도 있고, 공간이 남을 수도 있다. 이 때, 프로세스가 차지하는 실제 메모리 공간만 물리 메모리(RAM)에 넣고, 이 물리 메모리를 접근할 수 있는 가상 주소를 프로세스의 메모리에 저장한다. 

 

그 이후, 프로세스가 작업을 처리하기 위해 CPU를 호출하고, CPU는 작업을 처리하기 위해 특정 데이터를 조회할 수 있다. 이때, 특정 데이터가 물리 메모리(RAM) 어디에 있는지는 데이터의 가상 주소를 통해 알 수 있다. 프로세스는 CPU에게 작업을 요청할 때 데이터의 가상 주소를 넘긴다.

 

가상 주소는 실제 물리 주소와 이어져 있지만, 가상 주소가 차지하는 가상 메모리 공간은 아주 작다. 실제 데이터는 큰 물리 공간을 차지하고 있겠지만, 가상 메모리로 인해 아주 작은 메모리 공간을 차지하면서 실제 메모리와 연결되어있는 것이다. 

 

CPU는 작업을 처리하기 위해 실제 데이터가 어디에 있는지 물리 주소 위치를 알아야하는데, 이때 가상 주소를 물리 주소로 변환하는 작업을 거친다. 가상 주소를 물리 주소로 변환하는 작업을 하는 시스템은 MMU 이다.


MMU(Memory Management Unit)

①MMU는 가상 주소를 물리 주소로 변환하고, 메모리를 보호하는 기능을 수행한다.

 

② MMU를 사용하게 되면, CPU는 각 물리 메모리에 접근하기 이전에 메모리 주소 변환 작업을 거친다. 

 

③ MMU는 굉장히 빈번하게 작업을 처리해야 하기 때문에, 소프트웨어 코드만으로는 이 작업을 수행하기 벅차다. 그래서 메모리 관리 작업을 하는 특수한 하드웨어를 따로 컴퓨터에 설치해야 한다. (실제로는 작은 칩을 컴퓨터에 꽂아서 사용한다)

 

④ MMU가 메모리를 일일이 가상 주소에서 물리 주소로 변환하게 되면, 작업 부하가 높아질 수 있다. 그래서 MMU는 실제 물리 메모리 공간을 여러 페이지 단위로 나눠서, 각 페이지 단위로 데이터를 처리한다.


단점

메모리와 디스크 사이에 스와핑이 발생하기 때문에 스와핑 메모리가 필요하다. 

 

결론

가상 메모리에서는 각 데이터 메모리를 페이지 단위로 저장 및 관리하고, 그 페이지의 가상 주소를 물리 주소로 변환해서 실제 물리 데이터에 접근할 수 있다.