RU2575679C2 - Entropy coder for image compression - Google Patents

Entropy coder for image compression Download PDF

Info

Publication number
RU2575679C2
RU2575679C2 RU2013114349/08A RU2013114349A RU2575679C2 RU 2575679 C2 RU2575679 C2 RU 2575679C2 RU 2013114349/08 A RU2013114349/08 A RU 2013114349/08A RU 2013114349 A RU2013114349 A RU 2013114349A RU 2575679 C2 RU2575679 C2 RU 2575679C2
Authority
RU
Russia
Prior art keywords
encoded
values
data
computer
graphic data
Prior art date
Application number
RU2013114349/08A
Other languages
Russian (ru)
Other versions
RU2013114349A (en
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
Priority claimed from US12/894,793 external-priority patent/US20120082395A1/en
Application filed by МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи filed Critical МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи
Publication of RU2013114349A publication Critical patent/RU2013114349A/en
Application granted granted Critical
Publication of RU2575679C2 publication Critical patent/RU2575679C2/en

Links

Images

Abstract

FIELD: physics, computer engineering.
SUBSTANCE: invention relates to computer engineering. A method of processing graphics data for transmission to a remote computing device, the method comprising receiving graphics data representative of a client screen associated with a virtual machine session; receiving information indicative of available bandwidth for said transmission and, based on the information, determining that the available bandwidth meets a predetermined threshold; and entropy encoding coefficients of transformed graphics data using a compact stream of bit tokens which form groups which align to byte boundaries, wherein series of zeroes are encoded in a variable number by a block with a size which is a multiple of a quantum size; literal values are encoded using an information entry in a cache of recently used literal values; and other values are encoded using a minimum number of blocks with a size which is a multiple of the quantum size.
EFFECT: faster encoding and decoding at the potential expense of loss of compressibility.
10 cl, 11 dwg

Description

УРОВЕНЬ ТЕХНИКИBACKGROUND

В качестве одной из форм организации сети повышенной популярности в основном можно назвать системы дистанционной презентации, которые могут использовать такие протоколы, как протокол удаленного рабочего стола (RDP) и архитектура независимых вычислений (ICA), для совместного использования рабочего стола и других прикладных программ, исполняемых на сервере, с удаленным клиентом. Такие вычислительные системы обычно передают нажатия клавиатуры и щелчки кнопкой мыши или выборы от клиента в сервер, ретранслируя обновления экрана обратно в другом направлении по сетевому соединению (например, Интернет). По существу, пользователь имеет ощущение, как будто его или ее машина действует полностью локально, когда в действительности в клиентское устройство только посылаются снимки экрана рабочего стола или прикладных программ, по мере того как они появляются на стороне сервера.As a form of networking, the increased popularity can mainly be called remote presentation systems, which can use protocols such as Remote Desktop Protocol (RDP) and Independent Computing Architecture (ICA) to share the desktop and other applications running on a server with a remote client. Such computing systems typically transmit keyboard clicks and mouse clicks or selections from the client to the server, relaying screen updates back to the other direction over a network connection (such as the Internet). Essentially, the user has the feeling that his or her machine is operating completely locally, when in reality only screenshots of the desktop or application programs are sent to the client device as they appear on the server side.

В операционной среде удаленного рабочего стола данные, представляющие графику, которые должны передаваться клиенту, обычно сжимаются сервером, передаются из сервера клиенту через сеть и разуплотняются клиентом и отображаются на локальном дисплее пользователя. Процесс кодирования данных обычно требует значительных вычислительных циклов процессора для сжатия и разуплотнения данных. Такие требования обработки могут иметь прямое влияние на задержку кодирования и декодирования из сервера клиенту и отрицательно воздействовать на ощущения удаленного пользователя.In the Remote Desktop operating environment, the data representing the graphics to be transmitted to the client is usually compressed by the server, transferred from the server to the client through the network, and decompressed by the client and displayed on the user's local display. The data encoding process usually requires significant processor cycles to compress and decompress the data. Such processing requirements can have a direct effect on the delay in encoding and decoding from the server to the client and adversely affect the feelings of the remote user.

СУЩНОСТЬ ИЗОБРЕТЕНИЯSUMMARY OF THE INVENTION

Одна из проблем систем дистанционной презентации состоит в том, что такие системы стремятся способствовать сжатию данных за счет производительности процессора. Многие системы предполагают, что полоса пропускания с большой вероятностью ограничена, и, таким образом, жертвуют быстродействием процессора для достижения более высоких уровней сжатия данных и, тем самым, для уменьшения количества данных, которые необходимо передавать по линии связи с ограниченной полосой пропускания. Однако в настоящее время многие клиенты дистанционной презентации представляют собой устройства более низкого уровня, которые могут использовать менее быстродействующие процессоры, но которые могут иметь доступ к широкой полосе пропускания. В таких случаях суммарная производительность и ощущение пользователя могут быть улучшены посредством использования более простого устройства сжатия и методов сжатия, требующих меньше вычислений, даже если это означает, что сжатие уменьшено.One of the problems of remote presentation systems is that such systems seek to facilitate data compression due to processor performance. Many systems assume that bandwidth is very likely to be limited, and thus sacrifice processor speed to achieve higher levels of data compression and thereby reduce the amount of data that needs to be transmitted over a limited bandwidth link. However, many remote presentation clients are currently lower-level devices that can use less fast processors, but which can have access to wide bandwidth. In such cases, the overall performance and user experience can be improved by using a simpler compression device and compression methods that require less computation, even if this means that the compression is reduced.

В различных вариантах осуществления раскрываются способы и системы для быстрого энтропийного кодера/декодера для использования при сжатии изображений в реальном масштабе времени. Например, способ обработки графических данных для передачи в удаленное вычислительное устройство может содержать прием графических данных, представляющих экран клиента, который необходимо визуализировать, прием информации, показывающей доступную полосу пропускания для передачи, и, основываясь на этой информации, определение того, удовлетворяет ли доступная полоса пропускания заранее заданному порогу, и энтропийное кодирование графических данных с использованием потока кодирования с фиксированным размером в битах, при этом серии нулей кодируются в варьируемом количестве блоков с фиксированным размером в битах, и буквенные значения кодируются с использованием информационной записи в кэш-памяти недавно использованных буквенных значений, или в варьируемом количестве блоков с фиксированным размером в битах.In various embodiments, methods and systems for a fast entropy encoder / decoder for use in real-time image compression are disclosed. For example, a method of processing graphic data for transmission to a remote computing device may comprise receiving graphic data representing a client screen that needs to be visualized, receiving information showing the available bandwidth for transmission, and based on this information, determining whether the available band is satisfactory passing a predetermined threshold, and entropy coding of graphic data using a coding stream with a fixed bit size, while the series are well s are encoded in a variable number of fixed size blocks in bits, and alphabetic values are encoded using the information recording in the cache of recently used alphabetic values, or a variable number of blocks with a fixed size in bits.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙBRIEF DESCRIPTION OF THE DRAWINGS

Системы, способы и считываемые компьютером носители для графических данных для передачи в удаленное вычислительное устройство согласно настоящему описанию далее описаны со ссылками на сопровождающие чертежи.Systems, methods, and computer-readable media for graphic data for transmission to a remote computing device according to the present description will now be described with reference to the accompanying drawings.

Системы, способы и считываемые компьютером носители для изменения перспективного вида в виртуальной операционной среде согласно настоящему описанию в дальнейшем поясняются описанием конкретных вариантов его осуществления со ссылками на сопровождающие чертежи, на которых:Systems, methods and computer-readable media for changing the perspective view in a virtual operating environment according to the present description are further explained in the description of specific options for its implementation with reference to the accompanying drawings, in which:

фиг.1 и 2 изображают иллюстративную компьютерную систему, в которой могут быть реализованы аспекты настоящего раскрытия,1 and 2 depict an illustrative computer system in which aspects of the present disclosure may be implemented,

фиг.3 изображает операционную среду для аспектов практической реализации настоящего раскрытия,figure 3 depicts the operating environment for aspects of the practical implementation of the present disclosure,

фиг.4 изображает операционную среду для аспектов практической реализации настоящего раскрытия,4 depicts an operating environment for aspects of the practical implementation of the present disclosure,

фиг.5 иллюстрирует компьютерную систему, включающую в себя схемы для реализации услуг удаленного рабочего стола,5 illustrates a computer system including circuits for implementing remote desktop services,

фиг.6 иллюстрирует компьютерную систему, включающую в себя схемы для реализации дистанционных услуг,6 illustrates a computer system including circuits for implementing remote services,

фиг.7 иллюстрирует пример процесса декодирования,7 illustrates an example decoding process,

фиг.8 иллюстрирует пример процесса кодирования,8 illustrates an example encoding process,

фиг.9 иллюстрирует пример последовательности операций для обработки графических данных для передачи в клиентский компьютер,Fig.9 illustrates an example of a sequence of operations for processing graphic data for transmission to a client computer,

фиг.10 иллюстрирует пример последовательности операций для обработки графических данных для передачи в клиентский компьютер,10 illustrates an example flowchart for processing graphic data for transmission to a client computer,

фиг.11 изображает иллюстративную систему для обработки графических данных для передачи в клиентский компьютер.11 depicts an illustrative system for processing graphic data for transmission to a client computer.

ПОДРОБНОЕ ОПИСАНИЕ ПРЕДПОЧТИТЕЛЬНЫХ ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯDETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

Вычислительные операционные среды в общем видеGeneral computing environments

Некоторые специфические детали излагаются в последующем описании и фигурах, чтобы обеспечить полное понимание различных вариантов осуществления раскрытия. Некоторые хорошо известные детали, часто ассоциированные с вычислительной технологией и программным обеспечением, не излагаются в последующем описании, чтобы избежать ненужного затенения различных вариантов осуществления раскрытия. Кроме того, специалистам должно быть понятно, что они могут осуществлять на практике другие варианты осуществления раскрытия без одной или нескольких деталей, описанных ниже. Наконец, хотя различные способы описаны со ссылкой на этапы и последовательности в следующем раскрытии, описание как таковое предназначено для обеспечения четкого выполнения вариантов осуществления раскрытия, и этапы и последовательности этапов могут не выполняться так, как требуется для практического осуществления настоящего раскрытия.Some specific details are set forth in the following description and figures in order to provide a thorough understanding of various embodiments of the disclosure. Some well-known details, often associated with computing technology and software, are not set forth in the following description in order to avoid unnecessarily obscuring various embodiments of the disclosure. In addition, it will be understood by those skilled in the art that they may practice other embodiments of the disclosure without one or more of the details described below. Finally, although various methods are described with reference to the steps and sequences in the following disclosure, the description as such is intended to provide a clear implementation of embodiments of the disclosure, and the steps and sequences of steps may not be performed as required for the practical implementation of the present disclosure.

Должно быть понятно, что различные описанные здесь методики могут осуществляться в связи с аппаратными средствами или программным обеспечением, или, при необходимости, с комбинацией их обоих. Таким образом, способы и устройства по настоящему раскрытию или некоторым его аспектам или частям могут принимать форму программного кода (то есть, инструкции), воплощенного в материальных носителях данных, таких как гибкие диски, компакт-диски CD-ROM, накопители на жестких дисках или любые другие считываемые компьютером носители; причем, когда программный код загружается в машину или исполняется машиной, такой как компьютер, машина становится устройством для практического осуществления настоящего раскрытия. В случае исполнения программного кода на программируемых компьютерах, вычислительное устройство обычно включает в себя процессор, носитель, считываемый процессором (включая энергозависимые и энергонезависимые запоминающие устройства и/или элементы хранения), по меньшей мере одно устройства ввода и по меньшей мере одно устройства вывода. Одна или несколько программ могут выполнять или использовать процессы, описанные в связи с настоящим раскрытием, например, через использование интерфейса прикладного программирования (API), многоразовые средства управления или подобное. Такие программы предпочтительно осуществляются на процедурном языке высокого уровня или языке объектно-ориентированного программирования для связи с компьютерной системой. Однако, при желании, программы могут быть реализованы на ассемблере или машинном языке. В любом случае, язык может быть транслируемым языком или интерпретируемым языком и может быть объединен с реализацией в аппаратных средствах.It should be understood that the various techniques described herein may be implemented in connection with hardware or software, or, if necessary, with a combination of both of them. Thus, the methods and devices of the present disclosure or some of its aspects or parts may take the form of program code (i.e., instructions) embodied in tangible storage media such as floppy disks, CD-ROMs, hard drives or any other computer-readable media; moreover, when the program code is loaded into a machine or executed by a machine, such as a computer, the machine becomes a device for the practical implementation of the present disclosure. In the case of executing program code on programmable computers, the computing device typically includes a processor, a medium readable by the processor (including volatile and non-volatile memory devices and / or storage elements), at least one input device and at least one output device. One or more programs may execute or use the processes described in connection with the present disclosure, for example, through the use of an application programming interface (API), reusable controls, or the like. Such programs are preferably implemented in a high-level procedural language or object-oriented programming language for communication with a computer system. However, if desired, the programs can be implemented in assembler or machine language. In any case, the language may be a translated language or an interpreted language, and may be combined with a hardware implementation.

Система удаленного рабочего стола представляет собой компьютерную систему, которая поддерживает приложения, которые могут исполняться дистанционно клиентскими компьютерными системами. Входные данные вводятся на клиентской компьютерной системе и переносятся по сети (например, с использованием протоколов, основанных на семействе протоколов международного союза связи (ITU) T.120, таких как протокол удаленного рабочего стола (RDP)) в приложение на терминальном сервере. Приложение обрабатывает входные данные, как если бы входные данные вводились на терминальном сервере. Приложение генерирует выходные данные в ответ на принятые входные данные, и выходные данные переносятся по сети в клиентскую компьютерную систему.A remote desktop system is a computer system that supports applications that can be executed remotely by client computer systems. Input data is entered on the client computer system and transferred over the network (for example, using protocols based on the T.120 International Communication Union (ITU) protocol family, such as the Remote Desktop Protocol (RDP)) to the application on the terminal server. The application processes the input data as if the input data were entered on a terminal server. The application generates output in response to the received input, and the output is transferred over the network to the client computer system.

Варианты осуществления могут выполняться на одном или нескольких компьютерах. Фиг.1 и 2 и последующее описание предназначены, чтобы обеспечить краткое общее описание подходящей вычислительной операционной среды, в которой раскрытие может быть реализовано. Специалистам должно быть понятно, что компьютерные системы 200, 300 могут иметь все или некоторые из компонентов, описанных в отношении компьютера 100 по фиг.1 и 2.Embodiments may be performed on one or more computers. 1 and 2 and the following description are intended to provide a brief, general description of a suitable computing operating environment in which disclosure may be implemented. Those skilled in the art will appreciate that computer systems 200, 300 may have all or some of the components described with respect to computer 100 of FIGS. 1 and 2.

Термин «схемы», используемый по всему описанию, может включать в себя компоненты аппаратных средств, такие как аппаратные контроллеры прерываний, накопители на жестких дисках, сетевые адаптеры, графические процессоры, аппаратные средства, основанные на видео/аудио кодеках, и встроенные программы (firmware)/программное обеспечение, используемое для функционирования с такими аппаратными средствами. Термин «схемы» также может включать в себя микропроцессоры, сконфигурированные для выполнения функций посредством встроенного программного обеспечения или посредством переключателей, установленных некоторым способом, или одним или несколькими логическими процессорами, например, одним или несколькими ядрами многоядерного центрального процессора. Логические процессоры в данном примере могут быть сконфигурированы посредством инструкций программного обеспечения, воплощающих логику, функционирующую для выполнения функций, которые загружаются из памяти, например, оперативного запоминающего устройства (RAM, ОЗУ), постоянного запоминающего устройства (ROM, ПЗУ), встроенного программного обеспечения и/или виртуальной памяти. В иллюстративных вариантах осуществления, где схемы включают в себя комбинацию аппаратных средств и программного обеспечения, разработчик может записывать исходный код, воплощающий логику, которая по существу транслируется в считываемый машиной код, который может быть выполнен логическим процессором. Поскольку специалист может понять, что состояние уровня техники развилось до той точки, где существует небольшая разница между аппаратными средствами, программным обеспечением или комбинацией аппаратных средств/программного обеспечения, выбор аппаратных средств против программного обеспечения для выполнения функций является просто конструктивным выбором. Таким образом, поскольку специалист может понять, что процесс программного обеспечения может быть преобразован в эквивалентную структуру аппаратных средств и структура аппаратных средств сама по себе может быть преобразована в эквивалентный процесс программного обеспечения, выбор осуществления в аппаратных средствах против осуществления в программном обеспечении является тривиальным и остается за разработчиком.The term “circuits” as used throughout this specification may include hardware components such as hardware interrupt controllers, hard disk drives, network adapters, GPUs, hardware based on video / audio codecs, and firmware ) / software used to operate with such hardware. The term “circuits” may also include microprocessors configured to perform functions by means of firmware or by switches set in some way, or by one or more logical processors, for example, one or more cores of a multicore central processor. The logical processors in this example can be configured through software instructions that embody logic that functions to execute functions that are loaded from memory, such as random access memory (RAM, RAM), read-only memory (ROM, ROM), firmware, and / or virtual memory. In illustrative embodiments, where the circuitry includes a combination of hardware and software, a developer can write source code embodying logic that is essentially translated into machine-readable code that can be executed by a logical processor. Because one skilled in the art can understand that the state of the art has developed to the point where there is a slight difference between hardware, software, or a combination of hardware / software, choosing hardware versus software to perform functions is simply a constructive choice. Thus, since one skilled in the art can understand that a software process can be converted to an equivalent hardware structure and a hardware structure itself can be converted to an equivalent software process, the choice of implementation in hardware versus implementation in software is trivial and remains for the developer.

