입출력 장치와 컴퓨터 내부 연결 구조
입출력 장치(I/O Device)는 키보드, 마우스, 디스크, 프린터처럼 컴퓨터 외부에 연결되는 장치를 의미한다.
이러한 장치들이 컴퓨터 내부(CPU, 메모리)와 어떻게 연결되고 통신하는지를 이해하기 위해
장치 컨트롤러(Device Controller)와 장치 드라이버(Device Driver)의 개념을 살펴본다.
1. 장치 컨트롤러 (Device Controller)
1.1 장치 컨트롤러가 필요한 이유
입출력 장치는 CPU나 메모리에 비해 다루기 어렵다. 그 이유는 다음과 같다.
(1) 입출력 장치의 종류가 매우 다양함
- 키보드, 마우스, 모니터, 디스크, 네트워크 카드 등 입출력 장치는 종류가 많다.
- 각 장치마다 데이터 형식과 통신 방식이 다르기 때문에, CPU가 모든 장치를 직접 제어하기는 어렵다.
- 즉, 입출력 장치와 정보를 주고받는 방식을 하나의 규격으로 통일하기 어렵다.
(2) 입출력 장치의 데이터 전송률이 낮음
- 전송률이란, 단위 시간당 데이터를 얼마나 빠르게 주고받을 수 있는지를 나타내는 지표이다.
- CPU와 메모리는 매우 빠른 속도로 동작하지만, 입출력 장치는 상대적으로 느리다.
- 따라서 같은 시간 동안 교환할 수 있는 데이터의 양에 큰 차이가 발생한다.

1.2 장치 컨트롤러의 역할
이러한 문제를 해결하기 위해 입출력 장치는 컴퓨터에 직접 연결되지 않고,
장치 컨트롤러라는 하드웨어를 통해 연결된다.
장치 컨트롤러는 입출력 제어기, 입출력 모듈 등으로도 불리며,
본 문서에서는 장치 컨트롤러라는 용어를 사용한다.
장치 컨트롤러는 다음과 같은 역할을 수행한다.
- CPU와 입출력 장치 간의 통신 중개
- 입출력 과정에서 발생하는 오류 검출
- 데이터 버퍼링을 통한 속도 차이 완화
- 입출력 장치별 서로 다른 규격을 내부 규격으로 변환(번역)
즉, 장치 컨트롤러는 CPU와 입출력 장치 사이에서 번역가이자 중재자 역할을 수행한다.
1.3 데이터 버퍼링(Buffering)
데이터 버퍼링이란,
전송률이 높은 장치(CPU, 메모리)와 전송률이 낮은 장치(입출력 장치) 사이에서
주고받는 데이터를 버퍼(Buffer)라는 임시 저장 공간에 저장하여 속도 차이를 완화하는 방법이다.
- 빠른 쪽은 버퍼에 빠르게 데이터를 저장
- 느린 쪽은 자신의 속도에 맞게 버퍼의 데이터를 처리
이를 통해 전체 시스템의 효율이 향상된다.
1.4 장치 컨트롤러의 내부 구성
장치 컨트롤러는 일반적으로 다음과 같은 레지스터들로 구성된다.
- 데이터 레지스터 (Data Register)
- 상태 레지스터 (Status Register)
- 제어 레지스터 (Control Register)
(1) 데이터 레지스터
- CPU와 입출력 장치 사이에 실제로 주고받는 데이터가 저장되는 레지스터
- 전송률 차이를 완화하는 버퍼 역할을 수행
(2) 상태 레지스터
- 입출력 장치의 현재 상태 정보 저장
- 예: 정상 동작 여부, 오류 발생 여부, 작업 완료 여부 등
(3) 제어 레지스터
- 입출력 장치가 수행해야 할 동작에 대한 제어 정보와 명령 저장
- 예: 읽기/쓰기 시작, 중지, 초기화 등
2. 장치 드라이버 (Device Driver)
2.1 장치 드라이버의 개념

장치 드라이버란,
장치 컨트롤러의 동작을 감지하고 제어함으로써
장치 컨트롤러가 컴퓨터 내부(운영체제)와 정보를 주고받을 수 있도록 하는 소프트웨어이다.
- 장치 컨트롤러: 하드웨어
- 장치 드라이버: 소프트웨어
2.2 장치 드라이버의 역할
- 운영체제가 입출력 장치를 직접 제어하지 않고, 장치 드라이버를 통해 제어
- 장치별로 다른 제어 방식을 운영체제에 숨기고 공통 인터페이스 제공
- 새로운 하드웨어가 추가되어도 드라이버만 설치하면 사용 가능
즉, 장치 드라이버는
운영체제와 장치 컨트롤러 사이를 연결하는 소프트웨어적 다리라고 할 수 있다.
3. 정리
- 입출력 장치는 직접 CPU에 연결되지 않는다.
- 장치 컨트롤러(하드웨어)가 CPU와 입출력 장치 사이에서 통신을 중개한다.
- 장치 드라이버(소프트웨어)는 장치 컨트롤러를 제어하여 운영체제와 연결한다.
- 이 구조를 통해 다양한 입출력 장치를 효율적으로 관리할 수 있다.