Sep 11, 2007

I/O 버스. 과거와 현재의 I/O 버스

I/O 버스

이번화 강좌는 3회에 걸쳐서 과거와 현재의 I/O 버스들의 발전, 그리고 앞으로 나타날 I/O 버스의 종류 등에 대하여 이야기하고자 합니다. 여기에는 8bit ISA부터 시작해서 EISA, MCA 등을 비롯, 현재 사용되고 있는 PCI와 이제 점점 그 자리를 확고히 굳혀가는 64bit PCI, 그리고 앞으로 나타날 하이퍼트랜스포트/인피니밴드와 PCI Express라고 불리는 3GIO(3rd Generation I/O)가 포함될 것입니다. 이번회에서는 과거와 현재의 I/O 버스에 대해서 설명합니다.


과거부터 현재까지 사용되어온 확장슬롯의 종류
가장 오른쪽부터, 8bit ISA, 16bit ISA, EISA, 32bit/33MHz PCI, 32bit/66MHz PCI, 64bit/33MHz PCI, 64bit/66MHz PCI, 3.3V AGP, Universal AGP, 1.5V AGP, Universal AGP Pro, 1.5V AGP Pro

기본적으로 I/O 버스라고 하는 것은 데이터의 입출력(Input and Output)이 일어나는 모든 부분을 지칭한다. 고전적인 노스브릿지-사우스브릿지 구조에서, I/O 버스는 프로세서와 메모리, 노스브릿지 등을 이어주는 구조를 가진다. 아래의 일러스트에서 노란색-주황색-적색으로 이어지는 통로들이 바로 I/O 버스이다. (색상이 노란색에 가까울수록 보다 고속의 버스임을 의미한다)


현대의 시스템에서 사용되는 I/O 버스는 크게 3가지로 나뉘는데, 프로세서 버스와 메모리 버스, 그리고 주변기기들의 I/O 버스이다. 특히 일반적으로 I/O 버스라고 하면 이중에서 주변기기들 쪽의 I/O 버스, 즉 AGP나 PCI를 지칭한다. 이 글에서도 I/O 버스는 그러한 부분을 지칭하는데에 사용할 것이다.

I/O 버스는 각종 주변기기와 노스브릿지, 사우스브릿지 등을 연결해 주는데에 사용된다. 만약, 시스템의 기능을 확장하고자 한다면 바로 이 I/O 버스들이 메인보드 외부로 이어져야만 한다. 그래서 사용되는 것이 바로 확장슬롯이다. 즉, x86 PC 자체로써는 사용자들의 요구를 모두 만족시킬 수 없기 때문에 이 버스가 다른 기기들과 연결될 수 있는 수단이 있어야만 한다. 확장슬롯은 바로 이러한 역할을 제공한다. 확장슬롯을 갖춤으로써 시스템의 기능은 메인보드 바깥으로 확장될 수 있는 것이다.

일정한 규격을 갖춘 확장 슬롯의 제공으로 인해서 PC는 사용자가 원하는 대로 기능을 확장할 수 있게 되었으며 각 사용자의 요구에 따라서 거기에 맞는 기능들을 갖출 수 있게 되었다. 또한 프로세서와 시스템의 발전에 따라서 슬롯 역시 아래와 같은 세가지 요구를 충족시키기 위해 지속적으로 발전과 진화를 거듭해왔다.

o 보다 빠른 프로세서의 지원
o 증가하는 소프드웨어들의 데이터 요구량의 소화
o 대형 멀티미디어 데이터의 원활한 소화

위와 같은 요구사항들은 모두 최대한 빠른 속도를 가지는 버스를 요구한다. 그러나 놀랍게도 지금도 1984년에 처음 출시된 IBM PC/AT와 동일한 구조의 슬롯을 사용하는 부분이 있다. 그것은 바로 ISA로써 기존의 디바이스들에 대한 하위호환성을 유지하기 위해서 그다지 강력한 성능을 요구하지 않는 부분에 대해서 널리 사용되어 왔다. 하지만 강력한 성능을 요구하는 주변기기들에 대해서는 이후에 나온 PCI 등의 슬롯을 사용하고 있다.

I/O 버스의 세대구분
I/O 버스는 그 특징에 따라서 1세대, 2세대, 3세대로 구분할 수 있다.