Фиг.1 изображает иллюстративную компьютерную систему, которая конфигурируется для реализации аспектов настоящего раскрытия. Компьютерная система может включать в себя компьютер 20 или подобное устройство, включающее в себя процессор 21, системную память 22 и системную шину 23, которая соединяет различные компоненты системы, включая соединение системной памяти с процессором 21. Системная шина 23 может быть любого из нескольких типов структур шин, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, использующую любую из множества архитектур шин. Системная память включает в себя постоянное запоминающее устройство (ROM, ПЗУ) 24 и оперативное запоминающее устройство (RAM, ОЗУ) 25. Базовая система ввода/вывода (BIOS) 26, содержащая базовые подпрограммы, которые помогают переносить информацию между элементами внутри компьютера 20, как, например, во время пуска, сохраняется в ПЗУ 24. Компьютер может дополнительно включать в себя накопитель 27 на жестких дисках для считывания с жесткого диска или для записи на него (не показан), дисковод 28 магнитного диска для считывания со съемного магнитного диска 29 или для записи на него и дисковод 30 оптического диска для считывания со съемного оптического диска 31 или для записи на него, такой как CD ROM или другой оптический носитель. В некоторых иллюстративных вариантах осуществления исполняемые компьютером инструкции, осуществляющие аспекты настоящего раскрытия, могут сохраняться в ПЗУ 24, на жестком диске (не показан), в ОЗУ 25, на сменном магнитном диске 29, оптическом диске 31 и/или в кэш-памяти процессора 21. Накопитель 27 на жестких дисках, дисковод 28 магнитного диска и дисковод 30 оптического диска подсоединяются к системной шине 23 посредством интерфейса 32 накопителя на жестких дисках, интерфейса 33 дисковода магнитного диска и интерфейса 34 дисковода оптического диска, соответственно. Дисководы и накопители и ассоциированные с ними считываемые компьютером носители обеспечивают энергонезависимое хранение считываемых компьютером инструкций, структур данных, программных модулей и других данных для компьютера 20. Хотя операционная среда, описанная здесь, использует жесткий диск, сменный магнитный диск 29 и сменный оптический диск 31, специалистам должно быть понятно, что в такой операционной среде также могут быть использованы другие типы считываемых компьютером носителей, которые могут хранить данные, которые доступны для компьютера, такие как магнитные кассеты, платы флэш-памяти, цифровые видеодиски, картриджи со съемным магнитным диском Бернулли, ОЗУ устройства, ПЗУ устройства и подобные.Figure 1 depicts an illustrative computer system that is configured to implement aspects of the present disclosure. A computer system may include a computer 20 or the like, including a processor 21, a system memory 22, and a system bus 23 that connects various components of the system, including connecting a system memory to a processor 21. The system bus 23 may be any of several types of structures buses, including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. System memory includes read-only memory (ROM, ROM) 24 and random access memory (RAM, RAM) 25. Basic input / output system (BIOS) 26, containing basic routines that help transfer information between items inside the computer 20, like for example, during startup, it is stored in ROM 24. The computer may further include a hard disk drive 27 for reading from or writing to a hard disk (not shown), a magnetic disk drive 28 for reading from a removable magnetic disk 29 or for recording onto it and an optical disk drive 30 for reading from or for writing to a removable optical disk 31, such as a CD ROM or other optical medium. In some illustrative embodiments, computer-executable instructions implementing aspects of the present disclosure may be stored in ROM 24, on a hard disk (not shown), in RAM 25, on a removable magnetic disk 29, an optical disk 31, and / or in the cache memory of the processor 21 The hard disk drive 27, the magnetic disk drive 28 and the optical disk drive 30 are connected to the system bus 23 through the hard disk drive interface 32, the magnetic disk drive interface 33 and the optical disk drive interface 34, accordingly. Drives and drives and associated computer-readable media provide non-volatile storage of computer-readable instructions, data structures, program modules and other data for computer 20. Although the operating environment described here uses a hard disk, a removable magnetic disk 29, and a removable optical disk 31, it should be understood by those skilled in the art that other types of computer-readable media that can store data that is accessible can also be used in such an operating environment. A computer, such as magnetic cassettes, flash memory cards, digital video disks, cartridges Bernoulli removable magnetic disk, RAM devices, ROM devices, and the like.

Несколько программных модулей может храниться на жестком диске, магнитном диске 29, оптическом диске 31, ПЗУ 24 или ОЗУ 25, включая операционную систему 35, одну или несколько прикладных программ 36, другие программные модули 37 и данные 38 программ. Пользователь может вводить команды и информацию в компьютер 20 через устройства ввода, такие как клавиатура 40 и координатно-указательное устройство 42. Другие устройства ввода (не показаны) могут включать в себя микрофон, джойстик, игровой пульт, спутниковую антенну, сканер и т.п. Эти и другие устройства ввода часто подсоединяются к процессору 21 через интерфейс 46 последовательного порта, который связан с системной шиной, но могут быть подсоединены другими интерфейсами, такими как параллельный порт, игровой порт или универсальная последовательная шина (USB). Дисплей 47 и другие типы устройств отображения также могут быть подсоединены к системной шине 23 через некоторый интерфейс, такой как видеоадаптер 48. В дополнение к дисплею 47, компьютеры обычно включают в себя периферийные устройства вывода (не показаны), такие как громкоговорители и принтеры. Система по фиг.1 также включает в себя хост-адаптер 55, шину 56 интерфейса малых компьютерных систем (SCSI) и внешнее запоминающее устройство 62, подсоединенное к SCSI шине 56.Several software modules may be stored on a hard disk, magnetic disk 29, optical disk 31, ROM 24, or RAM 25, including an operating system 35, one or more application programs 36, other program modules 37, and program data 38. The user can enter commands and information into computer 20 through input devices such as a keyboard 40 and pointing device 42. Other input devices (not shown) may include a microphone, joystick, game console, satellite dish, scanner, etc. . These and other input devices are often connected to the processor 21 via a serial port interface 46, which is connected to the system bus, but can be connected by other interfaces, such as a parallel port, a game port, or a universal serial bus (USB). The display 47 and other types of display devices can also be connected to the system bus 23 via some interface, such as the video adapter 48. In addition to the display 47, computers typically include peripheral output devices (not shown), such as speakers and printers. The system of FIG. 1 also includes a host adapter 55, a small computer system interface (SCSI) bus 56, and an external storage device 62 connected to the SCSI bus 56.

Компьютер 20 может функционировать в сетевой среде с использованием логических соединений с одним или несколькими удаленными компьютерами, такими как удаленный компьютер 49. Удаленный компьютер 49 может представлять собой другой компьютер, сервер, маршрутизатор, сетевой ПК, одноранговое устройство или другой сетевой узел, виртуальную машину и обычно включает в себя многие или все из элементов, описанных выше относительно компьютера 20, хотя на фиг.1 иллюстрируется только запоминающее устройство 50. Логические соединения, показанные на фиг.1, могут включать в себя локальную сеть (LAN) 51 и глобальную сеть (WAN) 52. Такие сетевые среды обычно имеют место в офисах, компьютерных сетях масштаба предприятия, интрасетях и сети Интернет.Computer 20 may operate in a network environment using logical connections to one or more remote computers, such as remote computer 49. Remote computer 49 may be another computer, server, router, network PC, peer device or other network node, virtual machine, and typically includes many or all of the elements described above with respect to computer 20, although only memory device 50 is illustrated in FIG. 1. Logical connections shown in FIG. 1, may include a local area network (LAN) 51 and a wide area network (WAN) 52. Such network environments typically occur in offices, enterprise-wide computer networks, intranets, and the Internet.

При использовании в сетевой среде LAN компьютер 20 может быть подсоединен к сети LAN 51 через сетевой интерфейс или адаптер 53. При использовании в сетевой среде WAN, компьютер 20 обычно включает в себя модем 54 или другое средство для установления связи по глобальной сети 52, такой как Интернет. Модем 54, который может быть внутренним или внешним, может быть подсоединен к системной шине 23 через интерфейс 46 последовательного порта. В сетевой среде программные модули, показанные относительно компьютера 20 или его частей, могут сохраняться в удаленном запоминающем устройстве. Должно быть понятно, что сетевые соединения являются примерами и что можно использовать другие средства для установления линии связи между компьютерами. Более того, хотя предполагается, что многочисленные варианты осуществления настоящего раскрытия особенно хорошо подходят для компьютерных систем, ничего в этом документе не предназначено, чтобы ограничить раскрытие этими вариантами осуществления.When used in a LAN network environment, computer 20 may be connected to a LAN 51 via a network interface or adapter 53. When used in a WAN network environment, computer 20 typically includes a modem 54 or other means for establishing communication over a wide area network 52, such as The Internet. The modem 54, which may be internal or external, may be connected to the system bus 23 via the serial port interface 46. In a networked environment, program modules shown with respect to computer 20 or parts thereof may be stored in a remote storage device. It should be understood that network connections are examples and that other means can be used to establish a communication link between computers. Moreover, although it is contemplated that numerous embodiments of the present disclosure are particularly well suited for computer systems, nothing in this document is intended to limit the disclosure to these embodiments.

Обратимся теперь к фиг.2, на которой изображен другой вариант осуществления иллюстративной компьютерной системы 100. Компьютерная система 100 может включать в себя логический процессор 102, например, исполнительное ядро. Хотя иллюстрируется один логический процессор 102, в других вариантах осуществления компьютерная система 100 может иметь многочисленные логические процессоры, например, многочисленные исполнительные ядра на одной подложке процессора и/или многочисленные подложки процессора, каждая из которых может иметь многочисленные исполнительные ядра. Как показано на данной фигуре, различные считываемые компьютером носители 110 могут быть соединены между собой одной или несколькими системными шинами, которые подсоединяют различные компоненты системы к логическому процессору 102. Системные шины могут быть любого типа из нескольких типов структур шин, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, использующую любую из разнообразного множества архитектур шин. В иллюстративных вариантах осуществления считываемые компьютером носители 110 могут включать в себя, например, оперативное запоминающее устройство (ОЗУ) 104, запоминающее устройство 106, например, электромеханический накопитель, твердотельный накопитель, например, встроенное программное обеспечение 108, например, перепрограммируемое ПЗУ или ОЗУ, и сменные запоминающие устройства 118, как, например, CD-ROM диски, дискеты, диски DVD, флэш-накопители, внешние запоминающие устройства и т.д. Специалистам должно быть понятно, что могут быть использованы другие типы считываемых компьютером носителей, такие как магнитные кассеты, платы флэш-памяти, цифровые видеодиски, картриджи со съемным магнитным диском Бернулли.Turning now to FIG. 2, another embodiment of an exemplary computer system 100 is depicted. Computer system 100 may include a logical processor 102, such as an executive core. Although one logical processor 102 is illustrated, in other embodiments, the computer system 100 may have multiple logical processors, for example, multiple execution cores on a single processor substrate and / or multiple processor substrates, each of which may have multiple execution cores. As shown in this figure, various computer readable media 110 may be interconnected by one or more system buses that connect various system components to logic processor 102. The system buses can be any type of several types of bus structures, including a memory bus or memory controller , a peripheral bus, and a local bus using any of a diverse array of bus architectures. In exemplary embodiments, computer-readable media 110 may include, for example, random access memory (RAM) 104, memory 106, for example, an electromechanical drive, a solid state drive, for example, firmware 108, such as flash ROM or RAM, and removable storage devices 118, such as, for example, CD-ROMs, floppy disks, DVDs, flash drives, external storage devices, etc. Those skilled in the art will appreciate that other types of computer-readable media can be used, such as magnetic cassettes, flash memory cards, digital video discs, and Bernoulli removable magnetic disk cartridges.

