하나의 master가 나머지 slave들을 관리 하기때문에 동기화의 문제(메모리 접근, 우선순위 등) 문제가 발생하지 않는다.
위의 문제가 없기 때문에 비교적 쉬운 구조이다.
Symmetric Multiprocessing
Master, slave 구조가 없다.
프로세서들은 메모리를 공유한다.
각각의 프로세서가 메모리에 접근이 가능하기때문에 동기화의 문제가 발생할 수 있다.
Memory access
UMA(Uniform memory access)
모든 프로세서가 상호 연결이 되어있어 하나의 메모리를 공유하는 기술이다. 즉, 동일한 bus를 공유한다는 뜻이다.
프로세서들은 모든 메모리 영역에 접근이 가능하며, 접근 시간이 동일하다.
하지만 메모리연결이 많아지는 구조에서는 효율성이 떨어진다.
NUMA(Non-uniformed memory access)
UMA의 경우와 다르게 각각의 CPU가 로컬 메모리를 가지게 됨으로 동시에 여러 작업을 진행 할 수 있다.
ex) CPU에 소켓이 여러개 있다고 가정했을때 물리적인 주소의 일정부분들을 각각의 소켓(bus)에 배정을 하고 local memory로 사용 할 수 있도록한다.
만약 로컬 메모리가 부족할 경우, 다른 곳에 배정된 메모리에 접근하여 사용할 수 있다.
프로세서와 메모리의 상대적인 위치에 따라서 접근 시간이 달라질 수 있다.
여담
Cluster 시스템을 생각해보자.
ex) k8s의 클러스터링 시스템을 사용한다고 가정할 경우 NUMA의 모델은 각각의 프로세서가 하나의 node가 되고 여러개의 node들이 합쳐 하나의 클러스터를 형성하게 된다.
나아가서 생각해보면 k8s의 경우 모든 노드의 헬스 체크 및 모니터링을 위해 chron job이 실행된다. 그러므로 이러한 cpu의 상황을 체크하기 위한 프로그램이 필요하다고 생각 할 수 있으며 NUMA의 경우도 master, slave 구조를 띄고 있다고 생각 할 수 있지 않을까?
장점
다수의 CPU를 통해 많은 일을 동시에 많은 일을 실행 시킬 수 있다.
여러 프로세서가 존재함으로 하나의 프로세서가 고장나더라도 문제가 생기지 않는다.
Multiprograming
CPU와 I/O 장치가 항상 일을 하도록 만들고 싶다.
I/O의 경우 CPU 보다 처리 시간이 매우 느리기때문에 시간적 괴리가 생긴다. 그러므로 I/O 작업이 이루어질 경우 CPU가 다른 일을 하도록 한다.