본문 바로가기
Linux/Kernels

메모리(Memory)관리-(1)

by neohtux 2016. 9. 6.
728x90

□ SMP(Symmetric Multiprocessing)

 - 복수 개의 CPU를 가지고 있는 컴퓨터 시스템 중 모든 CPU가 메모리와 입출력 버스 등을 공유하는 구조


□ NUMA(Non-Uniform Memory Access)

 - CPU들을 몇 개의 그룹으로 나누고 각각의 그룹에게 별도의 지역 메모리를 주는 구조




□ Bank

 - 리눅스에서 접근 속도가 같은 메모리의 집합

 - UMA구조(NUMA의 반대)는 한 개의 뱅크가 존재

 - NUMA구조라면 복수개의 뱅크가 존재



□ Node

 - 뱅크를 표현하는 구조 (~/include/linux/mmozone.h)

 - 만약 UMA 구조(Uniform Memory Access)의 시스템에서 리눅스가 수행된다면 한 개의 노드가 존재할 것이며,

  이 노드는 리눅스의 전역 변수인 contig_page_data를 통해 접근가능.


 - 만약 NUMA구조의 시스템에서 리눅스가 수행된다면 복수 개의 노드가 존재하는데

 복수 개의 노드는 리스트를 통해 관리되며 이는 pgdat_list라는 이름의 배열을 통해 접근가능

 따라서, 리눅스는 하드웨어 시스템에 관계없이 노드라는 일관된 자료구조를 통해서 전체 물리메모리를 접근 할 수 있게됨.





UMA구조라서 단일노드를 contig_page_data 변수가 가리키고 있던, 아니면 NUMA구조라서 pgdat_list라는 자료구조가 가리키고 있던지 간에,


어쨋든 하나의 노드는 pg_data_t 구조체를 통해 표현된다. 이 구조체는 해당 노드에 속해있는 물리메모리의 실제 양(node_present_pages)이나


해당 물리메모리가 메모리 맵의 몇 번지에 위치하고 있는지를 나타내기 위한 변수(node_start_pfn) 등이 정의 되어 있다.


또한 Zone 구조체를 담기 위한 배열(node_zones)과 zone의 개수를 담는 변수 (nr_zones)등이 선언되어 있다.


만약, 리눅스가 물리 메모리의 할당 요청을 받게 되면, 되도록 할당을 요청한 태스크가 수행되고 있는 CPU와 가까운 노드에서 메모리를 할당하려 한다.


리눅스는 태스크가 되도록 이전에 수행되었던 CPU에서 다시 수행되도록 하기 때문에 이러한 정책을 통해 보다 높은 성능을 얻을 수 있게 된다.

300x250

'Linux > Kernels' 카테고리의 다른 글

메모리(Memory)관리-(2)  (0) 2016.09.09
태스크(task)관리-(5)  (0) 2016.09.02
태스크(task)관리-(4)  (0) 2016.09.02
태스크(task)관리-(3)  (0) 2016.09.01
리눅스 커널  (0) 2016.08.31

댓글