Считываемые компьютером носители обеспечивают энергонезависимое хранение исполняемых процессором инструкций 122, структур данных, программных модулей и других данных для компьютера 100. Базовая система ввода/вывода (BIOS) 120, содержащая базовые подпрограммы, которые помогают переносить информацию между элементами внутри компьютерной системы 100, как, например, во время пуска, могут сохраняться во встроенном программном обеспечении 108. Несколько программ могут храниться во встроенном программном обеспечении 108, в запоминающем устройстве 106, в ОЗУ 104 и/или в сменных запоминающих устройствах 118 и могут исполняться логическим процессором 102, включая операционную систему и/или прикладные программы.Computer-readable media provides non-volatile storage of processor-executable instructions 122, data structures, program modules, and other data for computer 100. A basic input / output system (BIOS) 120 that contains basic routines that help transfer information between elements within computer system 100, such as for example, during startup, may be stored in firmware 108. Several programs may be stored in firmware 108, in memory 106, in RAM 104 and / or in removable storage devices 118 and may be executed by a logical processor 102, including an operating system and / or application programs.

Команды и информация могут приниматься компьютером 100 через устройства 116 ввода, которые могут включать в себя клавиатуру и координатно-указательное устройство, но не ограничиваются ими. Другие устройства ввода могут включать в себя микрофон, джойстик, игровой пульт, сканер и т.п. Эти и другие устройства ввода часто подсоединяются к логическому процессору 102 через интерфейс с последовательным портом, который связан с системной шиной, но могут быть подсоединены другими интерфейсами, такими как параллельный порт, игровой порт или универсальная последовательная шина (USB). Дисплей или другие типы устройств отображения также могут быть подсоединены к системной шине через некоторый интерфейс, такой как видеоадаптер, который может быть подсоединен к графическому процессору 112 или быть его частью. В дополнение к дисплею, компьютеры обычно включают в себя периферийные устройства вывода (не показаны), такие как громкоговорители и принтеры. Иллюстративная система также включает в себя хост-адаптер, шину интерфейса малых компьютерных систем (SCSI) и внешнее запоминающее устройство, подсоединенное к SCSI шине.Commands and information may be received by computer 100 through input devices 116, which may include, but are not limited to, a keyboard and pointing device. Other input devices may include a microphone, joystick, game console, scanner, and the like. These and other input devices are often connected to the logical processor 102 via an interface with a serial port that is connected to the system bus, but can be connected by other interfaces, such as a parallel port, a game port, or a universal serial bus (USB). A display or other types of display devices can also be connected to the system bus via some interface, such as a video adapter, which can be connected to or be part of the graphics processor 112. In addition to the display, computers typically include peripheral output devices (not shown), such as speakers and printers. The illustrative system also includes a host adapter, a small computer system interface (SCSI) bus, and an external storage device connected to the SCSI bus.

Компьютерная система 100 может функционировать в сетевой среде с использованием логических соединений с одним или несколькими удаленными компьютерами, такими как удаленный компьютер. Удаленный компьютер может представлять собой другой компьютер, сервер, маршрутизатор, сетевой ПК, одноранговое устройство или другой сетевой узел и обычно включает в себя многие или все из элементов, описанных выше относительно компьютерной системы 100.Computer system 100 may operate in a network environment using logical connections to one or more remote computers, such as a remote computer. The remote computer may be another computer, server, router, network PC, peer-to-peer device, or other network node, and typically includes many or all of the elements described above with respect to computer system 100.

При использовании в сетевой среде LAN или WAN компьютерная система 100 может быть подсоединена к LAN или WAN сети через сетевую интерфейсную плату (NIC) 114. Плата NIC 114, которая может быть внутренней или внешней, может быть подсоединена к системной шине. В сетевой среде программные модули, показанные относительно компьютерной системы 100 или ее частей, могут сохраняться в удаленном запоминающем устройстве. Должно быть понятно, что описанные здесь сетевые соединения являются примерами и что можно использовать другие средства для установления линии связи между компьютерами. Более того, хотя предполагается, что многочисленные варианты осуществления настоящего раскрытия особенно хорошо подходят для компьютерных систем, ничего в этом документе не предназначено, чтобы ограничить раскрытие этими вариантами осуществления.When used in a LAN or WAN network environment, computer system 100 may be connected to a LAN or WAN network through a network interface card (NIC) 114. A NIC 114, which may be internal or external, may be connected to a system bus. In a networked environment, program modules shown with respect to a computer system 100 or parts thereof may be stored in a remote storage device. It should be understood that the network connections described herein are examples and that other means can be used to establish a communication link between computers. Moreover, although it is contemplated that numerous embodiments of the present disclosure are particularly well suited for computer systems, nothing in this document is intended to limit the disclosure to these embodiments.

Система удаленного рабочего стола представляет собой компьютерную систему, которая поддерживает приложения, которые могут исполняться дистанционно клиентскими компьютерными системами. Входные данные вводятся на клиентской компьютерной системе и переносятся по сети (например, с использованием протоколов, основанных на семействе протоколов международного союза связи (ITU) T.120, таких как протокол удаленного рабочего стола (RDP)) в приложение на терминальном сервере. Приложение обрабатывает входные данные, как если бы входные данные вводились на терминальном сервере. Приложение генерирует выходные данные в ответ на принятые входные данные, и выходные данные переносятся по сети в клиентскую компьютерную систему. Клиентская компьютерная система выдает выходные данные. Таким образом, на клиентской компьютерной системе принимаются входные данные и выдаются выходные данные, тогда как обработка фактически происходит на терминальном сервере. Сеанс может включать в себя программную оболочку и пользовательский интерфейс, такой как рабочий стол, подсистемы, которые отслеживают перемещение курсора мыши на рабочем столе, подсистемы, которые преобразуют щелчок кнопкой мыши на пиктограмме в команды, которые приводят в исполнение определенный этап программы, и т.п. В другом иллюстративном варианте осуществления сеанс может включать в себя некоторое приложение. В этом примере, хотя приложение визуализируется, среда, реализующая концепцию рабочего стола, может по-прежнему генерироваться и оставаться скрытой от пользователя. Должно быть понятно, что предшествующее описание являются иллюстративным и что раскрываемое изобретение может быть реализовано в различных операционных средах клиента/сервера и не ограничивается конкретным продуктом терминальных служб.A remote desktop system is a computer system that supports applications that can be executed remotely by client computer systems. Input data is entered on the client computer system and transferred over the network (for example, using protocols based on the T.120 International Communication Union (ITU) protocol family, such as the Remote Desktop Protocol (RDP)) to the application on the terminal server. The application processes the input data as if the input data were entered on a terminal server. The application generates output in response to the received input, and the output is transferred over the network to the client computer system. The client computer system provides output. Thus, on the client computer system, input data is received and output data is issued, while the processing actually takes place on the terminal server. A session can include a program shell and user interface, such as the desktop, subsystems that track the movement of the mouse cursor on the desktop, subsystems that convert a mouse click on an icon into commands that execute a specific stage of the program, etc. P. In another illustrative embodiment, the session may include some application. In this example, although the application is visualized, an environment that implements the desktop concept can still be generated and remain hidden from the user. It should be understood that the foregoing description is illustrative and that the disclosed invention can be implemented in various client / server operating environments and is not limited to a particular terminal services product.

В большинстве, если не во всех удаленных средах, реализующих концепцию рабочего стола, входные данные (вводимые на клиентской компьютерной системе) обычно включают в себя данные мыши или клавиатуры, представляющие команды в некоторое приложение, и выходные данные (сгенерированные приложением на терминальном сервере) обычно включают в себя видеоданные для отображения на устройстве вывода видеоданных. Многие удаленные среды, реализующие концепцию рабочего стола, также включают в себя функциональные возможности, которые распространяются на перенос других типов данных.In most, if not all remote environments that implement the desktop concept, input data (input on a client computer system) usually includes mouse or keyboard data representing commands in a certain application, and output data (generated by the application on a terminal server) usually include video data for displaying video data on the output device. Many remote environments that implement the desktop concept also include functionality that extends to the transfer of other data types.

Каналы связи могут быть использованы для расширения RDP протокола, позволяя сменным платам переносить данные по RDP соединению. Функциональные возможности, такие как перенаправление принтера, перенаправление буфера обмена, перенаправление порта и т.д., используют технологию канала связи. Таким образом, в дополнение к входным данным и выходным данным может существовать много каналов связи, которые должны переносить данные. Соответственно, могут иметь место внеплановые запросы на перенос выходных данных и один или несколько запросов для переноса других данных, соперничающих за доступную сетевую полосу пропускания.Communication channels can be used to expand the RDP protocol, allowing plug-in cards to transfer data over an RDP connection. Functionality, such as printer redirection, clipboard redirection, port redirection, etc., use the communication channel technology. Thus, in addition to the input and output, there may be many communication channels that must carry the data. Accordingly, unplanned requests for transferring output data and one or more requests for transferring other data competing for available network bandwidth may occur.

Обратимся теперь к фиг.3 и 4, на которых изображены высокоуровневые блок-схемы компьютерных систем, сконфигурированных для реализации виртуальных машин. Как показано на этих фигурах, компьютерная система 100 может включать в себя элементы, описанные на фиг.1 и 2, и компоненты, функционирующие для осуществления виртуальных машин. Одним из таких компонентов является гипервизор 202, который в уровне технике также может упоминаться как монитор виртуальных машин. Гипервизор 202 в изображенном варианте осуществления может конфигурироваться для управления и арбитража доступа к аппаратным средствам компьютерной системы 100. Вообще говоря, гипервизор 202 может генерировать среды исполнения программ, называемые разделами, с дочернего раздела 1 по дочерний раздел N (где N - целое число, большее или равное 1). В некоторых вариантах осуществления дочерний раздел может рассматриваться как базовый блок изоляции, поддерживаемой гипервизором 202, то есть каждому дочернему разделу может быть поставлен в соответствие набор ресурсов аппаратных средств, например, память, устройства, логические процессоры и т.д., которые находятся под управлением гипервизора 202 и/или родительского раздела, и гипервизор 202 может изолировать один раздел от доступа ресурсов других разделов. В вариантах осуществления гипервизор 202 может быть автономным программным продуктом, частью операционной системы, встроенным программным обеспечением материнской платы, специализированной интегральной схемой или их комбинацией.Turning now to FIGS. 3 and 4, which depict high-level block diagrams of computer systems configured for implementing virtual machines. As shown in these figures, the computer system 100 may include the elements described in FIGS. 1 and 2, and components operating to implement virtual machines. One such component is hypervisor 202, which in the prior art may also be referred to as a virtual machine monitor. The hypervisor 202 in the illustrated embodiment can be configured to control and arbitrate access to the hardware of the computer system 100. Generally speaking, the hypervisor 202 can generate program execution environments, called partitions, from child section 1 to child section N (where N is an integer greater than or equal to 1). In some embodiments, the child partition can be considered as the base isolation unit supported by the hypervisor 202, i.e., each child partition can be associated with a set of hardware resources, for example, memory, devices, logical processors, etc., that are under control hypervisor 202 and / or the parent partition, and hypervisor 202 can isolate one partition from access resources of other partitions. In embodiments, the hypervisor 202 may be a standalone software product, part of an operating system, motherboard firmware, specialized integrated circuit, or a combination thereof.

В вышеупомянутом примере компьютерная система 100 включает в себя родительский раздел 204, который также может считаться доменом 0 в сообществе открытого исходного кода. Родительский раздел 204 может быть сконфигурирован, чтобы обеспечивать ресурсы для гостевых операционных систем, исполняющихся в дочерних разделах 1-N, посредством использования поставщиков 228 услуг виртуализации (VSP), которые также известны как внутренние конечные драйверы в сообществе открытого исходного кода. В этой иллюстративной архитектуре родительский раздел 204 может управлять доступом к базовым аппаратным средствам. Поставщики VSP 228 могут быть использованы для мультиплексирования интерфейсов в отношении ресурсов аппаратных средств посредством клиентов услуг виртуализации (VSC), которые также известны как внешние конечные драйверы в сообществе открытого исходного кода. Каждый дочерний раздел может включать в себя один или несколько виртуальных процессоров, таких как виртуальные процессоры 230-232, в отношении которых гостевые операционные системы 220-222 могут выполнять управление и планирование логических соединений для выполнения на них. В основном, виртуальные процессоры 230-232 представляют собой исполняемые инструкции и ассоциированную информацию состояния, которые обеспечивают представление физического процессора со специфической архитектурой. Например, одна виртуальная машина может иметь виртуальный процессор, имеющий характеристики процессора Intel x86, тогда как другой виртуальный процессор, может иметь характеристики процессора PowerPC. Виртуальные процессоры компьютерной системы в этом примере могут быть поставлены в соответствие логическим процессорам компьютерной системы, так что инструкции, которые реализуют виртуальные процессоры, будут поддерживаться логическими процессорами. Таким образом, в этих иллюстративных вариантах осуществления может одновременно осуществляться множество виртуальных процессоров, тогда как другой логический процессор исполняет инструкции гипервизора. Вообще говоря, и как иллюстрируется на фигурах, комбинация виртуальных процессоров, различных VSC клиентов и памяти в некотором разделе может рассматриваться как виртуальная машина, как, например, виртуальная машина 240 или 242.In the above example, computer system 100 includes a parent section 204, which may also be considered domain 0 in the open source community. Parent section 204 can be configured to provide resources for guest operating systems running in child partitions 1-N through the use of virtualization service providers (VSPs) 228, which are also known as internal end drivers in the open source community. In this illustrative architecture, parent section 204 may control access to underlying hardware. VSP 228 providers can be used to multiplex interfaces for hardware resources through Virtualization Services (VSC) clients, which are also known as external end drivers in the open source community. Each child partition may include one or more virtual processors, such as virtual processors 230-232, for which guest operating systems 220-222 can manage and schedule logical connections to execute on them. Basically, virtual processors 230-232 are executable instructions and associated state information that provide a representation of a physical processor with a specific architecture. For example, one virtual machine may have a virtual processor having the characteristics of an Intel x86 processor, while another virtual processor may have the characteristics of a PowerPC processor. The virtual processors of the computer system in this example can be mapped to the logical processors of the computer system, so that the instructions that implement the virtual processors will be supported by the logical processors. Thus, in these illustrative embodiments, multiple virtual processors can be executed simultaneously, while another logical processor executes the instructions of the hypervisor. Generally speaking, and as illustrated in the figures, the combination of virtual processors, various VSC clients and memory in some section can be considered as a virtual machine, such as, for example, virtual machine 240 or 242.

