버퍼
버퍼(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