KR101087956B1 - 원격 디스플레이에 선택적으로 전송하기 위해 드로잉 프리미티브를 식별하는 방법 및 시스템 - Google Patents

원격 디스플레이에 선택적으로 전송하기 위해 드로잉 프리미티브를 식별하는 방법 및 시스템 Download PDF

Info

Publication number
KR101087956B1
KR101087956B1 KR1020100037634A KR20100037634A KR101087956B1 KR 101087956 B1 KR101087956 B1 KR 101087956B1 KR 1020100037634 A KR1020100037634 A KR 1020100037634A KR 20100037634 A KR20100037634 A KR 20100037634A KR 101087956 B1 KR101087956 B1 KR 101087956B1
Authority
KR
South Korea
Prior art keywords
framebuffer
queue
video adapter
display
display data
Prior art date
Application number
KR1020100037634A
Other languages
English (en)
Other versions
KR20100117044A (ko
Inventor
더스틴 바이포드
안토니 캐논
래미시 다란
Original Assignee
브이엠웨어, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 브이엠웨어, 인코포레이티드 filed Critical 브이엠웨어, 인코포레이티드
Publication of KR20100117044A publication Critical patent/KR20100117044A/ko
Application granted granted Critical
Publication of KR101087956B1 publication Critical patent/KR101087956B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1454Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay
    • G06F3/1462Digital output to display device ; Cooperation and interconnection of the display device with other functional units involving copying of the display data of a local workstation or window to a remote workstation or window so that an actual copy of the data is displayed simultaneously on two or more displays, e.g. teledisplay with means for detecting differences between the image stored in the host and the images displayed on the remote displays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1415Digital output to display device ; Cooperation and interconnection of the display device with other functional units with means for detecting differences between the image stored in the host and the images displayed on the displays
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/003Details of a display terminal, the details relating to the control arrangement of the display terminal and to the interfaces thereto
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2310/00Command of the display device
    • G09G2310/04Partial updating of the display screen
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2350/00Solving problems of bandwidth in display systems
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/18Use of a frame buffer in a display terminal, inclusive of the display panel

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Controls And Circuits For Display Device (AREA)
  • Digital Computer Display Output (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

원격 데스크톱 서버는 인코딩되고 원격 클라이언트 디스플레이로 전송될 디스플레이 데이터를 포함하는 2차 프레임버퍼를 유지하는 디스플레이 인코더 및 상기 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터를 실행시키는 디스플레이 프리미티브의 리스트를 포함한다. 상기 디스플레이 인코더는 드로잉 프리미티브의 리스트를 수신하는 요청을, 실행시 1차 프레임버퍼를 업데이트하는 드로잉 프리미티브를 수신하고 추적하는 비디오 어댑터 드라이브에 전송한다.

Description

원격 디스플레이에 선택적으로 전송하기 위해 드로잉 프리미티브를 식별하는 방법 및 시스템{METHOD AND SYSTEM FOR IDENTIFYING DRAWING PRIMITIVES FOR SELECTIVE TRANSMISSION TO A REMOTE DISPLAY}
본 출원은 제목이 "원격 디스플레이에 전송하기 위해 프레임버퍼를 복제하기 위한 방법 및 시스템"(대리인 파일 번호: A336)이고, 동일자로 출원되었으며, 여기에 참조로서 포함된 미국특허출원과 관련된다.
현재의 운영 시스템는 모니터 같은 디스플레이 상에 드로잉을 렌더링하기 위해 애플리케이션에 의하여 수행되는 그래픽 드로잉 인터페이스 레이어를 일반적으로 포함한다. 그래픽 드로잉 인터페이스 레이어는 드로잉에 대한 애플리케이션 프로그래밍 인터페이스(API)를 애플리케이션에 제공하고 그러한 애플리케이션에 의한 드로잉 요청을 일 세트의 드로잉 명령으로 변환하며, 그 후, 그 명령은 비디오 어뎁터 드라이버로 제공된다. 차례로, 비디오 어댑터 드라이버는 드로잉 명령을 수신하고, 그것을 비디오 어댑터 특정의 드로잉 프리미티브로 번역하고, 비디오 어댑터(예를 들면 그래픽 카드, 집적된 비디오 칩셋 등)로 포워딩한다. 비디오 어댑터는 드로잉 프리미티브를 수신하고 그것을 즉시 프로세싱하거나, 대안적으로는 후속 실행을 위해 선입선출(FIFO) 큐(queue)에 그것을 저장하여, 비디오 신호를 생성하고 결합된 외부 디스플레이에 전송하는데 사용되는 비디오 어댑터 내의 프레임버퍼를 업데이트시킨다. 그러한 그래픽 드로잉 인터페이스 레이어의 한 예가 마이크로소프트® 윈도우즈 운영 시스템(OS)의 그래픽 디바이스 인터페이스(GDI)이며, 이것은 윈도우즈 OS를 통해서 액세스가능한 다수의 사용자-레벨 및 커널-레벨의 동적 링크된 라이브러리로서 구현된다.
서버 기반 컴퓨팅(SBC) 및 가상 데스크탑 인프라구조(VDI)와 같은 기술들이 등장함에 따라, 조직들은 종래의 퍼스널 컴퓨터(PC)들을 데이터 센터 내의 원격 데스크탑 서버(또는 그 위에 동작하는 가상 머신)상에 호스트되는 데스크탑의 인스턴스로 대체할 수 있다. 사용자의 단말기상에 인스톨된 씬 (thin) 클라이언트 애플리케이션은, 사용자 단말기의 디스플레이상에 렌더링하기 위해 운영 시스템 세션의 그래픽 사용자 인터페이스(GUI)를 전송하는 원격 데스크탑 서버에 접속한다. 그러한 원격 데스크탑 서버 시스템의 한 예는 원격 데스크탑 서버로부터 클라이언트로 (스크린상에 디스플레이될 모든 픽셀에 대한 값들을 포함하는) 프레임버퍼를 전송하기 위해 원격 프레임버퍼(RFB) 프로토콜을 이용하는 가상 네트워크 컴퓨팅(VNC)이다. 씬 클라이언트 애플리케이션에 전송되는 그래픽 사용자 인터페이스에 관한 디스플레이 데이터의 양을 감소시키기 위해, 원격 데스크탑 서버는 프레임버퍼의 이전 상태를 반영하는 프레임버퍼의 제 2 사본을 보유할 수도 있다. 이 제 2 사본은 원격 데스크탑 서버가, (네트워크 전송 대역폭을 감소시키기 위해) 인코딩하기 위한 디스플레이 데이터 차이를 식별하고 계속하여 네트워크를 통해 씬 클라이언트 애플리케이션으로 전송하기 위하여 프레임버퍼의 이전 상태 및 현재 상태를 비교할 수 있게 한다.
하지만, 디스플레이 데이터 차이를 네트워크를 통해 씬 클라이언트 애플리케이션으로 전송하는 것은, 원격 데스크탑 서버에서 디스플레이 데이터 차이를 인코딩하고 이어서 씬 클라이언트 애플리케이션에서 그 차이를 디코딩하기 위해 필요한 연산 오버헤드 때문에 원격 데스크탑 서버 및 씬 클라이언트 애플리케이션 모두의 성능을 열화시킬 수 있다. 일반적인 예로서, 1920x1200의 해상도 및 픽셀당 24비트의 칼라 깊이를 지원하는 전체 프레임버퍼로부터 네트워크를 통해 초당 60회의 속도로 연속적으로 보내기 위해서는 초당 3.09 기가비트 이상의 전송을 요구할 것이다. 심지어 (전체 프레임버퍼 보다는) 디스플레이 데이터 차이가 인식될 수 있고 전송 전에 인코딩 기술을 통해 더욱 압축될 수 있다고 가정할지라도, 여전히 상당한 네트워크 대역폭이 요구될 수도 있다.
본 발명의 하나 이상의 실시예는, 디스플레이 데이터를 저장하기 위한 1차 프레임버퍼 및 디스플레이 데이터를 원격 클라이언트 단말기로 전송하기 위해 2차 프레임버퍼를 사용하는 디스플레이 인코더를 갖는 서버에서, 상기 원격 클라이언트 단말기로 전송될 디스플레이 데이터의 양을 감소시키기 위한 방법을 제공한다. 그러한 일 방법에서, 완료된 드로잉 프리미티브 리스트를 포함하는 큐는 드로잉 프리미티브의 실행시에 상기 1차 프레임버퍼에 업데이트된다. 상기 디스플레이 인코더는 상기 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터에 대응하는 드로잉 프리미티브 리스트를 요청하고, 상기 드로잉 프리미티브의 요청된 리스트는 상기 큐로부터 추출되어 상기 디스플레이 인코더에 제공된다. 상기 드로잉 프리미티브의 요청된 리스트 수신시에, 상기 디스플레이 인코더는, 대역폭 사용 평가에 따라, 상기 드로잉 프리미티브에 대응하는 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터보다는 상기 요청된 리스트내의 드로잉 프리미티브를 상기 원격 클라이언트 단말기에 선택적으로 전송할 수 있다.
일 실시예에서, 상기 큐 내의 각각의 엔트리는 시퀀스 번호 및 드로잉 프리미티브를 포함하고, 상기 수신된 요청은 상기 2차 프레임버퍼 내의 디스플레이 데이터를 업데이트하기 위해 마지막 드로잉 프리미티브에 대응하는 시퀀스 번호를 포함한다. 그러한 실시예에서, 상기 추출 단계는 상기 큐 내의, 상기 요청의 시퀀스 번호를 포함하여 상기 시퀀스 번호까지를 포함하는 각각의 엔트리를 식별하는 단계를 포함한다.
본 발명에 따르면, 원격 클라이언트 단말기로 전송될 디스플레이 데이터의 양을 감소시킬 수 있다.
도 1은 본 발명의 일 실시예에 따른, 원격 데스크탑 서버의 블록도를 나타낸다.
도 2는 본 발명의 일 실시예에 따른, "블리트맵(blitmap)" 데이터 구조를 나타낸다.
도 3은 본 발명의 일 실시예에 따른, 제2 블리트맵 데이터 구조를 나타낸다.
도 4는 본 발명의 일 실시예에 따른, 선입선출(FIFO) 큐(queue)를 나타낸다.
도 5는 본 발명의 일 실시예에 따른, 애플리케이션으로부터의 드로잉 요청을 비디오 어댑터에 전송하기 위한 단계를 설명하는 흐름도이다.
도 6은 본 발명의 일 실시예에 따른, 비디오 어댑터로부터의 프레임버퍼 데이터를 디스플레이 인코더에 전송하기 위한 단계를 설명하는 흐름도이다.
도 7은 본 발명의 일 실시예에 따른, 블리트맵 데이터 구조를 트리밍(trimming)하는 예를 나타낸다.
도 8은 프레임버퍼에 의해 만들어진 대응하는 디스플레이 데이터 변경을 전송하는 것보다 드로잉 프리미티브를 원격 클라이언트 디스플레이에 전송함으로써 대역폭을 줄이는 한 예를 도시한다.
도 9는 본 발명의 일 실시예에 따른, 비디오 어댑터 드라이버로부터의 드로잉 프리미티브를 디스플레이 인코더에 전송하기 위한 단계들을 설명하는 흐름도이다.
도 1은 본 발명의 일 실시예에 따른 원격 데스크탑 서버의 블록도를 도시한다. 원격 데스크탑 서버(100)는 데스크탑, 랩탑 또는 x86 아키텍쳐 플랫폼과 같은 서버 그레이드 하드웨어 플랫폼(102)상에 구성될 수 있다. 이러한 하드웨어 플랫폼은 CPU(104), 램(106), 네트워크 어댑터(108)(NIC 108), 하드 드라이브(110) 및 제한이 아닌 예로서 마우스나 키보드와 같은 다른 입출력 장치(도 1에는 도시되지 않음)를 포함할 수 있다.
이하에 하이퍼바이저(hypervisor; 124)로 언급될 가상화 소프트웨어 레이어는 하드웨어 플랫폼(102) 상에 설치된다. 하이퍼바이저(124)는 다수의 가상 머신들 (VM; 1281 - 128N )들이 동시에 인스턴스화되고 실행될 수도 있는 가상 머신 실행 공간(126)을 지원한다. 일 실시예에서, 각각의 VM (1281 - 128N) 서로 다른 클라이언트 단말기로부터 원격으로 연결된 서로 다른 사용자를 지원한다. 각각의 VM (1281 - 128N) 에 대해서, 하이퍼바이저(124)는 CPU(132), 램(134), 하드 드라이브(136), NIC(138) 및 비디오 어댑터(140)와 같이 소프트웨어 내에 구현된 에뮬레이션되는 하드웨어를 포함하는 대응 가상 하드웨어 플랫폼(즉, 가상 하드웨어 플랫폼들 (1301 - 130N )을 관리한다. 에뮬레이션되는 비디오 어댑터(140)는, 비디오 디스플레이(즉, "프레임")가 리프레시되는 픽셀 값들의 버퍼를 보유하는 비디오 어댑터(140)에 의해 사용되는 메모리의 일부인 프레임버퍼(142), 및 프레임버퍼(142)를 업데이트하는데 사용된 드로잉 프리미티브 리스트를 보유하는 비디오 어댑터(140)에 의해 사용되는 메모리의 일부인 선입선출(FIFO) 큐(144)를 할당하고 보유한다. 일 실시예에서, FIFO 큐(144)는 비디오 어댑터(140)와 비디오 어댑터 드라이버(154) 사이에 액세스되고 공유되는 공유 메모리 버퍼이다.
가상 하드웨어 플랫폼(1301)은, 표준 x86 하드웨어 아키텍쳐의 등가물로서 기능할 수도 있어서, 마이크로소프트 윈도우즈®, 리눅스®, 솔라리스® x86, 넷웨어, FreeBSD 등과 같은 임의의 x86 지원 운영 시스템도 인스턴스화된 가상 머신, 예를 들면 VM (1281) 을 위한 애플리케이션(148)을 실행하기 위한 게스트 운영 시스템OS; 146)로서 인스톨될 수도 있다. 디스플레이 상에 드로잉을 요청하는 애플리케이션(148)은, 그래픽 드로잉 인터페이스 레이어(150)(예를 들면, 일 실시예에서 마이크로소프트 윈도우즈® GDI)에 의해 제공된 API를 통해 드로잉 요청을 제출하며, 차례로, 그래픽 드로잉 인터페이스 레이어는, 드로잉 요청을 드로잉 명령으로 변환하고 드로잉 명령어를 디바이스 드라이버 레이어(152) 내의 비디오 어댑터 드라이버(154)로 전송한다. 도 1의 실시예에서 도시된 바와 같이, 비디오 어댑터 드라이버(154)는, 드로잉 프리미티브 뿐만 아니라, 이하에서 비디오 어댑터(140)의 프레임버퍼(142)의 잠재적으로 변경된 영역을 추적하는 "블리트맵" 데이터 구조로 언급될 데이터 구조(156)를 추적하기 위해 그 자신의 FIFO 큐(157)를 할당하고 유지한다. 블리트맵 데이터 구조의 구현 및 사용에 대한 더 상세한 내용은 본 상세한 설명에서 이후에 설명한다. 디바이스 드라이버 레이어(152)는 가상 하드웨어 플랫폼 (1301)(예를 들어 가상 NIC(138) 등)에서 에뮬레이션되는 디바이스들과, 마치 그러한 에뮬레이션된 디바이스들이 하드웨어 플랫폼(102)의 실제 물리적인 디바이스인 것처럼 상호작용하는 NIC 드라이버(158)와 같은 추가적인 디바이스 드라이버를 포함한다. 하이퍼바이저(124)는 일반적으로 가상 플랫폼 (1301) 내에서 에뮬레이션된 디바이스에 의해 수신된 디바이스 드라이버 레이어(152) 내의 디바이스 드라이버로부터의 요청을 받고, 그 요청을 하드웨어 플랫폼 (102) 내의 실제 디바이스들과 통신하는 하이퍼바이저(124)의 물리적 디바이스 드라이버 레이어 내의 실제 디바이스 드라이버에 대한 대응 요청으로 번역할 책임이 있다.
그래픽 사용자 인터페이스를 원격 클라이언트 단말기의 디스플레이에 전송하기 위해, VM (1281)은 (예를 들어 데이터 전송 대역폭을 감소시키기 위해) 인코딩 및 네트워크 상으로 NIC 드라이버(158)를 통한(예를 들어 가상 NIC(138)을 통한 그리고, 최종적으로, 물리적 NIC(108)를 통한) 후속 전송을 위해 프레임버퍼(142)로부터 데이터를 얻기 위해 (예를 들어 API를 통해) 비디오 어댑터 드라이버(154)와 상호작용하는 디스플레이 인코더(160)를 더 포함한다. 디스플레이 인코더(160)는 프레임버퍼(142)로부터 수신되는 데이터를 저장하기 위한 2차 프레임버퍼(162), 2차 프레임버퍼(162)에서 변경된 영역을 식별하기 위한 그 자신의 블리트맵 데이터 구조(164)(이하에서, 인코더 블리트맵 데이터 구조(164)로 불림), 및 그 실행이 2차 프레임버퍼(162) 내의 변경된 영역을 발생시켰던 드로잉 프리미티브를 추적하기 위한 그 자신의 FIFO 큐(166)를 할당하고 유지한다. 일 실시예에서, 디스플레이 인코더(160)는 프레임버퍼(142)에서 행해진 변경을 원격 클라이언트 단말기로 전송하기 위한 2차 프레임버퍼(162)로 복제하기 위해 비디오 어댑터 드라이버(154)를 계속하여 (예를 들어 초당 30회 또는 60회) 폴링(poll)한다.
당업자들은 도 1의 가상화 컴포넌트를 설명하기 위해 사용된 다양한 용어들, 레이어들 및 분류법들이 그 기능 또는 발명의 사상으로부터 벗어남이 없이 다르게 참조될 수 있다는 것을 인식할 것이다. 예를 들어, 가상 하드웨어 플랫폼 (1301 - 130N)은 하이퍼바이저(124)와 대응하는 VM(1281 - 128N) 사이의 동작들을 조정하는데 필요한 가상 시스템 지원을 구현하는 가상 머신 모니터(VMM) (1661 - 166N)의 일부로 고려될 수 있다. 대안적으로, 가상 하드웨어 플랫폼(1301 - 130N)은 또한 VMM (1661 - 166N)으로부터 분리된 것으로 고려될 수도 있고, VMM (1661 - 166N)은 하이퍼바이저(124)로부터 분리된 것으로 고려될 수도 있다. 본 발명의 일 실시예에서 사용될 수도 있는 일 예의 하이퍼바이저(124)는, 캘리포니아 팔로 알토 소재의 VMware사로부터 상업적으로 입수가능한 VMware의 ESX™ 제품의 컴포넌트로서 포함된다. 본 발명의 실시예가 호스트된 가상 머신 시스템과 같이 하이퍼바이저가 운영 시스템의 위에 구현된 다른 가상화된 컴퓨터 시스템에서 실시될 수도 있다는 것이 더 인식되어야 한다.
도 2는 본 발명의 일 실시예에 따른 블리트맵 데이터 구조를 도시한다. 비디오 어댑터 드라이버(154) 및 비디오 인코더(160) 양자는, 각각, 프레임버퍼(142) 및 2차 프레임버퍼(162)의 변경된 영역을 추적하기 위해 블리트맵 데이터 구조를 이용한다. 도 2의 실시예에서, 블리트맵 데이터 구조는, 비트 벡터 내의 각각의 비트(이하에서 "블리트맵 엔트리"로 불림)가 대응 프레임버퍼의 NxN 영역을 나타내는 2차원 비트 벡터이다. 비트 벡터 내에서 셋팅된 비트(또한 이하에서 "마킹된" 블리트맵 엔트리로 불림)는, 프레임버퍼의 대응 NxN 영역 내의 적어도 하나의 픽셀 값이 (예를 들어 디스플레이 인코더(160)에 의한 폴링 요청 사이의) 특정 시간 간격동안 변경되었다는 것을 나타낸다. 예를 들어, 도 2는 검정 도트(dot)가 특정 시간 간격 동안 변경된 픽셀 값들을 나타내는 프레임버퍼의 64x64 픽셀 블록(200)을 나타낸다. 8x8 비트 벡터(205)는, 각 비트(또는 블리트맵 엔트리)가 픽셀 블록(200)의 8x8 영역에 대응하는 블리트맵 데이터 구조의 대응하는 블리트맵 엔트리 블록을 나타낸다. 비트 벡터(205) 내의 셋팅된 비트(또는 마킹된 블리트맵 엔트리)는 "X"로 마킹된다. 예를 들어, 마킹된 블리트맵 엔트리(210)는 프레임버퍼 영역(215)(그의 모든 픽셀 값들은, 검정 도트에 의해 표시된 바와 같이 특정 시간 간격동안 변경됨)에 대응한다. 도 2는, 검정 도트에 의해 도시된 바와 같이, 변경된 픽셀 값을 갖는 프레임버퍼 픽셀 블록(200)의 영역에 대응하는 비트 벡터(205) 내의 다른 마킹된 블리트맵 엔트리를 도시한다. 도 2의 도면부호 (205)와 유사한 블리트맵 데이터 구조의 2차원 비트 벡터 실시예를 트래버싱(traverse)함으로써, 시간 간격 동안 프레임버퍼의 어떤 NxN 영역이 변경되었는지를 쉽게 식별할 수 있다 (그리고, 또한 시간 간격 동안 변경하지 않은 영역을 쉽게 스킵할 수 있다).
도 3은 본 발명의 일 실시예에 따른 제2 블리트맵 데이터 구조를 도시한다. 도 3의 실시예에서, 블리트맵 데이터 구조는, 그 트리의 각 레벨이 2Nx2N 픽셀 블록의 더 높은 해상도 비트 벡터를 나타내는 영역 쿼드트리(quadtree)이다. 도 3은, 검정 도트가 특정 시간 간격 동안 변경된 픽셀 값을 나타내는 프레임버퍼의 64x64 픽셀 블록(300)을 도시한다. 픽셀 블록은 변경된 각 픽셀(예를 들어 검정 도트)이 가장 작은 서브-쿼드런트(sub-quadrant) 내에 포함될 때까지 연속해서 더 작은 서브-쿼드런트로 세분된다. 예를 들어, 픽셀 블록(300)에서, 가장 작은 서브-쿼드런트는 영역 (305, 310 및 315)와 같은 8x8 픽셀 영역이다. 더 큰 서브-쿼드런트는 영역 (320 및 325)와 같은 16x16 서브-쿼드런트 뿐만 아니라 영역 (330)과 같은 32x32 서브-쿼드런트를 포함한다. 4-레벨 영역 쿼드트리(335)는 프레임버퍼의 64x64 픽셀 블록(300)에 대응하는 블리트맵 데이터 구조를 나타낸다. 도 3에 도시된 바와 같이, 영역 쿼드트리(335)의 각 레벨은, 비트 벡터의 레벨에 따라, 64x64로부터 8x8까지의 범위에 있는 그 비트가 픽셀 블록(300) 내의 특정 크기의 서브-쿼드런트에 대응하는 비트 벡터로서 구현될 수 있다. "X"로 마킹된 영역 쿼드트리(335)에서의 노드는, 픽셀 블록(300) 내의 노드의 대응 서브-쿼드런트의 적어도 하나의 픽셀 값이 특정 시간 간격 동안 변경되었다는 것을 (즉, 검정 도트를 갖는다는 것을) 표시한다. 예를 들어, 영역 쿼드트리(335)의 레벨 0(64x64 레벨)의 노드 (300Q)는 64x64 픽셀 블록의 전체를 나타내며, 픽셀 블록(300) 내의 적어도 하나의 픽셀 값이 변경되었기 때문에 "X"로 마킹된다. 대조적으로, 영역 쿼드트리(335)의 레벨 1(32x32 레벨)의 노드 (330Q)는 32x32 서브-쿼드런트 (330)를 나타내며, 서브-쿼드런트(330) 내의 어떠한 픽셀 값도 변경되지 않았기 때문에 마킹되지 않는다. 유사하게, 레벨 2(16x16 레벨)의 노드 (320Q 및 325Q)는, 각각, 16x16 서브-쿼드런트(320 및 325)를 나타내며, 서브-쿼드런트(320 및 325) 내의 어떠한 픽셀 값도 변경되지 않았기 때문에 마킹되지 않는다. 레벨 3(8x8 레벨)의 노드 (305Q, 310Q 및 315Q)는 픽셀 블록(300)의 8x8 영역 (305, 310 및 315)에 대응하고, 따라서 마킹된다. 도 3의 실시예와 같은, 블리트맵 데이터 구조의 영역 쿼드트리 실시예에서, 영역 쿼드트리의 가장 깊은 레벨에서의 각 노드(즉, 8x8 픽셀 영역과 같이 가작 작은 서브-쿼드런트에 대응함)는 블리트맵 엔트리다. 블리트맵 데이터 구조의 영역 쿼드트리 실시예를 트래버싱함으로써, 프레임버퍼의 어떠한 8x8 영역 (또는 다른 가장 작은 크기의 서브-쿼드런트)이 시간 간격 동안 변경되었는지를 쉽게 식별할 수 있다. 더욱이, 이러한 트리 구조 때문에, 시간 간격 동안 변경되지 않은 프레임버퍼내의 큰 크기의 서브-쿼드런트를 빠르게 스킵할 수 있다. 블리트맵 데이터 구조의 영역 쿼드트리 실시예가 영역 쿼드트리의 특정 구현에 따라, 블리트맵 데이터 구조에 의해 사용되는 메모리를 더 보존할 수도 있음이 더 인식되어야 한다. 예를 들어, 도 2의 블리트맵 데이터 구조(205)의 2차원 비트 벡터는 얼마나 많은 8x8 영역이 마킹되지 않을 수도 있는지에 관계없이 64비트를 소모하나, 도 3의 영역 쿼드트리(335)는 더 적은 8x8 영역이 마킹될 때 더 적은 비트를 소모한다. 도시된 바와 같이, 블리트맵 데이터 구조(335)가 33 비트를 이용하는 반면, 블리트맵 데이터 구조(205)의 구현은 64 비트를 이용한다. 인코더 블리트맵 데이터 구조(164) 및 드라이버 블리트맵 데이터 구조(156)가 도 2 및 도 3의 구조를 포함하는 다양한 서로 다른 데이터 구조를 사용하여 각각 구현될 수 있고, 어느 특정 실시예에서, 인코더 블리트맵 데이터 구조(164)가 드라이버 블리트맵 데이터 구조(156)와는 다른 데이터 구조를 사용할 수도 있음이 인식되어야 한다.
도 4는 본 발명의 일 실시예에 따른 FIFO 큐를 도시한다. 비디오 어댑터(140), 비디오 어댑터 드라이버(154), 및 디스플레이 인코더(160)는, (비디오 어댑터(140) 및 비디오 어댑터 드라이버(154)에 대한) 프레임버퍼(142) 및 (디스플레이 인코더(160)에 대한) 2차 프레임버퍼(162)의 드로잉 프리미티브를 추적하기 위해 각각 FIFO 큐를 이용한다. 도 4의 FIFO 큐(400)는 FIFO 큐(400) 내의 각각의 엔트리가 시퀀스 번호(405) 및 드로잉 프리미티브(410)를 포함하는 크기 100의 프리미티브 버퍼이다. 일 실시예에서, 드로잉 프리미티브의 예는 (예를 들어 직사각형 영역을 다른 직사각형 영역에) 복제, (예를 들어 직사격형 영역을 컬러로) 채움(fill), (예를 들어 기존의 직사각형 영역을 새로운 디스플레이 데이터로) 업데이트 등과 같은 기본적인 드로잉 명령어들을 포함한다. 일 예로, FIFO 큐 엔트리(415)는, 시퀀스 번호 8, 및 비디오 어댑터(140)가 프레임버퍼(142)의 영역 내의 소스 직사각형의 컨텐츠를 프레임버퍼(142)의 다른 영역의 목적지 직사각형으로 복제하도록 명령하는 드로잉 프리미티브를 갖는다. 프리 엔트리 포인터(420)는 새로운 엔트리(즉, 큐 엔트리 6)를 삽입하기 위해 FIFO 큐(400) 내의 다음 엔트리를 가리키고, 새로운 엔트리가 FIFO 큐(400)로 삽입될 때마다 증가된다. 현 엔트리 포인터(425)는 비디오 어댑터(140)에 의해 실행될 FIFO 큐(400) 내의 다음 엔트리(즉, 큐 엔트리 97)를 가리키고, 비디오 어댑터(140)가 드로잉 프리미티브의 실행을 완료할 때마다 증가한다. 도 4에서 도시된 바와 같이, 큐 엔트리(6 내지 96)는 비디오 어댑터(140)에 의해 이미 실행된 드로잉 프리미티브가 있는 큐 엔트리 세트(실행된 엔트리(430)로 불림)를 나타내고, 큐 엔트리(1 내지 5 및 97 내지 100)는 미실행된 드로잉 프리미티브 또는 비어있는 엔트리를 포함하는 큐 엔트리 세트(미실행된 엔트리(435)로 불림)를 나타낸다. FIFO 큐의 대안적인 실시예는 어떠한 FIFO 큐들(144, 157 및 166)로서 사용될 수도 있다는 것이 인식되어야 한다. 예를 들어, 일 실시예에서, 비디오 어댑터(140) 내의 FIFO 큐(144)는 시퀀스 번호를 갖지 않을 수도 있다. 유사하게, 대안적인 실시예에서, FIFO 큐 내에 저장된 각각의 드로잉 프리미티브는 동일한 양의 바이트(예를 들어, 24 바이트)를 소모하여, 시퀀스 번호는 큐 내의 시작점으로부터의 오프셋(offset)을 결정함으로써 (큐 엔트리의 필드로 저장되는 것보다는) 도출될 수도 있다.
도 5는 본 발명의 일 실시예에 따라, 애플리케이션으로부터의 드로잉 요청을 비디오 어댑터로 전송하는 단계를 도시한 흐름도이다. 비록 단계들이 도 1의 원격 데스크탑 서버(100)의 컴포넌트를 참조하여 설명되었지만, 임의의 순서로 단계들을 수행하도록 구성된 임의의 시스템이 본 발명에 부합한다는 것은 인식되어야 한다.
도 5의 실시예에 따르면, 단계 505에서, 실행중에 애플리케이션(500)(즉, 게스트 OS(146) 상에서 구동하는 하나의 애플리케이션(148))은, 드로잉 요청을 스크린으로 제출하기 위해, 예를 들어 사용자 액션에 응답하여 그래픽 사용자 인터페이스를 업데이트하기 위해 그래픽 드로잉 인터페이스 레이어(150)(예를 들어 마이크로소프트 윈도우즈의 GDI)의 API를 액세스한다. 단계 510에서, 게스트 OS(146)을 통해서, 그래픽 드로잉 인터페이스 레이어(150)는 드로잉 요청을 수신하고 비디오 어댑터 드라이버(154)에 의해 이해되는 드로잉 명령으로 변환한다. 단계 515에서, 그래픽 드로잉 인터페이스 레이어(150)는 드로잉 명령을 비디오 어댑터 드라이버(154)로 전송한다. 단계 520에서, 비디오 어댑터 드라이버(154)는 드로잉 명령을 수신하고, 드라이버 블리트맵 데이터 구조(156)의 마킹된 엔트리에 대응하는 프레임버퍼(142)의 영역 내의 픽셀 값의 적어도 일부분이 드로잉 명령의 실행 결과로서 업데이트되는 것을 나타내기 위해 드라이버 블리트맵 데이터 구조(156)의 엔트리를 마킹한다. 일 실시예에서, 비디오 어댑터 드라이버(154)는 드로잉 명령의 실행 결과로서 업데이트될 픽셀들을 둘러싼 최소 크기의 직사각형 같은 프레임버퍼(142) 내의 영역(즉, 여기에서 "바운딩 박스(bounding box)"로 불림)을 계산하거나 결정한다. 그 후, 비디오 어댑터 드라이버(154)는, 결정된 영역 내의 픽셀 값을 포함하는 프레임버퍼의 영역(154)에 대응하는 드라이버 블리트맵 데이터 구조(156) 내의 모든 블리트맵 엔트리를 식별하고 마킹할 수 있다. 비디오 어댑터 드라이버(154)는 단계 525에서 드로잉 명령을 디바이스 특정의 드로잉 프리미티브로 변환하고, 단계 530에서 디바이스 특정의 드로잉 프리미티브를 그 FIFO 큐(157) 내로 삽입하며, 따라서 FIFO 큐(157)의 프리 엔트리 포인터를 증가시킨다. 단계 535에서, 비디오 어댑터 드라이버(154)는, (예를 들어, FIFO 큐(144)가 비디오 어댑터 드라이버(154) 및 비디오 어댑터(140) 사이에 공유되는 실시예에서) 드로잉 프리미티브를 FIFO 큐(144)로 삽입시키며, 따라서 FIFO 큐(144)의 프리 엔트리 포인터를 증가시킨다. 단계 540에서, 실행할 준비가 되었을 때 비디오 어댑터(140)는 FIFO 큐(144) 내의 드로잉 프리미티브에 따라 프레임버퍼(142)를 업데이트한다. 특히, 단계 545에서, 비디오 어댑터(140)가 일단 드로잉 프리미티브의 실행을 완료하면, 비디오 어댑터(140)는 그 FIFO 큐(144)의 현 엔트리 포인터를 증가시키고, 단계 550에서 비디오 어댑터 드라이버(154)에 현재 FIFO 큐(157)의 엔트리 포인터를 증가시키도록 통보하며, 그 비디오 어댑터 드라이버(154)는 단계 555에서 이러한 기능을 수행한다.
도 6은 본 발명의 일 실시예에 따라, 비디오 어댑터로부터 디스플레이 인코더로 프레임버퍼 데이터를 전송하는 단계들을 도시한 흐름도이다. 비록 단계들이 도 1의 원격 데스크탑 서버(100)의 컴포넌트를 참조하여 설명되었지만, 임의의 순서로 단계들을 수행하도록 구성된 임의의 시스템이 본 발명에 부합한다는 것이 인식되어야 한다.
도 6의 실시예에 따르면, 디스플레이 인코더(160)는, 비디오 어댑터(140)의 프레임버퍼(142) 내의 데이터를 얻기 위해 비디오 어댑터 드라이버(154)를 계속해서 (예를 들어 초당 30회 또는 60회) 폴링하고, 인코딩, 및 네트워크 상에서 (예를 들어 NIC 드라이버(158)를 통한) 원격 클라이언트 단말기에 의한 수신을 위한 전송을 위해 게스트 OS(146) 상에서 구동하는 프로세스이다. 단계 600에서, 디스플레이 인코더(160)는 비디오 어댑터 드라이버(154)에 의해 노출된 API 루틴을 통해 프레임버퍼 업데이트 요청을 비디오 어댑터 드라이버(154)에 이슈하고, 비디오 어댑터 드라이버(154)가 직접적으로 2차 프레임버퍼(162)를 수정할 수 있도록 2차 프레임버퍼(162)에 대한 메모리 레퍼런스(예를 들어, 포인터)를 비디오 어댑터 드라이버(154)에 전달한다. 단계 605에서, 비디오 어댑터 드라이버(154)는 프레임버퍼 업데이트 요청을 수신하고, 단계 610에서, (도 5에 기재된 대로 애플리케이션으로부터의 드로잉 요청으로 인한) 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청 이후 변경된 프레임버퍼(142)의 영역에 대응하는 마킹된 블리트맵 엔트리를 식별하기 위해 드라이버 블리트맵 데이터 구조(156)를 트래버싱한다. 만일, 단계 615에서 현 블리트맵 엔트리가 마킹되면, 단계 620에서 비디오 어댑터 드라이버(154)는 비디오 어댑터(140)로부터 프레임버퍼(142)의 대응하는 영역(즉, 영역 내의 픽셀 값)을 요청한다. 단계 625에서, 비디오 어댑터(140)는 요청을 수신하고 프레임버퍼(142)의 요청된 영역을 비디오 어댑터 드라이버(154)로 전송한다.
단계 630에서, 비디오 어댑터 드라이버(154)는 프레임버퍼(142)의 요청된 영역을 수신하고, 단계 635에서, 수신한 프레엄 버퍼(142)의 요청된 영역 내의 픽셀 값을, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답 완료시 프레임버퍼(142)의 이전 상태를 반영하는 2차 프레임버퍼(162) 내의 대응하는 영역의 픽셀 값과 비교한다. 이러한 비교 단계(635)는 비디오 어댑터 드라이버(154)가 도 5에 설명된 바와 같이, 애플리케이션에 의한 드로잉 요청의 시각적으로 리던던트한 전송으로부터 발생하는 가능한 비효율성을 식별하는 것을 가능하게 한다. 예를 들어, 아마도 애플리케이션의 기능 중 드로잉 관련 양태를 최적화하는 것에 대한 포커싱 부족 때문에, 몇몇 애플리케이션은 도 5의 단계 505에서 비록 그래픽 사용자 인터페이스의 작은 영역만이 애플리케이션에 의해 실제로 수정되었을지라도 전체 그래픽 사용자 인터페이스를 리던던트하게 리드로잉하는 드로잉 요청을 이슈할 수도 있다. 그러한 드로잉 요청은 비록 마킹된 블리트맵 엔트리의 대응하는 프레임버퍼(142) 영역이 새로운 픽셀 값으로 업데이트될 필요가 없을지라도(즉, 상기 영역은 실제로 수정되지 않은 그래픽 사용자 인터페이스의 부분에 대응함), 드라이버 블리트맵 데이터 구조(156)의 엔트리가 도 5의 단계 520에서 마킹되도록 한다. 그러한 마킹된 블리트맵 엔트리로, 비교 단계(635)는 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답 완료 후, (단계 505에서) 애플리케이션에 의해 제출된 시각적으로 리던던트한 드로잉 요청으로 인해, 마킹된 블리트맵 엔트리에 대응하는 프레임버퍼(142) 및 2차 프레임버퍼(162)의 영역의 픽셀 값들이 변경하기 않았으므로, 그러한 영역이 동일하다는 것을 나타낼 것이다.
따라서, 단계 640에서, 만일 비교 단계(635)에서 프레임버퍼(142) 및 2차 프레임버퍼(162)의 영역이 동일하다고 나타나면, 단계 645에서, 비디오 어댑터 드라이버(154)는, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버의 응답 완료 후 프레임버퍼(142)의 대응하는 영역에서 어떠한 실질적인 픽셀 값들도 변경되지 않았다는 것을 나타내도록, 마킹된 블리트맵 엔트리를 클리어하여 드라이버 블리트맵 데이터 구조(156)를 "트리밍"한다. 도 7은 본 발명의 일 실시예에 따라 블리트맵 데이터 구조를 트리밍한 예를 나타낸다. 도 7은 프레임버퍼(142)의 88x72 픽셀 블록(700)을 도시한다. 도면부호 (705)와 같은 각각의 세분된 블록은, 드라이버 블리트맵 데이터 구조(156)에서 블리트맵 엔트리에 대응하는 8x8 픽셀 영역을 나타낸다. 도 7에서 도시된 바와 같이, 애플리케이션은 픽셀 블록(700)에 도시된 바와 같이 웃는 얼굴을 드로잉하기 위해 도 5의 단계 505에 대한 드로잉 요청을 이슈한다. 하지만, 애플리케이션에 의해 이슈된 드로잉 요청은, 웃는 얼굴 그 자체의 특정 픽셀을 드로잉하라는 요청보다는 픽셀 블록(700)의 전체를 리드로잉하라는 비효율적인 요청이다. 따라서, 드라이버 블리트맵 데이터 구조(156)의 대응하는 11x9 블리트맵 블록(710)에서 각각의 블리트맵 엔트리는, 도 5의 단계 420에 따라 (마킹된 블리트맵 엔트리(715)와 같이) 비디오 어댑터 드라이버(154)에 의해 마킹된다. 하지만, 도 6에 관하여 여기서 설명된 대로 디스플레이 인코더(160)가 비디오 어댑터 드라이버(154)에 프레임버퍼 업데이트 요청을 이슈할 때, 비디오 어댑터 드라이버(154)는 도 6의 단계 645에 따라 프레임버퍼(142)에서 대응하는 영역이 실제로 변경되지 않은(즉, 웃는 얼굴의 변형된 픽셀을 포함하지 않는), 마킹되지 않은 블리트맵(725)와 같은 블리트맵 엔트리를 클리어하여 블리트맵 블록(710)을 트리밍할 수 있고, 그에 의해 블리트맵 블록(720)을 생성할 수 있다.
도 6으로 돌아와서, 만일 단계 640에서 비교 단계(635)에서 프레임버퍼(142) 및 2차 프레임버퍼(162)의 영역이 다르다고 나타나면(즉, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 응답 완료 후 단계 505에서 애플리케이션의 드로잉 요청의 결과로서 프레임버퍼(142)의 영역 내의 실제 픽셀 값이 변경되면), 단계 650에서, 비디오 어댑터 드라이버(154)는 2차 프레임버퍼(162)가 프레임버퍼(142)의 영역에서 변경된 픽셀 값을 정확히 반영하기 위해 프레임버퍼(142) 영역 내의 픽셀 값을 2차 프레임버퍼(162)의 대응하는 영역으로 복제한다. 단계 655에서, 만일 비디오 어댑터 드라이버(154)가 드라이버 블리트맵 데이터 구조(156)의 트래버싱을 완료하지 못하면, 단계 610으로 돌아간다. 단계 655에서, 만일 비디오 어댑터 드라이버(154)가 드라이버 블리트맵 데이터 구조(156)의 트래버싱을 완료하면, 단계 660에서, 비디오 어댑터 드라이버(154)는, 이하에서 인코더 블리트맵 데이터 구조(164)로 되고 불리는 드라이버 블리트맵 데이터 구조(156)의 사본을 디스플레이 인코더(160)로 제공한다. 단계 645에서, 마킹된 블리트맵 엔트리가 드라이버 블리트맵 데이터 구조(156)에서 클리어되는 만큼, 인코더 블리트맵 데이터 구조(164)는 실제로 변경된 픽셀 값을 갖는 2차 프레임버퍼(162) 내의 영역의 더 최적화된 뷰(view)를 반영한다. 단계 665에서, 비디오 어댑터 드라이버(154)는 디스플레이 인코더(160)로부터의 연이은 프레임버퍼 업데이트 요청을 수신하기 위한 준비시에, 드라이버 블리트맵 데이터 구조(156)에서 모든 마킹된 블리트맵 엔트리를 클리어한다. 단계 670에서, 비디오 어댑터 드라이버(154)는, 단계 600에서 프레임버퍼 업데이트 요청의 이슈시에 프레임버퍼(142)로 실행되는 FIFO 큐(157) 내의 최종 드로잉 프리미티브의 일련번호를 디스플레이 인코더(160)로 제공하며, 단계 600에서 발행된 프레임버퍼 업데이트 요청에 대한 응답을 완료했다는 것을 디스플레이 인코더(160)에 표시한다. 도 4의 FIFO 큐 실시예에서, 예를 들어, 단계 670에서 디스플레이 인코더(160)에 제공되는 시퀀스 번호는 96이고, 이것은 현 엔트리 포인터 (425)가 가리키는 큐 엔트리 바로 전의 큐 엔트리를 나타낸다.
단계 600에서 디스플레이 인코더(160)에 의해 이슈된 프레임버퍼 업데이트 요청에 대한 비디오 어댑터 드라이버(154)의 응답 완료시, 2차 프레임버퍼(162)는, 디스플레이 인코더(160)로부터의 이전 프레임버퍼 업데이트 요청에 대한 완료된 응답 이후, (도 5의 단계 505로부터) 애플리케이션으로부터의 드로잉 요청으로부터 발생하는 모든 변경된 픽셀 값을 포함하고, 인코더 블리트맵 데이터 구조(164)는 2차 프레임버퍼(162) 내의 어느 영역이 그러한 변경된 픽셀 값을 갖는지 나타내는 마킹된 블리트맵 엔트리를 포함한다.
그러한 정보를 갖고, 단계 675에서, 디스플레이 인코더(160)는 마킹된 블리트맵 엔트리에 대한 인코더 블리트맵 데이터 구조(164)를 트래버싱할 수 있고, 원격 클라이언트 디스플레이로의 전송 및 인코딩에 대한 그러한 마킹된 블리트맵 엔트리에 대응하는 2차 프레임버퍼(162) 내의 오직 그러한 영역만을 추출할 수 있다. 하지만, 일 실시예에서, 디스플레이 인코더(160)는 2차 프레임버퍼(162)에서 반영된 실제 대응 디스플레이 데이터 변경을 전송하는 것보다는 프레임버퍼(142)에 행해진 변경을 설명하는 드로잉 프리미티브를 선택적으로 전송함으로써 프레임버퍼(142)에 대한 변경을 원격 클라이언트 디스플레이로 전송하는데 필요한 대역폭의 양을 더욱 감소시킬 수 있다. 도 8은 프레임버퍼에 행해진 대응되는 디스플레이 데이터 변경을 전송하는 것보다 원격 클라이언트 디스플레이로 드로잉 프리미티브를 전송함으로써 대역폭을 절약하는 일 예를 도시한다. 블록(800)은 프레임버퍼(142)의 88x72 픽셀 블록(800)을 나타낸다. 예를 들면 도면부호 (805)와 같은 각각의 세분된 블록은 드라이버 블리트맵 데이터 구조(156)에서 블리트맵 엔트리에 대응하는 8x8 픽셀 영역을 나타낸다. 도 8에서 도시된 바와 같이, 비디오 어댑터(140)는, 기존의 직사각형을 픽셀 블록(800)의 다른 영역(즉, 도 4의 큐 엔트리(415)에 유사함)에 복제하기 위해, FIFO 큐(140) 내의 큐 엔트리의 드로잉 프리미티브(810)의 "복제"를 실행하려고 한다. 드로잉 프리미티브(810)의 실행시, 프레임버퍼(142)의 픽셀 블록(800)은 픽셀 블록(815)으로 변환된다 (즉, 직사각형이 픽셀 블록의 새로운 영역으로 복제된다).
유사하게, 도 5의 단계 520에 따라, 드라이버 블리트맵 데이터 구조(156)는 블리트맵 데이터 구조 블록(820)에 의해 도시된 바와 같이 또한 업데이트된다. 방정식(825)에 의해 프레임버퍼(142) 내의 변경된 디스플레이 데이터를 원격 클라이언트 단말기로 전송하려면 압축되지 않은 형식으로 대략 3840 바이트를 전송해야 한다는 것이 도출되지만, 수학식(830)에 따르면 드로잉 프리미티브(810) 그 자체를 전송하는 것은 오직 대략 24 바이트를 전송하면 된다는 것이 도출된다 (즉, 여기서 원격 클라이언트 단말기는 디스플레이 데이터를 얻기 위해 수신된 드로잉 프리미티브를 실행한다). 더욱이, 압축 인코딩 기술은 전송되는 디스플레이 데이터의 양을 감소시킬 수 있지만, 비록 압축되지 않은 형식을 예를 들어 100대 1의 비율로 감소시킬 수 있는 최적의 압축 기술을 사용할지라도 여전히 38.4바이트 전송 용량이 필요하고, 이는 드로잉 프리미티브의 24바이트보다 여전히 크다. 또 다른 이익은 감소된 CPU 시간이다. 예를 들어, 디스플레이 압축 디스플레이 데이터를 작거나 심지어는 대응하는 디스플레이 프리미티브보다도 작은 크기로 사용하는 것이 가능할지라도, 디스플레이 프리미티브를 전송하는 것이 필요한 압축 알고리즘보다 훨씬 더 적은 CPU 시간을 필요로 한다.
도 9는 본 발명의 일 실시예에 따라서, 비디오 어댑터 드라이버로부터 디스플레이 인코더로 드로잉 프리미티브를 전송하는 단계를 도시한 흐름도이다. 비록 단계들이 도 1의 원격 데스크탑 서버(100)의 컴포넌트를 참조하여 설명되었지만, 임의의 순서로 단계들을 수행하도록 구성된 임의의 시스템이 본 발명에 부합한다 것은 인식되어야 한다.
단계 900에서, 디스플레이 인코더(160)는 도 6의 단계 670에서 프레임버퍼 업데이트 요청의 완료시 비디오 어댑터 드라이버(154)에 의해 전송된 시퀀스 번호를 수신한다. 단계 905에서, 단계 900에서 수신된 2차 프레임버퍼(162)에 저장된 업데이트된 디스플레이 데이터에 관련된 드로잉 프리미티브의 리스트에 대한 요청으로, 디스플레이 인코더(160)는 시퀀스 번호 및 FIFO 큐(166)에 대한 메모리 레퍼런스를 비디오 어댑터 드라이버(154)로 전송한다. 비디오 어댑터 드라이버(154)가 단계 910의 요청을 수신하면, 단계 915에서, 요청에서 수신된 시퀀스 번호까지(및 그 일련번호를 포함함)의 일련번호를 갖는 그 FIFO 큐(157)의 큐 엔트리를 결정하고, 디스플레이 인코더(160)에 의한 액세스를 위해 이러한 큐 엔트리를 FIFO 큐(166)로 복제한다. 예를 들어, 일 실시예에서, 비디오 어댑터 드라이버(154)의 FIFO 큐(157)은 도 5의 단계(즉, 단계 530 및 555)에 따라 업데이트되고 도 4의 FIFO 큐(400)에 유사한 방식으로 구현되며, 비디오 어댑터 드라이버(154)는 디스플레이 인코더(160)에 의해 단계 900의 드로잉 프리미티브 리스트 요청의 이슈를 발생시킨 현 프레임버퍼 업데이트 요청 직전의 프레임버퍼 업데이트 요청에 대해 도 6의 단계 670에서 디스플레이 인코더(160)로 전송된 이전의 시퀀스 번호의 사본을 더 저장한다. 이러한 이전의 시퀀스 번호는 현 프레임버퍼 업데이트 요청 직전의 프레임버퍼 업데이트 요청에서 프레임버퍼(142)를 업데이트하는데 이용된, FIFO 큐(157) 내의 최종 드로잉 프리미티브의 시퀀스 번호를 나타낸다. 따라서, 이 시퀀스 번호 이후에 계속되는 시퀀스 번호 및 단계 905에서 수신된 시퀀스 번호까지를 (및 그 일련번호를 포함함) 갖는 FIFO 큐(157)의 큐 엔트리 내의 그러한 드로잉 프리미티브는 도 6의 단계 650에서 2차 프레임버퍼(162)로 복제된 디스플레이 데이터를 업데이트하는 디스플레이 프리미티브를 나타낸다. 그러한 실시예에서, 비디오 어댑터 드라이버(154)는 단계 920에서 이러한 디스플레이 프리미티브의 큐 엔트리를 FIFO 큐(157)로부터 FIFO 큐(166)로 복제한다. 단계 925에서, 비디오 어댑터 드라이버(154)는 그 자신의 FIFO 큐(157)로부터 이러한 큐 엔트리를 클리어 또는 제거하고 디스플레이 인코더(160)에 단계 905로부터의 드로잉 프리미티브 리스트 요청에 대한 응답을 완료하였다고 통지한다.
대안적인 실시예는 도 5의 단계와 다른 방식으로 업데이트되는 FIFO 큐(157)의 다른 구현방식을 이용할 수도 있음이 인식되어야 한다. 예를 들어, 하나의 대안적인 실시예에서, 단계 530에서 드로잉 프리미티브는 FIFO 큐(157)로 삽입되지 않는다. 오히려, 단계 550에서 비디오 어댑터(140)에 의해 완료된 드로잉 프리미티브만이 FIFO 큐(157)로 삽입된다. 특히, 단계 550은 비디오 어댑터(140)가 완료된 드킹로잉 프리미티브를 이후에 그 FIFO 큐(157)로 삽입할 비디오 어댑터 드라이버(154)로 전송하도록 수정된다. 그러한 실시예에서, FIFO 큐(157)는 간단한 벡터 버퍼로 구현될 수 있고 프리 엔트리 포인터(420) 또는 현 엔트리 포인터(425)를 필요로 하지 않는다. 특히, FIFO 큐(157)의 시작점부터 요청된 시퀀스 번호까지의 모든 엔트리는 단계 910 및 915에서 디스플레이 인코더(160)로 제공되고, 남아있는 엔트리는 단계 925에서 제공된 엔트리의 제거 후 FIFO 큐(157)의 시작점으로 이동된다.
단계 925 이후, 디스플레이 인코더(160)는 2차 프레임버퍼(162) 내의 업데이트된 디스플레이 데이터, 2차 프레임버퍼(162)의 어느 영역이 업데이트된 디스플레이 데이터를 포함하는지 나타내는 인코더 블리트맵 데이터 구조(164) 및 2차 프레임버퍼(162)에서 업데이트된 디스플레이 데이터를 실행시키는(effectuated) 드로잉 프리미티브 리스트를 포함하는 FIFO 큐(166)에 액세스한다. 따라서, 디스플레이 인코더(160)는 업데이트된 디스플레이 데이터 그 자체의 전송 또는 업데이트된 디스플레이 데이터를 실행시키는 데이터 프리미티브의 전송 사이에서 디스플레이 데이터 변경을 원격 클라이언트 단말기에 전파시키는 더 효율적인 방법을 결정할 수 있다. 예를 들어, 도 9의 실시예로 돌아가서, 단계 930에서, 디스플레이 인코더(160)는 FIFO 큐(166) 내의 다른 드로잉 프리미티브에 의해 드로잉되지 않은 프레임버퍼 영역으로 드로잉하는 고립된(isolated) 드로잉 프리미티브를 식별하기 위해 FIFO 큐(166) 내의 드로잉 프리미티브 리스트를 재검토한다. 단계 935에서, 만일 식별된 드로잉 프리미티브를 전송하는 것이 그러한 드로잉 프리미티브에 의해 영향받는 디스플레이 데이터의 양을 전송하는 것보다 빠르면, 단계 940에서, 디스플레이 인코더(160)는 드로잉 프리미티브에 의해 영향받는 프레임버퍼(162)의 영역에 대응하는 인코더 블리트맵 데이터 구조(164) 내의 블리트맵 엔트리를 클리어하고, 단계 945에서, 드로잉 프리미티브를 원격 클라이언트 단말기로 전송한다. 만일, 단계 935에서, 식별된 드로잉 프리미티브보다 디스플레이 데이터를 전송하는 것이 더 효율적이라고 디스플레이 인코더(160)가 결정하면, 단계 950에서, 디스플레이 인코더는 2차 프레임버퍼(162) 내의 디스플레이 데이터를 (즉, 인코더 블리트맵 데이터 구조(164) 내에 마킹된 엔트리에 따라) 전송한다. 단계 935에서 여기에서의 교시에 일관되도록 업데이트된 디스플레이 데이터 또는 대응하는 드로잉 프리미티브를 원격 클라이언트 단말기로 전송하는지를 결정하기 위해 디스플레이 인코더(160)에 의한 다양한 방법이 이용될 수 있다는 것은 인식되어야 한다. 예를 들어, 일 실시예에서, 디스플레이 인코더(160)는 단계 930에서 식별된 드로잉 프리미티브에 의해 영향받는 디스플레이 데이터의 양을 드로잉 프리미티브 그 자체의 크기와 비교한다. 대안적인 실시예에서, 특정 디스플레이 프리미티브(예를 들어, 복제 또는 채움에 대한 드로잉 프리미티브들)은 영향받은 디스플레이 데이터보다 전송하는데 더 효율적이라고 가정한다. 여기에서의 교시에 일관되도록 드로잉 프리미티브 또는 영향받는 디스플레이 데이터를 보내는지를 결정하는데 어떤 개수의 학습법(heuristics)이 사용될 수도 있음은 인식되어야 한다.
추가된 특허청구범위에 설명된 바와 같이 본 발명의 더 넓은 사상 및 범위로 부터 벗어남이 없이 여기에서 설명된 특정 실시예들에 다양한 변경 및 변경이 행해질 수 있음은 인식되어야 한다. 예를 들어, 비록 도 1은 디스플레이 인코더(160) 및 비디오 어댑터 드라이버(154)가 하이퍼바이저(124) 내의 가상 비디오 어댑터(140)와 통신하는 가상 머신 (1281)에서 동작하는 실시예를 도시하지만, 본 발명의 실시예는 컴퓨팅 아키텍쳐에 기반한 비-가상(non-virtual) 머신을 포함하여 어떠한 원격 데스크탑 서버에서도 배치될 수 있음은 인식되어야 한다. 또한, 디스플레이 인코더(160) 및 가상 비디오 어댑터(140)를 서버의 소프트웨어 컴포넌트로서 갖는 것보다, 대안적인 실시예에서는 그 각각 또는 그 일부에 대해 하드웨어 컴포넌트를 이용할 수도 있다. 유사하게, 대안적인 실시예는 어떠한 가상 비디오 어댑터도 필요로 하지 않을 수도 있음이 인식되어야 한다. 대신에, 그러한 대안적인 실시예에서, 예를 들어, 비디오 어댑터 드라이버(154)는 프레임버퍼(142) 및 FIFO 큐(144) 그 자체를 할당하고 유지할 수 있다. 유사하게, FIFO 큐(166)는 대안적인 실시예에서 필요하지 않을 수 있다. 대신에, 그러한 대안적인 실시예에서, 디스플레이 인코더(160)는 비디오 어댑터 드라이버(154)의 FIFO 큐(157)를, 예를 들어, 그 자신의 판독 포인터를 통해 직접 액세스할 수 있다. 본 발명의 사상으로부터 벗어남이 없이 대안적인 시스템 컴포넌트에 의해 다양한 다른 데이터 구조 및 여기에 설명된 버퍼들이 할당되고 유지될 수 있음은 유사하게 인식되어야 한다. 예를 들어, 대안적인 실시예에서, 2차 프레임버퍼를 할당 및 유지하고 도 6의 단계 600에 설명된 대로 메모리 레퍼런스를 비디오 어댑터 드라이버(154)로 전달하는 디스플레이 인코더(160)를 갖는 것보다, 비디오 어댑터 드라이버(154)가 2차 프레임버퍼(162)를 할당 및 유지(인코더 블리트맵 데이터 구조(164)는 물론)하고 메모리 레퍼런스 액세스를 디스플레이 인코더(160)로 전달할 수 있다. 추가적으로, 여기서 설명된 대로 비디오 어댑터 드라이버(154)에 의해 수행되는 일부 기능 및 단계들은 기존의(pre-existing) 또는 표준 비디오 어댑터 드라이버에 별도의 확장 또는 컴포넌트로 구현될 수 있음은 인식되어야 한다 (즉, 디스플레이 인코더(160)는 기존의 비디오 어댑터 그 자체보다 비디오 어댑터 드라이버에 대한 그러한 별도의 확장과 통신할 수도 있다). 유사하게, 대안적인 실시예에 따르면 본 발명의 사상으로부터 벗어남이 없이 여기에 설명된 또는 알려진 최적화 기술을 이용하여 시스템 컴포넌트간에 교환되는 데이터의 형태 및 양은 다양할 수 있음은 인식되어야 한다. 예를 들어, 도 9의 단계 905에서 시퀀스 번호를 비디오 어댑터 드라이버(154)로 전송하는 디스플레이 인코더(160)를 갖는 것보다, 일 실시예에서, 비디오 어댑터 드라이버(154)는 단계 920의 이전 반복에서 디스플레이 인코더로 제공된 이전의 드로잉 프리미티브를 내부적으로 추적하여 시퀀스 번호의 필요 없이 관련된 드로잉 프리미티브를 디스플레이 인코더(160)로 제공할 수 있다. 추가적으로, 도 6의 단계 660에서 드라이버 블리트맵 데이터 구조(156)의 사본을 인코더 블리트맵 데이터 구조(164)로서 제공하는 것보다, 대안적인 실시예에서는 드라이버 블리트맵 데이터 구조(156)의 오직 관련 부분만을 디스플레이 인코더(160)에 제공하거나 또는 드라이버 블리트맵 데이터 구조(156)의 그러한 관련 부분을 디스플레이 인코더(160)로 제공하기 위해 대안적인 데이터 구조를 이용할 수도 있다. 유사하게, 대안적인 실시예는 비디오 어댑터 드라이버(154) 내에 FIFO 큐(157)를 갖지 않고, 비디오 어댑터(140)를 통해 FIFO 큐(144)로부터 FIFO 큐 엔트리를 요청할 수도 있다. 유사하게, 디스플레이 인코더(160)가 계속하여 비디오 어댑터 드라이버(154)를 폴링하는 것보다(또는 이에 추가하여), 대안적인 실시예에서는, 비디오 어댑터 드라이버(154)가 도 5의 단계 555에서 디스플레이 인코더(160)에 프레임버퍼(142)를 업데이트한 드로잉 프리미티브의 수신을 통지하기 위해 디스플레이 인코더(160)에 인터럽트(interrupt)를 일으킬(trigger) 수 있다. 이러한 방식으로, 예를 들어 만일 프레임버퍼(142)가 변경하지 않으면, 디스플레이 인코더(160)는 비디오 어댑터 드라이버(154)에 계속적인 요청을 발행하는 것을 필요로 하지 않는다.
여기서 설명된 다양한 실시예는 컴퓨터 시스템 내에 저장된 데이터를 포함하는 다양한 컴퓨터-구현된 동작을 이용할 수 있다. 예를 들어, 이러한 동작은 물리적인 수량(quantity)의 물리적인 조작을 필요로 할 수 있고, 일반적으로, 반드시는 아닐지라도, 저장되거나, 결합되거나, 비교되거나 또는 조작될 수 있는 이러한 수량 또는 수량의 표현이 있는 전기적 또는 자기적 신호의 형태를 갖는다. 더욱이, 그러한 조작은 생산, 식별, 결정 또는 비교와 같은 용어로서 종종 참조된다. 여기에 설명되고 본 발명의 하나 이상의 부분을 형성하는 어떤 동작은 유용한 머신 동작일 수 있다. 추가적으로, 본 발명의 하나 이상의 실시예는 또한 이러한 동작을 수행하기 위한 장치 또는 머신에 관련된다. 머신은 특정 요청된 목적을 위해 특별히 구성되었을 수도 있고 컴퓨터 내에 저장된 컴퓨터 프로그램에 의해 선택적으로 활동되거나 구성되는 범용 컴퓨터일 수도 있다. 특히, 다양한 범용 머신들은 여기서의 교시에 따라 기입된 컴퓨터 프로그램으로 사용될 수도 있고, 또는 요청되는 동작을 수행하기 위해 더 특수화된 머신를 구성하는 것이 더 편리할 수도 있다.
여기에 설명된 다양한 실시예들은 핸드헬드(hand-held) 장치, 마이크로프로세서 시스템, 마이크로프로세서 기반 또는 프로그램 가능한 소비자 전자제품, 미니컴퓨터, 메인프레임 컴퓨터 등등을 포함한 다른 컴퓨터 시스템 구성으로 실시될 수도 있다.
본 발명의 하나 이상의 실시예는 하나 이상의 컴퓨터 프로그램 또는 하나 이상의 컴퓨터 판독가능한 매체에 구체화된 하나 이상의 컴퓨터 프로그램 모듈로 구현될 수 있다. 컴퓨터 판독가능한 매체라는 용어는 향후 컴퓨터 시스템에 대한 입력으로 될 수 있는 데이터를 저장할 수 있는 임의의 저장 장치를 의미한다. 컴퓨터 판독가능한 매체는 컴퓨터에 의해 읽을 수 있도록 하는 방식으로 컴퓨터 프로그램을 구체화하기 위해 기존의 또는 그 후에 계속되어 개발되는 기술에 기초할 수 있다. 컴퓨터 판독가능한 매체의 예로는 하드 드라이브, 네트워크 부속 저장부(NAS), 롬(ROM), 램(RAM)(예를 들어 플래시 메모리 장치), 컴팩트 디스크(CD), CD-ROM, CD-R 또는 CD-RW, DVD(Digital Versatile Disc), 자기 테이프, 및 다른 광학 및 비광한 데이터 저장 장치를 포함한다. 컴퓨터 판독가능한 매체는 또한 네트워크 결합된 컴퓨터 시스템을 통해 배포될 수 있어서 컴퓨터 판독가능한 코드는 분산 방식으로 저장되고 실행될 수 있다.
비록 본 발명의 하나 이상의 실시예가 이해를 명확하게 하기 위해 어느 정도 상세히 설명되었지만, 특정 변경 및 수정이 본 발명의 범위 내에서 이루어질 수 있다는 것은 명백할 것이다. 따라서, 설명된 실시예는 예시적으로 고려되어야 하고 제한적이지 않으며, 본 청구항의 범위는 여기에 주어진 상세 내용에 제한되지 않고, 청구항의 범위 및 균등 범위 내에서 변경될 수 있다. 청구항에서, 명시적으로 기술된 경우를 제외하고는 컴포넌트 및/또는 단계는 어느 특정한 순서의 동작을 의미하지 않는다.
추가적으로, 가상 머신은 특정 하드웨어 시스템과 일관된 인터페이스를 제공한다고 설명된 가상화 방법에서 일반적으로 가정되지만, 해당 기술분야에 통상의 지식을 가진 자에 의하면 설명된 방법은 어느 특정 하드웨어 시스템에 직접적으로 관련되지 않은 가상화에 관련되어 사용될 수도 있다는 것을 인식할 것이다. 다양한 실시예에 따라, 호스트되거나, 호스트되지 않거나, 또는 그 둘 사이의 구별을 흐릿하게 하는 경향의 실시예로서 구현되는, 가상화 시스템은 모두 고려된다. 더욱이, 다양한 가상화 동작은 전체적으로 또는 부분적으로 하드웨어에 구현될 수 있다. 예를 들어, 하드웨어 구현은 디스크가 아닌(non-disk) 데이터를 안전하게 하기 위해 저장 장치 액세스 요청의 수정에 대한 룩업 테이블을 도입할 수 있다.
가상화 정도에 관계없이 다양한 변경, 변형, 추가 및 개선이 가능하다. 가상화 소프트웨어는 그러므로 가상화 기능을 수행하는 호스트, 콘솔(console), 또는 게스트 운영 시스템의 컴포넌트를 포함할 수 있다. 여기에 단수의 인스턴스로 설명된 컴포넌트, 동작 또는 구조를 위해 복수의 인스턴스가 제공될 수 있다. 마지막으로, 다양한 컴포넌트, 동작 및 데이터 저장 사이의 경계는 어느정도 임의적이고, 특정 동작들은 특정 예시적인 구성의 문맥에서 예시될 수 있다. 기능의 다른 할당은 구상되고 본 발명의 범위 내에 속할 수 있다. 일반적으로, 예시적인 구성에서 분리된 컴포넌트로 나타낸 구조 및 기능은 결합된 구조 또는 컴포넌트로 구현될 수 있다. 유사하게, 단수의 컴포넌트로 나타낸 구조 및 기능은 분리된 컴포넌트로 구현될 수 있다. 이러한 그리고 다른 변경, 변형, 추가 및 개선은 추가된 청구항의 범위 내에 속할 수 있다.
100 ... 원격 데스크탑 서버
102 ... 하드웨어 플랫폼
104 ... CPU
106 ... RAM
108 ... 네트워크 어댑터
110 ... 하드 드라이브
124 ... 하이퍼바이저
126 ... 가상 머신 실행 공간
128 ... 가상 머신(VM)
140 ... 비디오 어댑터
142 ... 프레임버퍼
144 ... FIFO 버퍼
154 ... 비디오 어댑터 드라이버

Claims (20)

  1. 디스플레이 데이터를 저장하기 위한 1차 프레임버퍼, 및
    디스플레이 데이터를 원격 클라이언트 단말기로 전송하기 위해 2차 프레임버퍼를 사용하는 디스플레이 인코더를 갖는 서버에서,
    상기 원격 클라이언트 단말기로 전송될 디스플레이 데이터의 양을 감소시키기 위한 방법으로서,
    드로잉 프리미티브(drawing primitive)의 실행시, 완료된 드로잉 프리미티브의 리스트를 포함하는 큐를 상기 1차 프레임버퍼로 업데이트시키는 단계;
    상기 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터에 대응하는 드로잉 프리미티브의 리스트에 대한 요청을 상기 디스플레이 인코더로부터 수신하는 단계;
    상기 드로잉 프리미티브의 요청된 리스트를 상기 큐로부터 추출하는 단계; 및
    상기 드로잉 프리미티브의 요청된 리스트를 상기 디스플레이 인코더에 제공하는 단계를 포함하며,
    상기 디스플레이 인코더는 대역폭 사용 평가에 따라, 상기 드로잉 프리미티브에 대응하는 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터에 대한 상기 요청된 리스트 내의 드로잉 프리미티브를 상기 원격 클라이언트 단말기에 선택적으로 전송할 수 있는, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  2. 제 1 항에 있어서,
    상기 드로잉 프리미티브의 요청된 리스트내의 각각의 엔트리를 상기 큐로부터 클리어하는 단계를 더 포함하는, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  3. 제 1 항에 있어서,
    상기 요청은 상기 2차 프레임버퍼 내의 디스플레이 데이터를 업데이트시키기 위해 최종 드로잉 프리미티브에 대응하는 시퀀스 번호를 포함하는, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  4. 제 3 항에 있어서,
    상기 큐 내의 각각의 엔트리는 시퀀스 번호 및 드로잉 프리미티브를 포함하는, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  5. 제 4 항에 있어서,
    상기 추출하는 단계는 상기 큐 내의, 상기 요청의 시퀀스 번호를 포함하여 상기 요청의 시퀀스 번호까지의 시퀀스 번호를 포함하는 각각의 엔트리를 식별하는 단계를 더 포함하는, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  6. 제 1 항에 있어서,
    상기 1차 프레임버퍼는 가상 비디오 어댑터에 의해 할당되는 버퍼이고, 상기 큐는 상기 가상 비디오 어댑터와 통신하는 비디오 어댑터 드라이버에 의해 할당되는, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  7. 제 6 항에 있어서,
    상기 비디오 어댑터 드라이버는 상기 서버상에서 인스턴트화된 가상 머신의 게스트 운영 시스템(OS)의 컴포넌트인, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  8. 제 1 항에 있어서,
    상기 큐의 업데이트시 상기 디스플레이 인코더에 대한 인터럽트를 개시하는 단계를 더 포함하는, 디스플레이 데이터의 양을 감소시키기 위한 방법.
  9. 디스플레이 데이터를 저장하기 위한 1차 프레임버퍼, 및
    디스플레이 데이터를 원격 클라이언트 단말기로 전송하기 위해 2차 프레임버퍼를 사용하는 디스플레이 인코더를 갖는 서버의 프로세싱 유닛에 의해 실행될 때, 상기 프로세싱 유닛으로 하여금,
    드로잉 프리미티브의 실행시 완료된 드로잉 프리미티브의 리스트를 포함하는 큐를 상기 1차 프레임버퍼로 업데이트시키는 단계;
    상기 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터에 대응하는 드로잉 프리미티브의 리스트에 대한 요청을 상기 디스플레이 인코더로부터 수신하는 단계;
    상기 드로잉 프리미티브의 요청된 리스트를 상기 큐로부터 추출하는 단계; 및
    상기 드로잉 프리미티브의 요청된 리스트를 상기 디스플레이 인코더에 제공하는 단계로서, 상기 디스플레이 인코더는, 대역폭 사용 평가에 따라 상기 드로잉 프리미티브에 대응하는 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터에 대한 상기 요청된 리스트 내의 드로잉 프리미티브를 상기 원격 클라이언트 단말기에 선택적으로 전송할 수 있는, 상기 제공하는 단계
    를 수행함으로써, 상기 원격 클라이언트 단말기에 전송될 디스플레이 데이터의 양을 감소시키게 하는 명령어를 포함하는, 컴퓨터 판독가능 매체.
  10. 제 9 항에 있어서,
    상기 프로세싱 유닛은, 또한, 상기 드로잉 프리미티브의 요청된 리스트를 상기 큐로부터 제거하는 단계를 수행하는, 컴퓨터 판독가능 매체.
  11. 제 9 항에 있어서,
    상기 요청은 상기 2차 프레임버퍼 내의 디스플레이 데이터를 업데이트시키기 위해 최종 드로잉 프리미티브에 대응하는 시퀀스 번호를 포함하는, 컴퓨터 판독가능 매체.
  12. 제 11 항에 있어서,
    상기 큐 내의 각각의 엔트리는 시퀀스 번호 및 드로잉 프리미티브를 포함하는, 컴퓨터 판독가능 매체.
  13. 제 12 항에 있어서,
    상기 추출하는 단계는, 상기 큐 내의, 상기 요청의 시퀀스 번호를 포함하여 상기 요청의 시퀀스 번호까지의 시퀀스 번호를 포함하는 각각의 엔트리를 식별하는 단계를 더 포함하는, 컴퓨터 판독가능 매체.
  14. 제 9 항에 있어서,
    상기 1차 프레임버퍼는 가상 비디오 어댑터에 의해 할당되는 버퍼이고, 상기 큐는 상기 가상 비디오 어댑터와 통신하는 비디오 어댑터 드라이버에 의해 할당되는, 컴퓨터 판독가능 매체.
  15. 제 14 항에 있어서,
    상기 비디오 어댑터 드라이버는 상기 서버상에서 인스턴트화된 가상 머신의 게스트 운영 시스템의 컴포넌트인, 컴퓨터 판독가능 매체.
  16. 제 9 항에 있어서,
    상기 프로세싱 유닛은, 또한, 상기 큐의 업데이트시 상기 디스플레이 인코더에 대한 인터럽트를 개시하는 단계를 수행하는, 컴퓨터 판독가능 매체.
  17. 원격 클라이언트 단말기로 전송될 디스플레이 데이터의 양을 감소시키도록 구성된 컴퓨팅 시스템으로서,
    (1) 디스플레이 데이터를 저장하기 위한 1차 프레임버퍼, (2) 드로잉 프리미티브의 큐를 보유하는 비디오 어댑터 드라이버로서, 상기 큐의 각각의 엔트리는 시퀀스 번호 및 드로잉 프리미티브를 포함하는, 상기 비디오 어댑터 드라이버, (3) 디스플레이 데이터를 인코딩하고 상기 원격 클라이언트 단말기로 전송하기 위한 디스플레이 인코더, 그리고 (4) 상기 디스플레이 인코더에 액세스가능한 2차 프레임버퍼를 포함하는 시스템 메모리; 및
    상기 시스템 메모리에 결합된 프로세서를 포함하며,
    상기 상기 프로세서는, (1) 드로잉 프리미티브의 실행시 상기 큐를 상기 1차 프레임버퍼로 업데이트시키는 단계, (2) 상기 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터에 대응하는 드로잉 프리미티브의 리스트에 대한 요청을 상기 디스플레이 인코더로부터 수신하는 단계, (3) 상기 드로잉 프리미티브의 요청된 리스트를 상기 큐로부터 추출하는 단계, 및 (4) 상기 드로잉 프리미티브의 요청된 리스트를 상기 디스플레이 인코더로 제공하는 단계를 수행하기 위해 상기 비디오 어댑터 드라이버를 실행하도록 구성되며,
    상기 디스플레이 인코더는, 대역폭 사용 평가에 따라 상기 드로잉 프리미티브에 대응하는 상기 2차 프레임버퍼 내의 업데이트된 디스플레이 데이터에 대한 상기 요청된 리스트 내의 드로잉 프리미티브를 상기 원격 클라이언트 단말기에 선택적으로 전송할 수 있는, 컴퓨팅 시스템.
  18. 제 17 항에 있어서,
    상기 프로세서는, 또한, 상기 드로잉 프리미티브의 요청된 리스트를 상기 큐로부터 제거하는 단계를 수행하는, 컴퓨팅 시스템.
  19. 제 17 항에 있어서,
    상기 요청은 상기 2차 프레임버퍼 내의 디스플레이 데이터를 업데이트시키기 위해 최종 드로잉 프리미티브에 대응하는 시퀀스 번호를 포함하는, 컴퓨팅 시스템.
  20. 제 19 항에 있어서,
    상기 추출하는 단계는 상기 큐 내의, 상기 요청의 시퀀스 번호를 포함하여 상기 요청의 시퀀스 번호까지의 시퀀스 번호를 포함하는 각각의 엔트리를 식별하는 단계를 더 포함하는, 컴퓨팅 시스템.
KR1020100037634A 2009-04-23 2010-04-22 원격 디스플레이에 선택적으로 전송하기 위해 드로잉 프리미티브를 식별하는 방법 및 시스템 KR101087956B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/428,949 2009-04-23
US12/428,949 US8902242B2 (en) 2009-04-23 2009-04-23 Method and system for identifying drawing primitives for selective transmission to a remote display

Publications (2)

Publication Number Publication Date
KR20100117044A KR20100117044A (ko) 2010-11-02
KR101087956B1 true KR101087956B1 (ko) 2011-11-30

Family

ID=42671740

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100037634A KR101087956B1 (ko) 2009-04-23 2010-04-22 원격 디스플레이에 선택적으로 전송하기 위해 드로잉 프리미티브를 식별하는 방법 및 시스템

Country Status (8)

Country Link
US (6) US8902242B2 (ko)
EP (1) EP2244182B1 (ko)
JP (1) JP5279754B2 (ko)
KR (1) KR101087956B1 (ko)
CN (1) CN101873308B (ko)
AU (1) AU2010201049B2 (ko)
CA (1) CA2697122C (ko)
RU (1) RU2424559C1 (ko)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8902242B2 (en) 2009-04-23 2014-12-02 Vmware, Inc. Method and system for identifying drawing primitives for selective transmission to a remote display
JP5223807B2 (ja) * 2009-07-24 2013-06-26 カシオ計算機株式会社 サーバ装置、サーバベース・コンピューティング・システム、およびプログラム
US8429678B1 (en) * 2010-04-20 2013-04-23 American Megatrends, Inc. Redirecting video to a remote client using a service processor
CN102014301A (zh) * 2010-11-26 2011-04-13 优视科技有限公司 一种视频播放方法、系统及服务器
EP2563038A1 (en) 2011-08-26 2013-02-27 Streamtainment Systems OÜ Method for transmitting video signals from an application on a server over an IP network to a client device
KR20130062463A (ko) 2011-11-25 2013-06-13 한국전자통신연구원 다중 사용자 및 멀티 플랫폼 지원을 위한 게임 스트리밍 시스템 및 방법
JP5821610B2 (ja) 2011-12-20 2015-11-24 富士通株式会社 情報処理装置、情報処理方法及びプログラム
US9372737B2 (en) 2012-02-08 2016-06-21 Vmware, Inc. Video stream management for remote graphical user interfaces
US10430036B2 (en) * 2012-03-14 2019-10-01 Tivo Solutions Inc. Remotely configuring windows displayed on a display device
US9277237B2 (en) * 2012-07-30 2016-03-01 Vmware, Inc. User interface remoting through video encoding techniques
CN103105131B (zh) * 2013-01-24 2015-08-19 东莞市嘉腾仪器仪表有限公司 一种影像测量仪显示图像的方法
US9235905B2 (en) * 2013-03-13 2016-01-12 Ologn Technologies Ag Efficient screen image transfer
US9460481B2 (en) 2013-03-25 2016-10-04 Vmware, Inc. Systems and methods for processing desktop graphics for remote display
CN109964211B (zh) * 2016-09-30 2024-01-23 英特尔公司 用于半虚拟化网络设备队列和存储器管理的技术
US10592417B2 (en) 2017-06-03 2020-03-17 Vmware, Inc. Video redirection in virtual desktop environments
CN108762894A (zh) * 2018-06-21 2018-11-06 郑州云海信息技术有限公司 一种虚拟机显示方法和装置
CN113504882B (zh) * 2021-04-30 2024-02-06 惠州华阳通用电子有限公司 一种多系统多区域显示方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7447997B2 (en) 2002-05-30 2008-11-04 Microsoft Corporation Reducing information transfer in screen capture series

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63131226A (ja) * 1986-11-20 1988-06-03 Yokogawa Electric Corp 画像処理装置
US5043919A (en) * 1988-12-19 1991-08-27 International Business Machines Corporation Method of and system for updating a display unit
US6370574B1 (en) * 1996-05-31 2002-04-09 Witness Systems, Inc. Method and apparatus for simultaneously monitoring computer user screen and telephone activity from a remote location
JP3280306B2 (ja) 1998-04-28 2002-05-13 インターナショナル・ビジネス・マシーンズ・コーポレーション 画像情報送信方法、画像情報更新方法、送信装置及び更新装置
US6380935B1 (en) * 1999-03-17 2002-04-30 Nvidia Corporation circuit and method for processing render commands in a tile-based graphics system
JP4083996B2 (ja) * 2001-04-05 2008-04-30 インターナショナル・ビジネス・マシーンズ・コーポレーション 端末との間で有線接続経路および無線接続経路を介して通信を行うシステム、演算処理装置、無線接続端末、無線接続端末に対するデータ転送方法、プログラム、および記憶媒体
JP2002351651A (ja) * 2001-05-25 2002-12-06 Fuji Xerox Co Ltd 情報表示方法および装置
US7038696B2 (en) * 2002-01-04 2006-05-02 Hewlett-Packard Development Company Method and apparatus for implementing color graphics on a remote computer
US7386324B2 (en) * 2002-04-17 2008-06-10 Lenovo (Singapore) Pte. Ltd. System and method for dual path terminal connection
US20050000256A1 (en) * 2003-07-02 2005-01-06 Yeager Larry R. Theft deterrent device
JP2005228227A (ja) 2004-02-16 2005-08-25 Nippon Telegr & Teleph Corp <Ntt> シンクライアントシステム及びその通信方法
JP2005284694A (ja) 2004-03-30 2005-10-13 Fujitsu Ltd 3次元モデルデータ提供プログラム、3次元モデルデータ提供サーバ、及び3次元モデルデータ転送方法
EP1756702B1 (en) * 2004-05-21 2017-01-25 CA, Inc. Systems and methods for tracking screen updates
US7212174B2 (en) * 2004-06-24 2007-05-01 International Business Machines Corporation Systems and methods for sharing application data in a networked computing environment
US7899864B2 (en) * 2005-11-01 2011-03-01 Microsoft Corporation Multi-user terminal services accelerator
WO2007057053A1 (en) 2005-11-21 2007-05-24 Agilent Technologies, Inc. Conditional updating of image data in a memory buffer
US20070174429A1 (en) * 2006-01-24 2007-07-26 Citrix Systems, Inc. Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment
JP2007219626A (ja) 2006-02-14 2007-08-30 Casio Comput Co Ltd コンピュータシステムのサーバ装置、サーバ制御プログラム、およびそのクライアント装置
GB0707276D0 (en) * 2007-04-16 2007-05-23 Adventiq Ltd Video data transmission
JP4946667B2 (ja) 2007-07-02 2012-06-06 カシオ計算機株式会社 サーバ装置およびプログラム
US7944451B2 (en) 2007-07-31 2011-05-17 Hewlett-Packard Development Company, L.P. Providing pixels from an update buffer
US8902242B2 (en) 2009-04-23 2014-12-02 Vmware, Inc. Method and system for identifying drawing primitives for selective transmission to a remote display
US8902742B2 (en) 2012-10-08 2014-12-02 Fujitsu Limited Method and system for optimized access of a physical random access channel

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7447997B2 (en) 2002-05-30 2008-11-04 Microsoft Corporation Reducing information transfer in screen capture series

Also Published As

Publication number Publication date
JP5279754B2 (ja) 2013-09-04
CA2697122C (en) 2013-12-31
CA2697122A1 (en) 2010-10-23
US20200192624A1 (en) 2020-06-18
US10067732B2 (en) 2018-09-04
US20210247948A1 (en) 2021-08-12
US9448760B2 (en) 2016-09-20
AU2010201049A1 (en) 2010-11-11
US20160378423A1 (en) 2016-12-29
US20100271381A1 (en) 2010-10-28
CN101873308B (zh) 2013-04-10
EP2244182A3 (en) 2011-06-08
US8902242B2 (en) 2014-12-02
JP2010282609A (ja) 2010-12-16
CN101873308A (zh) 2010-10-27
AU2010201049B2 (en) 2012-02-09
US10572214B2 (en) 2020-02-25
KR20100117044A (ko) 2010-11-02
EP2244182A2 (en) 2010-10-27
US11397553B2 (en) 2022-07-26
US20190018639A1 (en) 2019-01-17
US11003412B2 (en) 2021-05-11
EP2244182B1 (en) 2020-03-11
US20150301786A1 (en) 2015-10-22
RU2424559C1 (ru) 2011-07-20

Similar Documents

Publication Publication Date Title
KR101087956B1 (ko) 원격 디스플레이에 선택적으로 전송하기 위해 드로잉 프리미티브를 식별하는 방법 및 시스템
KR101144694B1 (ko) 원격 디스플레이로의 전송을 위해 프레임버퍼를 복제하기 위한 방법 및 시스템
US20090002263A1 (en) Providing a Composite Display
US10002403B2 (en) Command remoting
CN108733602B (zh) 数据处理
CN105164636A (zh) 一种虚拟化环境中的数据通信的方法、装置及处理器

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20141107

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151016

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161019

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171018

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20191029

Year of fee payment: 9