ОБЩИЙ СПОСОБ ПОСТРОЕНИЯ ВИРТУАЛЬНОГО PCI-УСТРОЙСТВА И ВИРТУАЛЬНОГО MMIO-УСТРОЙСТВА
COMMON METHOD OF CONSTRUCTING A VIRTUAL PCI-DEVICE AND A VIRTUAL MMIO-DEVICE

Область техники, к которой относится изобретение
Варианты осуществления, описанные здесь, относятся, в общем, к устройствам обработки и, более конкретно, к общему способу построения виртуального PCI-устройства и виртуального MMIO-устройства.
Уровень техники
Вычислительная система может включать в себя множество компонентов, таких как устройство обработки (например, микроконтроллер, микропроцессор и т.д.), блоки памяти, источники синхронизации, периферийные устройства, внешние интерфейсы, аналоговые интерфейсы, регуляторы напряжения, схемы управления электропитанием и т.д. Эти блоки памяти, внешние интерфейсы или другие компоненты могут включать в себя функциональные блоки, также известные как IP-блоки или контроллеры, которые обеспечивают интерфейс между устройством обработки и периферийным устройством.
Эти компоненты в вычислительной системе могут связываться с программным обеспечением, доступным для вычислительной системы, и с периферийными устройствами различными способами, такими как, например, через шину межсоединения периферийных компонентов (PCI). Программное обеспечение может загружаться из некоторых периферийных устройств, таких как флэш-память, а затем исполняться устройством обработки в вычислительной системе.
Однако некоторые компоненты в вычислительной системе, такие как функциональные блоки, могут быть не совместимы с PCI, и, таким образом, могут быть не способны связываться с программным обеспечением, которое использует шину PCI для связи. Кроме того, некоторое программное обеспечение не может загружаться из определенных периферийных устройств, таких как периферийные устройства, совместимые с PCI.
Множество решений могут использоваться для решения этих вопросов. Современные подходы для решения проблемы неспособности функционального блока связываться с программным обеспечением, которое использует шину PCI для связи, включают в себя аппаратный подход и программный подход. Современный аппаратный подход требует изменения конструкции аппаратного обеспечения функционального блока, чтобы сделать функциональный блок совместимым с PCI. Современный программный подход требует создания программного обеспечения для функционального блока, такого как драйвер конкретного устройства для функционального блока, который может обойти несовместимость функционального блока. Современный подход для решения проблемы неспособности программного обеспечения загружаться из периферийного устройства, совместимого с PCI, требует изменения конструкции аппаратного обеспечения периферийного устройства, совместимого с PCI, (например, замены микросхемы). Однако эти подходы могут отнимать много времени и иметь значительные издержки.
Краткое описание чертежей
Данное раскрытие будет более понятным из подробного описания, данного ниже, и из сопутствующих чертежей различных вариантов осуществления данного раскрытия. Эти чертежи, однако, не следует принимать как ограничивающие данное раскрытие этими конкретными вариантами осуществления, они предназначены только для объяснения и понимания.
Фиг. 1 является блок-схемой одного варианта осуществления устройства обработки, который реализует общий способ построения виртуального устройства, как виртуального PCI-устройства или виртуального устройства ввода/вывода (I/O);
Фиг. 2 является блок-схемой, иллюстрирующей модуль виртуального устройства для реализации общего способа построения виртуального устройства, как виртуального PCI-устройства или виртуального I/O-устройства, согласно одному варианту осуществления данного раскрытия;
Фиг. 3 является блок-схемой, иллюстрирующей способ построения виртуального устройства, как виртуального PCI-устройства или виртуального I/O-устройства, согласно одному варианту осуществления данного раскрытия;
Фиг. 4 является блок-схемой, иллюстрирующей способ построения виртуального устройства, как виртуального PCI-устройства, согласно одному варианту осуществления данного раскрытия;
Фиг. 5 является блок-схемой, иллюстрирующей способ построения виртуального устройства, как виртуального I/O-устройства, согласно одному варианту осуществления данного раскрытия;
Фиг. 6 является блок-схемой, иллюстрирующей способ использования виртуального устройства согласно одному варианту осуществления данного раскрытия;
Фиг. 7 является блок-схемой компьютерной системы согласно одному варианту осуществления данного раскрытия;
Фиг. 8 является блок-схемой компьютерной системы согласно другому варианту осуществления данного раскрытия; и
Фиг. 9 является блок-схемой компьютерной системы согласно другому варианту осуществления данного раскрытия.
Подробное описание изобретения
Программное обеспечение, такое как операционная система или приложение, выполняемое в операционной системе вычислительной системы, может получать доступ к аппаратному устройству (например, периферийному устройству) в вычислительной системе с использованием драйвера. Когда драйвер запрашивает доступ к аппаратному устройству, драйвер может послать запрос доступа через функциональный блок, связанный с этим аппаратным устройством. Функциональный блок может затем получить доступ к аппаратному устройству, принять ответ от аппаратного устройства и передать ответ к драйверу. Следовательно, функциональный блок служит в качестве интерфейса между драйвером (и соответствующим программным обеспечением) и аппаратным устройством. Функциональный блок может быть «прозрачным» для драйвера и/или аппаратного устройства. Драйвер может запросить доступ к аппаратному устройству посредством записи команд для аппаратного устройства (например, команд доступа, таких как «считать» или «записать») в шину межсоединения периферийных компонентов (PCI) в вычислительной системе. Однако, если функциональный блок, соответствующий аппаратному устройству, не является совместимым с PCI, то функциональный блок может не иметь информации о том, что драйвер пытается получить доступ к аппаратному устройству или может быть не способен связываться с драйвером.
Кроме того, операционная система может быть выполнена с возможностью загружаться только из некоторых аппаратных устройств, таких как устройства ввода/вывода (I/O), и может быть не способна загружаться из других аппаратных устройств. Например, операционная система может быть не способна загружаться из периферийного устройства, которое операционная система считает съемным устройством, таким как устройство, совместимое с PCI. Однако вычислительная система может не считать аппаратное устройство съемным и может предпочесть загрузку операционной системы из аппаратного устройства.
Варианты осуществления данного раскрытия обеспечивают общий способ построения виртуального устройства, либо как виртуального PCI-устройства, либо как виртуального I/O-устройства. В одном варианте осуществления, способ данного раскрытия предусматривает прием запроса для устройства, совместимого с PCI. Этот способ дополнительно предусматривает построение виртуального устройства на основе запроса для устройства, совместимого с PCI, при этом виртуальное устройство строится, по меньшей мере, как одно из виртуального PCI-устройства или виртуального I/O-устройства.
Виртуальное устройство может быть построено как виртуальное PCI-устройство для функционального блока, который не является совместимым с PCI, и виртуальное устройство может быть построено как виртуальное I/O-устройство для устройства, совместимого с PCI, которое связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI. Посредством построения виртуального устройства, как виртуального PCI-устройства для функционального блока, который не является совместимым с PCI, любые доступы и/или запросы, посланные программным обеспечением в шину PCI для устройства, совместимого с PCI, связанного с функциональным блоком, могут быть распознаны виртуальным устройством и могут быть переданы в функциональный блок. Следовательно, виртуальное устройство обеспечивает интерфейс для функционального блока, который не является совместимым с PCI, для приема обращений и/или запросов, совместимых с PCI. Посредством построения виртуального устройства, как виртуального I/O-устройства, для устройства, совместимого с PCI, которое связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI, операционная система может загружаться с этого виртуального устройства, так как операционная система определяет, что устройство, из которого она загружается, является I/O-устройством, а не устройством, совместимым с PCI.
Фиг. 1 представляет блок-схему устройства 100, которое реализует общий способ построения виртуального PCI-устройства и виртуального MMIO-устройства, согласно одному варианту осуществления данного раскрытия. Некоторые примеры устройства 100 могут включать в себя, но не ограничены этим, устройство мобильной связи, такое как сотовый телефон или смартфон, мобильное вычислительное устройство, такое как планшетный компьютер, нетбук, блокнотный компьютер (ноутбук), компактный портативный компьютер, настольный компьютер, сервер-компьютер и т.д.
Устройство 100 может включать в себя, например, хост 105 для управления базовыми операциями для устройства 100. Хост 105 может включать в себя, например, модуль 110 обработки, функциональные блоки 115, модуль 120 памяти и другие модули 135. Модуль 110 обработки может содержать один или несколько процессоров (также известных как устройства обработки), расположенных в отдельном компоненте, или, альтернативно, одно или несколько ядер обработки, воплощенных в единой интегральной схеме (IC), расположенной, например, в конфигурации системы на кристалле (SOC).
Функциональные блоки 115 могут включать в себя схемы, выполненные с возможностью поддержки модуля 110 обработки. Функциональные блоки 115 могут включать в себя схемы «интерфейс/мостовое соединение". В одном варианте осуществления, каждый функциональный блок 115 является интегральной схемой (IC), выполненной с возможностью управления передачей данных по конкретной шине (например, PCI, последовательному AT подключению (SATA), универсальной последовательной шине (USB) и т.д.) или интерфейсом (например, устройствами мультимедийных карт (MMC), встроенными устройствами мультимедийных карт (eMMC), защищенными цифровыми (SD) устройствами и т.д.) в устройстве 100. Например, если устройство 100 включает в себя шину и/или интерфейс для PCI, SATA, USB, MMC, eMMC и SD-устройств, то устройство 100 будет включать в себя функциональный блок 115 (например, контроллер), который является PCI-контроллером, функциональный блок 115, который является SATA-контроллером, функциональный блок 115, который является USB-контроллером, функциональный блок 115, который является MMC-контроллером, функциональный блок 115, который является eMMC-контроллером, и функциональный блок 115, который является SD-контроллером. Функциональный блок 115 может управлять передачей сигналов между различными модулями посредством преобразования из одного типа/скорости связи в другой. Каждый функциональный блок 115 может быть также совместимым с разнообразными различными устройствами для обеспечения возможности различных системных реализаций, модернизаций и т.д. Некоторая часть функциональности функциональных блоков 115 может быть также включена в модуль 110 обработки, модуль 120 памяти или другие модули 135.
Модуль 110 обработки может исполнять команды. Команды могут включать в себя программный код для вызова выполнения модулем 110 обработки действий, таких как, но не ограниченных этим, считывание данных, запись данных, обработка данных, формулирование данных, преобразование данных, трансформация данных и т.д. Информация, включающая в себя команды, данные и т.д. (не показано), может храниться в модуле 120 памяти.
Модуль 120 памяти может включать в себя оперативное запоминающее устройство (RAM) или постоянное запоминающее устройство (ROM) в фиксированном или съемном формате. RAM может включать в себя память для сохранения информации во время работы устройства 100, такую как, например, статическое RAM (SRAM) или динамическое RAM (DRAM). ROM может включать в себя такие запоминающие устройства, как BIOS-память вычислительного устройства, для обеспечения команд, когда устройство 100 активируется, программируемые запоминающие устройства, такие как электронные программируемые ROM (EPROM), флэш-память и т.д. Другая фиксированная и/или съемная память может включать в себя магнитные запоминающие устройства, такие как гибкие-диски, жесткие диски и т.д., электронные запоминающие устройства, такие как твердотельная флэш-память (например, eMMC и т.д.), съемные карты или модули памяти (например, USB, micro-SD и т.д.), оптические запоминающие устройства, такие как ROM на компакт-диске (CD-ROM), голографические запоминающие устройства и т.д.
Другие модули 135 могут включать в себя модули, направленные на поддержку другой функциональности в пределах устройства 100. Другие модули 135 могут включать в себя, например, модули для подачи энергии к устройству 100, модули для поддержки проводной и/или беспроводной связи в устройстве 100, модули для обеспечения особенностей пользовательского интерфейса (UI) в устройстве 100, модули для поддержки специализированной функциональности и т.д. Компоновка других модулей 100 может быть переменной в зависимости, например, от формфактора, для использования которого было сконфигурировано устройство 100, и т.д.
Периферийные устройства 140 могут включать в себя съемные или несъемные периферийные устройства, такие как периферийные устройства, совместимые с PCI, периферийные устройства ввода/вывода с отображением (портов) в оперативной памяти (MMIO), магнитные запоминающие устройства, такие как флоппи-диски, жесткие диски и т.д., электронные запоминающие устройства, такие как твердотельная флэш-память (например, eMMC и т.д.), съемные карты или модули памяти (например, USB, микроSD и т.д.), оптические запоминающие устройства, такие как Запоминающие устройства на компакт-диске (CD-ROM), голографические запоминающие устройства и т.д. Периферийное устройство может быть идентифицировано посредством номера шины, к которой оно подключено, или посредством номера устройства для типа периферийного устройства. Периферийное устройство 140 может включать в себя один или несколько компонентов 145 программного обеспечения (например, приложение, операционную систему и т.д.), хранимые в периферийном устройстве 140.
Вариант осуществления модуля 120 памяти может включать в себя модуль 125 виртуального устройства и один или несколько компонентов 130 программного обеспечения. Компоненты 130 программного обеспечения могут включать в себя приложения, операционную систему, BIOS, обработчик прерываний управления системой (SMI) и т.д. В одном варианте осуществления, компонент 130 программного обеспечения посылает запрос (например, запрос нумерации, запрос доступа и т.д.) для периферийного устройства 140 в модуль 125 виртуального устройства. Этот запрос может быть запросом для получения информации для периферийного устройства 140, такой как идентификатор поставщика, идентификатор устройства и информация об адресах для периферийного устройства 140. Если эта информация возвращается модулем 125 виртуального устройства, то компонент 130 программного обеспечения может использовать эту информацию для связи с периферийным устройством 140 через PCI.
Модуль 125 виртуального устройства может принять запрос для периферийного устройства 140. Модуль 125 виртуального устройства может построить виртуальное устройство на основе запроса для периферийного устройства 140. Этим виртуальным устройством может быть виртуальное PCI-устройство или виртуальное MMIO-устройство.
Модуль 125 виртуального устройства может построить виртуальное устройство, которое является виртуальным PCI-устройством, если модуль 125 виртуального устройства определяет, что периферийное устройство 140 в запросе связано с функциональным блоком 115, который не является совместимым с PCI. Функциональный блок 115 не является совместимым с PCI, если функциональный блок 115 не может считывать или записывать запросы доступа в шину PCI. В одном варианте осуществления, модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, посредством считывания или записи запроса доступа в функциональный блок 115. Если функциональный блок 115 возвращает ошибку или другое указание, что функциональный блок 115 не может считать или записать запрос доступа, то модуль 125 виртуального устройства может определить, что функциональный блок 115 не является совместимым с PCI. В другом варианте осуществления модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, посредством получения информации о совместимости от функционального блока 115 и определения того, включает ли информация о совместимости от функционального блока 115 в себя PCI. В другом варианте осуществления, модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, из аппаратной спецификации для устройства 100. В еще одном варианте осуществления, модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, посредством получения информации о совместимости от SMI-обработчика (не показан), от BIOS (не показана) и т.д. Если информация о совместимости для функционального блока 115 не включает в себя PCI, то функциональный блок 115 не является совместимым с PCI. В одном варианте осуществления, модуль 125 виртуального устройства строит виртуальное устройство, как виртуальное PCI-устройство, посредством определения информации (например, идентификатора поставщика, идентификатора устройства и информации об адресах) для виртуального PCI-устройства. В некоторых вариантах осуществления, модуль 125 виртуального устройства посылает эту информацию в компонент 130 программного обеспечения в качестве реакции на запрос от компонента 130 программного обеспечения.
Модуль 125 виртуального устройства может построить виртуальное устройство, которое является виртуальным MMIO-устройством, если модуль 125 виртуального устройства определяет, что периферийное устройство 140 в запросе связано с компонентом 145 программного обеспечения, подлежащим загрузке с периферийного устройства 140. В одном варианте осуществления, модуль 125 виртуального устройства определяет, связано ли периферийное устройство 140 с компонентом 145 программного обеспечения, подлежащим загрузке с периферийного устройства, посредством доступа к одному или нескольким компонентам 145 программного обеспечения, хранимым на периферийном устройстве 140, и определения того, являются ли какие-либо из этих компонентов программного обеспечения заданными компонентами программного обеспечения (например, операционной системой и т.д.). В одном варианте осуществления, модуль 125 виртуального устройства строит виртуальное устройство как виртуальное I/O-устройство посредством игнорирования запроса, принятого от компонента 130 программного обеспечения, и определения диапазона I/O-адресов для виртуального I/O устройства.
Когда виртуальное устройство построено для периферийного устройства 140, модуль 125 виртуального устройства может сохранить виртуальное устройство в памяти, такой как модуль 120 памяти. В некоторых вариантах осуществления, если виртуальное устройство является виртуальным PCI-устройством для периферийного устройства 140, модуль 125 виртуального устройства предоставляет в один или несколько компонентов 130 программного обеспечения (например, компонент 130 программного обеспечения, который послал запрос для периферийного устройства 140) идентификатор поставщика, идентификатор устройства и информацию об адресах для созданного виртуального устройства. В некоторых вариантах осуществления, если виртуальное устройство является виртуальным I/O-устройством для периферийного устройства 140, компоненты 130 программного обеспечения больше не получают непосредственный доступ к периферийному устройству 140, для которого был послан запрос, а вместо этого получают доступ к виртуальному PCI-устройству или виртуальному I/O-устройству для периферийного устройства 140. Модуль 125 виртуального устройства может дополнительно обеспечить интерфейс между компонентами 130 программного обеспечения и виртуальным устройством. В некоторых вариантах осуществления, после приема доступа к I/O-адресу от компонента 130 программного обеспечения, модуль 125 виртуального устройства определяет, находится ли I/O адрес в пределах диапазона виртуального устройства, которое является виртуальным I/O-устройством. В этих вариантах осуществления, если модуль 125 виртуального устройства определяет, что I/O-адрес находится в пределах диапазона виртуального устройства, которое является виртуальным I/O-устройством, модуль 125 виртуального устройства преобразует I/O-адрес в PCI-адрес перед обеспечением запроса доступа к периферийному устройству 140, связанному с виртуальным I/O-устройством.
Фиг. 2 иллюстрирует модуль 200 виртуального устройства для реализации общего способа построения виртуального PCI-устройства и виртуального MMIO-устройства, в соответствии с одним вариантом осуществления данного раскрытия. В одном варианте осуществления, модуль 200 виртуального устройства является тем же самым, что и модуль 125 виртуального устройства, описанный выше относительно фиг. 1. Модуль 200 виртуального устройства может включать в себя модуль 205 определения виртуального устройства, модуль 210 создания виртуального PCI-устройства, модуль 215 создания виртуального I/O-устройства и модуль 220 преобразования адреса виртуального I/O-устройства. Больше или меньше компонентов можно включить в модуль 200 виртуального устройства без потери общности.
Модуль 205 определения виртуального устройства может принять запрос для периферийного устройства. Запрос может включать в себя информацию идентификации о запросе, такую как, является ли запрос запросом доступа, запросом нумерации и т.д. Запрос может дополнительно включать в себя информацию идентификации для периферийного устройства, такую как адрес для периферийного устройства. Модуль 125 виртуального устройства может определить, следует ли построить виртуальное устройство как виртуальное PCI-устройство или виртуальное I/O-устройство, на основе запроса для периферийного устройства.
Модуль 205 определения виртуального устройства может определить, что виртуальное устройство следует построить как виртуальное PCI-устройство, если периферийное устройство в запросе связано с функциональным блоком, который не является совместимым с PCI. В одном варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации о совместимости от функционального блока и определения, включает ли информация о совместимости от функционального блока в себя PCI. В этом варианте осуществления, если информация о совместимости для функционального блока не включает в себя PCI, модуль 205 определения виртуального устройства определяет, что функциональный блок не является совместимым с PCI. В этом варианте осуществления, если информация о совместимости для функционального блока не включает в себя PCI, модуль 205 определения виртуального устройства определяет, что функциональный блок является совместимым с PCI. В другом варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации от SMI-обработчика (не показан), обработчика ловушек (не показан) или обработчика прерываний (не показан). Если периферийное устройство связано с функциональным блоком, который не является совместимым с PCI, модуль 205 определения виртуального устройства может послать запрос в модуль 210 создания виртуального PCI-устройства для построения виртуального PCI-устройства в качестве виртуального устройства.
Модуль 205 определения виртуального устройства может определить, что виртуальное устройство должно быть построено как виртуальное I/O-устройство, если периферийное устройство в запросе связано с программным обеспечением (например, с операционной системой), подлежащим загрузке из периферийного устройства. В одном варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство с программным обеспечением, подлежащим загрузке из периферийного устройства, посредством доступа к программному обеспечению, хранимому на периферийном устройстве, и определения, является ли какой-либо элемент программного обеспечения заданным типом программного обеспечения (например, операционной системой и т.д.). В другом варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство с программным обеспечением, подлежащим загрузке из периферийного устройства, посредством получения информации от SMI-обработчика, обработчика ловушек или обработчика прерываний. Если периферийное устройство в запросе связано с программным обеспечением, подлежащим загрузке из периферийного устройства, модуль 205 определения виртуального устройства может послать запрос в модуль 215 создания виртуального I/O-устройства для создания виртуального I/O-устройства в качестве виртуального устройства.
Модуль 210 создания виртуального PCI-устройства может принять запрос от модуля 205 определения виртуального устройства для создания виртуального PCI-устройства. Модуль 210 создания виртуального PCI-устройства может создать виртуальное PCI-устройство посредством определения информации идентификации и информации об адресах для виртуального PCI-устройства на основе функционального блока, связанного с периферийным устройством. Информация идентификации может включать в себя идентификатор поставщика, идентификатор устройства и т.д. Информация об адресах может включать в себя диапазон адресов, который может использоваться программным обеспечением (не показано) для доступа к виртуальному PCI-устройству. В одном варианте осуществления, модуль 210 создания виртуального PCI-устройства получает информацию идентификации и информацию об адресах от SMI-обработчика, обработчика ловушек или обработчика прерываний. Как только модуль 210 создания виртуального PCI-устройства создает виртуальное PCI-устройство, модуль 210 создания виртуального PCI-устройства может сохранить виртуальное PCI-устройство в памяти. В одном варианте осуществления модуль 210 создания виртуального PCI-устройства сохраняет виртуальное PCI-устройство в качестве виртуального устройства в информации 255 о виртуальных устройствах в модуле 250 памяти.
Модуль 215 создания виртуального I/O-устройства может принять запрос от модуля 205 определения виртуального устройства для создания виртуального I/O-устройства. Модуль 215 создания виртуального I/O-устройства может создать виртуальное I/O-устройство посредством игнорирования запроса для периферийного устройства и определения диапазона I/O-адресов для виртуального I/O-устройства. В одном варианте осуществления, модуль 215 создания виртуального I/O-устройства игнорирует запрос для периферийного устройства, не реагируя на запрос для периферийного устройства. В другом варианте осуществления, модуль 215 создания виртуального I/O-устройства игнорирует запрос для периферийного устройства передавая ответ на запрос о том, что запрос был передан неудачно (например, неудачное PCI-считывание). Как только модуль 215 создания виртуального I/O-устройства создает виртуальное I/O-устройство, модуль 215 создания виртуального I/O-устройства может сохранить виртуальное I/O-устройство в памяти. В одном варианте осуществления, модуль 215 создания виртуального I/O-устройства сохраняет виртуальное I/O-устройство в информации 255 о виртуальных устройствах в модуле 250 памяти.
Модуль 220 преобразования адреса виртуального I/O-устройства может принять запрос или доступ к I/O-адресу. В одном варианте осуществления, запрос или доступ принимается от программного обеспечения. В качестве реакции на запрос или доступ, модуль 220 преобразования адреса виртуального I/O-устройства может определить, находится ли I/O-адрес в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством. Модуль 220 преобразования адреса виртуального I/O-устройства может определить, находится ли I/O-адрес в пределах диапазона адресов виртуального I/O-устройства, посредством сравнения I/O-адреса с диапазоном адресов для каждого виртуального устройства, которое является виртуальным I/O-устройством. В одном варианте осуществления, модуль 220 преобразования адреса виртуального I/O-устройства сравнивает I/O-адрес с диапазонами адресов в информации 255 о виртуальных устройствах. Если модуль 220 преобразования адреса виртуального I/O-устройства определяет, что I/O-адрес находится в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством, то модуль 220 преобразования адреса виртуального I/O-устройства может преобразовать I/O-адрес в PCI-адрес и может вызвать доступ к PCI-адресу периферийного устройства, связанного с виртуальным устройством.
Фиг. 3 является блок-схемой способа 300 построения виртуального PCI-устройства и виртуального MMIO-устройства согласно одному варианту осуществления данного раскрытия. Способ 300 может быть выполнен посредством логических схем обработки, которые могут содержать аппаратное обеспечение (например, схемы, специализированные логические схемы, программируемые логические схемы, микрокод и т.д.), программное обеспечение (такое как команды, выполняемые в устройстве обработки), программно-аппаратные средства или их комбинацию. В одном варианте осуществления, способ 300 выполняется устройством 100, описанным относительно фиг. 1.
В блоке 305, логические схемы обработки принимают запрос для устройства, совместимого с PCI. Устройством, совместимым с PCI, может быть периферийное устройство, которое может быть подключено к шине PCI. Запрос для устройства, совместимого с PCI, может включать в себя информацию идентификации о запросе, такую как, является ли запрос запросом доступа, запросом нумерации и т.д. В одном варианте осуществления, запрос является запросом нумерации, принятым от SMI-обработчика, в то время как устройство обработки, выполняющее способ 300, находится в режиме системного управления (SMM).
SMM является режимом работы, в котором все обычное исполнение (включающее в себя OS) устройства обработки приостановлено, и специальное отдельное программное обеспечение (обычно программно-аппаратные средства или отладчик с аппаратной поддержкой) исполняется в режиме с высоким уровнем привилегии. SMM обеспечивает изолированную память и среду исполнения, и SMM-код является невидимым для операционной системы (OS) при сохранении полного доступа к памяти и полного контроля над периферийными устройствами, такими как устройства, совместимые с PCI, и т.д. Когда SMM инициирован, текущее состояние устройства обработки сохраняется, и все другие процессы останавливаются. В SMM-режиме могут выполняться такие операции с высоким уровнем привилегии, как отладка, управление аппаратным, обеспечением, функции безопасности, эмуляция и т.д., за которыми следует операция возобновления устройства обработки, основанная на состоянии сохранения устройства обработки. После возникновения прерывания системного управления (SMI), устройство обработки может войти в SMM и запустить SMI-обработчик. SMI может быть сгенерировано, когда запускается исполнение устройства обработки (загрузка), когда новое периферийное устройство добавляется к устройству и т.д. Например, программно-аппаратные средства или BIOS могут сгенерировать SMI после загрузки.
После приема SMI, SMI-обработчик может пронумеровать (периферийные) устройства, совместимые с PCI, доступные для устройства обработки, посредством запроса (например, попытки считать) шины PCI для определения устройства (устройств), совместимых с PCI. Если SMI сгенерировано в качестве реакции на загрузку, то все устройства, совместимые с PCI, в устройстве могут быть не пронумерованы. Если SMI сгенерировано в качестве реакции на добавляемое новое устройство, совместимое с PCI, то новое устройство, совместимое с PCI, может быть не пронумеровано. SMI-обработчик может сгенерировать запрос нумерации для каждого устройства, совместимого с PCI, которое еще не было пронумеровано. Запрос нумерации может включать в себя информацию идентификации для устройства, совместимого с PCI, такую как номер шины и номер устройства для устройства, совместимого с PCI.
Возвращаясь к фиг. 3, в блоке 310, логические схемы обработки определяют, связано ли устройство, совместимое с PCI, в запросе с функциональным блоком, который не является совместимым с PCI. Функциональный блок не является совместимым с PCI, если функциональный блок не может считывать или записывать запросы доступа в шину PCI.
В одном варианте осуществления, логические схемы обработки определяют, связано ли устройство, совместимое с PCI, в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации о совместимости от функционального блока, связанного с устройством, совместимым с PCI, и определения, включает ли информация о совместимости для функционального блока в себя PCI-совместимость. Если информация о совместимости для функционального блока включает в себя PCI-совместимость, то логические схемы обработки определяют, что устройство, совместимое с PCI, не связано с функциональным блоком, который не является совместимым с PCI (другими словами, устройство, совместимое с PCI, связано с функциональным блоком, который является совместимым с PCI. Если информация о совместимости для функционального блока не включает в себя PCI-совместимость, то логические схемы обработки определяют, что устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI.
В другом варианте осуществления, логические схемы обработки определяют, связано ли периферийное устройство в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации о совместимости для функционального блока, связанного с устройством, совместимым с PCI, от SMI-обработчика. Информация о совместимости может включать в себя, является ли функциональный блок, связанный с устройством, совместимым с PCI, совместимым с PCI. SMI-обработчик может собрать информацию о драйверах и/или программном обеспечении (например, о приложениях), выполняемом или подлежащем выполнению в устройстве обработки, и может определить, какие устройства, совместимые с PCI, поддерживаются драйверами и/или программным обеспечением. SMI-обработчик может собрать информацию о драйверах и/или программном обеспечении из документации, из исходного кода драйвера или программного обеспечения и т.д. После определения устройств, совместимых с PCI, поддерживаемых драйверами и/или программным обеспечением, SMI-обработчик может определить соответствующий функциональный блок (например, контроллер) для каждого из устройств, совместимых с PCI, и определить, является ли соответствующий функциональный блок совместимым с PCI. SMI-обработчик может получить доступ к каждому из функциональных блоков для определения PCI-совместимости каждого из функциональных блоков. Например, информация о типе устройства для каждого из функциональных блоков может быть доступна для SMI-обработчика. В одном варианте осуществления, логические схемы обработки могут получить информацию о совместимости для функционального блока, связанного с устройством, совместимым с PCI, посредством посылки запроса информации о совместимости для функционального блока и приема информации о совместимости для функционального блока от SMI-обработчика. В другом варианте осуществления, логические схемы обработки могут получить информацию о совместимости для функционального блока от SMI-обработчика посредством доступа к заданному адресу ячейки памяти, записанной посредством SMI-обработчика. Если информация о совместимости включает в себя информацию о совместимости представляющую, что функциональный блок не является совместимым с PCI, то логические схемы обработки определяют, что устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI. Если информация о совместимости для функционального блока включает в себя информацию представляющую, что функциональный блок является совместимым с PCI, то логические схемы обработки определяют, что устройство, совместимое с PCI, не связано с функциональным блоком, который не является совместимым с PCI (другими словами, устройство, совместимое с PCI, связано с функциональным блоком, который является совместимым с PCI).
В другом варианте осуществления, логические схемы обработки определяют, является ли периферийное устройство в запросе несовместимым с PCI, посредством считывания или записи в запрос запроса доступа в периферийное устройство. Если периферийное устройство в запросе возвращает ошибку или другое указание, что периферийное устройство в запросе не может считать или записать запрос доступа, то логические схемы обработки могут определить, что периферийное устройство в запросе не является совместимым с PCI.
Если логические схемы обработки определяют, что устройство, совместимое с PCI, не связано с функциональным блоком, который не является совместимым с PCI, то способ 300 переходит к блоку 320. Если логические схемы обработки определяют, что устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI, то способ 300 переходит к блоку 315.
В блоке 315, логические схемы обработки строят виртуальное устройство, как виртуальное PCI-устройство. Логические схемы обработки могут построить виртуальное устройство, как виртуальное PCI-устройство, посредством определения информации PCI-идентификации и информации об адресах для виртуального устройства. Одна реализация построения виртуального устройства, как виртуального PCI-устройства, описана ниже со ссылкой на фиг. 4. В одном варианте осуществления, после построения виртуального устройства, логические схемы обработки могут по выбору обеспечить ответ на запрос, принятый в блоке 305. Ответ на запрос может включать в себя успешное считывание заданных регистров, связанных с виртуальным устройством, и может дополнительно включать в себя информацию об идентификаторе для виртуального устройства, такую как идентификатор поставщика, идентификатор устройства, диапазон I/O-адресов и диапазон MMIO-адресов для виртуального устройства. Например, в ответ на запрос нумерации для универсального устройства ввода/вывода (GPIO) с GPIO-контроллером, который не является совместимым с PCI, принимают успешный ответ, который включает в себя идентификатор поставщика (например, 0x8888), идентификатор устройства (например, 0x9999), диапазон I/O-адресов (например, 0x200-0x20F) и MMIO диапазон (ОхАОООО-OxAOOFF) для виртуального устройства, созданного для GPIO-контроллера, связанного с GPIO-устройством.
В блоке 320, логические схемы обработки определяют, связано ли устройство, совместимое с PCI, с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI. Программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, может быть операционная система, приложение, BIOS и т.д. В некоторых вариантах осуществления, программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, является программное обеспечение, которое требует загрузки из I/O-устройства, такого как периферийное устройство ввода/вывода с отображением (портов) на оперативное запоминающее устройство. В этих вариантах осуществления, программное обеспечение может быть не предназначено для загрузки из периферийных устройств, которые считаются съемными устройствами, таких как устройства, совместимые с PCI, (например, встроенная мультимедийная карта памяти (eMMC) и т.д.). Однако, некоторые устройства, совместимые с PCI, не являются съемными, такие как PCI-устройства в SOC.
В одном варианте осуществления, логические схемы обработки определяют, связано ли устройство, совместимое с PCI, с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, посредством доступа к компонентам программного обеспечения, хранимым в устройстве, совместимом с PCI, и определения, является ли компонент программного обеспечения заданным компонентом программного обеспечения. Логические схемы обработки могут определить, является ли компонент программного обеспечения заданным компонентом программного обеспечения, посредством сравнения компонента программного обеспечения с одним или несколькими заданными компонентами программного обеспечения, которые были определены находящимися в периферийном устройстве, которое не является съемным (например, операционная система на eMMC и т.д.). Если сравнение указывает, что компоненты программного обеспечения, хранимые в устройстве, совместимом с PCI, включают в себя один или несколько заданных компонентов программного обеспечения, то логические схемы обработки могут определить, что устройство, совместимое с PCI, связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI. Если сравнение указывает, что компоненты программного обеспечения, хранимые в устройстве, совместимом с PCI, не включают в себя один или несколько заданных компонентов программного обеспечения, то логические схемы обработки могут определить, что устройство, совместимое с PCI, не связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI.
В другом варианте осуществления, логические схемы обработки определяют, связано ли устройство, совместимое с PCI, с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, посредством получения информации о программном обеспечении от SMI-обработчика. В одном таком варианте осуществления, информация о программном обеспечении, полученная от SMI-обработчика, включает в себя компоненты программного обеспечения в устройстве, совместимом с PCI. В этом варианте осуществления, SMI-обработчик может собрать информацию о драйверах и/или компонентах программного обеспечения, хранимых на устройстве, совместимом с PCI. В этом варианте осуществления, логические схемы обработки могут получить информацию о программном обеспечении и сравнить информацию о программном обеспечении с одним или несколькими заданными компонентами программного обеспечения, которые, как было определено, находятся в периферийном устройстве, которое не является съемным (например, операционная система на eMMC и т.д.). Если сравнение указывает, что информация о программном обеспечении включает в себя один или несколько заданных компонентов программного обеспечения, то логические схемы обработки могут определить, что устройство, совместимое с PCI, связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI. Если сравнение указывает, что информация о программном обеспечении не включает в себя один или несколько заданных компонентов программного обеспечения, то логические схемы обработки могут определить, что устройство, совместимое с PCI, не связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI. В другом таком варианте осуществления, информация о программном обеспечении включает в себя индикатор (например, положительный индикатор, такой как бит, установленный в 1, или отрицательный индикатор, такой как бит, установленный в 0), должны ли какие-либо из компонентов программного обеспечения в устройстве, совместимом с PCI, загружаться из устройства, совместимого с PCI. В этом варианте осуществления, логические схемы обработки получают информацию о программном обеспечении и определяют, что устройство, совместимое с PCI, связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, на основе индикатора. Если индикатор указывает, что программное обеспечение в устройстве, совместимом с PCI, должно быть загружено из устройства, совместимого с PCI, (например, положительный индикатор), то логические схемы обработки могут определить, что устройство, совместимое с PCI, связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI. Если индикатор указывает, что устройство, совместимое с PCI, не связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, (например, отрицательный индикатор), то логические схемы обработки могут определить, что устройство, совместимое с PCI, не связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI.
В одном варианте осуществления, логические схемы обработки могут получить информацию о программном обеспечении для устройства, совместимого с PCI, от SMI-обработчика посредством посылки запроса информации о программном обеспечении для устройства, совместимого с PCI, и приема информации о программном обеспечении для устройства, совместимого с PCI, от SMI-обработчика. В другом варианте осуществления, логические схемы обработки могут получить информацию о программном обеспечении для устройства, совместимого с PCI, от SMI-обработчика посредством доступа к заданному адресу ячейки памяти, записанной посредством SMI-обработчика.
Если логические схемы обработки определяют, что устройство, совместимое с PCI, не связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, то способ 300 завершается без построения виртуального устройства. Если логические схемы обработки определяют, что устройство, совместимое с PCI, связано с программным обеспечением, подлежащим загрузке из устройства, совместимого с PCI, то способ 300 переходит к блоку 325.
В блоке 325, логические схемы обработки строят виртуальное устройство как виртуальное I/O-устройство. В одном варианте осуществления, виртуальное I/O-устройство является виртуальным MMIO-устройством. Одна реализация построения виртуального устройства как виртуального I/O-устройства описана ниже со ссылкой на фиг. 5. В одном варианте осуществления, после построения виртуального устройства, логические схемы обработки могут по выбору представить ответ на запрос, принятый в блоке 305. Ответ на запрос может включать в себя неудачное считывание заданных регистров, связанных с устройством, совместимым с PCI.
Фиг. 4 является блок-схемой способа 400 построения виртуального устройства как виртуального PCI-устройства согласно одному варианту осуществления данного раскрытия. Способ 400 может быть выполнен логическими схемами обработки, которые могут содержать аппаратное обеспечение (например, схемы, специализированные логические схемы, программируемые логические схемы, микрокод и т.д.), программное обеспечение (такое как команды, выполняемые на устройстве обработки), программно-аппаратные средства или их комбинацию. В одном варианте осуществления, способ 400 выполняется устройством 100, описанным со ссылкой на фиг. 1.
В блоке 405, логические схемы обработки определяют идентификатор поставщика для виртуального устройства. В одном варианте осуществления, идентификатор поставщика определяется посредством получения идентификатора поставщика от SMI-обработчика или из BIOS. Поставщик, идентифицированный SMI-обработчиком или от BIOS, может быть назначен SMI-обработчиком или BIOS или может совпадать с идентификатором поставщика, требуемого драйвером или компонентом программного обеспечения. Например, если драйвер запрашивает идентификатор поставщика "0x8086", то SMI-обработчик или BIOS назначит идентификатор поставщика "0x8086" виртуальному устройству. В другом варианте осуществления, идентификатор поставщика определяется посредством определения идентификатора поставщика, связанного с устройством, совместимым с PCI, и конфигурирования идентификатора поставщика для виртуального устройства так, чтобы он был таким же, как и определенный идентификатор поставщика. Например, если устройство, совместимое с PCI, является GPIO-устройством с идентификатором поставщика 0x8888, то соответствующий идентификатор поставщика для виртуального устройства будет также 0x8888.
В блоке 410, логические схемы обработки определяют идентификатор устройства для виртуального устройства. В одном варианте осуществления, идентификатор устройства определяется посредством получения идентификатора устройства от SMI-обработчика или из BIOS. Устройство, идентифицированное от SMI-обработчика или из BIOS, может быть назначено SMI-обработчиком или BIOS или может совпадать с идентификатором устройства, требуемым драйвером или компонентом программного обеспечения. Например, если драйвер запрашивает идентификатор устройства "0x8086", то SMI-обработчик или BIOS назначит идентификатор устройства "0x8086" для виртуального устройства. В другом варианте осуществления, идентификатор устройства определяется посредством определения идентификатора устройства, связанного с устройством, совместимым с PCI, и конфигурирования идентификатора устройства для виртуального устройства так, чтобы он был таким же, как и определенный идентификатор устройства. Например, если устройство, совместимое с PCI, является GPIO-устройством с идентификатором устройства 0x9999, то соответствующий идентификатор устройства для виртуального устройства будет также 0x9999.
В блоке 415, логические схемы обработки определяют информацию об адресах для виртуального устройства. Информацией об адресах для виртуального устройства может быть диапазон I/O-адресов и диапазон MMIO-адресов для виртуального устройства. В одном варианте осуществления, информация об адресах определяется посредством получения информации об адресах от SMI-обработчика, BIOS, или из спецификации аппаратного обеспечения. В другом варианте осуществления, информация об адресах определяется посредством определения информации об адресах, связанной с устройством, совместимым с PCI, и конфигурирования информации об адресах для виртуального PCI-устройства так, чтобы она была такой же, как и определенная информация об адресах. Например, если устройство, совместимое с PCI, является GPIO-устройством с информацией об адресах, включающей в себя I/O-диапазон 0x200-0x20F и диапазон MMIO-адресов ОхАОООО-OxAOOFF, то соответствующей информацией об адресах для виртуального устройства будет также I/O-диапазон 0x200-0x20F и диапазон MMIO-адресов ОхАОООО-OxAOOFF. Информация об адресах может включать в себя диапазон адресов для виртуального устройства, который может использоваться компонентом программного обеспечения (не показан) для доступа к виртуальному устройству.
Фиг. 5 является блок-схемой способа 500 построения виртуального устройства как виртуального I/O-устройства согласно одному варианту осуществления данного раскрытия. Способ 500 может быть выполнен логическими схемами обработки, которые могут содержать аппаратное обеспечение (например, схемы, специализированные логические схемы, программируемые логические схемы, микрокод и т.д.), программное обеспечение (такое как команды, выполняемые в устройстве обработки), программно-аппаратные средства или их комбинацию. В одном варианте осуществления, способ 500 выполняется устройством 100, описанным со ссылкой на фиг. 1.
В блоке 505, логические схемы обработки отвергают запрос для устройства, совместимого с PCI. В одном варианте осуществления, запросом является запрос нумерации, связанный с устройством, совместимым с PCI. Посредством игнорирования запроса для устройства, совместимого с PCI, логические схемы обработки могут обеспечить обратную связь с программным обеспечением, которое подало запрос, что отсутствует устройство, совместимое с PCI, связанное с запросом. Это приведет к определению программным обеспечением, что программное обеспечение хранится на MMIO-устройстве или что программное обеспечение получает доступ к MMIO-устройству. В одном варианте осуществления, логические схемы обработки отвергают запрос для устройства, совместимого с PCI, посредством отсутствия реакции на запрос. В другом варианте осуществления, логические схемы обработки отвергают запрос для устройства, совместимого с PCI, генерируя ответ на запрос, который включает в себя неудачное считывание одного или нескольких заданных регистров, связанных с совместимым с PCI запросом (например, регистров PCI-конфигурации, связанных с идентификатором поставщика и идентификатором устройства, обеспеченных в запросе).
В блоке 510, логические схемы обработки определяют диапазон I/O-адресов для виртуального I/O-устройства. В одном варианте осуществления, диапазоном I/O-адресов является диапазон MMIO-адресов. В одном варианте осуществления, логические схемы обработки определяют диапазон I/O-адресов для виртуального I/O-устройства посредством получения диапазона I/O-адресов от SMI-обработчика. В другом варианте осуществления, логические схемы обработки определяют диапазон I/O-адресов для виртуального I/O-устройства посредством получения (например, с помощью "синтаксического анализа) диапазона I/O-адресов для устройства, совместимого с PCI, из таблицы усовершенствованного интерфейса конфигурации и электропитания (ACPI). ACPI-спецификация может обеспечить открытый стандарт для конфигурации устройства и управления электропитанием посредством операционной системы. ACPI-таблица может включать в себя информацию о ресурсах устройств для устройства, доступных в системе. Информация о ресурсах устройства для устройства может включать в себя имя устройства, диапазон MMIO-адресов, диапазон I/O-адресов, механизм прерываний, устройство, связанное с данным устройством, и т.д.
Фиг. 6 является блок-схемой способа 600 использования виртуального устройства согласно одному варианту осуществления данного раскрытия. Способ 600 может быть выполнен логическими схемами обработки, которые могут содержать аппаратное обеспечение (например, схемы, специализированные логические схемы, программируемые логические схемы, микрокод и т.д.), программным обеспечением (таким как команды, выполняемые на устройстве обработки), программно-аппаратными средствами или их комбинацией. В одном варианте осуществления, способ 600 выполняется устройством 100, описанным со ссылкой на фиг. 1.
В блоке 605, логические схемы обработки принимают запрос доступа для I/O-адреса. В одном варианте осуществления, I/O-адресом является MMIO-адрес. В одном варианте осуществления, запрос доступа для I/O-адреса принимается от программного обеспечения.
В блоке 610, логические схемы обработки определяют, находится ли I/O-адрес в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством. Логические схемы обработки могут определить, находится ли I/O-адрес в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством, посредством сравнения I/O-адреса с диапазоном адресов для каждого виртуального I/O-устройства в вычислительной системе. Если логические схемы обработки определяют, что I/O-адрес не находится в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством, способ 600 завершается. Если логические схемы обработки определяют, что I/O-адрес находится в пределах диапазона адресов виртуального I/O-устройства, способ 600 переходит к блоку 615. В одном варианте осуществления, блок 610 является необязательным и не выполняется. В этом варианте осуществления, определение, находится ли I/O-адрес в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством, выполняется SMI-обработчиком.
В блоке 615, логические схемы обработки определяют PCI-адрес PCI-устройства, соответствующий I/O-адресу. Логические схемы обработки могут определить PCI-адрес PCI-устройства, соответствующий I/O-адресу, посредством получения PCI-адреса для I/O-адреса от SMI-обработчика. В одном варианте осуществления, блок 615 является необязательным, если логические схемы обработки не поддерживают ловушку области памяти. В этом варианте осуществления, логические схемы обработки получат доступ к I/O-адресу для виртуального I/O-устройства, который был ранее определен для виртуального I/O-устройства, которое показывает тот же самый I/O-адрес, что и I/O-адрес PCI-устройства.
Например, если система поддерживает ловушку в области памяти, то логические схемы обработки запускают SMI, когда доступ происходит в контролируемом диапазоне адресов виртуального устройства, которое является виртуальным I/O-устройством. В этом примере, SMI-обработчик будет запущен и определит, находится ли I/O-адрес в пределах диапазона адресов виртуального устройства, и осуществит преобразование из I/O-адреса в PCI-адрес.
Фиг. 7 является блок-схемой SoC 700, которая включает в себя логические схемы построения виртуального PCI-устройства и виртуального MMIO-устройства в соответствии с одним вариантом осуществления данного раскрытия. Пунктирные прямоугольники представляют необязательные свойства более усовершенствованных SoCs. На фиг. 7, блок (блоки) 712 межсоединения связаны: с прикладным процессором 720, который включает в себя множество из одного или нескольких ядер 702A-N и совместно используемый блок (блоки) 706 кэш-памяти; с блоком 710 системного агента; с блоком (блоками) 716 контроллера шины; блоком (блоками) 714 контроллера интегрированной памяти; с множеством из одного или нескольких медиапроцессоров 718, которые могут включать в себя логические схемы 708 интегрированной графики, процессор 724 изображений для обеспечения функциональности фото- и/или видеокамеры, аудиопроцессор 726 для обеспечения аппаратного ускорения обработки аудиоданных и видеопроцессор 728 для обеспечения ускорения кодирования/декодирования видеоданных; с блоком 730 статического оперативного запоминающего устройства (SRAM); с блоком 732 прямого доступа к памяти (DMA); и с блоком 740 отображения для связи с одним или несколькими внешними дисплеями.
Иерархия памяти включает в себя один или несколько уровней кэш-памяти в пределах упомянутых ядер, множество из одного или нескольких совместно используемых блоков 706 кэш-памяти и внешнюю память (не показана), связанную с множеством блоков 714 контроллера интегрированной памяти. Множество совместно используемых блоков 706 кэш-памяти может включать в себя один или несколько кэш среднего уровня, таких как уровень 2 (L2), уровень 3 (L3), уровень 4 (L4) или другие уровни кэш-памяти, кэш последнего уровня (LLC) и/или их комбинацию.
В некоторых вариантах осуществления, одно или несколько из ядер 702A-N выполнены с возможностью многопотоковой обработки.
Системный агент 710 включает в себя компоненты, координирующие и управляющие ядрами 702A-N. Блок 710 системного агента может включать в себя, например, блок управления электропитанием (PCU) и блок отображения. PCU может представлять собой или может включать в себя логические схемы и компоненты, необходимые для регулировки состояния электропитания ядер 702A-N и логических схем 708 интегрированной графики. Блок отображения предназначен для управления одним или несколькими внешними подключенными дисплеями.
Ядра 702A-N могут быть однородными или неоднородными в отношении архитектуры и/или набора команд. Например, некоторые из ядер 702A-N могут быть упорядочены, тогда как другие является неупорядоченными. В качестве другого примера, два или несколько из ядер 702A-N могут быть выполнены с возможностью исполнения одного и того же набора команд, тогда как другие могут быть выполнены с возможностью исполнять лишь некоторое подмножество этого набора команд или другой набор команд.
Прикладной процессор 720 может быть универсальным процессором, таким как процессоры Core™ i3, i5, i7, 2 Duo и Quad, Xeon™, Itanium™, XScale™ или StrongARM™, которые доступны от корпорации Intel, Santa Clara, Calif. Альтернативно, прикладной процессор 720 может поставляться другой компанией, такой как ARM Holdings, Ltd, MIPS, и т.д. Прикладной процессор 720 может быть специализированным процессором, таким как, например, сетевой процессор или процессор связи, механизм сжатия, графический процессор, сопроцессор, встроенный процессор и т.п. Прикладной процессор 720 может быть реализован на одной или нескольких микросхемах. Прикладной процессор 720 может быть частью и/или может быть реализован на одной или нескольких подложках, использующих любую из некоторого количества технологий производства, таких как, например, BiCMOS, CMOS или MOS.
В одном варианте осуществления, прикладной процессор 720 также включает в себя логические схемы для реализации построения виртуального PCI-устройства и виртуального MMIO-устройства согласно вариантам осуществления данного изобретения. Например, прикладной процессор 720 может включать в себя логические схемы для исполнения модуля 125 виртуального устройства, описанного относительно фиг. 1, где этот модуль виртуального устройства может построить виртуальное устройство на основе запроса для периферийного устройства. Этим виртуальным устройством может быть виртуальное PCI-устройство или виртуальное MMIO-устройство.
Фиг. 8 является блок-схемой варианта осуществления конструкции системы на кристалле (SOC) в соответствии с данным раскрытием существа изобретения. В качестве конкретного иллюстративного примера, SOC 800 включена в оборудование пользователя (UE). В одном варианте осуществления, UE относится к любому устройству, подлежащему использованию конечным пользователем для связи, такому как карманный телефон, смартфон, планшет, сверхтонкий ноутбук, ноутбук с широкополосным адаптером или любое другое подобное устройство связи. Часто UE подключается к базовой станции или узлу, который потенциально соответствует по сути мобильной станции (MS) в GSM-сети.
Здесь, SOC 800 включает в себя 2 ядра - 806 и 807. Ядра 806 и 807 могут соответствовать архитектуре набора команд, такой как у основанного на Intel Architecture Core™ процессоре, процессоре корпорации Advanced Micro Devices, основанном на MIPS процессоре, конструкция процессора основанная на ARM, или их потребителе, а также их лицензиатов или лиц или организаций, внедряющих технические новинки. Ядра 806 и 807 связаны с управлением 808 кэш-памятью, которое связано с блоком 809 интерфейса шины и L2-кэш 810 для связывания с другими частями системы 800. Межсоединение 810 включает в себя межсоединение на кристалле, такое как IOSF, AMBA или другое межсоединение, описанное выше, которое потенциально реализует один или несколько аспектов описанного раскрытия.
Интерфейс 810 обеспечивает каналы связи с другими компонентами, такими как модуль идентификации абонента (SIM) 830 для сопряжения с SIM картой, - постоянное запоминающее устройство 835 загрузки для сохранения загрузочного кода для исполнения ядрами 806 и 807 для инициализации и загрузки SOC 800, SDRAM контроллер 840 для сопряжения с внешней памятью (например, DRAM 860), контроллер 845 флэш-памяти для сопряжения с энергонезависимой памятью (например, флэш-памятью 865), периферийное управление 850 (например, последовательный периферийный интерфейс) для сопряжения с периферийными устройствами, видеокодеки 820 и видеоинтерфейс 825 для отображения и приема ввода (например, сенсорного ввода), GPU 815 для выполнения связанных с графикой вычислений и т.д. Любые из этих интерфейсов могут включать в себя аспекты данного раскрытия, описанного здесь.
В одном варианте осуществления, ядра 806 и 807 также включают в себя логические схемы реализации построения виртуального PCI-устройства и виртуального MMIO-устройства согласно вариантам осуществления данного изобретения. Например, ядра 806 и 807 могут включать в себя логические схемы исполнения модуля виртуального устройства, такого как модуль 125 виртуального устройства, описанный относительно фиг. 1, где этот модуль виртуального устройства может построить виртуальное устройство на основе запроса для периферийного устройства, такого как DRAM 860, флэш-память 865 и т.д. Виртуальным устройством может быть виртуальное PCI-устройство или виртуальное MMIO-устройство.
Кроме того, система 800 иллюстрирует периферийные устройства для связи, такие как модуль 870 Bluetooth, 3G модем 875, GPS 880 и WiFi 885. Отметим, что, как утверждалось выше, UE включает в себя радиоблок для связи. В результате, не все эти периферийные модули связи являются необходимыми. Однако, в UE, должна быть включена некоторая форма радиоблока для внешней связи.
Фиг. 9 иллюстрирует схематичное представление машины в примерной форме компьютерной системы 900, в пределах которой может исполняться набор команд для вызывания выполнения машиной любой одной или нескольких из методологий, обсуждаемых здесь. В альтернативных вариантах осуществления, эта машина может быть подключена (например, по сети) к другим машинам в LAN, интранет, экстранет или Интернет. Машина может работать как серверное или клиентское устройство в сетевой среде «клиент-сервер» или как одноранговая машина в одноранговой (или распределенной) сетевой среде. Машиной может быть персональный компьютер (PC), планшетный PC, телевизионная приставка (STB), карманный персональный компьютер (PDA), сотовый телефон, веб-приспособление, сервер, сетевой маршрутизатор, коммутатор или мост или любая машина, способная исполнять набор команд (последовательный или иной), который определяет действия, которые будут предприняты этой машиной. Далее, хотя показана лишь одна машина, термин «машина» будет принят также для включения любой совокупности машин, которые индивидуально или совместно исполняют набор (или множество наборов) команд для выполнения любой одной или нескольких из методологий, обсуждаемых здесь.
Компьютерная система 900 включает в себя устройство 902 обработки, основную память 904 (например, постоянное запоминающее устройство (ROM), флэш-память, динамическое оперативное запоминающее устройство (DRAM) (такое как синхронное DRAM (SDRAM) или DRAM (RDRAM) и т.д.), статическую память 906 (например, флэш-память, статическое оперативное запоминающее устройство (SRAM) и т.д.) и устройство 918 хранения данных, которые связываются друг с другом через шину 930.
Устройство 902 обработки представляет собой одно или несколько универсальных устройств обработки, таких как микропроцессор, центральный процессор и т.п. Более конкретно, устройством обработки может быть микропроцессор вычислений со сложным набором команд (CISC), микропроцессор вычислений с сокращенным набором команд (RISC), микропроцессор с командными словами очень большой длины (VLIW) или процессор, реализующий другие наборы команд, или процессоры, реализующие комбинацию наборов команд. Устройством 902 обработки может быть также одно или несколько универсальных устройств обработки, таких как интегральная схема прикладной ориентации (ASIC), программируемая пользователем вентильная матрица (FPGA), процессор цифровых сигналов (DSP), сетевой процессор и т.п. В одном варианте осуществления устройство 902 обработки может включать в себя одно или несколько ядер обработки. Устройство 902 обработки выполнено с возможностью исполнения логических схем 926 обработки для выполнения операций и этапов, обсуждаемых здесь. В одном варианте осуществления, устройство 902 обработки является таким же, как и устройство 100 обработки, описанное относительно фиг. 1, которое реализует общий способ построения виртуального PCI-устройства и виртуального MMIO-устройства. Например, устройство 902 обработки может включать в себя модуль виртуального устройства, такой как модуль 125 виртуального устройства фиг. 1.
Компьютерная система 900 может дополнительно включать в себя устройство 908 сетевого интерфейса, коммуникативно связанное с сетью 920. Компьютерная система 900 может также включать в себя видеодисплей 910 (например, жидкокристаллический дисплей (LCD) или электронно-лучевую трубку (CRT)), устройство 912 текстового ввода (например, клавиатуру), устройство 914 управления курсором (например, мышь) и устройство 916 генерации сигналов (например, громкоговоритель). Кроме того, компьютерная система 900 может включать в себя графический процессор 922, видеопроцессор 928 и аудиопроцессор 932.
Устройство 918 хранения данных может включать в себя машиночитаемый носитель 924 данных, на котором хранится программное обеспечение 926, реализующее любую одну или несколько из методологий функций, описанных здесь, таких как реализация общего способа построения виртуального PCI-устройства и виртуального MMIO-устройства, описанная выше. Программное обеспечение 926 может также находиться, полностью или, по меньшей мере, частично, в пределах основной памяти 904 в качестве команд 926 и/или в пределах устройства 902 обработки в качестве логических схем 926 обработки во время их исполнения компьютерной системой 900; причем основная память 904 и устройство 902 обработки также представляют собой машинодоступные носители данных.
Машиночитаемый носитель 924 данных может также использоваться для хранения команд 926, реализующих общий способ построения виртуального PCI-устройства и виртуального MMIO-устройства, такой, который описан относительно устройства 100 на фиг. 1, и/или библиотеки программного обеспечения, содержащей способы, которые вызывают вышеупомянутые приложения. Хотя машиночитаемый носитель 924 данных показан в примерном варианте осуществления как единственный носитель, термин «машинодоступный носитель данных» следует рассматривать, как включающий в себя один носитель или множество носителей (например, централизованная или распределенная база данных и/или связанные с ней кэш и серверы), которые хранят один или несколько наборов команд. Термин «машиночитаемый носитель данных» также следует рассматривать, как включающий в себя любой носитель, который выполнен с возможностью хранить, кодировать или нести набор команд для исполнения машиной, и который вызывает выполнение машиной любой одной или нескольких из методологий данного раскрытия. Термин «машиночитаемый носитель данных» следует, соответственно, рассматривать, как включающий в себя, но без ограничения этим, твердотельных запоминающих устройств и оптических и магнитных носителей.
Следующие примеры относятся к дополнительным вариантам осуществления.
Пример 1 направлен на устройство для построения виртуального устройства, содержащее: 1) память; и 2) устройство обработки, коммуникативно связанное с этой памятью, причем устройство обработки выполнено с возможностью приема запроса межсоединения периферийных компонентов (PCI) для устройства, совместимого с PCI, и построения виртуального устройства на основе этого устройства, совместимого с PCI, при этом виртуальное устройство построено, по меньшей мере, как одно из виртуального PCI-устройства или виртуального устройства ввода/вывода (I/O).
В примере 2, устройство, совместимое с PCI, примера 1 может быть, в случае необходимости, связано с драйвером программного обеспечения, в котором драйвер программного обеспечения должен передать совместимый с PCI запрос доступа в виртуальное устройство, в котором виртуальное устройство представляет этот совместимый с PCI запрос доступа в функциональный блок, и в котором функциональный блок связывается с этим устройством, совместимым с PCI, на основе этого совместимого с PCI запроса доступа.
В примере 3, операционная система должна быть, в случае необходимости, загружена из устройства, совместимого с PCI, с использованием виртуального устройства примера 1.
В примере 4, для построения виртуального устройства на основе устройства, совместимого с PCI, устройство обработки примера 1 может, в случае необходимости, после определения того, что это устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI, построить виртуальное устройство как виртуальное PCI-устройство; и, после определения, что это устройство, совместимое с PCI, связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI, построить виртуальное устройство как виртуальное I/O-устройство.
В примере 5, для построения виртуального устройства, как виртуального PCI-устройства, устройство обработки примера 4 может, в случае необходимости, определить идентификатор поставщика для виртуального устройства, определить информацию об устройстве для виртуального устройства; и определить информацию об адресах для виртуального устройства.
В примере 6, устройство обработки примера 5 может, в случае необходимости, в качестве реакции на запрос для устройства, совместимого с PCI, послать идентификатор поставщика для виртуального устройства, информацию об устройстве для виртуального устройства и информацию об адресах для этого устройства.
В примере 7, для построения виртуального устройства как виртуального I/O-устройства, устройство обработки примера 4 может, в случае необходимости, игнорировать запрос PCI-нумерации для устройства, совместимого с PCI; и определить диапазон I/O-адресов для виртуального устройства.
В примере 8, устройство обработки примера 1 должно, в случае необходимости, получить доступ к памяти для I/O-адреса; определить, связан ли I/O-адрес с виртуальным устройством, когда виртуальное устройство построено как виртуальное I/O-устройство; и, после определения, что I/O-адрес связан с виртуальным устройством, когда виртуальное устройство построено как виртуальное I/O-устройство, определить PCI-адрес, связанный с PCI-устройством, соответствующий I/O-адресу.
В примере 9, виртуальное I/O-устройство примера 1 может, в случае необходимости, содержать виртуальное устройство ввода/вывода с отображением (портов) на оперативное запоминающее устройство (MMIO).
В примере 10, запрос примера 1 может, в случае необходимости, содержать запрос PCI-нумерации для устройства, совместимого с PCI.
Различные варианты осуществления могут иметь различные комбинации рабочих свойств, описанных выше. Например, все необязательные свойства устройства, описанного выше, могут быть также реализованы относительно способа или процесса, описанного здесь, и специфика в примерах может использоваться везде в одном или нескольких вариантах осуществления.
Пример 11 направлен на способ построения виртуального устройства, предусматривающий 1) прием запроса межсоединения периферийных компонентов (PCI) для устройства, совместимого с PCI; и 2) построение виртуального устройства на основе этого устройства, совместимого с PCI, в котором виртуальное устройство строится, по меньшей мере как одно из виртуального PCI-устройства или виртуального устройства ввода/вывода (I/O).
В примере 12, устройство, совместимое с PCI, примера 11 связано с драйвером программного обеспечения, в котором драйвер программного обеспечения должен передать совместимый с PCI запрос доступа в виртуальное устройство, в котором виртуальное устройство представляет этот совместимый с PCI запрос доступа в функциональный блок, и где функциональный блок связывается с этим устройством, совместимым с PCI, на основе этого совместимого с PCI запроса доступа.
В примере 13, операционная система должна, в случае необходимости, загружаться из устройства, совместимого с PCI, с использованием виртуального устройства примера 11.
В примере 14, построение виртуального устройства на основе устройства, совместимого с PCI, примера 11 может, в случае необходимости, содержать, после определения, что это устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI, построение виртуального устройства как виртуального PCI-устройства; и после определения, что это устройство, совместимое с PCI, связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI, построение виртуального устройства как виртуального I/O-устройства.
В примере 15, построение виртуального устройства как виртуального PCI-устройства примера 14 может, в случае необходимости, содержать определение идентификатора поставщика для виртуального устройства; определение информации об устройстве для виртуального устройства; и определение информации об адресах для виртуального устройства.
В примере 16, предмет изобретения примера 15 может, в случае необходимости, содержать, в качестве реакции на запрос для устройства, совместимого с PCI, посылку идентификатора поставщика для виртуального устройства, информации об устройстве для виртуального устройства и информации об адресах для этого устройства.
В примере 17, построение виртуального устройства как виртуального I/O-устройства примера 14 может, в случае необходимости, содержать игнорирование запроса PCI-нумерации для устройства, совместимого с PCI; и определение диапазона I/O-адресов для виртуального устройства.
В примере 18, предмет изобретения примера 11 может, в случае необходимости, содержать прием доступа к памяти для I/O-адреса; определение, связан ли этот I/O-адрес с виртуальным устройством, когда виртуальное устройство строится как виртуальное I/O-устройство; и, после определения, что этот I/O-адрес связан с виртуальным устройством, когда виртуальное устройство строится как виртуальное I/O-устройство, определение PCI-адреса, связанного с PCI-устройством, соответствующего этому I/O-адресу.
В примере 19, виртуальное I/O-устройство примера 11 может, в случае необходимости, содержать виртуальное устройство ввода/вывода с отображением на оперативное запоминающее устройство (MMIO).
В примере 20, запрос примера 11 может, в случае необходимости, содержать запрос PCI-нумерации для устройства, совместимого с PCI.
Различные варианты осуществления могут иметь различные комбинации рабочих особенностей, описанных выше. Например, все необязательные особенности способа, описанного выше, могут быть также реализованы относительно стационарного, машиночитаемого носителя данных. Специфика в примерах может использоваться везде в одном или нескольких вариантах осуществления.
Пример 21 направлен на стационарный, машиночитаемый носитель данных, включающий в себя данные, которые, при доступе к ним посредством устройства обработки, вызывают выполнение устройством обработки способа примеров 11-20.
Пример 22 направлен на устройство для построения виртуального устройства, содержащее: 1) память; и 2) вычислительную систему, связанную с этой памятью, где вычислительная система выполнена с возможностью выполнения способа по любому из примеров 11-20.
В примере 23, вычислительная система примера 22 может, в случае необходимости, содержать интерфейс для приема запроса межсоединения периферийных компонентов (PCI) для устройства, совместимого с PCI; и блок обработки виртуального устройства, связанный с этим интерфейсом.
Пример 24 направлен на вычислительную систему для построения виртуального устройства, содержащую: интерфейс для приема запроса межсоединения периферийных компонентов (PCI) для устройства, совместимого с PCI; и блок обработки виртуального устройства, связанный с этим интерфейсом, где блок обработки виртуального устройства должен построить виртуальное устройство на основе этого устройства, совместимого с PCI, где виртуальное устройство строится, как одно из виртуального PCI-устройства или виртуального устройства ввода/вывода (I/O).
В примере 25, блок обработки виртуального устройства примера 24 может, в случае необходимости, содержать: блок определения виртуального устройства для определения, связано ли устройство, совместимое с PCI, с функциональным блоком, который не является совместимым с PCI, и для определения, связано ли это устройство, совместимое с PCI, с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI; блок создания виртуального PCI-устройства для построения виртуального устройства как виртуального PCI-устройства, если это устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI; и блок создания виртуального I/O-устройства для построения виртуального устройства как виртуального I/O-устройства, если это устройство, совместимое с PCI, связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI.
В примере 26, для построения виртуального устройства как виртуального PCI-устройства, блок создания виртуального PCI-устройства примера 25 должен, в случае необходимости, определить идентификатор поставщика для виртуального устройства; определить информацию об устройстве для виртуального устройства; и определить информацию об адресах для виртуального устройства.
В примере 27, для построения виртуального устройства как виртуального I/O-устройства, блок создания виртуального I/O-устройства примера 25 должен, в случае необходимости, игнорировать запрос PCI-нумерации для устройства, совместимого с PCI; и определить диапазон I/O-адресов для виртуального устройства.
В примере 28, блок обработки виртуального устройства примера 24 может, в случае необходимости, послать идентификатор поставщика для виртуального устройства, информацию об устройстве для виртуального устройства и информацию об адресах для этого устройства в качестве реакции на запрос для устройства, совместимого с PCI.
В примере 29, блок обработки виртуального устройства примера 24 может, в случае необходимости, содержать блок преобразования адреса виртуального I/O-устройства для приема доступа к памяти для I/O-адреса, для определения, связан ли этот I/O-адрес с виртуальным устройством, когда виртуальное устройство строится как виртуальное I/O-устройство, и, после определения, что этот I/O-адрес связан с виртуальным устройством, когда виртуальное устройство строится как виртуальное I/O-устройство, для определения PCI-адреса, связанного с PCI-устройством, соответствующим этому I/O-адресу.
Пример 30 направлен на стационарный машиночитаемый носитель данных, включающий в себя команды, которые, при их исполнении вычислительной системой, вызывают выполнение вычислительной системой операций, содержащих: 1) прием запроса межсоединения периферийных компонентов (PCI) для устройства, совместимого с PCI; и 2) построение виртуального устройства на основе этого устройства, совместимого с PCI, при этом виртуальное устройство строится, по меньшей мере, как одно из виртуального PCI-устройства или виртуального устройства ввода/вывода (I/O).
В примере 31, где устройство, совместимое с PCI, примера 30 может быть, в случае необходимости, связано с драйвером программного обеспечения, где драйвер программного обеспечения может, в случае необходимости, передать совместимый с PCI запрос доступа к виртуальному устройству, при этом виртуальное устройство примера 30 может, в случае необходимости, обеспечить этот совместимый с PCI запрос доступа для функционального блока, при этом функциональный блок может, в случае необходимости, связываться с этим устройством, совместимым с PCI, на основе этого совместимого с PCI запроса доступа.
В примере 32, операционная система должна загружаться с устройства, совместимого с PCI, с использованием виртуального устройства примера 30.
В примере 33, в котором построение виртуального устройства на основе устройства, совместимого с PCI, примера 30 может, в случае необходимости, содержать: после определения того, что это устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI, построение виртуального устройства как виртуального PCI-устройства; и, после определения того, что это устройство, совместимое с PCI, связано с операционной системой, подлежащей загрузке с этого устройства, совместимого с PCI, построение виртуального устройства как виртуального I/O-устройства.
В примере 34, построение виртуального устройства как виртуального PCI-устройства примера 33 может, в случае необходимости, содержать определение идентификатора поставщика для виртуального устройства; определение информации об устройстве для виртуального устройства; и определение информации об адресах для виртуального устройства.
В примере 35, построение виртуального устройства как виртуального PCI-устройства примера 34 может, в случае необходимости, содержать посылку идентификатора поставщика для виртуального устройства, информации об устройстве для виртуального устройства и информации об адресах для этого устройства в качестве реакции на запрос для устройства, совместимого с PCI.
В примере 36, построение виртуального устройства как виртуального I/O-устройства примера 33 может, в случае необходимости, содержать игнорирование запроса PCI-нумерации для устройства, совместимого с PCI; и определение диапазона I/O-адресов для виртуального устройства.
В примере 37, предмет изобретения примера 30 может, в случае необходимости, содержать: прием доступа к памяти для I/O-адреса; определение, связан ли этот I/O-адрес с виртуальным устройством, когда виртуальное устройство строится как виртуальное I/O-устройство; и, после определения, что этот I/O-адрес связан с виртуальным устройством, когда виртуальное устройство строится как виртуальное I/O-устройство, определение PCI-адреса, связанного с PCI-устройством, соответствующего этому I/O-адресу.
Пример 38 направлен на устройство для построения виртуального устройства, содержащее: 1) интерфейс для приема запроса межсоединения периферийных компонентов (PCI) для устройства, совместимого с PCI; и 2) средство построения виртуального устройства на основе этого устройства, совместимого с PCI, в котором виртуальное устройство строится, по меньшей мере, как одно из виртуального PCI-устройства или виртуального устройства ввода/вывода (I/O).
В примере 39, средство построения виртуального устройства на основе устройства, совместимого с PCI, примера 38 может, в случае необходимости, содержать: средство определения, связано ли это устройство, совместимое с PCI, с функциональным блоком, который не является совместимым с PCI; средство построения виртуального устройства как виртуального PCI-устройства после определения, что это устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI; средство определения, связано ли это устройство, совместимое с PCI, с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI; и средство построения виртуального устройства как виртуального I/O-устройства после определения, что это устройство, совместимое с PCI, связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI.
В приведенном выше описании изложены многочисленные подробности. Специалисту в данной области техники будет ясно, однако, что данное раскрытие существа изобретения может использоваться на практике без этих конкретных подробностей. В некоторых случаях, хорошо известные структуры и устройства показаны в форме блок-схем, а не в подробностях, чтобы избежать усложнения данного раскрытия.
Некоторые части подробного описания представлены как алгоритмы и символические представления операций с битами данных в пределах компьютерной памяти. Эти алгоритмические описания и представления являются средствами, используемыми специалистами в области обработки данных для наиболее эффективной передачи сущности их работы другим специалистам в данной области техники. Алгоритм здесь и, в общем, понимается как непротиворечивая последовательность операций, приводящая к желаемому результату. Этими операциями являются операции, требующие физических манипуляций с физическими величинами. Обычно, хотя и необязательно, эти величины принимают форму электрических или магнитных сигналов, которые можно хранить, передавать, комбинировать, сравнивать или которыми можно манипулировать иным образом. Иногда удобно, главным образом, по причинам общего использования, ссылаться на эти сигналы как на биты, значения, элементы, символы, знаки, термины, числа и т.п. Блоки, описанные здесь, могут быть аппаратным обеспечением, программным обеспечением, программно-аппаратными средствами или их комбинацией.
Следует помнить, однако, что все эти и подобные им термины должны быть связаны с соответствующими физическими величинами и являются просто удобными метками, приложенными к этим величинам. Если не оговорено особо, как понятно из следующего обсуждения, следует понимать, что во всем описании, использование таких терминов, как «посылка», «прием», «генерация», «определение», «создание», «преобразование», « игнорирование», «сравнение» и т.п., относятся к действию и процессам компьютерной системы или подобного ей электронного вычислительного устройства, которое манипулирует и преобразует данные, представленные как физические величины в пределах запоминающего устройства или регистров компьютерной системы или других таких устройств хранения, передачи или отображения информации.
Данное раскрытие существа изобретения также относится к устройству для выполнения операций, описанных здесь. Это устройство может быть специально сконструировано для требуемых целей, или оно может содержать универсальный компьютер, избирательно активируемый или реконфигурируемый посредством компьютерной программы, хранимой в этом компьютере. Такая компьютерная программа может храниться на машиночитаемом носителе данных, таком как, но без ограничения этим, любой тип диска, включающего в себя гибкие-диски, оптические диски, CD-ROM, и магнитно-оптические диски, постоянные запоминающие устройства (ROM), оперативные запоминающие устройства (RAM), EPROM, EEPROM, магнитные или оптические карты или любой тип носителей, подходящих для хранения электронных команд, каждый из которых связан с шиной компьютерной системы.
Алгоритмы и отображения, представленные здесь, не связаны, собственно, с каким-либо конкретным компьютером или другим устройством. Различные универсальные системы могут использоваться с программами в соответствии с представленным здесь описанием, или может оказаться удобным сконструировать более специализированное устройство для выполнения этих операций. Требуемая структура для разнообразия этих систем будет понятна из описания, приведенного ниже. Кроме того, данные варианты осуществления не описаны со ссылкой на какой-либо конкретный язык программирования. Ясно, что разные языки программирования могут использоваться для реализации доктрин вариантов осуществления, описанных здесь.
Данное раскрытие существа изобретения может быть представлено как компьютерный программный продукт, или программное обеспечение, которое может включать в себя машиночитаемый носитель, имеющий хранимые на нем команды, которые могут использоваться для программирования компьютерной системы (или других электронных устройств) для выполнения процесса согласно данному раскрытию существа изобретения. Машиночитаемый носитель включает в себя любую технологию для хранения или передачи информации в форме, считываемой машиной (например, компьютером). Например, машиночитаемый (например, считываемый компьютером) носитель включает в себя машиночитаемый (например, считываемый компьютером) носитель данных (например, постоянное запоминающее устройство ("ROM"), оперативное запоминающее устройство ("RAM"), носители данных на магнитных дисках, оптические носители данных, устройства флэш-памяти и т.д.) и т.д.
В то время как многие изменения и модификации данного раскрытия без сомнения будут очевидными для специалиста обычной квалификации в данной области техники после прочтения изложенного выше описания, следует понимать, что любой конкретный вариант осуществления, показанный и описанный как иллюстрация, ни в коей мере не предназначен для ограничения. Следовательно, ссылки на подробности различных вариантов осуществления не предназначены для ограничения объема формулы изобретения, которая сама по себе излагает свойства, рассматриваемые как раскрытие.