В основном, гостевые операционные системы 220-222 могут включать в себя любую операционную систему, такую как, например, операционные системы от Microsoft®, Apple®, сообщества открытого исходного кода и т.п. Гостевые операционные системы могут включать в себя режимы функционирования пользователя/ядра и могут иметь ядра, которые включают в себя планировщики, диспетчеры памяти и т.д. Режим ядра может включать в себя режим исполнения в логическом процессоре, который предоставляет доступ по меньшей мере инструкциям привилегированного процессора. Каждая гостевая операционная система 220-222 может иметь ассоциированные файловые системы, которые могут иметь приложения, хранящиеся в них, такие как терминальные серверы, серверы электронной коммерции, серверы электронной почты и т.п., и гостевые операционные системы как таковые. Гостевые операционные системы 220-222 могут планировать логические соединения для их исполнения на виртуальных процессорах 230-232, и примеры таких приложений могут приводиться в исполнение.Basically, guest operating systems 220-222 can include any operating system, such as, for example, operating systems from Microsoft®, Apple®, open source communities, and the like. Guest operating systems may include user / kernel operating modes and may have kernels that include schedulers, memory managers, etc. Kernel mode may include execution mode in a logical processor that provides access to at least instructions of a privileged processor. Each guest operating system 220-222 may have associated file systems that may have applications stored therein, such as terminal servers, e-commerce servers, email servers, and the like, and guest operating systems as such. Guest operating systems 220-222 may schedule logical connections for execution on virtual processors 230-232, and examples of such applications may be executed.

Обратимся теперь к фиг.4, на которой изображена альтернативная архитектура, которая может быть использована для реализации виртуальных машин. Фиг.4 изображает компоненты, подобные компонентам по фиг.3, однако, в этом иллюстративном варианте осуществления, гипервизор 202 может включать в себя поставщиков 228 услуг виртуализации и драйверы 224 устройств, и родительский раздел 204 может содержать утилиты 236 конфигурации. В этой архитектуре гипервизор 202 может выполнять такие же или подобные функции, как гипервизор 202 фиг.3. Гипервизор 202 по фиг.4 может быть автономным программным продуктом, частью операционной системы, встроенным программным обеспечением материнской платы, или часть гипервизора 202 может быть реализована специализированными интегральными схемами. В этом примере, родительский раздел 204 может иметь инструкции, которые могут быть использованы, чтобы конфигурировать гипервизор 202, однако запросы доступа к аппаратным средствам могут обрабатываться гипервизором 202 вместо передачи в родительский раздел 204.We now turn to figure 4, which depicts an alternative architecture that can be used to implement virtual machines. FIG. 4 depicts components similar to those of FIG. 3, however, in this illustrative embodiment, the hypervisor 202 may include virtualization service providers 228 and device drivers 224, and the parent section 204 may include configuration utilities 236. In this architecture, the hypervisor 202 may perform the same or similar functions as the hypervisor 202 of FIG. 3. The hypervisor 202 of FIG. 4 may be a standalone software product, part of an operating system, firmware on the motherboard, or part of the hypervisor 202 may be implemented by specialized integrated circuits. In this example, the parent section 204 may have instructions that can be used to configure the hypervisor 202, however, hardware access requests can be processed by the hypervisor 202 instead of being transmitted to the parent section 204.

Обратимся теперь к фиг.5, на которой компьютер 100 может включать в себя схемы, сконфигурированные для обеспечения услуг удаленного рабочего стола. В иллюстративном варианте осуществления изображенная операционная система 400 может работать непосредственно на аппаратных средствах, или гостевые операционные системы 220 или 222 могут быть реализованы виртуальной машиной, такой как VM 216 или VM 218. Базовые аппаратные средства 208, 210, 234, 212 и 214 показаны пунктирными линиями, чтобы идентифицировать, какие аппаратные средства могут быть виртуализированы.Turning now to FIG. 5, the computer 100 may include circuits configured to provide remote desktop services. In an exemplary embodiment, the illustrated operating system 400 may operate directly on hardware, or guest operating systems 220 or 222 may be implemented by a virtual machine, such as VM 216 or VM 218. Basic hardware 208, 210, 234, 212, and 214 are dotted. lines to identify which hardware can be virtualized.

Дистанционные услуги могут быть обеспечены по меньшей мере для одного клиента, такого как клиент 401 (хотя изображен один клиент, дистанционные услуги могут быть обеспечены для нескольких клиентов). Иллюстративный клиент 401 может включать в себя терминал компьютера, который реализуется аппаратными средствами, сконфигурированными направлять входные данные пользователя в сеанс удаленного сервера и отображать информацию пользовательского интерфейса, сгенерированную сеансом. В другом варианте осуществления клиент 401 может быть реализован компьютером, который включает в себя элементы, подобные элементам компьютера 100 по фиг.1b. В этом варианте осуществления клиент 401 может включать в себя схемы, сконфигурированные для действия операционных систем, и схемы, сконфигурированные для эмуляции функциональных возможностей терминалов, например, приложение клиента удаленного рабочего стола, которое может исполняться одним или несколькими логическими процессорами 102. Специалисту должно быть понятно, что схемы, сконфигурированные выполнять операционную систему, также могут включать в себя схемы, сконфигурированные для эмуляции терминала.Remote services can be provided for at least one client, such as client 401 (although one client is depicted, remote services can be provided for several clients). Exemplary client 401 may include a computer terminal that is implemented with hardware configured to send user input to a remote server session and display user interface information generated by the session. In another embodiment, the client 401 may be implemented by a computer that includes elements similar to those of the computer 100 of FIG. 1b. In this embodiment, the client 401 may include circuits configured for operating systems and circuits configured to emulate the functionality of the terminals, for example, a remote desktop client application that may be executed by one or more logical processors 102. One skilled in the art will understand that circuits configured to execute an operating system may also include circuits configured to emulate a terminal.

Каждый подсоединяющийся клиент может иметь сеанс (как например, сеанс 404), который позволяет клиенту осуществлять доступ к данным и к приложениям, хранимым в компьютере 100. В основном, приложения и некоторые компоненты операционной системы могут загружаться в определенную область памяти, присвоенную определенному сеансу. Таким образом, в некоторых случаях некоторые компоненты операционной системы (OS, ОС) могут порождаться N раз (где N представляет собой число текущих сеансов). Эти различные компоненты ОС системы могут запрашивать услуги из ядра 418 операционной системы, которые могут, например, манипулировать памятью; обеспечивать считывание/запись дисков; и конфигурировать логические соединения каждого сеанса для выполнения на логическом процессоре 102. Некоторые иллюстративные подсистемы, которые могут загружаться в пространство сеанса, могут включать в себя подсистемы, которые генерируют операционные среды рабочего стола, подсистемы, которые отслеживают перемещение курсора мыши на рабочем столе, подсистемы, которые преобразуют щелчки кнопкой мыши на пиктограмме в команды, которые реализуют экземпляр программы, и т.п. Процессы, которые реализуют эти услуги, например, отслеживание перемещения курсора мыши, помечаются определенным идентификатором и загружаются в определенную область памяти, которая выделяется для сеанса.Each connecting client can have a session (such as session 404) that allows the client to access data and applications stored in computer 100. Basically, applications and some components of the operating system can be loaded into a specific memory area assigned to a specific session. Thus, in some cases, some components of the operating system (OS, OS) can be generated N times (where N represents the number of current sessions). These various components of the OS of the system may request services from the kernel 418 of the operating system, which may, for example, manipulate memory; provide read / write discs; and configure the logical connections of each session to be executed on the logical processor 102. Some illustrative subsystems that can be loaded into the session space may include subsystems that generate desktop operating environments, subsystems that track the movement of the mouse cursor on the desktop, subsystems, which convert clicks on the icon into commands that implement an instance of the program, etc. Processes that implement these services, for example, tracking the movement of the mouse cursor, are marked with a specific identifier and loaded into a specific area of memory that is allocated for the session.

Сеанс может быть сгенерирован диспетчером 416 сеансов, например, процесс. Например, диспетчер 416 сеансов может инициализировать и контролировать каждый дистанционный сеанс посредством генерации идентификатора сеанса для определенного пространства сеанса; посредством присваивания памяти этому пространству сеанса; и посредством генерации переменных среды системы и экземпляров процессов подсистемы в памяти, присвоенной пространству сеанса. Диспетчер 416 сеансов может быть активирован, когда операционная система 400 принимает запрос на сеанс удаленного рабочего стола.A session may be generated by session manager 416, for example, a process. For example, session manager 416 can initialize and monitor each remote session by generating a session identifier for a specific session space; by assigning memory to this session space; and by generating system environment variables and subsystem process instances in the memory assigned to the session space. Session Manager 416 may be activated when the operating system 400 receives a request for a remote desktop session.

Запрос на соединение может сначала обрабатываться транспортным стеком 410, например, стеком RDP протокола. Инструкции транспортного стека 410 могут конфигурировать логический процессор 102, чтобы он выполнял прослушивание на предмет сообщений соединения на определенном порте и направлял их в диспетчер 416 сеансов. Когда генерируются сеансы, транспортный стек 410 может создавать экземпляр стека протокола удаленного рабочего стола для каждого сеанса. Экземпляр 414 стека является иллюстративным экземпляром, который может генерироваться для сеанса 404. В общем, каждый экземпляр стека протокола удаленного рабочего стола может быть сконфигурирован направлять входные данные в ассоциированный клиент и направлять клиентские входные данные в подсистему 444 операционной среды для соответствующего дистанционного сеанса.A connection request may be first processed by transport stack 410, for example, an RDP protocol stack. Transport stack instructions 410 can configure the logical processor 102 to listen for connection messages on a specific port and route them to session manager 416. When sessions are generated, transport stack 410 can create an instance of the Remote Desktop Protocol stack for each session. Stack instance 414 is an illustrative instance that can be generated for session 404. In general, each instance of the Remote Desktop Protocol stack can be configured to route input to an associated client and route client input to operating system subsystem 444 for the corresponding remote session.

Как показано на данной фигуре, в одном варианте осуществления приложение 448 (хотя показано одно, другие также могут исполняться) может исполняться и генерировать массив битов. Упомянутый массив может обрабатываться графическим интерфейсом 446, который, в свою очередь, может визуализировать битовые карты, например, массивы значений пикселей, которые могут сохраняться в памяти. Как показано на фигуре, может быть создан экземпляр подсистемы 420 дистанционного отображения, которая может захватывать вызовы визуализации и посылать эти вызовы по сети в клиент 401 посредством экземпляра 414 стека для сеанса.As shown in this figure, in one embodiment, an application 448 (although one is shown, others can also be executed) can execute and generate an array of bits. Said array can be processed by a graphical interface 446, which, in turn, can visualize bitmaps, for example, arrays of pixel values that can be stored in memory. As shown in the figure, an instance of the remote display subsystem 420 can be created that can capture visualization calls and send these calls over the network to the client 401 via the stack instance 414 for the session.

В дополнение к организации дистанционной работы с графическими данными и видеоданными, также может быть создан экземпляр перенаправителя 458 Plug and Play для организации дистанционной работы разнообразных устройств, таких как принтеры, mp3 плееры, клиентские файловые системы, CD-ROM дисководы и т.д. Перенаправитель 458 Plug and Play может принимать информацию от компонента клиентской стороны, который идентифицирует периферийные устройства, подключенные к клиенту 401. Перенаправитель 458 Plug and Play может затем конфигурировать операционную систему 400 загружать драйверы перенаправляемых устройств для периферийных клиентских устройств 401. Драйверы перенаправляемых устройств могут принимать вызовы из операционной системы 400 для осуществления доступа к периферийным устройствам и посылать вызовы по сети клиенту 401.In addition to organizing remote work with graphic data and video data, an instance of the 458 Plug and Play redirector can also be created to organize the remote operation of various devices, such as printers, mp3 players, client file systems, CD-ROM drives, etc. A Plug and Play redirector 458 can receive information from a client-side component that identifies peripheral devices connected to the client 401. A Plug and Play redirector 458 can then configure the operating system 400 to download redirected drivers for the peripheral client devices 401. Redirected device drivers can receive calls from the operating system 400 to access peripheral devices and send calls over the network to client 401.

Как обсуждалось выше, клиенты могут использовать протокол для обеспечения услуг дистанционной презентации, такой как протокол удаленного рабочего стола (RDP), и для подключения к ресурсам, использующим терминальные службы. Когда клиент удаленного рабочего стола подключается к шлюзу терминального сервера, шлюз может открывать гнездовое соединение с терминальным сервером и перенаправлять клиентский трафик на порте дистанционной презентации или на порте, специально предназначенном для услуг удаленного доступа. Шлюз также может выполнять некоторые специфические для шлюза обмены данными с клиентом, использующим протокол шлюза терминального сервера, передаваемый по протоколу защищенной передачи гипертекста (HTTPS).As discussed above, clients can use the protocol to provide remote presentation services, such as the Remote Desktop Protocol (RDP), and to connect to resources that use terminal services. When a remote desktop client connects to a terminal server gateway, the gateway can open a socket connection with the terminal server and redirect client traffic to the remote presentation port or to a port specifically designed for remote access services. The gateway can also perform some gateway-specific data exchanges with a client using the terminal server's gateway protocol, transmitted over secure hypertext transfer protocol (HTTPS).

Обратимся теперь к фиг.6, на которой изображена компьютерная система 100, включающая в себя схемы для реализации дистанционных услуг и для внедрения аспектов настоящего изобретения. Как показано на фигуре, в одном варианте осуществления, компьютерная система 100 может включать в себя компоненты, подобные компонентам, описанным на фиг.2 и фиг.5, и может реализовывать сеанс дистанционной презентации. В одном варианте осуществления настоящего раскрытия сеанс дистанционной презентации может включать в себя аспекты консольного сеанса, например, сеанса, порождаемого для пользователя с использованием компьютерной системы, и дистанционного сеанса. Подобно тому, как описано выше, диспетчер 416 сеансов может инициализировать и контролировать сеанс дистанционной презентации посредством включения/отключения компонентов для реализации сеанса дистанционной презентации.Turning now to FIG. 6, a computer system 100 is shown including circuitry for implementing remote services and for implementing aspects of the present invention. As shown in the figure, in one embodiment, the computer system 100 may include components similar to those described in FIGS. 2 and 5, and may implement a remote presentation session. In one embodiment of the present disclosure, a remote presentation session may include aspects of a console session, for example, a session generated for a user using a computer system, and a remote session. Similar to as described above, the session manager 416 can initiate and control the remote presentation session by turning on / off the components to implement the remote presentation session.

