데이터 버퍼
컴퓨팅에서 버퍼(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 버퍼.[1]
- 윈도우 NT 커널은 또한 사운드 카드 및 네트워크 인터페이스 컨트롤러와 같은 느린 장치를 위한 버퍼로서 메인 메모리의 일부를 관리한다.[2][3]
- 비디오 카드의 프레임버퍼.
- 디스크(저장소)로 완전히 다운로드하는 대신 유튜브 및 넷플릭스(웹 버전이든 앱/소프트웨어 버전이든)와 같은 스트리밍 서비스에서 사용하는 스트리밍 버퍼.[4]
역사
인쇄 버퍼의 초기 언급은 1952년 SEAC 컴퓨터의 화상 처리의 선구자 러셀 A. Kirsch가 고안한 Outscriber이다:[5]
자동 디지털 컴퓨터의 설계에서 가장 심각한 문제들 가운데 하나는 연산 진행의 지연을 피하기 위해 충분히 빠른 수준으로 머신 외부로 계산된 결과를 도출해내는 것이다. 범용 컴퓨터가 마주치는 문제들 중 다수가, 출력된 데이터의 양이 상대적으로 너무 커서 컴퓨터가 이러한 데이터가 기존의 인쇄기에 입력되는 시간을 기다려야 할 만큼 심각한 비효율성을 초래한다는 것이다. 이러한 어려움은 SEAC에서 자기 기록 장치를 출력 장치로 제공함으로써 해결되었다. 이 장치들은 전자 타자기가 동작할 수 있는 속도의 최대 100배까지 기계로부터 정보를 받아올 수 있다. 그러므로 출력된 데이터를 기록할 때 더 나은 효율성을 달성할 수 있다. 즉, 메인 컴퓨터에 묶여있지 않고도 자기 기록 장치에서 인쇄 장치로 나중에 표기가 가능하다.
같이 보기
각주
- ↑ “Intel® 82576EB Gigabit Ethernet Controller Datasheet” (PDF). 《intel.com》. December 2011. 2025년 10월 18일에 확인함.
- ↑ “Network data buffer management - Windows drivers”.
- ↑ “DSBUFFERDESC Structure” (미국 영어). 《learn.microsoft.com》. 2025년 10월 18일에 확인함.
- ↑ https://developer.mozilla.org/en-US/docs/Web/API/MediaSource
- ↑ “SEAC Maintenance Manual: The Outscriber” (PDF). 《National Bureau of Standards Report》 2794. July 1953.[깨진 링크(과거 내용 찾기)]