여러 주변장치는 메인보드 내의 버스로 연결된다. 그런데 버스에는 많은 종류의 장치가 연결 되기 때문에 버스를 1개만 사용하면 병목 현상이 발생한다. 따라서 여러 개의 버스를 묶어서 사용하는데, 이때 데이터가 지나다니는 하나의 통로를 채널이라고 부른다.
주변장치는 저마다 데이터 전송 속도가 다르기 때문에 채널을 무분별하게 사용하면 문제가 발생한다. 채널을 모든 주변장치가 공유하면 전체적으로 데이터 전송 속도가 느려진다.
여러 채널을 효율적으로 사용하는 방법은 속도가 비슷한 장치끼리 묶는 것이다.→ 전체 데이터 전송 속도 향상
초기의 컴퓨터는 주변장치가 많지 않아 CPU가 작업을 진행하다가 입출력 명령을 만나면 직접 입출력장치에서 데이터를 가져왔는데 이를 폴링(polling)방식 이라고 한다.
CPU 성능이 향상되고 주변장치의 종류도 다양해짐에 따라 CPU가 폴링 방식으로 주변장치를 관리하기 어려워져 모든 입출력을 입출력 제어기에 맡기는 구조로 바뀌었다. → 효율 ⏫
입출력 제어기는 2개의 채널, 즉 메인버스와 입출력 버스로 나뉘며, 메인버스는 고속으로 작동하는 CPU와 메모리가 사용하고 입출력 버스는 주변장치가 사용한다.
입출력 제어기를 사용함으로써 작업 효율을 높일 수 있지만, 한편으로 저속 주변장치 때문에 고속 주변장치의 데이터 전송이 느려지는 문제가 있다.
해결방안🧐 → 입출력 버스를 고속 입출력 버스와 저속 입출력 버스로 분리 운영
고속 입출력 버스에는 고속 주변장치를 연결하고 저속 입출력 버스에는 저속 주변장치를 연결, 두 버스 사이의 데이터 전송은 채널 선택기가 관리
📕 그래픽 카드는 메인버스에 바로 연결(계산능력이 CPU와 능가할 정도)
메모리는 CPU의 명령에 따라 작동하기 때문에 CPU의 명령 없이는 메모리에 접근❌
→ **직접 메모리 접근(DMA)**은 CPU의 도움 없이도 메모리에 접근할 수 있도록 입출력 제어기에 부여된 권한
입출력 제어기는 여러 채널에 연결된 주변장치로부터 전송된 데이터를 적절히 배분하여 하나의 데이터 흐름을 만든다. 이때 채널 선택기는 여러 채널에서 전송된 데이터 중 어떤 것을 메모리로 보낼지 결정한다.