Один набор компонентов, которые могут загружаться в сеанс удаленной презентации, представляет собой консольные компоненты, которые обеспечивают возможность высокоточной дистанционной передачи, а именно, компоненты, которые имеют преимущества 3D графики и 2D графики, визуализируемой 3D аппаратными средствами.One set of components that can be loaded into a remote presentation session is console components that provide high-precision remote transmission capabilities, namely, components that take advantage of 3D graphics and 2D graphics rendered by 3D hardware.

3D/2D графика, визуализируемая 3D аппаратными средствами, может быть доступна с использованием модели драйвера, которая включает в себя драйвер 522 режима пользователя, интерфейс 520 прикладного программирования (API), ядро 524 графической системы и драйвер 530 режима ядра. Приложение 448 (или любой другой процесс, такой как пользовательский интерфейс, который генерирует 3D графику) может генерировать структуры API и посылать их в интерфейс 520 прикладного программирования (API), такой как Direct3D от компании Microsoft®. В свою очередь, API 520 может осуществлять связь с драйвером 522 режима пользователя, который может генерировать примитивы, например, фундаментальные геометрические формы, используемые в компьютерной графике, представляемые в виде вершин и констант, которые используются как строительные блоки для других форм, и сохраняет их в буферах, например, страницах памяти. В одном варианте осуществления приложение 448 может объявлять, как оно собирается использовать буфер, например, какой тип данных оно собирается сохранять в буфере. Приложение, такое как видеоигра, может использовать динамический буфер для сохранения примитивов для аватара и статический буфер для сохранения данных, которые не будут часто меняться, как, например, данные, которые представляют здание или лес.3D / 2D graphics rendered by 3D hardware can be accessed using a driver model that includes a user mode driver 522, an application programming interface (API) 520, a graphics system kernel 524, and a kernel mode driver 530. Application 448 (or any other process, such as a user interface that generates 3D graphics) can generate API structures and send them to an application programming interface (API) 520, such as Direct3D from Microsoft®. In turn, API 520 can communicate with a user mode driver 522, which can generate primitives, for example, fundamental geometric shapes used in computer graphics, represented as vertices and constants, which are used as building blocks for other shapes, and stores them in buffers, such as memory pages. In one embodiment, application 448 may declare how it is going to use the buffer, for example, what type of data it is going to store in the buffer. An application, such as a video game, can use a dynamic buffer to store primitives for an avatar and a static buffer to save data that will not change frequently, such as data that represents a building or forest.

Продолжая описание модели драйвера, приложение может заполнять буферы примитивами и выдавать команды на исполнение. Когда приложение выдает команду на исполнение, буфер может присоединяться к списку исполнения посредством драйвера 530 режима ядра и планироваться планировщиком 528 ядра графической системы. Каждый источник графики, например приложение или пользовательский интерфейс, может иметь контекст и свой собственный список исполнения. Ядро 524 графической системы может быть сконфигурировано планировать различные контексты для выполнения на графическом процессоре 112. Планировщик 528 графического процессора может исполняться логическим процессором 102, и планировщик 528 может выдавать в драйвер 530 режима ядра команду визуализировать содержимое буфера. Экземпляр 414 стека может конфигурироваться для приема команд и отправлять содержимое буфера по сети в клиент 401, где содержимое буфера может обрабатываться графическим процессором клиента.Continuing the description of the driver model, the application can fill buffers with primitives and issue execution commands. When the application issues an execution command, the buffer can be attached to the execution list via the kernel mode driver 530 and scheduled by the graphics core scheduler 528. Each graphics source, such as an application or user interface, can have a context and its own execution list. The graphics engine 524 may be configured to schedule various contexts for execution on the graphics processor 112. The graphics processor 528 may be executed by the logic processor 102, and the scheduler 528 may instruct the kernel mode driver 530 to render the contents of the buffer. The stack instance 414 can be configured to receive commands and send the contents of the buffer over the network to the client 401, where the contents of the buffer can be processed by the client GPU.

Далее иллюстрируется пример функционирования виртуального графического процессора, который используется в сочетании с приложением, которое вызывает услуги дистанционной презентации. На фиг.6, в одном из вариантов осуществления, сеанс виртуальной машины может генерироваться компьютером 100. Например, диспетчер 416 сеансов может исполняться логическим процессором 102, и может инициализироваться дистанционный сеанс, который включает в себя определенные удаленные компоненты. В этом примере, порожденный сеанс может включать в себя ядро 418 операционной системы, ядро 524 графической системы, драйвер 522 дисплея режима пользователя и драйвер 530 дисплея режима ядра. Драйвер 522 дисплея режима пользователя может генерировать графические примитивы, которые могут сохраняться в памяти. Например, API 520 может включать в себя интерфейсы, которые могут предоставляться процессам, таким как пользовательский интерфейс для операционной системы 400 или приложение 448. Процесс может посылать высокоуровневые команды API, такие как списки точек (Point Lists), списки линий (Line Lists), полосовые линии (Line Strips), списки треугольников (Triangle Lists), полоски треугольников (Triangle Strips) или веера треугольников (Triangle Fans), в API 420. API 520 может принимать эти команды для драйвера 522 режима пользователя, который потом может генерировать вершины и сохранять их в одном или нескольких буферах. Планировщик 528 графического процессора может исполняться и принимать решение визуализировать содержимое буфера. В этом примере, команда для графического процессора 112 сервера может быть захвачена, и содержимое буфера (примитивы) может посылаться в клиент 401 через сетевую интерфейсную плату 114. В одном варианте осуществления API может предоставляться диспетчером 416 сеансов, с которым компоненты могут взаимодействовать, чтобы определять, доступен ли виртуальный графический процессор.The following is an example of the operation of a virtual graphics processor, which is used in combination with an application that calls remote presentation services. 6, in one embodiment, a virtual machine session may be generated by computer 100. For example, session manager 416 may be executed by logic processor 102, and a remote session may be initiated that includes certain remote components. In this example, the generated session may include an operating system core 418, a graphics system core 524, a user mode display driver 522, and a kernel mode display driver 530. The user mode display driver 522 may generate graphic primitives that may be stored in memory. For example, API 520 may include interfaces that may be provided to processes, such as a user interface for operating system 400 or application 448. A process may send high-level API commands, such as Point Lists, Line Lists, stripe lines (Line Strips), lists of triangles (Triangle Lists), strips of triangles (Triangle Strips) or fans of triangles (Triangle Fans), in API 420. API 520 can accept these commands for the user mode driver 522, which can then generate vertices and save them in one or n how many buffers. GPU scheduler 528 may execute and decide to render the contents of the buffer. In this example, a command for server GPU 112 may be captured, and buffer contents (primitives) may be sent to client 401 via network interface board 114. In one embodiment, an API may be provided by session manager 416 with which components can interact to determine whether a virtual graphics processor is available.

В одном варианте осуществления может быть создан экземпляр виртуальной машины, такой как виртуальная машина 240 на фиг.3 или 4, и эта виртуальная машина может служить в качестве платформы для исполнения для операционной системы 400. В этом примере, операционную систему 400 может воплощать гостевая операционная система 220. Экземпляр виртуальной машины может создаваться, когда по сети принимается запрос на соединение. Например, родительский раздел 204 может включать в себя экземпляр транспортного стека 410 и может конфигурироваться для приема запросов соединения. Родительский раздел 204 может инициализировать виртуальную машину в ответ на запрос соединения наряду с гостевой операционной системой, включающей в себя возможности реализации дистанционных сеансов. Затем запрос соединения может пересылаться в транспортный стек 410 гостевой операционной системы 220. В этом примере, экземпляр каждого дистанционного сеанса может создаваться в операционной системе, которая исполняется своей собственной виртуальной машиной.In one embodiment, a virtual machine instance can be created, such as the virtual machine 240 in FIGS. 3 or 4, and this virtual machine can serve as an execution platform for the operating system 400. In this example, the operating system 400 may be implemented by a guest operating system system 220. A virtual machine instance can be created when a connection request is received over the network. For example, the parent section 204 may include an instance of the transport stack 410 and may be configured to receive connection requests. Parent section 204 can initialize the virtual machine in response to a connection request along with a guest operating system that includes the ability to implement remote sessions. Then, the connection request can be forwarded to the transport stack 410 of the guest operating system 220. In this example, an instance of each remote session can be created in the operating system, which is executed by its own virtual machine.

В одном варианте осуществления может быть создан экземпляр виртуальной машины, и может исполняться гостевая операционная система 220, воплощающая операционную систему 400. Подобно тому, как описано выше, экземпляр виртуальной машины может создаваться, когда по сети принимается запрос соединения. Дистанционные сеансы могут генерироваться операционной системой. Диспетчер 416 сеансов может быть сконфигурирован определять, что запрос предназначен для сеанса, который поддерживает визуализацию 3D графики, и диспетчер 416 сеансов может загружать консольный сеанс. В дополнение к загрузке консольного сеанса диспетчер 416 сеансов может загружать экземпляр 414' стека для сеанса и конфигурировать систему для получения примитивов, сгенерированных драйвером 522 дисплея режима пользователя.In one embodiment, a virtual machine instance can be created, and a guest operating system 220 implementing the operating system 400 can be executed. Similar to as described above, a virtual machine instance can be created when a connection request is received over the network. Remote sessions can be generated by the operating system. Session manager 416 may be configured to determine that the request is for a session that supports 3D rendering, and session manager 416 may load a console session. In addition to loading the console session, the session manager 416 can load the stack instance 414 'for the session and configure the system to receive the primitives generated by the user mode display driver 522.

Драйвер 522 режима пользователя может генерировать графические примитивы, которые могут приниматься и сохраняться в буферах, доступных для транспортного стека 410. Драйвер 530 режима ядра может присоединять буфера к списку исполнения для приложения, и планировщик 528 графического процессора может исполняться и определять, когда выдавать команды визуализации для буферов. Когда планировщик 528 выдает команду визуализации, команда может перехватываться, например, драйвером 530 режима ядра и посылаться в клиент 401 посредством экземпляра 414 стека.User mode driver 522 can generate graphic primitives that can be received and stored in buffers available for transport stack 410. Kernel mode driver 530 can attach buffers to the execution list for the application, and GPU scheduler 528 can execute and determine when to issue visualization commands for buffers. When the scheduler 528 issues a render command, the command may be intercepted, for example, by the kernel mode driver 530 and sent to client 401 via the stack instance 414.

Планировщик 528 графического процессора может исполняться программу и принимать решение выдавать инструкцию визуализировать содержимое буфера. В этом примере, графические примитивы, ассоциированные с инструкцией визуализации, могут посылаться в клиент 401 через сетевую интерфейсную плату 114.GPU scheduler 528 may execute a program and decide to issue instructions to visualize the contents of the buffer. In this example, graphic primitives associated with the visualization instruction can be sent to client 401 via network interface board 114.

В одном варианте осуществления по меньшей мере один процесс режима ядра может выполняться по меньшей мере одним логическим процессором 112, и по меньшей мере один логический процессор 112 может синхронизировать вершины визуализации, сохраняемые в различных буферах. Например, планировщик 528 графической обработки, который может действовать одновременно с планировщиком операционной системы, может планировать операции графического процессора. Планировщик 528 графического процессора может объединять отдельные буфера вершин в правильный порядок исполнения, так что графический процессор клиента 401 исполняет команды в том порядке, который позволяет им правильно визуализироваться.In one embodiment, at least one kernel mode process may be performed by at least one logical processor 112, and at least one logical processor 112 may synchronize the rendering vertices stored in different buffers. For example, graphics processing scheduler 528, which can act simultaneously with the operating system scheduler, can schedule GPU operations. The GPU scheduler 528 can combine the individual vertex buffers into the correct execution order, so that the client 401 GPU executes the commands in the order that allows them to be correctly rendered.

Один или несколько логических потоков определенного процесса, такого как видеоигра, могут сопоставлять многочисленные буфера, и каждый поток может выдавать команду отрисовки. Информация идентификации для вершин, например, информация, генерируемая из расчета на каждый буфер, на каждую вершину или на каждую группу вершин в буфере, может посылаться в планировщик 528 графического процессора. Эта информация может сохраняться в таблице наряду с информацией идентификации, ассоциированной с вершинами, из такого же или других процессов и использоваться для синхронизации визуализации различных буферов.One or more logical threads of a particular process, such as a video game, can match multiple buffers, and each thread can issue a draw command. Identification information for the vertices, for example, information generated based on each buffer, on each vertex, or on each group of vertices in the buffer, can be sent to the scheduler 528 of the GPU. This information can be stored in a table along with identification information associated with vertices from the same or other processes and used to synchronize the visualization of various buffers.

Может исполняться приложение, такое как программа обработки текстов, и оно может объявлять, например, два буфера - один для сохранения вершин для генерации 3D меню и другой, хранящий команды для генерации букв, которые будут заполнять меню. Приложение может отображать буфер и выдавать команды отрисовки. Планировщик 528 графического процессора может определять порядок исполнения двух буферов, так что меню визуализируются наряду с буквами таким способом, чтобы было приятно на них смотреть. Например, другие процессы могут выдавать команды отрисовки в одно и то же или по существу такое же время, и если вершины были бы не синхронизированными вершинами из различных логических потоков различных процессов, то могли бы визуализироваться асинхронно на клиенте 401, тем самым делая окончательное отображаемое изображение выглядящим хаотичным и путанным.An application, such as a word processing program, can be executed, and it can declare, for example, two buffers - one for saving vertices for generating 3D menus and the other storing commands for generating letters that will fill the menu. An application can display a buffer and issue draw commands. The GPU scheduler 528 can determine the execution order of the two buffers, so menus are rendered along with the letters in such a way that it is pleasant to look at them. For example, other processes can issue rendering commands at the same or essentially the same time, and if the vertices were not synchronized vertices from different logical flows of different processes, they could be rendered asynchronously on client 401, thereby making the final image displayed looking chaotic and confused.

