. 9.0 가상메모리 개략
본문 바로가기
프로그래밍 공부/CSPP

9.0 가상메모리 개략

by 불냥이_ 2021. 1. 15.

가상 메모리는 세가지의 중요한 기능을 제공한다.

1. 메인 메모리를 디스크에 저장된 주소공간에 대한 캐시로 취급하여, 메인 메모리를 효율적으로 사용한다.

2. 각 프로세스에 통일된 주소공간을 제공함으로써 메모리 관리를 단순화한다.

3. 각 프로세스의 주소공간을 다른 프로세스에 의한 손상으로부터 보호한다.

 

CS의 지식이 전무한 나로서는 이 세가지가 어떤 것인지 잘 모르겠다.

그렇기에 일단 추측을 해보기로 한다.

 

1의 경우 :

 캐시는 CPU와 메인 메모리 사이에서 다시 사용할 가능성이 높은 데이터들을 임시로 보관하는 역할을 한다. 

그런데 메인 메모리를 디스크에 저장된 주소 공간에 대한 캐시로 취급한다는 것은 어떠한 의미일까?

메인 메모리가 연산할 때 필요한 디스크의 데이터 중에서 많이 쓰이는 (혹은 많이 쓰일 것 같은) 데이터들을 가상 메모리에 할당하여 사용하겠다는 뜻이 아닐까?

 

2의 경우 :

 각 프로세스에 통일된 주소 공간을 제공한다는 것은 어떤 것인가.

두 가지 경우로 추측된다.

1) 메모리의 어떤 구역을 할당하고, 그 안에서 주소공간을 제공해서 어떠한 데이터에 어떠한 주소가 할당되든 그 안에서만 놀기 때문에 관리가 용이해진다.

2) 주소부여에 규칙성이 있어서 쉽고 빠르게 접근이 가능하다.

 

3의 경우 :

 각 프로세스 주소공간을 다른 프로세스에 의한 손상으로부터 보호한다는 것은, 어떠한 프로세스의 주소공간을 할당할 때, 다른 프로세스 주소공간에 덮어 씌워서 저장하는 것을 방지한다라고 추측된다. 일종의 세그폴트?

 

물론 위는 100% 필자의 뇌피셜이다. 이제 공부를 계속해서 뇌피셜을 오피셜로 바꿔보겠다.

 

 

우선, 책에서는 왜 프로그래머가 가상메모리를 이해해야하는지에 대해 설명을 해놓았다.

 

 

 

  • 가상메모리는 중앙에 자리한다

 가상 메모리는 모든 컴퓨터 레벨에 존재하기 때문에 가상메모리를 이해하면 어떻게 시스템이 일반적으로 동작하는지 더 잘 이해하는데 도움이 된다.

 

  • 가상메모리는 강력하다.

 가상메모리는 어플리케이션에 메모리 블록을 생성하고 없애고, 메모리 블록을 디스크 파일의 부분으로 매핑하고, 메모리를 다른 프로세스들과 고유할 수 있는 강력한 기능을 준다.

 

-> 메모리 블록이 어떤 것인지, 매핑이 어떤 것인지 모른다. 두 가지를 체크해보자.

 

 

메모리 블록(memory block)은 컴퓨터 과학에서 운영 체제 또는 프로그램이 기억공간을 임의적으로 분할하여 사용하는 하나의 단위를 말한다. 블록의 크기가 일정한 것을 페이지, 그렇지 않은 것을 세그먼트라고 한다.

 

라고 위키백과에 나와있다. 일단 이런 것이 있다는 것을 알아두고 다음으로 넘어가겠다.

 

  • 가상메모리는 위험하다.

 어플리케이션이 변수를 참조하고, 포인터를 역참조하고 malloc등의 동적할당 패키지로 호출할 때마다 가상메모리와 상호작용한다. 만약 가상메모리가 잘못 사용되면 Segmentation Fault 나 Protection fault로 죽을 수도 있고, 혹은 잘못된 상태로 끝까지 실행될 수 있다. 

 

 

이러한 점에서 가상메모리를 이해하는 당위성이 주어진다.

이번 장에서는 두가지 각도로 가상메모리를 살펴본다. 전반부는 가상메모리가 어떻게 작동하는지, 후반부는 어떻게 가상메모리가 사용되고, 어플리케이션에 의해 관리되는지 설명한다. 

 

특히, 후반부에서는 프로그램에서 가상메모리가 어떻게 사용되고 관리되는지를 보여주며, 명시적 메모리 매핑과 malloc 패키지같은 동적 저장장치 할당기를 통해 가상메모리를 어떻게 관리하는지를 배울 것이다. 

 

 

 

 

From 나무위키 (가상 메모리 - 나무위키 (namu.wiki))

 

가상 메모리의 주요한 기능은 다음 3가지로 요약할 수 있다.

  • 주기억장치의 효율적 관리 : 주기억장치(대부분 RAM을 의미한다.) 를 하드디스크에 대한 캐시로 설정하여, 당장 사용하는 영역만 유지하고 쓰지 않는 데이터는 하드디스크로 옮긴 뒤, 필요할 때만 램에 데이터를 불러와 올리고 다시 사용하지 않으면 하드디스크로 내림으로써 램을 효과적으로 관리한다.

  • 메모리 관리의 단순화 : 각 프로세스마다 가상메모리의 통일된 주소 공간을 배정할 수 있으므로 메모리 관리가 단순해진다.

  • 메모리 용량 및 안정성 보장 : 한정된 공간의 램이 아닌 거의 무한한 가상메모리 공간을 배정함으로써 프로세스들끼리 메모리 침범이 일어날 여지를 크게 줄인다.

그렇다면 가상메모리라는 것은 RAM 등이 아닌 하드디스크 쪽에 있는 것일까. 

 

댓글