버퍼

버퍼(Buffer) 란?

  • 데이터를 일시적으로 저장하는 임시 메모리 공간
  • 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관한다.
  • 한글로 번역하면 완충 기억기에 해당한다.

버퍼링(Buffering) 이란?

  • 버퍼를 활용하는 방식 또는 버퍼를 채우는 동작을 지칭한다.

버퍼의 역할

  • 컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용된다.
  • 예를 들어 입력 장치(e.g. 키보드)로부터 입력 데이터를 받는 경우 버퍼 안에 저장된다.
  • 데이터를 프린터와 같은 출력 장치로 내보낼 때 버퍼 안에 저장된다.
  • 또한 네트워크 상에서 자료를 주고 받을 때에도 버퍼 안에 데이터가 저장되며,
  • 스피커에 소리를 재생할 때, 하드웨어 입출력에서도 사용된다.

버퍼 방식

1. 단일 버퍼링 (single buffering)

  • 데이터의 흐름에 있어서 하나의 버퍼만을 사용하는 경우이다.
  • 동작 방식 : 입력 채널이 데이터를 버퍼에 저장이 완료되면, 이후 프로세서가 처리하는 방식으로 진행된다.
  • 단점 : 데이터를 채우는 동안(I/O 작업)에는 데이터 처리(processing)가 불가하고, 처리하는 동안에는 데이터를 채울 수 없어 대기 시간(Idle time)이 발생한다. 즉 효율이 떨어진다.

2. 다중 버퍼링 (multiple buffering)

(1) 이중 버퍼링 (double buffering)

  • 데이터 흐름에 있어서 두 개의 버퍼를 사용하는 경우이다.
  • 동작 방식 : 하나의 버퍼(A)에 데이터를 채우는 동안, 다른 버퍼(B)에 이미 채워진 데이터를 가져와 처리한다. 버퍼 A가 다 차고 버퍼 B의 처리가 끝나면, 역할을 바꿔서 A의 데이터를 처리하는 동안 B에 다음 데이터를 채운다.
  • 이러한 구조로 인해 데이터에 대한 저장과 처리가 동시에 일어날 수 있다.
  • 플립플롭 버퍼링(flip-flop buffering) : 이렇게 두 개의 버퍼를 서로 교대로 사용하는 방법을 지칭
  • 장점 : 데이터 입출력과 처리가 동시에 진행될 수 있어 버퍼링의 대기 시간을 크게 줄여준다. 비디오 재생이나 게임처럼 끊김 없는 데이터 처리가 중요할 때 필수적임.

(2) 그 외

  • 삼중 버퍼링(triple buffering) : 세 개의 버퍼를 사용하는 방식
  • 순환 버퍼링(circular buffering) : 여러 개의 버퍼를 번갈아 사용하는 방식
  • 장점 : 이중 버퍼링을 확장한 개념으로, 데이터 생산 속도와 소비 속도가 일정하지 않을 때 변동을 흡수하며 더 유연하고 안정적으로 데이터 처리 가능. 스트리밍이나 키보드 입력 처리 등에서 효과적.

비교표

구분 버퍼 개수 장점 단점
단일 버퍼링 1개 구현이 간단 입출력과 처리 동시 진행 불가 > 효율 낮음
이중 버퍼링 2개 입출력과 처리 동시 진행 가능 단일 버퍼링보다 복잡
순환 버퍼링 3개 이상 속도 차이가 있는 작업 간 처리 유연성 구현 복잡, 버퍼 상태 관리 필요

버퍼 오버플로

  • 버퍼에 데이터를 쓰는 소프트웨어가 버퍼의 용량을 초과할 때, 인접한 위치의 메모리에 데이터를 덮어쓰는 비정상적인 현상
  • 프로그램 실행을 방해하거나, 데이터의 유출을 노리는 공격자가 악용할 수 있다.

Reference

Wikipedia - buffer
Wikipedia - multiple buffering geeksforgeeks.org - i-o-buffering-and-its-various-techniques
cloudflare - what-is-buffering
cloudflare - buffer-overflow

Comments