1. 1세대 I/O - 리거시 버스(legacy bus)
PC개발 초기, 프로세서의 클럭이 느릴 때에는 I/O 버스 역시 느릴 수밖에 없었다. 당시 개발된 ISA 버스는 속도가 낮은 프로세서에 사용되기에는 충분했다. 이 때, 프로세서와 I/O 버스는 같은 속도의 버스를 사용하고 있었다.

그러나 프로세서의 속도는 점점 빨라져서 이들 ISA가 감당할 수 없게 되자 등장한 것이 16bit ISA이다. 그러나 그 이후, 프로세서의 외부 버스 크기가 32bit로 늘어나고 데이터 처리 요구량이 급격히 늘어나자 이들 버스로는 감당할 수 없게 되어서 등장한 것이 EISA와 MCA 버스이다. 하지만 이들 버스로도 역시 지속적으로 고속화되는 프로세서 버스를 감당해낼 수는 없었다.

그것은 이들 버스 방식이 기본적으로 초기 IBM PC에 사용되던 ISA에 기반하고 있기 때문이다. 즉, 클럭향상에 한계가 존재하며, 데이터의 전송방식에도 문제가 있었다.

이들 버스가 가지고 있는 리거시(legacy)라는 이름은 바로 이러한 특징에서 유래한다. 초창기의 IBM PC에서부터 계속 이어져 내려온 것이기 때문에 리거시(legacy : n. 유산, 유증(遺贈), 이어받은 것) 버스라고 불리게 되었다. 리거시 버스에는 ISA, EISA, MCA 등이 포함되며, 마찬가지 이유로 PS/2나 기존의 시리얼/패러럴 포트 등은 리거시 포트라고 불린다.

여하튼, 이러한 문제점으로 인해서 결국 1세대 I/O는 로컬버스로 대변되는 2세대 I/O에게 그 자리를 내주게 된다.

2. 2세대 I/O - 로컬버스(local bus)
VESA 및 PCI 버스가 사용되던 초기, 이들 버스에는 반드시 따라붙는 이름이 있었으니 바로 '로컬 버스'라는 것이다.

프로세서와 메모리의 속도가 점점 고속화되면서, 각종 주변기기 역시 고속화되었다. 특히, 윈도우즈(Windows)의 등장 이후, GUI의 중요성이 대단히 강조되었고, 이에 의해 그래픽카드가 필요로 하는 데이터 전송 대역폭은 계속 늘어났다. 또한, 하드디스크 드라이브를 위시한 저장매채들의 속도도 지속적으로 늘어나서 기존의 리거시 버스(legacy bus)로는 이러한 고속 기기를 제대로 지원할 수 없게 되었고, 고속의 버스가 필요해졌다.

그러나, 기존의 리거시 버스를 버릴 수는 없었다는 것이 바로 로컬 버스가 등장한 원인이다. 아무리 주변기기 속도가 빨라진다고 해도, 굳이 고속의 버스를 필요로 하지 않는 주변기기도 많았다. 모뎀 등이 그 대표적인 예로써, 모뎀은 현대의 ADSL 등을 쓴다고 해도 ISA로도 커버할 수 있다. 또한 당시 ISA 버스를 사용하는 주변기기는 대단히 많았다. 그리고, 사용자 인터페이스 중에서도 고속 인터페이스를 필요로 하지 않는 것이 많았다. 키보드와 마우스가 대표적인 사례이다. 아무리 키보드를 빨리 두드린다 하더라도 한글은 분당 800타에서 1,000타 정도가 된다. 아무리 잘해도 20kB/s의 속도를 넘길 수 없다. 마우스 역시 상황은 매일반이다. 결국 이러한 리거시 기기들 및 리거시 버스의 필요성이 지속적으로 잔존하고 있기 때문에 고속 버스로 모든것을 대체해 버릴 수는 없었다.

로컬 버스에서의 로컬(local)은 버스 중 일부분만을 고속 버스로 대체하고 있는 형태에서 유래되었다.


