[TIL] 컴퓨터 시스템 아키텍처

Single-processor system

Single-processor 시스템은 하나의 core를 가지는 하나의 CPU로 구성된다. CPU는 하나이지만 processor는 여러개일 수 있다. Disk I/O를 담당하는 컨트롤러는 특수 목적 processor라고 할 수 있다. 하는 일은 단순하지만, CPU에게 명령을 받아 맡은 일을 처리하는 엄연한 processor다.

Multiprocessor system

Multiprocessor 시스템은 CPU가 여러개인 시스템이다. 하나의 CPU가 여러개의 core를 가지는 경우도 포함한다.

한편, SMP(Symmetric multiprocessing)은 각 CPU 또는 코어가 모든 일을 나눠 처리하는 것을 말한다. 사용자 프로세스 뿐 아니라 운영체제 기능도 나눠 수행한다. 보통 서로 다른 두개의 CPU가 하나의 메인 메모리를 공유하는 형태로 설계된다.

멀티코어 시스템은 멀티프로세서 시스템보다 보통 효율적이다. 두개 이상의 CPU가 SMP 형태로 구성될 경우, 메인 메모리는 공유하지만 레지스터와 캐시는 각 CPU가 독자적으로 가지고 있게 된다. CPU간 데이터 교환은 버스(bus)를 통해 이뤄지는데, 하나의 칩 내에서 코어 간 데이터 교환보다 비효율적이다. 또, 공통의 자료구조를 공유하지 않기 때문에 불편하게 된다.

멀티코어 시스템은 L2캐시를 보통 공유한다. 각 코어는 레지스터와 L1(level 1) 캐시를 각각 가지고, L2는 공유함으로써 각 코어의 빠른 연산을 보장함과 동시에 데이터의 교호나도 보다 효율적으로 할 수 있게 한다.

더불어 멀티코어 시스템은 여러개의 단일 코어 CPU를 연결한 시스템보다 매우 적은 전력 소모량으로도 동작한다. 이는, 모바일이나 노트북과 같은 전원이 제한적인 상황에 매우 적합하다는 의미이다.

  • CPU는 명령을 실행하는 하드웨어다.
  • 프로세서는 하나 이상의 CPU를 가지는 물리 칩이다.
  • Core는 CPU의 기본 계산 단위(unit)다.

한편, 필요에 따라 여러 개의 물리적인 CPU를 시스템에 추가해야 할 수 있다. 컴퓨팅 파워를 높이는 어느 정도 효과적인 방법이지만, 일정 수 이상 CPU가 늘어나면 오히려 추가분 만큼 성능 향상을 기대하기 어려워 진다. 자원의 선점과 공유 등에 오버헤드 코스트가 점차 커지기 때문이다.

이를 해결하는 방법으로 non-uniform memory access(NUMA)라는 형태가 사용된다. 각 CPU는 상호연결되어 있고, 각 CPU는 각자 메모리를 가지고 있다. NUMA 시스템은 쉽개 성능을 향상시킬 수 있다. CPU와 메모리를 계속 추가해주면 되기 때문이다. 하지만, 리모트 메모리에 access하는 데에는 latency가 있는 문제 또한 존재한다.

운영체제가 주의깊게 메모리 관리를 함으로써 이런 비효율은 개선될 수 있다.

Clustered system

클러스터 시스템에 대한 정의는 벤더마다 다르다. 하지만 통용되는 정의는, 두개 이상의 독립적인 시스템으로 구성된다는 것이다. (각 시스템을 노드라고도 한다)

클러스터 시스템은 보통 스토리지를 공유하고, LAN이나 InfiniBand와 같은 네트워크를 통해 긴밀히 연결된다.

클러스터링은 고가용성(High-availability) 확보를 위해 많이 사용한다. 고가용성은 여분을 추가함으로써 보통 달성할 수 있다.

고가용성은 생존해 있는 하드웨어 수에 비례해 서비스가 제공되는 graceful degradation이나 fault tolerant를 의미하기도 한다.

클러스터링은 symmetric clustering과 asymmetric clustering으로 나뉜다. symmetric clustering은 가용자원이 항상 사용되므로 효율적이지만, 하나 이상의 어플리케이션이 동작할 수 있어야 하는 어려움이 있다. asymmetric clustering에서는 장비 하나는 hot-standby mode로 대기상태에서 활성상태인 장비를 모니터링 한다. 모니터링하던 활성상태의 장비가 문제가 생기면 바로 바통을 넘겨받는다.

클러스터링은 고성능의 컴퓨팅 환경을 제공하는 데도 이용될 수 있다. 각 클러스터에서 concurrent하게 어플리케이션을 작동시킬 수 있다. 이를 위해서는 병렬화 등을 고려해야 한다.

병렬 클러스터는 데이터에 대한 동시 접근을 관리하기 위해 보통 운영체제 외에 별도의 소프트웨어를 이용해야 한다. 이런 소프트웨어는 access control과 lock 기능을 제공하는데, 분산 락 매니저 (Distributed Loc Manager)와 같은 것들이 대표적이다.