다중 버퍼링
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
더블 버퍼링은 컴퓨터 그래픽스에서 화면 깜빡임, 화면 찢김 등의 문제를 줄여 그래픽을 부드럽게 표시하기 위한 기술이다. 소프트웨어적으로는 두 개의 버퍼(백 버퍼, 프론트 버퍼)를 사용하여 그림을 그리는 동안 사용자가 중간 과정을 보지 않도록 하고, 페이지 플립 방식을 통해 버퍼 간의 빠른 전환을 가능하게 한다. 트리플 버퍼링은 더블 버퍼링보다 향상된 성능을 제공하며, 쿼드 버퍼링은 입체 시각 구현을 위해 사용된다. DMA 전송에서도 더블 버퍼링은 특정 주소 지정 요구 사항을 충족하기 위해 사용되며, 비디오 신호의 인터레이싱 또는 디인터레이싱을 용이하게 하는 데에도 활용된다.
더 읽어볼만한 페이지
- 컴퓨터 그래픽스 알고리즘 - 알파 합성
알파 합성은 이미지의 투명도를 표현하고 합성하는 기술로, 알파 채널을 사용하여 투명도 정보를 저장하고 스트레이트 알파와 프리멀티플라이드 알파 방식으로 이미지를 합성하며, PNG, TIFF, GIF 등 다양한 이미지 형식이 이를 지원한다. - 컴퓨터 그래픽스 알고리즘 - 클리어타입
클리어타입은 마이크로소프트에서 개발한 서브픽셀 렌더링 기술로, LCD와 같은 평판 모니터에서 텍스트 가독성을 향상시키기 위해 픽셀을 구성하는 서브픽셀을 개별적으로 제어하여 글꼴의 앤티에일리어싱 효과를 개선하고 텍스트를 더 부드럽게 보이도록 하는 기술이다. - 영상 처리 - 컴퓨터 비전
컴퓨터 비전은 디지털 이미지나 비디오로부터 고차원적 이해를 얻는 학제적 연구 분야로, 인간 시각 시스템 자동화 및 인공 시스템 이론 연구를 목표로 하며, 딥러닝 기술 발전으로 다양한 분야에 응용되고 있다. - 영상 처리 - 워터마크
워터마크는 종이 제조 시 두께 차이를 이용해 만들어지는 표식으로, 위조 방지를 위해 지폐나 여권 등에 사용되며 댄디 롤 등의 제작 기법을 통해 만들어지고 컴퓨터 프린터 인쇄 기술로도 활용된다.
다중 버퍼링 | |
---|---|
다중 버퍼링 | |
유형 | 컴퓨터 과학 |
하위 분류 | 버퍼링 |
개요 | |
목적 | 데이터 흐름을 원활하게 처리 |
작동 원리 | 여러 개의 버퍼를 사용하여 데이터를 일시적으로 저장하고 처리 |
이점 | |
성능 향상 | 입출력 작업과 계산 작업을 병렬로 처리하여 시스템 성능을 향상 |
대기 시간 감소 | 데이터 처리 지연을 줄여 사용자 경험을 개선 |
활용 분야 | |
비디오 게임 | 화면 깜빡임 감소 및 부드러운 애니메이션 구현 |
그래픽 소프트웨어 | 복잡한 이미지 처리 작업의 효율성 향상 |
스트리밍 미디어 | 끊김 없는 영상 및 오디오 재생 |
운영 체제 | 디스크 입출력 및 네트워크 통신 성능 최적화 |
구현 방법 | |
이중 버퍼링 | 두 개의 버퍼를 사용하여 데이터를 교대로 읽고 쓰는 방식 |
삼중 버퍼링 | 세 개의 버퍼를 사용하여 더욱 안정적인 데이터 처리 |
원형 버퍼링 | 고정된 크기의 버퍼를 원형으로 사용하여 데이터를 효율적으로 관리 |
고려 사항 | |
메모리 사용량 | 버퍼의 크기와 개수를 적절하게 설정하여 메모리 낭비를 방지 |
동기화 문제 | 여러 스레드에서 버퍼에 접근할 때 데이터 일관성을 유지하기 위한 동기화 메커니즘 필요 |
관련 기술 | |
DMA (Direct Memory Access) | CPU의 개입 없이 직접 메모리에 데이터를 전송하는 기술 |
인터럽트 | 특정 이벤트 발생 시 CPU에게 알리는 신호 |
추가 정보 | |
영어 명칭 | Multiple buffering |
2. 컴퓨터 그래픽스에서의 더블 버퍼링
컴퓨터 그래픽스에서 '''더블 버퍼링'''은 끊김 현상, 화면 찢김 등의 문제를 줄이고 그래픽을 부드럽게 표시하는 기술이다.
컴퓨터 그래픽스에서, 프로그램을 표시할 때 픽셀을 두 번 이상 변경하지 않고 화면을 표시하는 것은 어렵다. 예를 들어, 텍스트 페이지를 업데이트할 때, 이전 글자와 새 글자에서 변경되는 부분의 픽셀만 지우는 것보다 전체 페이지를 지우고 다시 글자를 그리는 것이 훨씬 쉽다. 그러나 이 과정에서 깜빡임이 발생할 수 있다. 또한, 컴퓨터 모니터는 보이는 비디오 페이지를 초당 약 60회 정도로 지속해서 다시 그리는데, 완벽한 업데이트를 하더라도 "새로운" 이미지와 다시 그려지지 않은 "오래된" 이미지가 수평 분할선으로 잠시 보일 수 있다. 이를 화면 찢김이라고 한다.
2. 1. 소프트웨어 더블 버퍼링
소프트웨어적인 이중 버퍼링 구현은 모든 드로잉 작업의 결과를 시스템 램의 특정 영역에 저장하며, 이러한 영역을 "백 버퍼"라고 한다. 모든 드로잉 작업이 완료되면 전체 영역(또는 변경된 부분만)이 비디오 램("프론트 버퍼")으로 복사된다. 이 복사는 일반적으로 화면 찢김을 방지하기 위해 모니터의 래스터 빔과 동기화된다.[1] 이중 버퍼링의 소프트웨어 구현은 백 버퍼에 할당된 시스템 메모리, 복사 작업에 소요되는 시간, 동기화를 기다리는 시간 때문에 단일 버퍼링보다 더 많은 메모리와 CPU 시간을 필요로 한다.[1]합성 윈도우 매니저는 종종 "복사" 작업을 윈도우의 위치를 지정하고, 스케일 또는 왜곡 효과로 변환하며, 일부를 투명하게 만드는 데 사용되는 "합성"과 결합한다.[1] 따라서 "프론트 버퍼"는 화면에서 보이는 합성 이미지 만을 포함할 수 있으며, 전체 윈도우 내용을 합성하지 않은 이미지를 포함하는 각 윈도우마다 다른 "백 버퍼"가 존재한다.[1]
2. 2. 페이지 플립
페이지 플립은 데이터를 복사하지 않고 두 개의 버퍼를 모두 표시하는 방식이다. 한 시점에는 한 버퍼가 모니터에 표시되고, 다른 배경 버퍼는 그려진다. 배경 버퍼 그리기가 완료되면 두 버퍼의 역할이 전환된다. 페이지 플립은 하드웨어 레지스터의 비디오 디스플레이 컨트롤러를 수정하여 수행하는데, 이는 비디오 메모리에서 디스플레이 데이터 시작점의 포인터 값을 변경하는 것이다.[1]페이지 플립은 데이터를 복사하는 것보다 훨씬 빠르다. 또한 페이지 전환이 모니터의 수직 블랭킹 간격(비디오 데이터가 그려지지 않는 빈 기간) 동안 이루어지면 화면 찢김 현상이 발생하지 않는다. 현재 활성화되어 보이는 버퍼를 '프런트 버퍼', 배경 페이지를 '백 버퍼'라고 한다.[1]
2. 3. 트리플 버퍼링
트리플 버퍼링은 더블 버퍼링보다 향상된 성능을 제공할 수 있는 기술이다. 더블 버퍼링에서는 프로그램이 그림을 완성하고 복사하거나 교체할 때까지 기다려야 다음 그림을 그릴 수 있었다. 이 과정에서 몇 밀리초의 대기 시간이 발생하여 버퍼를 사용할 수 없는 문제가 있었다.하지만 트리플 버퍼링에서는 프로그램이 두 개의 백 버퍼를 사용하여 복사와 관계없이 즉시 그림 그리기를 시작할 수 있다. 그래픽 카드는 프론트 버퍼를 통해 모니터에 이미지를 표시하고, 이미지가 전송되면 프론트 버퍼는 가장 최근에 완성된 이미지를 가진 백 버퍼와 교체된다. 이러한 방식을 통해 소프트웨어와 그래픽 카드는 독립적으로 작동하며, 최소한의 지연 시간으로 이미지를 표시할 수 있게 된다.[1]
소프트웨어 알고리즘은 그래픽 하드웨어를 폴링하지 않고도 하드웨어가 렌더링할 수 있는 속도만큼 빠르게 프레임을 그릴 수 있다. 따라서 새로 고침 간격보다 빠르게 완료되는 프레임은 백 버퍼에서 여러 번 교체될 수 있으며, 심지어 덮어쓰기 전에 전혀 사용되지 않는 프레임이 기록될 수도 있다. 엔비디아(Nvidia)는 이러한 방식을 "패스트 싱크(Fast Sync)"라고 명명했다.[2]
트리플 버퍼링의 또 다른 방법은 스왑 체인을 세 개의 버퍼로 구성하는 것이다. 프로그램이 두 개의 백 버퍼에 그림을 모두 그린 후, 첫 번째 버퍼가 화면에 표시될 때까지 기다렸다가 다른 백 버퍼를 그리는 방식이다. (3개 길이의 선입선출 큐) 대부분의 윈도우 게임에서 트리플 버퍼링을 활성화할 때 이 방식을 사용하는 것으로 알려져 있다.
2. 3. 1. 쿼드 버퍼링
입체 시각 구현에서 좌안과 우안 각각의 이미지에 대해 이중 버퍼링을 사용하는 것으로, 총 4개의 버퍼를 사용한다. (트리플 버퍼링을 사용하면 버퍼가 6개이다.) 버퍼를 교환하거나 복사하는 명령은 일반적으로 두 쌍 모두에 한 번에 적용되므로, 어느 한쪽 눈이 다른 쪽 눈보다 오래된 이미지를 보지 않는다.쿼드 버퍼링은 그래픽 카드 드라이버에서 특별한 지원이 필요하며, 대부분의 소비자용 카드에서는 비활성화되어 있다. AMD의 라데온 HD 6000 시리즈 이상에서 지원한다.[3]
OpenGL[4] 및 Direct3D와 같은 3D 표준에서 쿼드 버퍼링을 지원한다.
3. DMA 전송에서의 더블 버퍼링
직접 메모리 접근(DMA) 전송을 위해 두 개의 버퍼 간에 데이터를 복사하는 데 사용되는 '''더블 버퍼링'''은 성능 향상이 아닌 장치의 특정 주소 지정 요구 사항을 충족하기 위해 사용된다. 특히 물리 주소 확장을 통해 더 넓은 주소 지정을 제공하는 시스템의 32비트 장치에서 사용된다.[5] 도스 및 윈도우 장치 드라이버에서 "더블 버퍼링"이라는 용어가 사용될 가능성이 높다. 리눅스와 BSD 소스 코드는 이것들을 "바운스 버퍼"라고 부른다.[6]
일부 프로그래머는 제로 카피 기술을 사용하여 이러한 종류의 더블 버퍼링을 피하려고 한다.
4. 기타 활용
이중 버퍼링은 비디오 신호의 인터레이싱 또는 디인터레이싱을 용이하게 하는 기술로도 사용된다.
5. 페트리 넷을 이용한 더블 버퍼링 모델링
페트리 넷은 이중 버퍼링과 같은 동시성 시스템을 모델링하고 분석하는 데 유용한 도구이다.
5. 1. 이중 버퍼링 페트리 넷
그림에 나타난 페트리넷은 이중 버퍼링을 보여준다. 전이 W1과 W2는 각각 버퍼 1과 2에 쓰는 것을 나타내고, R1과 R2는 각각 버퍼 1과 2에서 읽는 것을 나타낸다. 시작 시에는 전이 W1만 활성화된다. W1이 발생한 후, R1과 W2가 모두 활성화되어 병렬로 진행될 수 있다. 이들이 완료되면 R2와 W1이 병렬로 진행되고, 이런 식으로 반복된다.W1이 단독으로 발생하는 초기 과도 상태 이후, 이 시스템은 주기적이며 전이들은 항상 쌍으로 활성화된다 (각각 R1과 W2, R2와 W1).
참조
[1]
웹사이트
Triple Buffering: Why We Love It
http://www.anandtech[...]
AnandTech
2009-06-26
[2]
뉴스
The NVIDIA GeForce GTX 1080 & GTX 1070 Founders Editions Review: Kicking Off the FinFET Generation
http://www.anandtech[...]
2017-08-01
[3]
웹사이트
AMD Community
http://devgurus.amd.[...]
[4]
웹사이트
OpenGL 3.0 Specification, Chapter 4
http://www.opengl.or[...]
[5]
웹사이트
Physical Address Extension - PAE Memory and Windows
http://www.microsoft[...]
Microsoft Windows Hardware Development Central
2008-04-07
[6]
웹사이트
Understanding The Linux Virtual Memory Manager, 10.4 Bounce Buffers
http://www.chudov.co[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com