In/Out[Controller,Driver]
장치 컨트롤러,장치 드라이버
장치 컨트롤러는 입출력 장치를 컨트롤해주는 하드웨어라고 생각하시면 됩니다.
근데, 입/출력 장치에는 왜 장치 컨트롤러가 달려 있냐고 생각하면, 크게 2가지 이유 때문에 장치 컨트롤러라는 하드웨어가 부착 되어있습니다.
문제점
1. 입출력 장치에는 종류가 다양하고 매우 많습니다.
흔히 입출력 장치에는 모니터, 키보드, 마우스, CD-ROM, 스피커, 마이크 등등 종류가 매우 다양하고 가짓 수 또한 매우 많습니다.
하지만 이렇게 장치의 수와 종류가 다양하면 각 장치마다 속도, 데이터 전송 형식 등도 다양합니다.
이로인해 다양한 입/출력 장치와 정보를 주고받는 방식을 규격화하기 어렵다는 점이 존재합니다.
2. 일반적으로 CPU와 메모리의 데이터 전송률은 높지만 입출력 장치의 데이터 전송률은 낮습니다.
참고로 여기서 말하는 전송률은 데이터를 얼마나 빨리 교환할 수 있는지를 나타내는 지표입니다.
첫 번째 이유를 보듯이, 장치의 수와 종류가 다양하면 속도가 다르다고 했습니다.
이와 같이 CPU와 메모리처럼 전송률이 높은 장치는 1초에도 수많은 데이터를 주고 받을 수 있지만, 키보드나 마우스와 같이 상대적으로 전송률이 낮은 장치는 같은 시간 동안 데이터를 조금씩만 주고 받을 수 있습니다.
이런 이유로 입/출력 장치는 바로 컴퓨터에 연결되는 것이 아닌 장치 컨트롤러라는 하드웨어를 통해 연결되게 됩니다.
장치 컨트롤러
장치 컨트롤러는 3가지의 역할을 통해서 앞에서 언급한 문제들을 해결합니다.
CPU와 입출력 장치 간의 통신 중개
입출력 장치의 종류가 많아 정보 규격화가 어려웠던 문제는 장치 컨트롤러가 중간에서 번역가 같은 역할을 함으로써 문제가 해결됩니다.
오류 검출
장치 컨트롤러가 번역해주는 과정에서 자신과 연결된 입/출력 장치에 문제가 없는지를 체크합니다.
데이터 버퍼링
앞서 말했던 것처럼 CPU,메모리와 입출력 장치의 데이터 전송률은 차이가 있다고 말했었습니다.
이를 해결하기 위한 방법이 데이터 버퍼링입니다.
데이터 버퍼링에서 버퍼링은 전송률이 높은 장치와 낮은 장치 사이에 주고 받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법입니다.
즉, 장치 컨트롤러는 일반 적으로 전송률이 높은 CPU와 일반적으로 전송률이 낮은 입/출력 장치와의 전송률 차이를 데이터 버퍼링으로 완화한다는 뜻입니다.
쉽게 말하면 데이터를 버퍼라는 저장 공간에 조금씩 모았다가 한꺼번에 내보내거나, 데이터를 한 번에 많이 받아 조금씩 내보내는 방법이라고 생각하시면 됩니다.
장치 컨트롤러 내부
장치 컨트롤러 내부에는 복잡한 구조를 가지고 있지만 핵심 장치는 아래와 같습니다.
데이터 레지스터
데이터 레지스터는 말 그대로 CPU와 입/출력 장치 사이에 주고받을 데이터가 담기는 레지스터 입니다.
데이터 레지스터가 버퍼 역할을 합니다.
상태 레지스터
입/출력 장치가 입출력 작업을 할 준비가 되었는지, 작업이 완료 되었는지, 오류가 없는지 등의 상태에 관한 정보가 저장됩니다.
제어 레지스터
입출력 장치가 수행할 내용에 대한 제어 정보와 명령을 저장합니다.
장치 드라이버
장치 컨트롤러는 하드웨어라고 했습니다.
장치 드라이버는 장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램입니다.
장치 드라이버는 프로그램이기에 메모리에 저장됩니다.
결론
장치 컨트롤러는 입출력 장치를 제어하고 데이터를 주고 받는 하드웨어로, CPU와의 효율적인 통신 및 데이터 전송을 담당합니다.
이는 다양한 입출력 장치의 속도와 데이터 형식을 규격화하고, 데이터 버퍼링을 통해 전송 속도 차이를 완화하여 입출력 처리를 보다 효율적으로 수행합니다.
장치 드라이버는 운영 체제에서 장치 컨트롤러를 제어하고, 사용자 및 응용 프로그램이 입출력 장치를 편리하게 사용할 수 있도록 돕는 소프트웨어입니다.