Средство 450 сжатия объемных данных может быть использовано для сжатия графических примитивов прежде отправления потока данных в клиент 401. В одном варианте осуществления средство 450 сжатия объемных данных может представлять собой компонент режима пользователя (не показан) или компонент режима ядра экземпляра 414 стека и может конфигурироваться для поиска подобных комбинаций в потоке данных, который посылается в клиент 401. В этом варианте осуществления, поскольку средство 450 сжатия объемных данных принимает поток вершин, вместо приема многочисленных структур API, из многочисленных приложений, средство 450 сжатия объемных данных имеет больший набор данных вершин для фильтрации, чтобы найти возможности для сжатия. То есть, поскольку вершины для множества процессов являются удаленными, вместо разрозненных вызовов API, имеется больший шанс того, что средство 450 сжатия объемных данных будет способно найти подобные комбинации в заданном потоке.The bulk data compression tool 450 may be used to compress the graphic primitives before sending the data stream to the client 401. In one embodiment, the bulk data compression tool 450 may be a user mode component (not shown) or a kernel mode component of the stack instance 414 and may be configured to searching for such combinations in the data stream that is sent to client 401. In this embodiment, since the volume data compression means 450 receives a vertex stream, instead of receiving many numbered API structures, from numerous applications, the volumetric data compression tool 450 has a larger set of vertex data for filtering to find compression capabilities. That is, since the vertices for many processes are remote, instead of scattered API calls, there is a greater chance that the bulk data compression tool 450 will be able to find similar combinations in a given stream.

В одном варианте осуществления графический процессор 112 может конфигурироваться для использования виртуальной адресации вместо физических адресов для памяти. Таким образом, страницы памяти, используемые в качестве буферов, могут перелистываться в ОЗУ системы или на диск из видеопамяти. Экземпляр 414' стека может конфигурироваться для получения виртуальных адресов буферов и для отправления содержимого из виртуальных адресов, когда захватывается команда визуализации из ядра графической системы.In one embodiment, the graphics processor 112 may be configured to use virtual addressing instead of physical addresses for memory. Thus, the memory pages used as buffers can be turned over to the system RAM or to a disk from video memory. The stack instance 414 'can be configured to receive virtual buffer addresses and to send content from virtual addresses when a visualization command is captured from the graphics core.

Операционная система 400 может конфигурироваться, например, различные подсистемы или драйверы могут загружаться для захвата примитивов и для отправления их в удаленный компьютер, такой как клиент 401. Подобно тому, как описано выше, диспетчер 416 сеансов может исполняться логическим процессором 102, и может инициализироваться сеанс, который включает в себя удаленные компоненты. В этом примере, порожденный сеанс может включать в себя ядро 418 операционной системы, ядро 524 графической системы, драйвер 522 дисплея режима пользователя и драйвер 530 дисплея режима ядра.Operating system 400 may be configured, for example, various subsystems or drivers may be loaded to capture primitives and send them to a remote computer, such as client 401. Similar to as described above, session manager 416 may be executed by logical processor 102, and a session may be initialized. which includes remote components. In this example, the generated session may include an operating system core 418, a graphics system core 524, a user mode display driver 522, and a kernel mode display driver 530.

Ядро графической системы может планировать операции графического процессора. Планировщик 528 графического процессора может объединять отдельные буфера вершин в правильный порядок исполнения, так что графический процессор клиента 401 исполняет команды в том порядке, который позволяет им правильно визуализироваться.The graphics core can schedule GPU operations. The GPU scheduler 528 can combine the individual vertex buffers into the correct execution order, so that the client 401 GPU executes the commands in the order that allows them to be correctly rendered.

Обратимся теперь к фиг.7, на которой изображена блок-схема, иллюстрирующая процесс декодирования, согласно одному варианту осуществления настоящего раскрытия. Процессор кодирования показан на фиг.8. Закодированный мозаичный элемент сначала может прогоняться через RLGR декодер 900 для генерации коэффициента квантованного мозаичного элемента. Указанная операция может выполняться на центральном процессоре.Turning now to FIG. 7, a flowchart illustrating a decoding process according to one embodiment of the present disclosure is shown. The coding processor is shown in FIG. The encoded tile can first be run through an RLGR decoder 900 to generate a coefficient of a quantized tile. The indicated operation can be performed on the central processor.

Деквантование 705 сначала может выполняться на центральном процессоре с использованием SSE2 инструкций. После деквантования десять поддиапазонов трех компонентов мозаичного элемента могут копироваться в три буфера текстур Direct3D формата L16, по одному для каждого из Y, U и V. Эти три текстуры могут пересылаться в графический процессор и могут использоваться на этапе 710 обратного дискретного вейвлет-преобразования (DWT) в качестве входных данных.Dequantization 705 may first be performed on the central processor using SSE2 instructions. After dequantization, ten subranges of the three mosaic tile components can be copied to three Direct16D L16 texture buffers, one for each of Y, U, and V. These three textures can be sent to the GPU and can be used in step 710 of the inverse discrete wavelet transform (DWT) ) as input.

Все упомянутые вариации для реализации вышеупомянутых разделов являются только иллюстративными вариантами осуществления, и ничего в этом документе не должно интерпретироваться как ограничивающее раскрытие любого конкретного аспекта виртуализации.All the variations mentioned for implementing the above sections are only illustrative embodiments, and nothing in this document should be interpreted as limiting the disclosure of any particular aspect of virtualization.

Энтропийное кодированиеEntropy coding

В виртуальном рабочем столе или дистанционном сеансе презентации графика и видеоданные пользователя могут визуализироваться на сервере для каждого пользователя. Результирующие битовые карты затем могут посылаться клиенту для отображения и взаимодействия. Чтобы снизить требования к полосе пропускания в сети, битовые карты могут сжиматься перед отправлением клиенту. Желательно, чтобы метод сжатия был эффективным, с низкой задержкой.In a virtual desktop or remote presentation session, user graphics and video data can be visualized on the server for each user. The resulting bitmaps can then be sent to the client for display and interaction. To reduce network bandwidth requirements, bitmaps can be compressed before being sent to the client. It is desirable that the compression method be efficient with a low latency.

Здесь описаны система и способ кодирования и декодирования битовых карт и других графических данных. Система кодирования может включать в себя систему фрагментации изображения с модулем фрагментации изображения, который изначально делит данные исходного изображения на мозаичные элементы данных. Затем модуль дифференцирования кадров может выводить только измененные мозаичные элементы данных в различные модули обработки, которые преобразуют измененные мозаичные элементы данных в соответствующие мозаичные компоненты. Согласно варианту осуществления, квантователь может выполнять процедуру сжатия в отношении мозаичных компонентов, чтобы генерировать сжатые данные согласно регулируемому параметру квантования. Затем адаптивный селектор энтропийного кодера может выбирать один из множества энтропийных кодеров для выполнения процедуры энтропийного кодирования, чтобы, тем самым, производить закодированные данные. Энтропийный кодер также может использовать контур обратной связи для регулировки параметра квантования в свете текущих характеристик ширины полосы пропускания. Упоминаемые здесь процессы сжатия, кодирования и декодирования графических данных могут в основном использовать один или несколько способов и систем, описанных в переуступленном заявителю по настоящей заявке патенте США № 7460725, озаглавленном «System And Method For Effectively Encoding And Decoding Electronic Information», и в патентной заявке США № 12/399302, озаглавленной «Frame Capture, Encoding, And Transmission Management», поданной 6 марта 2009 г., которые полностью включены сюда посредством ссылки.A system and method for encoding and decoding bitmaps and other graphic data are described herein. The coding system may include an image fragmentation system with an image fragmentation module that initially divides the original image data into mosaic data elements. Then, the frame differentiation module can output only the modified mosaic data elements to various processing units, which convert the changed mosaic data elements into corresponding mosaic components. According to an embodiment, the quantizer may perform a compression procedure with respect to the mosaic components to generate compressed data according to an adjustable quantization parameter. The adaptive entropy encoder selector may then select one of a plurality of entropy encoders to perform the entropy encoding procedure, thereby producing encoded data. An entropy encoder can also use a feedback loop to adjust the quantization parameter in light of the current bandwidth characteristics. The processes for compressing, encoding, and decoding graphic data mentioned herein can mainly use one or more of the methods and systems described in the assigned US patent No. 7460725, entitled "System And Method For Effectively Encoding And Decoding Electronic Information", and in the patent US application No. 12/399302, entitled "Frame Capture, Encoding, And Transmission Management", filed March 6, 2009, which are fully incorporated here by reference.

В различных описанных здесь способах и системах улучшения обработки и управления различных вышеописанных процессов могут быть использованы для обеспечения более эффективной обработки и, тем самым, более своевременных и богатых ощущений пользователя. Способы и системы также обеспечивают улучшения в обеспечении поддержки такой графики, когда ресурсы сети и/или системы обеспечивают адекватную полосу пропускания, и/или клиентское устройство имеет более низкую скорость обработки или ресурсы. Описанные здесь варианты осуществления визуализации, кодирования и передачи графических данных могут быть выполнены с использованием различных комбинаций аппаратных средств и процессов программного обеспечения. В некоторых вариантах осуществления функции могут выполняться полностью в программном обеспечении. В других вариантах осуществления функции могут выполняться с использованием комбинации аппаратных средств и процессов программного обеспечения. Такие процессы могут дополнительно выполняться с использованием одного или нескольких процессоров и/или одного или нескольких специализированных процессоров, таких как графический процессор (GPU) или другие устройства графической визуализации специального назначения.In the various methods and systems described herein that improve the processing and control of the various processes described above can be used to provide more efficient processing and thereby a more timely and rich user experience. The methods and systems also provide improvements in providing support for such graphics where network and / or system resources provide adequate bandwidth and / or the client device has lower processing speed or resources. The embodiments for visualizing, encoding, and transmitting graphic data described herein may be performed using various combinations of hardware and software processes. In some embodiments, the functions may be performed entirely in software. In other embodiments, functions may be performed using a combination of hardware and software processes. Such processes may additionally be performed using one or more processors and / or one or more specialized processors, such as a graphics processing unit (GPU) or other special purpose graphic rendering devices.

Более того, хотя следующее описание обеспечивается в контексте удаленных систем презентации, должно быть понятно, что раскрытые варианты осуществления могут выполняться в системе любого типа, в которой графические данные кодируются и сжимаются для доставки по сети.Moreover, although the following description is provided in the context of remote presentation systems, it should be understood that the disclosed embodiments may be implemented in any type of system in which graphic data is encoded and compressed for delivery over a network.

Различные варианты осуществления могут содержать использование функции дискретного вейвлет-преобразования (DWT) для преобразования компонентов YUV формата мозаичных элементов в соответствующие поддиапазоны YUV формата мозаичных элементов. Функция квантователя может выполнять процедуру квантования посредством использования соответствующих методов квантования для сжатия поддиапазонов мозаичных элементов. Функция квантователя может производить сжатые данные изображения посредством уменьшения скорости передачи битов мозаичных элементов согласно конкретному коэффициенту сжатия, который может задаваться адаптивным параметром квантования, полученным через контур обратной связи из энтропийного кодера.Various embodiments may comprise using a discrete wavelet transform (DWT) function to convert the components of the YUV tile format into the corresponding sub-bands of the YUV tile format. The quantizer function can perform a quantization procedure by using appropriate quantization methods to compress the subbands of the tiles. The quantizer function can produce compressed image data by reducing the bit rate of the tiles according to a specific compression coefficient, which can be set by an adaptive quantization parameter obtained through a feedback loop from an entropy encoder.

В одном варианте осуществления GPU процессор может быть обеспечен битовой картой с измененными прямоугольниками, которые необходимо сжимать. Битовая карта дополнительно может расщепляться на логические мозаичные элементы, и только те мозаичные элементы, которые изменяются внутри измененного прямоугольника, кодируются и сжимаются. Таким образом, процесс эффективно выполняет схему кэширования в согласии с клиентом, где результирующее декодированное изображение поддерживается и отображается.In one embodiment, the GPU processor may be provided with a bitmap with modified rectangles that need to be compressed. The bitmap can additionally be split into logical mosaic elements, and only those mosaic elements that change inside the changed rectangle are encoded and compressed. Thus, the process effectively executes the caching scheme in agreement with the client, where the resulting decoded image is maintained and displayed.

Для уменьшения пропускной способности потока отображения до уровней, которые являются приемлемыми для передачи по локальным сетям, глобальным сетям и по сетям с низкой пропускной способностью, используются алгоритмы сжатия дистанционной презентации. Такие алгоритмы обычно жертвуют временем процессора на стороне сервера в пользу более низкой требуемой пропускной способности.To reduce the bandwidth of the display stream to levels that are acceptable for transmission over local networks, wide area networks, and networks with low bandwidth, remote presentation compression algorithms are used. Such algorithms typically sacrifice server-side processor time in favor of lower bandwidth requirements.

Могут быть использованы средства сжатия изображения, которые могут применять энтропийный кодер. Функция энтропийного кодера состоит в выполнении процедуры энтропийного кодирования для генерации закодированных данных. В некоторых вариантах осуществления,процедура энтропийного кодирования дополнительно снижает скорость передачи битов данных сжатого изображения посредством подстановки соответствующих кодов для соответствующих битовых комбинаций в данных сжатого изображения, принятых из квантователя.Image compression means that can use an entropy encoder can be used. The function of an entropy encoder is to perform an entropy encoding procedure to generate encoded data. In some embodiments, the entropy encoding procedure further reduces the bit rate of the compressed image data by substituting the corresponding codes for the corresponding bit patterns in the compressed image data received from the quantizer.

Энтропийное кодирование, выполняемое в системе дистанционной презентации, в основном уравновешивает характеристики процессора (например, быстродействие) с помощью коэффициента сжатия. Энтропийные кодеры могут быть настроены на хорошее сжатие с приемлемым быстродействием процессора. Типичные энтропийные кодеры включают в себя кодеры по длинам серий, по кодам Хаффмана, арифметические и вариации кодеров Голомба-Райса. Одна из основных проблем в проектировании эффективных энтропийных кодеров для приложений дистанционной презентации состоит в том, что обычно имеются большие вариации в статистике кодируемых блоков целых чисел. Исследования показали, что в большинстве случаев перед квантованием данные имели вероятности распределения, которые могут быть значительно больше сконцентрированы вблизи нуля, чем при гауссовом распределении.Entropy encoding performed in a remote presentation system basically balances processor characteristics (e.g., performance) with a compression ratio. Entropy encoders can be configured for good compression with acceptable processor speed. Typical entropy encoders include series length encoders, Huffman codes, arithmetic and variations of the Golomb-Rice encoders. One of the main problems in designing effective entropy encoders for remote presentation applications is that there are usually large variations in the statistics of encoded integer blocks. Studies have shown that in most cases, before quantization, the data had distribution probabilities that can be much more concentrated near zero than with a Gaussian distribution.

