본문 바로가기
Today I learned

메모리 관리기법과 가상메모리

by soheemon 2019. 5. 20.

※[리눅스 커널 내부구조]책을 읽고 요약한 내용입니다.

 

초창기에 컴퓨터가 개발될 때 부터 사용자는 시스템에 물리적으로 존재하는것보다 더 많은 양의 메모리를 필요로 했다.

그중에서 가장 성공적이며 지금 대부분의 시스템에서 사용하는 방법이 '가상메모리'방식이다.

 

가상메모리

가상메모리는 실제 시스템에 존재하는 물리메모리의 크기와 관계없이 가상적인 주소공간을 사용자 태스크에게 제공한다.

32bit의 CPU의 경우 2^32크기인 4GB를, 64bit의 CPU의 경우 2^64 크기의 주소공간을 사용자에게 할당한다.

(따라서 32bit CPU 기준으로 각 태스크마다 4GB의 공간을 가지고 있다고 할 수 있다.)

 

한가지 주의할점은, 물리적으로 4GB의 메모리를 전부 사용자 태스크에게 제공하는 것은 아니라는 점이다.

4GB라는 공간은 프로그래머에게 개념적으로 제공하는 공간이며, 실제로는 '사용자가 필요한 만큼'의 물리메모리를 제공한다.

 

따라서 가상메모리는 개념적으로 4GB 라는 큰 공간을 제공함과 동시에 물리메모리는 필요한 만큼의 메모리만 사용되므로 가능한 많은 태스크가 동시에 수행될 수 있다는 장점을 제공한다.

 

물리메모리 관리 자료구조

메모리라는 물리적 자원이 리눅스에서 어떻게 표현되고 있을까?

요즘은 복수개의 CPU를 가지고 있는 구조의 컴퓨터 시스템이 점차 일반화 되어가고 있다.

SMP(Symmetric multiprocsssing): 멀티프로세스 시스템에서 모든 CPU가 메모리와 입출력 버스등을 공유하는 구조

 

복수의 CPU가 메모리등의 자원을 공유하기 때문에 성능상 병목현상이 발생할 수 있다.

 

NUMA(Non-uniform memory Access): CPU들을 몇개의 그룹으로 나누고 각각의 그룹에게 별도의 지역메모리를 주는구조<--> UMA

 

NUMA 구조에서는 CPU에서 어떤 메모리가 접근하느냐에 따라서 성능상의 차이가 발생 할 수 있다.

예를들어 CPU는 자신에게 가까운곳에 위치하고 있는 메모리를 사용할 때 그렇지 않은 경우보다 빠르게 데이터를 읽어 올 수 있을것이다.

 

이는 각각의 구조에 적합한 메모리 정책을 사용해야 한다는것을 의미한다.

리눅스는 UMA구조나 NUMA구조에서도 모두 효율적으로 수행될 수 있도록 설계되었다.

댓글