컴퓨터 바깥에는 현실 세계가 있다
CPU와 메모리만 놓고 보면 컴퓨터는 내부에서 0과 1을 빠르게 옮기고 계산하는 장치다. 하지만 그것만으로는 사람이 사용할 수 없다. 키보드를 눌러 글자를 입력하고, 마우스를 움직여 커서를 이동시키고, 화면에서 결과를 확인할 수 있어야 한다. 이 역할을 맡는 것이 입출력 장치다.
입력 장치는 현실의 움직임, 빛, 소리, 압력 같은 신호를 컴퓨터가 이해할 수 있는 디지털 데이터로 바꾼다. 출력 장치는 반대로 컴퓨터 안의 데이터를 사람이 볼 수 있거나 들을 수 있거나 만질 수 있는 형태로 바꾼다. 컴퓨터는 입출력 장치를 통해 세상과 연결된다.

입력은 신호를 데이터로 바꾸는 과정이다
키보드를 누르면 단순히 글자가 바로 컴퓨터에 들어가는 것이 아니다. 키 아래의 회로가 눌림을 감지하고, 키보드 내부의 작은 제어 회로가 "어떤 키가 눌렸다"는 정보를 숫자 코드로 만든다. 이 코드가 USB 같은 연결 통로를 지나 컴퓨터로 전달된다.
마우스도 비슷하다. 마우스의 센서는 바닥의 미세한 변화를 계속 읽고, 이동 방향과 거리를 계산한다. 버튼 클릭도 전기 신호로 감지된다. 컴퓨터는 이 정보를 받아 커서 위치를 바꾸거나 명령을 실행한다.
센서는 더 넓은 의미의 입력 장치다. 온도 센서는 온도를 전기 신호로 바꾸고, 카메라는 빛을 픽셀 데이터로 바꾸며, 마이크는 공기의 진동을 숫자 데이터로 바꾼다. 핵심은 같다. 현실의 연속적인 현상을 컴퓨터가 처리할 수 있는 0과 1의 값으로 변환하는 것이다.
화면은 픽셀을 계속 다시 그린다
모니터는 대표적인 출력 장치다. 컴퓨터는 화면에 표시할 내용을 픽셀 단위의 정보로 준비한다. 픽셀은 화면을 이루는 아주 작은 점이며, 각 픽셀에는 색상과 밝기 정보가 들어 있다.
이 픽셀 정보는 보통 프레임버퍼라는 메모리 공간에 저장된다. 프레임버퍼는 "현재 화면에 무엇을 그릴 것인가"를 담아 두는 영역이라고 생각하면 된다. 그래픽 장치는 이 데이터를 읽어 모니터로 보내고, 모니터는 그 정보를 바탕으로 화면을 표시한다.
동영상이나 게임 화면이 움직이는 이유는 화면 전체가 아주 빠르게 반복해서 갱신되기 때문이다. 한 장의 화면을 프레임이라고 하고, 초당 여러 프레임이 바뀌면 사람의 눈에는 움직임으로 보인다. 결국 화면 출력도 메모리에 있는 숫자 데이터를 빛의 패턴으로 바꾸는 과정이다.
컨트롤러와 드라이버는 장치의 차이를 숨긴다
키보드, 프린터, 저장장치, 그래픽 카드, 네트워크 장치는 모두 동작 방식이 다르다. CPU가 이 모든 장치의 세부 구조를 직접 알아야 한다면 컴퓨터는 매우 복잡해질 것이다.
그래서 장치에는 보통 장치 컨트롤러가 있다. 장치 컨트롤러는 하드웨어를 직접 제어하는 작은 회로다. 예를 들어 프린터 컨트롤러는 종이 이동, 잉크 분사, 인쇄 상태 같은 세부 작업을 처리한다. 컴퓨터는 컨트롤러에게 "이 데이터를 출력하라"는 식으로 비교적 단순한 명령을 보낸다.
운영체제 안에는 드라이버라는 소프트웨어가 있다. 드라이버는 운영체제와 장치 컨트롤러 사이의 통역자다. 운영체제는 드라이버를 통해 장치를 일정한 방식으로 다룰 수 있다. 사용자가 프린터 모델마다 다른 명령어를 알 필요가 없는 이유가 여기에 있다.
인터럽트는 CPU를 부르는 신호다
입출력 장치는 CPU보다 훨씬 느린 경우가 많다. CPU가 키보드 입력이 들어왔는지, 프린터 작업이 끝났는지 계속 기다리고만 있으면 많은 시간이 낭비된다.
이를 해결하는 방법이 인터럽트다. 인터럽트는 장치가 CPU에게 보내는 알림 신호다. 예를 들어 키가 눌리면 키보드 컨트롤러가 "입력이 발생했다"고 CPU에 알린다. 저장장치가 데이터를 다 읽었을 때도 "작업이 끝났다"고 알릴 수 있다.
CPU는 평소에는 다른 일을 하다가 인터럽트가 들어오면 잠시 현재 작업을 멈추고, 운영체제의 정해진 처리 코드로 이동한다. 필요한 일을 처리한 뒤 다시 원래 작업으로 돌아온다. 이 방식 덕분에 컴퓨터는 여러 장치의 요청에 빠르게 반응하면서도 CPU 시간을 효율적으로 사용할 수 있다.
버스와 포트는 데이터가 지나가는 길이다
입출력 데이터는 아무렇게나 이동하지 않는다. CPU, 메모리, 주변 장치는 버스라는 통신 통로를 통해 연결된다. 버스는 데이터, 주소, 제어 신호가 오가는 길이다. 어떤 장치와 통신할지, 어떤 데이터를 보낼지, 읽기인지 쓰기인지 같은 정보가 이 통로를 통해 전달된다.
포트는 장치를 연결하는 접점이다. USB 포트에 키보드나 마우스를 꽂으면 컴퓨터는 그 장치가 무엇인지 확인하고, 알맞은 드라이버를 통해 사용할 준비를 한다. 내부적으로는 버스와 컨트롤러가 데이터를 주고받으며 장치를 동작시킨다.
입출력의 원리는 단순히 주변기기를 연결하는 문제가 아니다. 현실의 신호를 디지털 데이터로 바꾸고, 계산 결과를 다시 현실의 형태로 되돌리는 과정이다. CPU와 메모리가 컴퓨터의 내부 계산을 맡는다면, 입출력 장치는 그 계산이 사람과 세상에 의미를 갖도록 만들어 준다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