Настоящее раскрытие касается осуществления упрощенного энтропийного кодера, который конфигурируется для улучшения быстродействия кодирования и декодирования при потенциальных издержках потерь сжимаемости. Однако, во многих ситуациях, этот компромисс может быть приемлемым и действительно быть более желательным в сценариях, которые ограничены низким быстродействием процессоров больше, чем пропускной способностью. Конечный результат заключается в том, что может быть обеспечен кодер/декодер, который в два-три раза быстрее, чем современные кодеры/декодеры при потерях сжимаемости порядка от 10% до 20%.The present disclosure relates to the implementation of a simplified entropy encoder that is configured to improve encoding and decoding performance at the potential cost of compressibility loss. However, in many situations, this trade-off may be acceptable and indeed be more desirable in scenarios that are more limited by low processor speed than throughput. The end result is that an encoder / decoder can be provided, which is two to three times faster than modern encoders / decoders with compressibility losses of the order of 10% to 20%.

Такой кодер/декодер может быть полезным потому, что он обеспечивает возможность сценариев, в которых оптимизация быстродействия процессора имеет более высокий приоритет, чем сохранение каждого последнего бита полосы пропускания. Например, низкосортные клиентские устройства могут достигать лучшей производительности с более простым средством сжатия, чтобы обеспечить возможность более быстрой обработки. Системы дистанционной презентации обычно оптимизируются для снижения пропускной способности независимо от стоимости и производительности процессора. Во многих современных системах пропускная способность может быть высокой, тогда как клиентские устройства могут быть более простыми устройствами, такими как ТВ тюнеры или «тонкие» клиенты.Such an encoder / decoder can be useful because it provides the possibility of scenarios in which optimizing processor speed has a higher priority than saving every last bit of the bandwidth. For example, low-grade client devices can achieve better performance with a simpler compression tool to enable faster processing. Remote presentation systems are typically optimized to reduce throughput regardless of processor cost and performance. In many modern systems, bandwidth can be high, while client devices can be simpler devices, such as TV tuners or thin clients.

В одном варианте осуществления энтропийный кодер может быть конфигурирован так, чтобы избежать использования формата переменного битового потока. Использование переменного битового потока однозначно позволяет более медленно и эффективно кодировать и декодировать. В одном варианте осуществления кодер может быть конфигурирован для использования полубайтовых кодов (также известных как четырехбитовые) для достижения стандартного потока кодирования фиксированного размера. При использовании такого потока поток можно быстрее декодировать и можно декодировать безопасно (с контролем переполнения), с меньшими затратами процессора.In one embodiment, the entropy encoder may be configured to avoid using a variable bitstream format. Using a variable bitstream unambiguously allows you to more slowly and efficiently encode and decode. In one embodiment, the encoder may be configured to use half-byte codes (also known as four-bit codes) to achieve a standard fixed-size encoding stream. When using such a stream, the stream can be decoded faster and can be decoded safely (with overflow control), with less processor overhead.

В одной иллюстративной схеме кодер выполняет следующие типы операций:In one illustrative scheme, the encoder performs the following types of operations:

1) Серии нулей (которые являются обычными входными данными в энтропийный кодер) - серии нулей кодируются в некотором варьируемом количестве четверок битов, согласующихся со статистическим наблюдением того, что большинство серий очень короткие.1) Series of zeros (which are the usual input to the entropy encoder) - series of zeros are encoded in a variable number of four bits, consistent with the statistical observation that most series are very short.

2) Буквенные значения - буквенные значения кодируются либо в виде наиболее поздно использованного (LRU) успешного результата в таблице (кэш-памяти) из недавно использованных буквенных значений, либо в виде варьируемого количества четверок битов, снова выгодных с точки зрения статистических свойств, что чем меньше значения, тем более вероятно они встречаются.2) Literal values - literal values are encoded either in the form of the most recently used (LRU) successful result in the table (cache memory) from recently used alphabetic values, or in the form of a variable number of four bits, again advantageous in terms of statistical properties, which less value, the more likely they are found.

В обоих случаях по существу имеется два потока: (а) поток четверок кодов операций и (b) поток больших значений. Некоторые коды операций, либо для длины серии, либо для длины буквенного значения, просто показывают «получить следующее значение в потоке больших значений».In both cases, there are essentially two streams: (a) a stream of four operation codes and (b) a stream of large values. Some opcodes, either for the length of a series or for the length of a literal value, simply show "get the next value in the stream of large values."

Поток больших значений может кодироваться с помощью базовой схемы многобайтового кодирования, которая использует для малых значений меньше байтов, чем для больших значений, но в то же время гарантируется, что она действует только на границах фиксированного байта. При использовании такой схемы кодирования, как поток четверок кодов, так и поток значений могут быть декодированы без необходимости сложных схем сдвига битов или декодирования переменных битов, таким образом обеспечивая возможность для более быстрой работы, чем более общих/сложных энтропийных кодеров (например, различные схемы, основанные на алгоритме RLGR или кодах Хаффмана). Такой упрощенный кодер может конфигурироваться так, что может кодироваться любое количество битов, например от 1 до 32 битов. При более сложном кодировании декодирование становится проблемным с точки зрения вычислений из-за переменных битов и необходимой обработки, которая обычно требует многих ветвей кодирования и значительной величины учета использования системных ресурсов. Использование этой упрощенной схемы позволяет минимизировать такую сложность посредством использования структур постоянного размера (например, четверок битов). В такой схеме нет выходных символов, состоящих из более чем четырех битов, и данные являются кратными байта без сдвигов или циклических перестановок. Байт может содержать два кода, которые при желании могут обрабатываться параллельно. Более того, если количество четверок известно, то можно избежать переполнения буфера. В испытаниях, использующих типичные сценарии дистанционной презентации, потери только 10-20% сжимаемости были измерены при выигрыше производительности в 2-3 раза с использованием доступных ныне процессоров.The stream of large values can be encoded using the basic multibyte encoding scheme, which uses fewer bytes for small values than for large values, but at the same time it is guaranteed to be valid only on fixed byte boundaries. Using such a coding scheme, both the stream of four codes and the stream of values can be decoded without the need for complex bit shifting schemes or decoding of variable bits, thus providing the possibility for faster operation than more general / complex entropy encoders (for example, various schemes based on the RLGR algorithm or Huffman codes). Such a simplified encoder can be configured so that any number of bits can be encoded, for example, from 1 to 32 bits. With more complex coding, decoding becomes problematic in terms of computation due to variable bits and necessary processing, which usually requires many coding branches and a significant amount of accounting for the use of system resources. Using this simplified scheme allows minimizing such complexity by using constant-size structures (e.g., four bits). In such a scheme, there are no output characters consisting of more than four bits, and the data is a multiple of bytes without offsets or cyclic permutations. A byte can contain two codes, which, if desired, can be processed in parallel. Moreover, if the number of fours is known, then buffer overflows can be avoided. In tests using typical remote presentation scenarios, losses of only 10-20% of compressibility were measured with a performance gain of 2-3 times using currently available processors.

В некоторых вариантах осуществления логика может быть обеспечена для переключения между более сложным/медленным энтропийным кодером и более простым кодером, который здесь описан. Например, на фиг.9 система дистанционной презентации может обеспечить по меньшей мере два кодера 910 и 920. Кодер 910 может быть сложным энтропийным кодером, таким, который выполняет алгоритм RLGR. Кодер 920 может быть упрощенным энтропийным кодером согласно настоящему раскрытию. В зависимости от условий сети 930, для кодирования данных 900 система может выбирать один из кодеров 910 или 920. Например, если условия сети показывают, что сеть перегружена и что доступная полоса пропускания ограничена, то для кодирования данных 900 может быть выбран сложный кодер 910, чтобы минимизировать количество данных, передаваемых по сети 930. Аналогично, если условия сети показывают, что сеть не перегружена, то для кодирования данных 900 может быть выбран упрощенный кодер 920, чтобы обеспечить более быструю работу процессора на клиентском устройстве.In some embodiments, logic may be provided to switch between a more complex / slower entropy encoder and a simpler encoder, which is described herein. For example, in FIG. 9, a remote presentation system can provide at least two encoders 910 and 920. Encoder 910 can be a complex entropy encoder, such that runs the RLGR algorithm. Encoder 920 may be a simplified entropy encoder according to the present disclosure. Depending on the conditions of the network 930, for encoding data 900, the system may choose one of the encoders 910 or 920. For example, if the network conditions indicate that the network is congested and that the available bandwidth is limited, a complex encoder 910 may be selected for encoding data 900 to minimize the amount of data transmitted over the network 930. Similarly, if the network conditions indicate that the network is not congested, a simplified encoder 920 may be selected for encoding data 900 to provide faster processor operation on the client device ystve.

Приложение A обеспечивает иллюстративный вариант осуществления упрощенного декодера согласно настоящему раскрытию.Appendix A provides an illustrative embodiment of a simplified decoder according to the present disclosure.

Фиг.10 изображает иллюстративную последовательность операций для обработки графических данных для передачи в клиентский компьютер, включающую в себя операции 1000, 1002, 1004 и 1006. На фиг.10 операция 1000 начинает последовательность операций, а операция 1002 иллюстрирует прием графических данных, представляющих экран клиента, ассоциированный с сеансом виртуальной машины. Операция 1004 иллюстрирует прием информации, показывающей доступную полосу пропускания для передачи, и, основываясь на этой информации, определение того, удовлетворяет ли доступная полоса пропускания заранее заданному порогу. Операция 1006 иллюстрирует энтропийное кодирование коэффициентов преобразованных графических данных с использованием компактного потока битовых маркеров, выстроенных по границам байта. В одном варианте осуществления серии нулей кодируются в варьируемом количестве блоков с размером, кратным размеру квантования, буквенные значения кодируются с использованием информационной записи в кэш-памяти недавно использованных буквенных значений, и другие значения кодируются с использованием минимального количества блоков с размером квантования. Битовый маркер может представлять собой строку битов, которая задает блок данных. Например, в системе, основанной на полубайтах, используется маркер из четырех битов.Figure 10 depicts an illustrative process for processing graphical data for transmission to a client computer, including operations 1000, 1002, 1004 and 1006. In figure 10, operation 1000 begins the sequence of operations, and operation 1002 illustrates the reception of graphic data representing the client screen associated with the virtual machine session. Operation 1004 illustrates receiving information showing the available bandwidth for transmission, and based on this information, determining whether the available bandwidth satisfies a predetermined threshold. Operation 1006 illustrates the entropy encoding of the coefficients of the transformed graphic data using a compact stream of bit markers aligned along byte boundaries. In one embodiment, a series of zeros is encoded in a variable number of blocks with a size that is a multiple of the quantization size, letter values are encoded using an information record in the cache of recently used letter values, and other values are encoded using a minimum number of blocks with a quantization size. A bit token may be a string of bits that defines a block of data. For example, a nibble-based system uses a four-bit token.

В различных вариантах осуществления размером квантования может быть полубайт. В некоторых вариантах осуществления последовательность операций может включать в себя генерацию потока кодов операций энтропийного кодирования и поток больших значений. Процедура может дополнительно включать в себя энтропийное кодирование потока больших значений с помощью схемы многобайтового кодирования, которая использует для малых значений меньше байтов, чем для больших значений, и деление упомянутых графических данных на мозаичные элементы данных, обработку упомянутых мозаичных элементов данных в мозаичные компоненты и выполнение упомянутого энтропийного кодирования в отношении упомянутых мозаичных компонентов. Схема кодирования может конфигурироваться для действия только на границах фиксированного байта.In various embodiments, the quantization size may be a nibble. In some embodiments, the flow of operations may include generating a stream of entropy coding operation codes and a stream of large values. The procedure may further include entropy encoding the stream of large values using a multibyte encoding scheme that uses fewer bytes for small values than large values, and dividing said graphic data into mosaic data elements, processing said mosaic data elements into mosaic components, and performing said entropy coding with respect to said mosaic components. The encoding scheme can be configured to act only on the boundaries of a fixed byte.

Фиг.11 изображает иллюстративную систему для обработки графических данных для передачи в клиентский компьютер, как описано выше. Как показано на фиг.11, система 1100 содержит процессор 1110 и память 1120. Память 1120 дополнительно содержит компьютерные инструкции, сконфигурированные для обработки графических данных для передачи в удаленное вычислительное устройство. Блок 1122 иллюстрирует прием графических данных, представляющих экран клиента, ассоциированный с сеансом виртуальной машины. Блок 1124 иллюстрирует деление упомянутых графических данных на мозаичные элементы данных. Блок 1126 иллюстрирует энтропийное кодирование коэффициентов преобразованных мозаичных элементов данных с использованием потока битовых маркеров, выстроенных по границам байта.11 depicts an illustrative system for processing graphic data for transmission to a client computer, as described above. As shown in FIG. 11, the system 1100 includes a processor 1110 and a memory 1120. The memory 1120 further comprises computer instructions configured to process the graphic data for transmission to a remote computing device. Block 1122 illustrates receiving graphic data representing a client screen associated with a virtual machine session. Block 1124 illustrates the division of said graphic data into mosaic data elements. Block 1126 illustrates the entropy coding of the coefficients of the transformed mosaic data elements using a stream of bit markers aligned on byte boundaries.

Любой из вышеупомянутых аспектов может быть реализован в способах, системах, считываемых компьютером носителях или в промышленном изделии любого типа. Например, считываемый компьютером носитель может хранить на нем исполняемые компьютером инструкции для обработки графических данных для передачи в клиентский компьютер. Такие носители могут содержать первый поднабор инструкций для приема графических данных, представляющих экран клиента, ассоциированный с сеансом виртуальной машины, и второй поднабор инструкций для энтропийного кодирования коэффициентов преобразованных графических данных с использованием компактного потока битовых маркеров, выстроенных по границам байтов, так что закодированные данные могут декодироваться с использованием процесса байтового декодирования. Специалистам должно быть понятно, что могут быть использованы дополнительные наборы инструкций, чтобы охватить различные аспекты, раскрытые здесь, и что два раскрытых здесь поднабора инструкций могут варьироваться в деталях согласно настоящему раскрытию.Any of the above aspects may be implemented in methods, systems, computer-readable media, or any type of industrial product. For example, a computer-readable medium may store computer-executable instructions for processing graphics data for transmission to a client computer. Such media may contain a first subset of instructions for receiving graphic data representing a client screen associated with a virtual machine session, and a second subset of instructions for entropy encoding the coefficients of the converted graphic data using a compact stream of bit markers aligned along byte boundaries, so that encoded data can decoded using the byte decoding process. Those skilled in the art will understand that additional sets of instructions may be used to cover the various aspects disclosed herein, and that the two subsets of instructions disclosed herein may vary in detail according to the present disclosure.

