※[리눅스 커널 내부구조]책을 읽고 요약한 내용입니다.
초창기에 컴퓨터가 개발될 때 부터 사용자는 시스템에 물리적으로 존재하는것보다 더 많은 양의 메모리를 필요로 했다.
그중에서 가장 성공적이며 지금 대부분의 시스템에서 사용하는 방법이 '가상메모리'방식이다.
가상메모리
가상메모리는 실제 시스템에 존재하는 물리메모리의 크기와 관계없이 가상적인 주소공간을 사용자 태스크에게 제공한다.
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구조에서도 모두 효율적으로 수행될 수 있도록 설계되었다.
'Today I learned' 카테고리의 다른 글
버디할당자의 페이지할당과정 및 물리메모리할당 코드분석 (0) | 2019.05.22 |
---|---|
리눅스 물리메모리 관리구조 (0) | 2019.05.21 |
iamroot 오리엔테이션 (0) | 2019.05.20 |
MyBuilder 1일차 교육 정리 (0) | 2019.04.25 |
HTTP request Parser 코드 분석(JAVA) (0) | 2019.04.22 |
댓글