로컬 버스는 기존의 리거시 버스와는 별도로 존재하거나, 리거시 버스가 로컬버스에서의 특정 기기 아래쪽으로 연결되어 있기도 하다. 이러한 로컬버스의 도입으로 인해서 기존의 리거시 버스에서 사용하던 기기들이나 리거시 포트를 사용하던 기기들을 그대로 사용할 수 있음은 물론이며, 새로이 등장하는 고속의 I/O 컨트롤러나 그래픽 컨트롤러 등이 필요로 하는 빠른 속도를 지원해 줄 수 있게 되었다.

로컬 버스의 등장과 함께 칩셋의 역할은 점점 더 중요해지고, PCI의 등장에 이르러서는 노스브릿지-사우스브릿지로 이어지는 현재와 같은 칩셋의 토폴로지(topology)도 확립된다.


PCI 로컬버스가 도입된 초기의 칩셋 토폴로지

로컬버스가 도입되었던 초기, 프로세서는 L1 캐시만을 탑재하였고, L2캐시는 프로세서 외부에 존재했다. 프로세서와 캐시, 노스브릿지 사이는 프로세서 버스로, 그리고, 노스브릿지와 메모리 사이는 메모리 버스로 연결되었다.

노스브릿지 하위의 모든 주변기기들은 로컬버스 아래로 연결되었다. 그리고, 로컬버스의 하위에 다른 주변기기들을 연결하는 또하나의 브릿지가 존재했다. 전체적인 구조 상에서 노스브릿지는 위쪽에 있어서 노스(north)라는 이름이 붙었고, 사우스브릿지는 아래쪽에 있어서 사우스(south)라는 이름이 붙게 된다.(여기에 태클을 걸 독자도 있을 것이다. 북쪽의 브릿지, 남쪽의 브릿지를 제대로 쓴다면야 노던(northern) 브릿지, 서던(southern) 브릿지가 되야 할 터이다. 하지만, '관례'란게 있다. 지금까지 그렇게 불러왔고, 거의 고유명사화 되어버린 지금, 이걸 지적해서 고친들 무얼하겠는가. 어차피 지금까지 관례적으로 사우스브릿지라고 불러왔으므로 넘어가자.)

로컬버스는 처음에 VESA 버스가 탄생한 이후, PCI 방식으로 변경되었고, 그 이후 그래픽 카드가 연결되는 부분만을 별도로 분리한 AGP 버스가 등장한다.

3. 2세대 I/O의 진화 - Hub Architecture와 V-Link

프로세서의 속도가 보다 고속화되고, AGP 및 기타 주변기기의 속도 역시 지속적으로 빨라지면서, 위와 같은 노스브릿지-사우스브릿지의 구조는 한계에 부딪힌다. 그래서 3세대 칩셋들부터(주의 3세대 칩셋이 3세대 I/O를 사용하는 것은 아님)는 노스브릿지-사우스브릿지에 보다 고속의 인터페이스를 적용하고, 사우스브릿지가 PCI 컨트롤러가 되는 새로운 구조를 채택한다.

인텔이 이러한 구조를 처음 도입하면서 허브 아키텍쳐(hub architecture)라고 명명하였고, 노스브릿지와 사우스브릿지간을 잇는 고속의 버스는 인텔 허브 버스(Intel Hub Bus)라고 불린다. VIA 역시 유사한 구조를 채택하면서 V. Link(분명 VIA Link일테지..)라는 고속의 버스를 적용하였다.

이러한 새로운 구조가 채택되면서 64bit PCI 등의 고속 인터페이스가 적용되기 시작하였다. 64bit PCI는 노스브릿지에 직접 연결되는, 별도의 브릿지를 통해서 동작한다. 또한 최근의 서버용 보드에서는 64bit PCI를 넘어서, PCI-X가 사용되고 있다.

칩셋의 변경에 대한 상세한 설명은 이전에 올라왔던 칩셋에 대한 강좌를 참조하도록 하자.
관련강좌 : 칩셋 오딧세이 - 새로운 세대의 칩셋들

4. 3세대 I/O
3세대 I/O는 현재 많은 곳에서 개발에 참여하여, 앞으로 적용될 I/O 인터페이스이다. 이들의 개발목적은 보다 빠른 I/O를 제공함으로써 시스템에서의 병목현상을 해소하고, 보다 쉽게 시스템을 구축할 수 있도록 하는 것이다.



여기에는 하이퍼트랜스포트와 PCI Express(3GIO)가 있으며, 이에 대해서는 뒤에서 다시 설명될 것이다.