컴퓨터는 CPU와 메모리(필수장치), 입출력장치와 저장장치(주변장치)로 구성된다. 각 장치는 메인보드에 있는 버스로 연결된다.
버스를 여러 개 묶어서 사용하는데 이때 데이터가 지나다니는 하나의 통로를 채널이라고 부른다.
폴링 방식(polling): CPU가 작업을 진행하다가 입출력 명령을 만나면 직접 입출력 장치에서 데이터를 가져오는 방식이다.
입출력 제어기(I/O controller): CPU와 메모리 성능이 향상되고 주변장치의 종류가 다양해져 등장했다. 2개의 채널(메인버스, 입출력 버스)로 구성된다. 메인버스는 고속으로 작동하는 CPU와 메모리가 사용하고 입출력 버스는 주변장치가 사용한다.
입출력 제어기를 사용하면 저속 주변장치 때문에 고속 주변장치의 데이터 전송이 느려지는 문제가 있기 때문에 입출력 버스를 고속 입출력 버스와 저속 입출력 버스로 분리하여 운영하는 방식이다. 고속 입출력 버스와 저속 입출력 버스의 데이터 전송은 채널 선택기가 관리한다.
직접 메모리 접근(DMA)은 CPU의 도움 없이 메모리에 접근할 수 있도록 입출력 제어기에 부여된 권한으로, 입출력 제어기에는 직접 메모리에 접근하기 위한 DMA 제어기가 있다.
오늘날의 입출력 시스템에서는 아래 그림과 같이 CPU가 작업하는 공간과 DMA 제어기가 데이터를 옮기는 공간을 분리하여 메인메모리를 운영한다. 이를 메모리 맵 입출력(memory mapped I/O)라고 부른다. 메모리 맵 입출력은 메인메모리의 주소 공간 중 일부를 DMA 제어기에 할당하여 작업 공간이 겹치는 것을 막는다.
입출력 제어기와 DMA 제어기를 통한 작업이 완료되면 입출력 제어기는 CPU에 인터럽트를 보낸다.
여러 인터럽트 중 어떤 인터럽트가 발생했는지 파악하기 위해 사용하는 자료 구조이다. 인터럽트 벡터 값이 1이면 인터럽트가 발생했다는 의미이다.
인터럽트의 처리 방법을 함수 형태로 만들어놓은 것이다. 운영체제는 인터럽트가 발생하면 인터럽트 핸들러를 호출하여 작업을 한다. 사용자 인터럽트인 시그널의 경우 자신이 만든 인터럽트 핸들러를 등록할 수도 있다.
버퍼는 속도가 다른 두 장치의 속도 차이를 완화하는 역할을 한다.
운영체제는 버퍼가 꽉 찼을 때 입출력장치로 데이터를 전송하도록 설계되어 있다. 그러나 버퍼가 다 차지 않으면 입출력장치레 자료가 전송되지 않는데, 이 상태에서 저장장치를 제거하면 버퍼 안의 데이터가 저장되지 않는 문제가 발생한다. 따라서 하드웨어 안전 제거를 사용할 것을 권장한다.