더블버퍼링 예제

이중 버퍼링이라는 용어는 DMA(직접 메모리 액세스) 전송을 위해 두 버퍼 간에 데이터를 복사하는 데 사용되며, 성능 향상이 아니라 장치의 특정 주소 지정 요구 사항을 충족하기 위해(더 넓은 주소 지정이 제공되는 시스템의 esp. 32비트 장치) 실제 주소 확장을 통해). [4] Microsoft Windows 장치 드라이버는 “이중 버퍼링”이라는 용어가 사용될 가능성이 높은 장소로 특히 주목할 만합니다. 리눅스와 BSD 소스 코드는 이러한 “바운스 버퍼”를 호출합니다. [5] 이중 버퍼는 매우 간단하며, 지금까지 본 예제는 발생할 가능성이 있는 대부분의 변형을 다룹니다. 이 패턴을 구현할 때 두 가지 주요 결정이 내려옵니다. 이중 버퍼링의 소프트웨어 구현에는 모든 그리기 작업이 시스템 RAM의 일부 영역에 결과를 저장합니다. 이러한 영역을 “백 버퍼”라고도 합니다. 모든 그리기 작업이 완료된 것으로 간주되면 전체 영역(또는 변경된 부분만)이 비디오 RAM(“전면 버퍼”)으로 복사됩니다. 이 복사는 일반적으로 찢어지지 않도록 모니터의 래스터 빔과 동기화됩니다.

이중 버퍼링의 소프트웨어 구현은 백 버퍼에 할당된 시스템 메모리, 복사 작업에 할당된 시간 및 동기화를 기다리는 시간 때문에 단일 버퍼링보다 더 많은 메모리와 CPU 시간이 필요합니다. 컴퓨터 과학에서 실행 중인 탭을 사용할 수 없거나 해제해서는 안 되는 상황이 일반적입니다(예: 오디오 스트림). 또한 컴퓨터는 일반적으로 스트림보다는 데이터 청크를 처리하는 것을 선호합니다. 이러한 상황에서는 이중 버퍼링이 자주 사용됩니다. 이미 이중 버퍼링을 사용하는 시스템에서는 트리플 버퍼링을 구현하기가 간단합니다. 대부분의 경우 수정이 필요한 기본 시스템 없이 비디오 드라이버에 추가할 수 있습니다. 이 구현은 실제 비디오 메모리가 수행하는 것과 동일한 양의 메모리를 흡수하며, 이 경우 800 * 600 * 4 = 1920000 바이트 = 약 1,83MB입니다. 단일 버퍼링을 사용하면 비디오 해상도(디스플레이 자체만)를 사용하여 1,83MB의 RAM이 필요하지만 이중 버퍼링은 2 * 1,83MB = 약 3,66MB가 필요합니다. 해상도가 높을수록 더 많은 메모리가 필요합니다.