Предшествующее подробное описание может задавать различные варианты осуществления систем и/или процессов через примеры и/или схемы последовательности операций. Постольку, поскольку такие блок-схемы и/или примеры содержат одну или несколько функций и/или операций, специалистам должно быть понятно, что каждая функция и/или операция в таких блок-схемах или примерах может быть реализована отдельно и/или коллективно, посредством широкого диапазона аппаратных средств, программного обеспечения, встроенного программного обеспечения или виртуально любой их комбинации.The foregoing detailed description may specify various embodiments of systems and / or processes through examples and / or flow diagrams. To the extent that such flowcharts and / or examples contain one or more functions and / or operations, those skilled in the art will appreciate that each function and / or operation in such flowcharts or examples may be implemented separately and / or collectively, by a wide range of hardware, software, firmware, or virtually any combination thereof.

Должно быть понятно, что различные методики, описанные здесь, могут быть реализованы с аппаратными средствами или программным обеспечением, или, при необходимости, с комбинацией их обоих. Таким образом, способы и устройства по настоящему раскрытию или некоторым его аспектам или частям могут принимать форму программного кода (то есть, инструкций), воплощенного на материальных носителях, таких как гибкие диски, компакт-диски CD-ROM, накопители на жестких дисках или любые другие считываемые компьютером носители, причем, когда программный код загружается в машину или исполняется машиной, такой как компьютер, машина становится устройством для практического осуществления настоящего раскрытия. В случае исполнения программного кода на программируемых компьютерах вычислительное устройство обычно включает в себя процессор, носитель, считываемый процессором (включая энергозависимые и энергонезависимые запоминающие устройства и/или элементы хранения), по меньшей мере одно устройства ввода и по меньшей мере одно устройства вывода. Одна или несколько программ могут выполнять или использовать процессы, описанные в связи с настоящим раскрытием, например, через использование интерфейса прикладного программирования (API), многоразовые средства управления или подобное. Такие программы предпочтительно реализуются на процедурном языке высокого уровня или языке объектно-ориентированного программирования для связи с компьютерной системой. Однако, при желании, программы могут быть реализованы на ассемблере или машинном языке. В любом случае язык может быть транслируемым языком или интерпретируемым языком и может быть объединен с реализацией в аппаратных средствах.It should be understood that the various techniques described herein may be implemented with hardware or software, or, if necessary, with a combination of both of them. Thus, the methods and devices of the present disclosure or some of its aspects or parts can take the form of program code (i.e., instructions) embodied on tangible media such as floppy disks, CD-ROMs, hard drives, or any other computer-readable media, wherein when the program code is downloaded to or executed by a machine, such as a computer, the machine becomes a device for practicing the present disclosure. In the case of executing program code on programmable computers, the computing device typically includes a processor, a medium readable by the processor (including volatile and non-volatile storage devices and / or storage elements), at least one input device and at least one output device. One or more programs may execute or use the processes described in connection with the present disclosure, for example, through the use of an application programming interface (API), reusable controls, or the like. Such programs are preferably implemented in a high-level procedural language or object-oriented programming language for communication with a computer system. However, if desired, the programs can be implemented in assembler or machine language. In any case, the language may be a translated language or an interpreted language and may be combined with a hardware implementation.

Хотя изобретение было конкретно показано и описано со ссылкой на некоторые его предпочтительные варианты осуществления, специалисту должно быть понятно, что различные изменения по форме и в деталях могут быть сделаны, не отклоняясь от сущности и не выходя за рамки объема настоящего изобретения, который определяется последующей формулой изобретения. Кроме того, хотя элементы настоящего изобретения могут быть описаны или заявлены в единственном числе, предполагается множественное число, если конкретно не оговорено ограничение для единственного числа.Although the invention has been specifically shown and described with reference to some of its preferred embodiments, one skilled in the art will appreciate that various changes in form and detail can be made without departing from the spirit and without departing from the scope of the present invention, which is defined by the following claims inventions. In addition, although elements of the present invention may be described or claimed in the singular, the plural is contemplated, unless specifically limited to the singular.

Claims (10)

1. Способ обработки графических данных для передачи в удаленное вычислительное устройство, содержащий этапы, на которых:
принимают графические данные, представляющие экран клиента, ассоциированный с сеансом виртуальной машины;
принимают информацию, показывающую доступную полосу пропускания для упомянутой передачи, и, основываясь на этой информации, определяют, удовлетворяет ли доступная полоса пропускания заранее заданному порогу; и
выполняют энтропийное кодирование коэффициентов преобразованных графических данных с использованием компактного потока битовых маркеров, которые образуют группы, которые выстраиваются по границам байтов, при этом:
серии нулей кодируются в варьируемом количестве блоков с размером, кратным размеру квантования;
буквенные значения кодируются с использованием информационной записи в кэш-памяти недавно использованных буквенных значений; и
другие значения кодируются с использованием минимального количества блоков с размером, кратным размеру квантования.
1. A method of processing graphic data for transmission to a remote computing device, comprising the steps of:
receiving graphic data representing a client screen associated with a virtual machine session;
receiving information showing the available bandwidth for said transmission, and based on this information, determining whether the available bandwidth satisfies a predetermined threshold; and
perform entropy coding of the coefficients of the converted graphic data using a compact stream of bit markers that form groups that are aligned by byte boundaries, while:
a series of zeros are encoded in a variable number of blocks with a size that is a multiple of the quantization size;
alphabetic values are encoded using an information record in the cache of recently used alphabetic values; and
other values are encoded using a minimum number of blocks with a size that is a multiple of the quantization size.
2. Способ по п.1, дополнительно содержащий этап, на котором генерируют коды операций энтропийного кодирования и поток больших значений.2. The method according to claim 1, further comprising the step of generating codes of entropy coding operations and a stream of large values. 3. Способ по п.2, дополнительно содержащий этап, на котором выполняют энтропийное кодирование потока больших значений с помощью схемы многобайтового кодирования, которая использует для малых значений меньше байтов, чем для больших значений.3. The method of claim 2, further comprising entropy encoding the stream of large values using a multibyte encoding scheme that uses fewer bytes for small values than for large values. 4. Способ по п.3, в котором схема кодирования сконфигурирована действовать только на фиксированных границах байта.4. The method according to claim 3, in which the encoding scheme is configured to act only on fixed byte boundaries. 5. Способ по п.3, дополнительно содержащий этапы, на которых разделяют упомянутые графические данные на мозаичные элементы данных, обрабатывают упомянутые мозаичные элементы данных в мозаичные компоненты и выполняют упомянутое энтропийное кодирование в отношении упомянутых мозаичных компонентов.5. The method according to claim 3, further comprising the steps of dividing said graphic data into mosaic data elements, processing said mosaic data elements into mosaic components, and performing said entropy coding with respect to said mosaic components. 6. Система обработки графических данных для передачи в удаленное вычислительное устройство, содержащая:
вычислительное устройство, содержащее по меньшей мере один процессор;
запоминающее устройство, коммуникационно подсоединенное к упомянутому процессору при функционировании упомянутой системы, причем упомянутое запоминающее устройство имеет сохраненные в нем компьютерные инструкции, которые при их исполнении по меньшей мере одним процессором обеспечивают:
прием графических данных, представляющих экран клиента, ассоциированный с сеансом виртуальной машины;
деление упомянутых графических данных на мозаичные элементы данных;
энтропийное кодирование коэффициентов преобразованных графических данных с использованием потока битовых маркеров, которые образуют группы, которые выстраиваются по границам байтов, при этом:
серии нулей кодируются в варьируемом количестве блоков с размером, кратным размеру квантования;
буквенные значения кодируются с использованием информационной записи в кэш-памяти недавно использованных буквенных значений; и
другие значения кодируются с использованием минимального количества блоков с размером квантования.
6. A system for processing graphic data for transmission to a remote computing device, comprising:
a computing device comprising at least one processor;
a storage device communicatively connected to said processor during said system operation, said storage device having computer instructions stored therein which, when executed by at least one processor, provide:
receiving graphic data representing a client screen associated with a virtual machine session;
dividing said graphic data into mosaic data elements;
entropy coding of the coefficients of the converted graphic data using a stream of bit markers that form groups that are aligned by byte boundaries, while:
a series of zeros are encoded in a variable number of blocks with a size that is a multiple of the quantization size;
alphabetic values are encoded using an information record in the cache of recently used alphabetic values; and
other values are encoded using a minimum number of blocks with a quantization size.
7. Система по п.6, дополнительно содержащая передачу закодированных коэффициентов в вычислительное устройство, сконфигурированное для обработки закодированных коэффициентов, основываясь на размере квантования.7. The system of claim 6, further comprising transmitting the encoded coefficients to a computing device configured to process the encoded coefficients based on the quantization size. 8. Система по п.6, в которой закодированные данные могут быть использованы для эффективного декодирования посредством процесса энтропийного декодирования, сконфигурированного для работы на закодированных данных на побайтовой основе.8. The system of claim 6, wherein the encoded data can be used for efficient decoding by an entropy decoding process configured to operate on encoded data on a byte basis. 9. Система по п.6, дополнительно содержащая энтропийное кодирование потока больших значений с помощью схемы многобайтового кодирования, которая использует для малых значений меньше байтов, чем для больших значений.9. The system of claim 6, further comprising entropy encoding the stream of large values using a multibyte encoding scheme that uses fewer bytes for small values than for large values. 10. Считываемый компьютером носитель, хранящий исполняемые компьютером инструкции для обработки графических данных для передачи в клиентский компьютер, причем упомянутые инструкции предназначены для:
приема графических данных, представляющих экран клиента, ассоциированный с сеансом виртуальной машины; и
энтропийного кодирования коэффициентов преобразованных графических данных с использованием компактного потока битовых маркеров, которые образуют группы, которые выстраиваются по границам байта, так что закодированные данные могут быть декодированы с использованием основывающегося на байтах процесса декодирования, при этом:
серии нулей кодируются в варьируемом количестве блоков с размером, кратным полубайту;
буквенные значения кодируются с использованием информационной записи в кэш-памяти недавно использованных буквенных значений; и
другие значения кодируются с использованием минимального количества блоков с размером, кратным полубайту.
10. A computer-readable medium storing computer-executable instructions for processing graphic data for transmission to a client computer, said instructions being intended for:
receiving graphic data representing a client screen associated with a virtual machine session; and
entropy coding of the coefficients of the converted graphic data using a compact stream of bit markers that form groups that line up byte boundaries, so that encoded data can be decoded using a byte-based decoding process, with:
a series of zeros are encoded in a variable number of blocks with a size that is a multiple of a nibble;
alphabetic values are encoded using an information record in the cache of recently used alphabetic values; and
other values are encoded using a minimum number of blocks with a multiple of a nibble.
RU2013114349/08A 2010-09-30 2011-09-14 Entropy coder for image compression RU2575679C2 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/894,793 US20120082395A1 (en) 2010-09-30 2010-09-30 Entropy Coder for Image Compression
US12/894,793 2010-09-30
PCT/US2011/051660 WO2012050722A2 (en) 2010-09-30 2011-09-14 Entropy coder for image compression

Publications (2)

Publication Number Publication Date
RU2013114349A RU2013114349A (en) 2014-10-10
RU2575679C2 true RU2575679C2 (en) 2016-02-20

Family

ID=

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2742860C1 (en) * 2017-07-17 2021-02-11 Зте Корпорейшн Method and system for displaying virtual desktop data

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0846373B1 (en) * 1995-08-22 2004-10-27 Hewlett-Packard Company, A Delaware Corporation Method and apparatus for compressing and decompressing image data
RU2379832C2 (en) * 2005-04-13 2010-01-20 Фраунхофер-Гезелльшафт Цур Фердерунг Дер Ангевандтен Форшунг Е.Ф. Entropy encoding using compact code books

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0846373B1 (en) * 1995-08-22 2004-10-27 Hewlett-Packard Company, A Delaware Corporation Method and apparatus for compressing and decompressing image data
RU2379832C2 (en) * 2005-04-13 2010-01-20 Фраунхофер-Гезелльшафт Цур Фердерунг Дер Ангевандтен Форшунг Е.Ф. Entropy encoding using compact code books

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2742860C1 (en) * 2017-07-17 2021-02-11 Зте Корпорейшн Method and system for displaying virtual desktop data

Similar Documents

Publication Publication Date Title
AU2011314228B2 (en) Entropy coder for image compression
US9075560B2 (en) Real-time compression with GPU/CPU
US8760453B2 (en) Adaptive grid generation for improved caching and image classification
US9235452B2 (en) Graphics remoting using augmentation data
CN102959517B (en) For the system and method for the resource of the graphic process unit of Distribution Calculation machine system
US20100231599A1 (en) Frame Buffer Management
US8761528B2 (en) Compression of image data
US20110141123A1 (en) Push Pull Adaptive Capture
EP2630804B1 (en) Composite video streaming using stateless compression
US10555010B2 (en) Network-enabled graphics processing module
US8253732B2 (en) Method and system for remote visualization client acceleration
CN102411786A (en) Low complexity method for motion compensation of dwt based systems
US20180007400A1 (en) Multimedia Redirection Method, Device, and System
CN114116635B (en) Parallel decompression of compressed data streams
US20100225655A1 (en) Concurrent Encoding/Decoding of Tiled Data
US10699361B2 (en) Method and apparatus for enhanced processing of three dimensional (3D) graphics data
US8600155B2 (en) Classification and encoder selection based on content
JP5775523B2 (en) Cloud computing service method and system for client devices having memory cards
US20200067523A1 (en) Multi-mode compression acceleration
JP5788865B2 (en) Accelerating image compression using multiple processors
KR102110195B1 (en) Apparatus and method for providing streaming video or application program
CN117062656A (en) Low-latency multi-pass frame-level rate control using shared reference frames
RU2575679C2 (en) Entropy coder for image compression
HK1170876A (en) Entropy coder for image compression
CN117837141A (en) Multi-attempt encoding operation for streaming applications