데이터 버퍼

컴퓨팅에서 버퍼(buffer, )는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼링(buffering)이란 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 말한다. 다른 말로 '큐(Queue)'라고도 표현한다.

버퍼는 컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용된다.
보통 데이터는 키보드와 같은 입력 장치로부터 받거나 프린터와 같은 출력 장치로 내보낼 때 버퍼 안에 저장된다. 이는 전자 통신의 버퍼와 비유할 수 있다. 버퍼는 하드웨어나 소프트웨어에 추가될 수 있지만 버퍼는 상당수가 소프트웨어에 추가된다. 버퍼는 보통 속도가 계속 바뀔 수 있으므로 데이터 수신과 처리 속도에 차이가 있다. (예: 프린터 스풀러)

버퍼는 네트워크 상에서 자료를 주고 받을 때나 스피커에 소리를 재생할 때, 또는 디스크 드라이브와 같은 하드웨어의 입출력을 결합하는 데에 자주 이용된다. 버퍼는 또한 순서대로 데이터를 출력하는 FIFO 방식에서 보통 사용된다.

 응용 분야 
버퍼는 종종 하드웨어에 대한 입출력과 결합하여 사용된다. 예를 들어 디스크 드라이브, 네트워크와 자료를 주고받거나 스피커로 소리를 재생할 때 사용된다. 놀이공원의 롤러코스터 대기 줄은 이와 많은 유사점을 공유한다. 코스터를 타려는 사람들은 알 수 없거나 가변적인 속도로 들어오지만, 롤러코스터는 사람들(코스터가 도착하여 탑승할 때)을 한꺼번에 태울 수 있다. 대기 구역은 버퍼 역할을 하여, 놀이기구를 타려는 사람들이 기구를 이용할 수 있을 때까지 기다리는 일시적인 공간이 된다. 버퍼는 보통 FIFO (first in, first out) 방식으로 사용되어, 도착한 순서대로 자료를 출력한다.

버퍼는 파일 읽기나 쓰기와 같은 동기 작업이 물리적 디스크 하위 시스템에 접근하기 위해 하드웨어 인터럽트를 기다리며 차단되는 대신 빠르게 완료될 수 있도록 함으로써 애플리케이션 성능을 향상시킬 수 있다. 대신 운영 체제는 API 호출로부터 즉시 성공 결과를 반환할 수 있으며, 커널이 백그라운드에서 디스크 작업을 완료하는 동안 애플리케이션이 처리를 계속할 수 있게 한다. 애플리케이션이 디스크 하위 시스템의 블록 크기와 일치하지 않는 작은 블록의 자료를 읽거나 쓰는 경우 추가적인 이점을 얻을 수 있다. 버퍼를 사용하여 많은 작은 읽기 또는 쓰기 작업을 디스크 하위 시스템에 더 효율적인 블록 크기로 집계하거나, 읽기의 경우 때때로 디스크에 물리적으로 접근하는 것을 완전히 피할 수 있게 해준다.

 통신 버퍼 
통신에서 사용되는 버퍼 서브루틴 또는 저장 매체는 한 장치에서 다른 장치로 자료가 전송될 때 자료의 흐름 속도나 이벤트의 발생 시간 차이를 보정한다.

버퍼는 다음과 같은 다양한 목적으로 사용된다:
 서로 다른 속도로 작동하는 두 개의 디지털 회로 연결.
 나중에 사용하기 위해 자료 보관.
 데이터 스트림에서 타이밍 수정을 수행.
 이진 데이터 비트를 단위로 조작할 수 있는 그룹으로 수집.
 다른 작업이 일어날 수 있도록 신호의 전달 시간을 지연.

 예시 
 DOS의 CONFIG.SYS에 있는 BUFFERS 명령/구문.
 직렬 포트(UART)와 모뎀 사이의 버퍼. COM 포트 속도는 38400 bit/s일 수 있지만 모뎀은 14400 bit/s의 반송파만 가질 수 있다.
 하드 디스크 드라이브, 솔리드 스테이트 드라이브 또는 BD/DVD/CD 드라이브에 내장된 디스크 버퍼.
 이더넷 어댑터에 내장된 SRAM 버퍼. 
 윈도우 NT 커널은 또한 사운드 카드 및 네트워크 인터페이스 컨트롤러와 같은 느린 장치를 위한 버퍼로서 메인 메모리의 일부를 관리한다.
 비디오 카드의 프레임버퍼.
 디스크(저장소)로 완전히 다운로드하는 대신 유튜브 및 넷플릭스(웹 버전이든 앱/소프트웨어 버전이든)와 같은 스트리밍 서비스에서 사용하는 스트리밍 버퍼.https://developer.mozilla.org/en-US/docs/Web/API/MediaSource

 역사 
인쇄 버퍼의 초기 언급은 1952년 SEAC 컴퓨터의 화상 처리의 선구자 러셀 A. Kirsch가 고안한 Outscriber이다:

 같이 보기 
 캐시
 큐
 버퍼 오버플로
 버퍼
 스트리밍 미디어
 프레임 버퍼
 다중 버퍼링
 대기행렬이론

 각주 

분류:동기화
분류:컴퓨터 메모리