KR102111229B1 - 에뮬레이션된 엔드포인트 구성 - Google Patents

에뮬레이션된 엔드포인트 구성 Download PDF

Info

Publication number
KR102111229B1
KR102111229B1 KR1020187034414A KR20187034414A KR102111229B1 KR 102111229 B1 KR102111229 B1 KR 102111229B1 KR 1020187034414 A KR1020187034414 A KR 1020187034414A KR 20187034414 A KR20187034414 A KR 20187034414A KR 102111229 B1 KR102111229 B1 KR 102111229B1
Authority
KR
South Korea
Prior art keywords
configuration
emulated
function
peripheral device
transaction
Prior art date
Application number
KR1020187034414A
Other languages
English (en)
Other versions
KR20180129998A (ko
Inventor
나페아 브샤라
아디 하부샤
가이 나키블리
조릭 마출스키
Original Assignee
아마존 테크놀로지스, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아마존 테크놀로지스, 인크. filed Critical 아마존 테크놀로지스, 인크.
Publication of KR20180129998A publication Critical patent/KR20180129998A/ko
Application granted granted Critical
Publication of KR102111229B1 publication Critical patent/KR102111229B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/105Program control for peripheral devices where the programme performs an input/output emulation function
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0058Bus-related hardware virtualisation

Abstract

주변 장치에 의해 구성 공간을 에뮬레이션하는 기술은, 구성 액세스 요청을 수신하는 것, 구성 액세스 요청이 주변 장치의 네이티브 구성 공간이 아닌 구성 공간에 대한 것이라고 결정하는 것, 및 에뮬레이션된 구성 공간으로부터 에뮬레이션된 구성을 검색하는 것을 포함할 수도 있다. 이어서, 에뮬레이션된 구성을 이용하여 구성 액세스 요청을 서비스할 수 있다.

Description

에뮬레이션된 엔드포인트 구성{EMULATED ENDPOINT CONFIGURATION}
컴퓨팅 시스템은 여러 주변 장치들을 포함할 수도 있다. 주변 장치들은 컴퓨팅 시스템의 기능을 확장, 개조, 및/또는 수정할 수도 있다. 주변 장치는 하나 이상의 기능을 구현할 수도 있다. 예를 들어, 주변 장치는, 네트워크 접속 기능을 제공하는 네트워크 인터페이스 카드, 또는 데이터 저장 기능을 제공하는 대용량 저장 장치일 수 있다.
일부 주변 장치들은 주변 장치의 거동을 제어하는 데 사용되는 구성 레지스터들을 포함할 수도 있다. 예를 들어, 주변 장치가 PCI(Peripheral Component Interconnect) 호환 장치인 경우, 주변 장치는 일련의 PCI 구성 공간 레지스터들을 가질 수도 있다. 구성 레지스터들은, 주변 장치의 성능을 나타내도록 판독될 수 있는 필드들을 포함할 수도 있으며, 주변 장치의 기능을 활성화, 비활성화, 또는 변경하도록 기입될 수 있는 필드들을 포함할 수도 있다. 일반적으로, 구성 레지스터는 물리적 하드웨어 레지스터로서 구현되며, 필드는 주변 장치의 특정 성능과 기능에 따라 정의되고 하드코딩된다. 따라서, 일단 제조되면, 주변 장치의 구성 레지스터의 정의는 통상적으로 고정되어 변경될 수 없다.
본 개시 내용에 따른 다양한 실시예를 도면을 참조하여 설명하며, 도면에서:
도 1은 일부 실시예에 따라 다수의 주변 장치를 포함하는 컴퓨팅 시스템의 일례를 도시한 도면;
도 2는 일부 실시예에 따라 에뮬레이션된 구성 공간(emulated configuration space)을 갖는 주변 장치의 블록도를 도시한 도면;
도 3은 일부 실시예에 따라 에뮬레이션된 구성 공간을 갖는 주변 장치의 블록도를 도시한 도면;
도 4는 일부 실시예에 따라 구성 판독 트랜잭션을 서비스하는 주변 장치의 일례를 도시한 도면;
도 5는 일부 실시예에 따라 구성 기입 요청을 서비스하는 주변 장치의 일례를 도시한 도면;
도 6은 일부 실시예에 따라 단일 루트 입력/출력 가상화(SR-IOV)를 구현하도록 구성된 주변 장치의 블록도를 도시한 도면;
도 7은 구성 액세스 요청을 서비스하기 위한 흐름도를 도시한 도면;
도 8은 일부 실시예에 따라 구성 레지스터를 판독하도록 구성 액세스 요청을 서비스하기 위한 프로세스의 일례를 도시한 도면;
도 9는 일부 실시예에 따라 구성 레지스터를 기입하도록 구성 액세스 요청을 서비스하기 위한 프로세스의 일례를 도시한 도면;
도 10은 일부 실시예에 따라 하나 이상의 네트워크를 통해 접속된 하나 이상의 서비스 제공자 컴퓨터 및/또는 사용자 장치를 포함하는 본 명세서에서 설명하는 특징부와 시스템에 대한 아키텍처의 일례를 도시한 도면;
도 11은 일부 실시예에 따라 양태들을 구현하기 위한 컴퓨팅 시스템의 환경의 일례의 양태들을 도시한 도면.
다음에 따르는 설명에서는 다양한 실시예를 설명한다. 설명을 위해, 실시예들을 완전히 이해하도록 특정 구성 및 세부 사항을 설명한다. 그러나, 실시예들이 특정 세부 사항 없이 실시될 수도 있다는 점도 통상의 기술자에게 명백할 것이다. 또한, 공지된 특징부들은, 설명되는 실시예들이 모호해지지 않도록 생략되거나 간략화될 수도 있다.
컴퓨팅 시스템은 다수의 주변 장치를 포함할 수도 있다. 주변 장치들은, 컴퓨팅 시스템의 기능을 확장, 적응, 및/또는 변경할 수도 있다. 예를 들어, 주변 장치들은 컴퓨팅 시스템 등에 저장, 네트워크 접속, 및/또는 오디오 및 비디오 지원을 제공할 수도 있다. 주변 장치들은, 통상적으로 하나 이상의 버스를 통해 컴퓨팅 시스템과 통신한다. 버스에서의 데이터 전송은 버스 프로토콜에 의해 정의될 수 있다. 버스 프로토콜의 예로는, 특히, 버스 프로토콜들의 PCI(Peripheral Component Interconnect) 군(예를 들어, (PCI, PCI-확장형(PCI-X), PCI 익스프레스(PCIe), 가속 그래픽 포트(AGP 등의 PCI 유도체 등)이 있을 수도 있다.
본 명세서에 기술된 기술들은, 주변 장치의 구성 공간의 일부 또는 전부를 에뮬레이션하는 구성요소 및 방법을 포함한다. 에뮬레이션된 구성 공간은, 상이한 기능들을 가진 주변 장치들의 서로 다른 종류로서 자신을 나타내도록 주변 장치에 의해 사용될 수 있다. 예를 들어, 에뮬레이션 구성 공간은, 주변 장치가 어떤 경우에는 네트워크 인터페이스 카드로서 또는 다른 경우에는 비디오 카드로서 자신을 나타내게 할 수도 있다. 또한, 에뮬레이션된 구성 공간은, 동적으로 수정, 증강, 복제될 수도 있고, 또는 완전히 다른 구성 공간으로 교체될 수도 있다. 또한, 다수의 에뮬레이션된 구성 공간들이 서로 다른 기능에 대하여 유지될 수 있다. 또한, 에뮬레이션된 구성 공간들은 하드웨어를 덜 필요로 할 수도 있다. 예를 들어, 단일-루트 I/O 가상화(SR-IOV)를 구현하는 장치는, 각 기능마다 물리적 하드웨어 레지스터를 요구하지 않고 임의의 개수의 물리적 기능 및/또는 가상 기능에 대하여 스케일링될 수 있는 에뮬레이션된 구성을 포함할 수도 있다. 게다가, 에뮬레이션된 구성 공간에 의해 에뮬레이션된 기능의 개수는 동적으로 수정될 수 있다.
본 명세서에 기술된 기술들은, 또한, 에뮬레이션된 구성 공간들에 대한 액세스를 용이하게 하는 에뮬레이션 모듈을 제공할 수도 있다. 에뮬레이션 모듈은, 소프트웨어, 하드웨어, 또는 소프트웨어와 하드웨어의 조합(예를 들어, 주변 장치의 프로세서에 의해 실행되는 소프트웨어)으로서 구현될 수도 있다. 에뮬레이션 모듈은, 구성 레지스터의 표현을 판독하고 기입하는 것을 포함하여 에뮬레이션된 구성 공간들과 상호작용할 수도 있다.
I. 시스템
도 1은 다수의 주변 장치들을 포함하는 컴퓨팅 시스템(100)의 일례를 도시한다. 주변 장치들은, 하드웨어 장치들, 및/또는 기능을 컴퓨팅 시스템에 추가하도록 컴퓨팅 시스템에 부착될 수 있는 하드웨어와 소프트웨어의 조합을 포함하는 장치들을 포함할 수도 있다. 주변 장치들의 예로는, 저장 장치, 비디오 카드, 오디오 카드, 유선 및/또는 무선 네트워크 어댑터, 추가 주변 장치에 포트를 제공하기 위한, 직렬 및/또는 병렬 포트, 브리지, 허브 및/또는 스위치 등의 추가 포트를 시스템에 제공하기 위한 어댑터가 있다. 일반적으로, 주변 장치들은 컴퓨팅 시스템의 기능을 변경하도록 컴퓨팅 시스템에 대하여 접속 및 접속해제될 수 있다. 일부 경우에, 컴퓨팅 시스템은 주변 장치가 추가 또는 제거되도록 파워다운되어야 한다. 다른 경우에는, 컴퓨터 시스템에 전력 공급된 상태에서 주변 장치가 부착 또는 제거될 수 있다(예를 들어, 종종 "핫 스와핑" 또는 "핫 플러깅”이라 한다).
도 1의 예는, PCI(Peripheral Component Interconnect) 버스 표준의 하나 이상의 변형을 구현하는 주변 장치들을 포함하는 시스템을 도시한다. 버스는, 컴퓨팅 시스템 내에서 또는 컴퓨팅 시스템과 다른 장치 간에 데이터를 전송하는 통신 채널이다. 표준화된 버스 프로토콜은, 다양한 제조업체들에 의해 사양이 정의하고 채택된 데이터 전송 프로토콜이다. 호환 장치는 버스 프로토콜을 구현하는 컴퓨팅 시스템과 호환되며, 그 반대의 경우도 마찬가지이다. PCI는 관련된 표준 버스 프로토콜들의 군을 기술한다. 본 명세서에서 사용되는 바와 같이, PCI는, 초기 PCI 표준, PCI-eXtended(PCI-X), AGP(가속 그래픽 포트) 및 PCI 익스프레스(PCIe, PCI-XP라고도 함)를 포함한다. 본 명세서에서 사용되는 바와 같이, "PCI"라는 용어는 버스 프로토콜들의 PCI 군에 있는 임의의 프로토콜을 설명하는 데 사용될 수도 있다. 도 1에 도시된 예에서, PCI는 컴퓨팅 시스템에 의해 구현될 수 있는 버스 프로토콜의 예로서만 제공된다. 다른 버스 프로토콜로는, 예를 들어, ISA(Industry Standard Architecture), EISA(Extended ISA), VESA(Video Electronics Standards Association), 마이크로 채널(Micro Channel), ATA(Advanced Technology Attachment) 버스 군 중 임의의 것 등이 있을 수도 있다. 도시된 예는, 또한, 표준화된 버스 프로토콜, 독점적 버스 프로토콜 및/또는 표준화된 버스 프로토콜과 독점적 버스 프로토콜의 조합으로 구현될 수 있다.
컴퓨팅 시스템(100)의 예로는, 프로세서(102), 하나 이상의 루트 컴플렉스(104a, 104b), 메모리 서브시스템(106), 스위치(108), 브리지(114), 및 다수의 주변 장치들이 있을 수도 있다. 주변 장치는 "엔드포인트"라 칭할 수도 있다. 프로세서(102)는, 인텔(Intel)(등록상표), AMD(등록상표), ARM(등록상표), 퀄컴(Qualcomm)(등록상표) 등에 의해 제조된 것과 같은 범용 컴퓨팅 유닛일 수도 있고, 일반적으로 소프트웨어 코드를 실행할 수 있다. 프로세서(102)는 다수의 처리 코어들을 포함할 수도 있다.
루트 컴플렉스(104a)는, 프로세서(100)와 메모리 서브 시스템(106)을 엔드포인트들(110a 내지 110c, 112a 내지 112c)에 접속하는 하드웨어 장치 또는 하드웨어와 소프트웨어 장치일 수도 있다. 엔드포인트들(110a 내지 110c, 112a 내지 112c)은 루트 컴플렉스(104a)에 직접 접속될 수도 있다. 대안으로 또는 또한, 엔드포인트들(110a 내지 110c, 112a 내지 112c)은 스위치(108) 또는 허브 등을 통해 루트 컴플렉스(104a)에 접속될 수도 있다. 브리지(114)가 또한 루트 컴플렉스(104a)에 접속될 수도 있다. 루트 컴플렉스(104a)는, 프로세서(102)에 대하여 트랜잭션과 응답을 포워딩할 수도 있고/있거나, 프로세서(102)를 대신하여 트랜잭션을 생성하고 트랜잭션에 응답할 수도 있다. 일부 경우에, 루트 컴플렉스(104a)는, 또한, 하나의 엔드포인트(110a 내지 110c, 112a 내지 112c)로부터 다른 엔드포인트로 및/또는 엔드포인트들(110a 내지 110c, 112a 내지 112c), 스위치들(108), 및 브리지들(114) 간에 트랜잭션을 라우팅할 수도 있다. 루트 컴플렉스(104a)는, 핫 플러그 제어기, 전력 관리 제어기, 인터럽트 제어기, 및/또는 에러 검출 및 보고와 같은 컴퓨터 시스템(100)을 위한 서비스를 제공할 수도 있다. 일부 경우에, 루트 컴플렉스(104a 및/또는 104b)는 호스트 시스템(예를 들어, 프로세서(102))의 일부로서 구현될 수도 있다. 일부 실시예에서, 컴퓨팅 시스템(100)은 하나보다 많은 루트 컴플렉스를 포함할 수도 있다. 각 루트 컴플렉스는 주변 장치들의 서로 다른 세트에 접속될 수도 있다. 일부 경우에, 주변 장치들 중 하나 이상은 하나보다 많은 루트 컴플렉스에 접속할 수도 있다. 예를 들어, 도 1에 도시한 바와 같이, 엔드포인트(110a)는 루트 컴플렉스(104a, 104b) 모두에 접속될 수 있다.
메모리 서브 시스템(106)은 컴퓨팅 시스템(100)에 의해 사용될 수도 있는 데이터를 위한 임시 또는 장기 저장 장치를 제공한다. 메모리 서브 시스템(106)은, 동적 랜덤 액세스 메모리(DRAM)(예를 들어, 동기식 DRAM(SDRAM), DDR(Double Data Rate) SDRAM 등) 및/또는 정적 랜덤 액세스 메모리(SRAM), 플래시 메모리 등의 다른 유형의 메모리를 포함할 수도 있다.
엔드포인트들(110a 내지 110c, 112a 내지 112c)은 트랜잭션을 생성할 수 있고 및/또는 트랜잭션에 응답할 수 있는 주변 장치들이다. 예를 들어, 엔드포인트들(110a 내지 110c, 112a 내지 112c)은 "요청기들"(트랜잭션 생성기) 및/또는 "컴플리터"(completer; 트랜잭션 응답기)일 수도 있다. PCI 구현에 있어서, 엔드포인트들(110a 내지 110c)은 PCIe를 구현하는 주변 장치들을 포함할 수도 있고, 엔드포인트들(112a 내지 112c)은 레거시 PCI를 구현하는 주변 장치들을 포함할 수도 있다. 엔드포인트들(110a 내지 110c, 112a 내지 112c)은 공유 버스를 통해 컴퓨팅 시스템(100)에 접속될 수도 있다. 예를 들어, 레거시 엔드포인트들(112b, 112c)은 공유 PCI 버스(116)에 접속된다. 대안으로 또는 또한, 엔드포인트들(110a 내지 110c, 112a 내지 112c)은 스위칭 패브릭 토폴로지로 접속될 수도 있다. 스위칭 패브릭 토폴로지는, 패브릭에 접속된 장치들 간의 점대점 접속을 포함할 수도 있고, 장치들 간에 메시지를 전달하기 위한 라우팅 시스템을 포함할 수도 있다. 스위칭 패브릭에 있어서, 트랜잭션은 다수의 물리적 링크에 걸쳐 분산될 수도 있다. 패브릭에서의 장치들 간의 접속부(118a 내지 118f)를 또한 버스라고 칭할 수도 있다.
스위치(108)는, 루트 컴플렉스(104a)와 엔드포인트들(110a 내지 110c, 112a)을 포함한 다양한 주변 장치들 간의 브리지로서 기능한다. 스위치(108)는, 엔드포인트들(110a 내지 110c, 112a) 간의 및 엔드포인트들(110a 내지 110c, 112a)과 루트 컴플렉스(104) 간의 트랜잭션을 라우팅할 수도 있다. 스위치(108)는, 또한, 인입 및 인출 데이터 트랜잭션들의 우선순위를 결정할 중재를 제공할 수도 있다. 루트 컴플렉스(104)와 엔드포인트들(110a 내지 110c, 112a)은 스위치(108)를 다른 주변 장치 요청기 및/또는 컴플리터로서 취급할 수도 있다.
브리지(114)는 다른 버스들 또는 스위칭 패브릭들에 대한 접속성을 제공할 수도 있다. 다른 버스들 또는 스위칭 패브릭들은 PCI 변형 또는 다른 프로토콜을 구현할 수도 있다. 예를 들어, 도 1의 예에서, 브리지(114)는 레거시 PCI 표준을 구현하는 버스에 대한 접속성을 제공한다. 브리지(114)는, 레거시 PCI와 같은 하나의 버스 표준을 PCIe와 같은 다른 프로토콜로 변환하는 기구를 포함할 수도 있다.
도 1의 예에서, 프로세서(102), 루트 컴플렉스(104a, 104b), 메모리 서브시스템(106), 스위치(108), 브리지(114), 엔드포인트들(110a 내지 110c, 112a 내지 112c) 등의 구성요소들은 개별적인 구성요소들로서 예시되어 있다. 일부 구현예들에서, 이러한 구성요소들 중 하나 이상은 단일 구성요소로 결합될 수도 있다. 다른 구현예들에서, 이러한 구성요소들 중 하나 이상은 단일 칩 상에 구현될 수도 있다. 다른 구현예들에서, 이러한 구성요소들 중 하나 이상은 하드웨어, 소프트웨어, 및/또는 하드웨어와 소프트웨어의 조합으로 부분적으로 또는 완전히 구현될 수도 있다.
전술한 바와 같이, 엔드포인트들 또는 주변 장치들은 컴퓨팅 시스템(100)의 기능에 추가될 수도 있고 및/또는 그 기능을 수정할 수도 있다. 예를 들어, 하나의 엔드포인트(110a)는 와이파이(Wi-Fi) 어댑터(120)를 구현할 수도 있다. 와이파이 어댑터(120)를 사용함으로써, 컴퓨팅 시스템(100)은 무선 액세스 포인트(122)와 무선 통신할 수도 있고 이에 따라 네트워크에 액세스할 수도 있다. 다른 일례로, 다른 엔드포인트(110b)는 비디오 카드를 구현할 수도 있다. 비디오 카드는 모니터(124) 또는 다른 표시 장치에 접속하기 위한 포트를 포함할 수도 있다. 추가 예로, 컴퓨팅 시스템(100)은 사운드 카드를 구현하는 레거시 엔드포인트(112a)를 포함할 수도 있다. 사운드 카드는, 스피커(126) 또는 다른 오디오 출력 장치를 위한 플러그를 수용하는 포트 또는 잭을 포함할 수도 있다. 다른 추가 예로, 엔드포인트(110c)는, 이더넷 어댑터를 구현할 수도 있고, DSL 또는 케이블 모뎀 등의 게이트웨이 장치(128)에 대한 접속을 제공할 수도 있다. 게이트웨이 장치(128)를 사용함으로써, 컴퓨팅 시스템(100)은 네트워크(130)에 액세스할 수도 있다.
이러한 예들에 의해 예시된 바와 같이, 네트워크 어댑터, 비디오 카드, 오디오 카드 등을 포함하는 서로 다른 유형의 주변 장치들이 시스템에 접속될 수 있다. 일부 경우에, 주변 장치는 하나보다 많은 기능 장치를 구현할 수도 있다. 예를 들어, 일부 경우에, 단일 엔드포인트는, 모니터(124)에 출력하기 위한 비디오 카드 및 스피커(126)에 출력하기 위한 사운드 카드 모두를 포함할 수도 있다. 일부 구현예들에서, 기능들은, 또한, 예를 들어, 도터 카드(daughter card) 또는 외부 장치를 주변 장치 상의 확장 슬롯이나 외부 포트에 접속함으로써 주변 장치에 추가될 수 있다. 일부 실시예에서, PCI를 구현하는 주변 장치들은 최대 8개의 개별적인 기능을 포함할 수도 있다. 이러한 구현예에서, PCI 장치는, 클래스 코드와 선택적 서브클래스 코드를 사용하여 구현된 기능 또는 기능들을 나타낼 수도 있다. 클래스 코드와 선택적 서브클래스 코드는 구성 레지스터에 위치할 수도 있다. 구성 레지스터는 아래에서 더욱 상세히 설명한다.
표 1은 PCI 장치 클래스 코드 및 이들의 설명을 나열한다. 클래스 코드는 8비트 16진수 값으로서 제공되어 있다.
PCI 장치 클래스 코드
클래스 코드 설명
00h 클래스 코드들이 정의되기 전에 구축된 미분류된 장치 및/또는 장치들.
01h 대용량 저장장치 제어기.
02h 네트워크 제어기.
03h 디스플레이 제어기.
04h 멀티미디어 장치.
05h 메모리 제어기
06h 브리지 장치.
07h 간단한 통신 제어기.
08h 베이스 시스템 주변 장치.
09h 입력 장치.
0Ah 도킹 스테이션.
0Bh 프로세서.
0Ch 직렬 버스 제어기.
0Dh 무선 제어기.
0Eh 인텔리전트 I/O 제어기.
0Fh 위성 통신 제어기.
10h 암호화/복호화 제어기.
11h 데이터 획득 및 신호 처리 제어기.
FFh 장치가 정의된 클래스 코드들 중 어디에도 맞지 않음.
도 1에 도시한 컴퓨팅 시스템(100) 등의 컴퓨팅 시스템이 초기에 파워업되면, 프로세서(102)는 컴퓨팅 시스템에 접속되어 있는 임의의 엔드포인트를 인식하지 못할 수도 있다. 프로세서(102)는, 루트 컴플렉스(104a 내지 104b)를 인식할 수도 있고, 또한, 루트 컴플렉스가 하나 이상의 버스에 접속되어 있음을 인식할 수도 있다. 프로세서(102)는, 컴퓨팅 시스템을 스캔 및 구성하기 위한 프로세스를 실행함으로써 엔드포인트들(110a 내지 110c, 112a 내지 112c) 및 이들이 제공하는 기능을 발견할 수도 있다. 이 프로세스를 열거 프로세스(enumeration process)라 칭할 수도 있다. 열거 프로세스 동안, 프로세서(102)에서 실행되는 소프트웨어는, 각 버스(118a, 118e, 118f)를 루트 컴플렉스(104)에 접속된 스캔할 수도 있고, 각 버스(118a, 118e, 118f)에 부착된 각 엔드포인트(110a 내지 110c, 112a 내지 112c), 스위치(108), 및/또는 브리지(114)를 식별할 수도 있다. 프로세서(102)는, 또한, 루트 컴플렉스(104)로 하여금 트랜잭션을 개시하여 각 엔드포인트(110a 내지 110c, 112a 내지 112c), 스위치(108), 및/또는 브리지(114)에 대하여 구성 레지스터를 판독 및 기입하게 할 수도 있다. 구성 판독 트랜잭션은, 각 엔드포인트(110a 내지 110c, 112a 내지 112c), 스위치(108), 및/또는 브리지(114)의 장치의 기능과 유형을 프로세서(102)에 통지할 수도 있다. 구성 기입 트랜잭션은, 각 엔드포인트(110a 내지 110c, 112a 내지 112c), 스위치(108), 및/또는 브리지(114)를 구성 및 제어하도록 사용될 수 있다. 예를 들어, 열거 동안, 각 엔드포인트(110a 내지 110c, 112a 내지 112c), 스위치(108), 및/또는 브리지(114)에는 버스와 장치 번호가 할당될 수도 있다. 구성 레지스터는 통상적으로 주변 장치의 물리적 하드웨어 레지스터로서 구현되며, 주변 장치의 구성 레지스터의 정의는 일반적으로 고정되어 있으며 동적으로 변경될 수 없다.
전술한 바와 같이, 엔드포인트는 다수의 기능들을 구현할 수도 있다. 열거 프로세스는 또한 각 엔드포인트에 의해 구현된 기능을 발견할 수도 있다. 일부 경우에, 각 기능은 자신의 고유한 구성 레지스터의 세트를 포함할 수도 있다. 특정-기능 구성 레지스터를 판독함으로써, 기능의 성질(예를 들어, 기능이 비디오 드라이버를 구현함)을 프로세서(102)에 통지할 수도 있다. 특정-기능 구성 레지스터는, 또한, 기능에 대하여 특정한 구성과 설정을 저장할 수도 있다. 특정-기능 레지스터를 기입함으로써, 컴퓨팅 시스템에 의해 또는 프로세서(102)에 의해 요구되는 바와 같은 기능을 구성할 수도 있다.
프로세서(102)는, 또한, 스위치(108)를 발견하면, 스위치(108)에 접속된 엔드포인트들(110a 내지 110c)을 스캔 및 구성할 수도 있다. 프로세서(102)는, 또한, 브리지(114)를 발견하면, 브리지(114)의 타측 상의 버스(116)에 부착된 엔드포인트들(112b-c)을 스캔 및 구성할 수도 있다.
일부 경우에, 에뮬레이션된 구성 공간을 구현하는 주변 장치는 자신을 컴퓨팅 시스템에 대하여 서로 다른 주변 장치들로서 나타낼 수도 있다. 예를 들어, 에뮬레이션된 구성 공간을 구현하는 주변 장치는, 일부 경우에, 자신을 네트워크 인터페이스 카드에 대하여 특정한 구성 레지스터들을 갖는 네트워크 인터페이스 카드로서 나타낼 수도 있고, 또는 다른 경우에, 자신을 비디오 카드 또는 사운드 카드 등의 다른 주변 장치에 대하여 특정한 구성 레지스터들을 갖는 이러한 주변 장치로서 나타낼 수도 있다. 에뮬레이션된 구성 공간은, 또한, 완전히 다른 구성 공간으로 수정, 복제, 또는 대체될 수 있다. 또한, 다수의 에뮬레이션된 구성 공간들은 특정 기능을 위해 유지될 수도 있다. 예를 들어, 컴퓨팅 시스템은 다수의 가상 기계들을 실행할 수 있고, 각 가상 기계는 다른 운영 시스템을 실행한다. 각 가상 기계는 주변 장치에 의해 제공되는 동일한 기능에 대하여 다른 구성을 요구할 수도 있다. 이러한 경우에, 주변 장치의 에뮬레이션된 구성 공간들은 각 가상 기계에 대한 에뮬레이션된 구성을 제공할 수도 있다. 에뮬레이션된 구성 공간들은 또한 하드웨어를 덜 요구할 수도 있다. 예를 들어, SR-IOV를 포함하는 장치는, 각 기능에 대한 물리적 하드웨어 레지스터들을 요구하는 것 대신에, 임의의 개수의 물리적 기능 및/또는 가상 기능에 대하여 에뮬레이션된 구성들을 포함할 수도 있다.
II. 에뮬레이션된 구성 공간
도 2는 일부 실시예에 따라 에뮬레이션된 구성 공간을 구현하는 주변 장치(200)의 일례를 도시한다. 예를 들어, 주변 장치(200)는, 도 1에 도시한 루트 컴플렉스들 및/또는 엔드포인트들 중 하나 이상을 교체하도록 사용될 수 있다. 주변 장치(200)는 독립형 장치로서 도시되어 있지만, 주변 장치(200)와 호스트 시스템이 동일한 실리콘 다이 또는 패키지 상에 구현될 수 있도록 주변 장치(200)의 구성요소들이 호스트 시스템(예를 들어, 호스트 프로세서)과 통합될 수 있다는 점에 주목해야 한다. 예를 들어, 주변 장치(200)는 호스트 프로세서와 동일한 칩 상에 구현된 통합된 그래픽 장치일 수 있다. 예시한 주변 장치는, ISA, EISA, VESA, Multi-Channel, 프로토콜들의 PCI 군 등의 임의의 버스 프로토콜을 구현할 수도 있다. 버스 프로토콜은, 구성 레지스터를 위한 정의를 주변 장치가 포함할 것으로 예상되는 특정된 어드레스와 함께 제공할 수 있다. 도 2의 주변 장치(200)는, 구현된 버스 프로토콜에 대하여 정의되는 구성 어드레스 공간의 적어도 일부를 에뮬레이션할 수 있다. 일부 경우에, 주변 장치(200)는, 또한, 주변 장치의 기본 기능 및/또는 특정 버스 프로토콜을 구현하는 모든 주변 장치들에 대하여 공통되는 기본 기능을 구현하기 위한(예를 들어, 버스 속도 등을 설정하기 위한) 구성 레지스터 등의 에뮬레이션되지 않은 구성 레지스터들을 포함할 수도 있다. 이러한 에뮬레이션되지 않은 구성 레지스터들을 "네이티브" 구성 공간이라 칭할 수도 있다.
일부 구현예들에서, 에뮬레이션은, 프로그램 또는 장치가 다른 프로그램 또는 장치를 모방하는 능력을 가리킨다. 예를 들어, 도 2의 주변 장치(200)는, 서로 다른 주변 장치들의 기능 또는 기능들을 에뮬레이션하는 에뮬레이션된 구성 공간을 포함할 수도 있다. 예를 들어, 주변 장치(200)는 한편으로는 비디오 카드를 에뮬레이션하고 다른 한편으로는 대용량 저장 장치를 에뮬레이션할 수도 있다. 다른 일례로, 한 회사에 의해 제조되며 한 기능을 구현하는 주변 장치(200)는, 다른 회사에 의해 제조되며 동일한 기능을 구현하는 주변 장치를 에뮬레이션할 수도 있다. 일부 실시예에서, 주변 장치(200)는 하나보다 많은 주변 장치를 에뮬레이션하는 데 사용될 수 있으며, 따라서, 일부 경우에, 주변 장치(200)는 전체 주변 서브시스템을 에뮬레이션할 수 있다.
주변 장치(200)는, 버스 인터페이스 코어(210), 구성 관리 모듈(220), 로컬 하드웨어(230), 및 메모리(240)를 포함할 수도 있다. 주변 장치(200)는 버스(202)를 통해 컴퓨팅 시스템과 통신할 수도 있다. 버스(202)는 특정 버스 프로토콜을 구현할 수도 있다.
버스 인터페이스 코어(210)는, 버스(202)와 통신하도록 주변 장치(200)에 의해 요구되는 회로와 로직을 포함할 수도 있다. 예를 들어, 버스 인터페이스 코어(210)는 버스(202)와 통신하기 위한 버스 인터페이스(214)를 포함할 수도 있다. 버스 인터페이스(214)는, 버스(202)에 대한 링크의 임의의 전기적 특성을 관리하기 위한 회로를 포함한, 버스(202)에 대한 물리적 접속부를 포함할 수도 있다. 버스 인터페이스(214)는, 다른 동작들 중에서, 버스(202)에 동기화하고, 인입 트랜잭션을 디코딩하고 인출 트랜잭션을 인코딩하고, 그리고/또는 인입 데이터 또는 인출 데이터의 에러를 검출하고 관리할 수 있는 로직을 더 포함할 수도 있다.
버스 인터페이스 코어(210)는, 또한, 네이티브 구성 공간(212)을 포함할 수도 있다. 에뮬레이션된 구성 공간을 포함하지 않는 주변 장치들에서, 통상적으로, 버스 인터페이스 코어(210)는, 예를 들어, 버스 프로토콜에 의해 정의되는 바와 같이 주변 장치의 모든 구성 레지스터들을 포함한다. 게다가, 이러한 구현예들에서, 버스 인터페이스 코어(210)는, 통상적으로, 구성 레지스터들에 모든 판독 및 기입 트랜잭션들(구성 액세스 요청 또는 구성 액세스라고도 할 수 있음)을 서비스하고, (필요하다면) 응답을 버스(202)에 제공한다. 대조적으로, 주변 장치(200)의 예에서, 네이티브 구성 공간(212)은 주변 장치(200)의 구성 레지스터들의 서브세트인 네이티브 구성 레지스터들을 포함할 수도 있다. 예를 들어, 네이티브 구성 레지스터들은, 주어진 버스 프로토콜에 대하여 모든 주변 장치들에 공통일 수도 있는 (예를 들어, 버스 속도 등을 설정하기 위한) 기본 기능에 연관될 수도 있고/있거나, 그 외에는 에뮬레이션하는 데 불필요하거나 불편한 구성 레지스터들일 수도 있다. 일부 실시예에서는, 네이티브 구성 공간(212)을 또한 에뮬레이션할 수 있다.
일부 구현예들에서, 버스 인터페이스 코어(210)는 네이티브 구성 공간(212)으로 어드레싱된 판독 및 기입 트랜잭션들을 검출할 수도 있다. 이러한 구현예들에서, 버스 인터페이스 코어(210)는 네이티브 구성 레지스터(212)로 향하는 구성 트랜잭션들을 서비스할 수도 있다. 게다가, 이러한 구현예들에서, 네이티브 구성 공간(212) 내에 있지 않은 구성 공간으로 어드레싱된 구성 트랜잭션들은 구성 관리 모듈(220)로 향할 수도 있다. 다른 구현예들에서, 버스 인터페이스 코어(210)는, 모든 구성 판독 및 기입 트랜잭션들을, 이들이 구성 관리 모듈로 어드레싱되어 있는지 여부에 상관없이, 구성 관리 모듈(220)로 향하게 하며, 구성 관리 모듈(220)은 트랜잭션이 네이티브 구성 공간(212)을 위한 것인지 여부를 결정할 수도 있다.
구성 관리 모듈(220)은 구성 레지스터들로 향하는 판독 및 기입 트랜잭션들을 관리할 수도 있다. 일부 구현예들에서, 구성 관리 모듈(220)은 트랜잭션 로깅(logging)을 제공할 수도 있다. 트랜잭션 로깅은, 인입되는 구성 트랜잭션들을 로깅하거나 추적하는 하드웨어 및/또는 소프트웨어에 의해 구현될 수도 있다. 구성 트랜잭션을 수신하면, 버스 인터페이스 코어(210)는 구성 관리 모듈(220)에 트랜잭션을 로깅한다. 버스 인터페이스 코어(210)는, 로깅된 구성 트랜잭션이 완료되는 것을 기다릴 필요 없이 다른 동작들로 계속 진행될 수 있다. 구성 트랜잭션들은, 트랜잭션 로그로부터 판독될 수 있고, 예를 들어, 로컬 하드웨어(230)가 서비스를 할 수 있을 때마다 로컬 하드웨어(230)에 의해 서비스될 수 있다. 로컬 하드웨어(230)는, 트랜잭션이 판독될 때 로그로부터 그 트랜잭션을 제거할 수도 있고, 또는 트랜잭션이 실행되고 응답된 후 트랜잭션을 제거할 수도 있고, 또는 그 외에는 트랜잭션이 서비스되었거나 서비스되고 있는 중임을 로그에 나타낼 수 있다.
로컬 하드웨어(230)는, 구성 트랜잭션들을 처리하도록 적응된, 하나 이상의 로컬 프로세서, 하나 이상의 로컬 프로세서 코어, 로컬 프로세서 클러스터, 프로그래머블 게이트 어레이, 또는 제어 로직 회로로서 구현될 수 있다. 다수의 프로세서들 또는 프로세서 코어들을 포함하는 구현예들에 있어서, 각 프로세서 또는 프로세서 코어는 소프트웨어 코드를 독립적으로 또는 협동식으로 실행할 수도 있다. 이러한 구현예들에서, 각 프로세서 또는 프로세서 코어는 구성 관리 모듈(210)로부터의 다수의 트랜잭션들을 병렬 서비스할 수도 있다. 하나의 프로세서를 포함하는 구현예들에 있어서, 프로세서는, 멀티-스레딩될 수도 있고, 또한, 다수의 트랜잭션들을 병렬 서비스할 수도 있다. 로컬 하드웨어(230)는 운영 시스템(232)을 실행할 수도 있다. 운영 시스템(232)은, Linux, Windows(등록상표), iOS(등록상표) 등의 상용 운영 시스템일 수도 있고, 또는 독점적 운영 시스템일 수도 있다.
로컬 하드웨어(230)는 에뮬레이션 모듈(236)을 구현하거나 실행할 수도 있다. 일부 실시예에서, 구성 트랜잭션들은 빠른 응답 시간을 요구할 수도 있기 때문에, 에뮬레이션 모듈은, 안전한 환경에서 실행될 수 있고, 또는 구성 트랜잭션들의 처리가 인터럽트되지 않도록 충분한 권한을 갖고서 실행될 수 있다. 에뮬레이션 모듈(236)은, 구성 트랜잭션들을 포함하는 트랜잭션들을 구성 관리 모듈(220)로부터 수신할 수도 있고, 그러한 트랜잭션들을 서비스할 수도 있다. 트랜잭션을 서비스하는 것은, 트랜잭션의 유형(예를 들어, 판독 및/또는 기입)을 식별, 트랜잭션의 소스를 식별, 트랜잭션이 향하는 목적지를 식별, 트랜잭션을 실행, 및/또는 필요하다면 트랜잭션에 대한 응답을 생성하는 것을 포함할 수도 있다. 예를 들어, 구성 판독 트랜잭션은, 구성 레지스터를 판독하고 구성 레지스터로부터 판독되는 정보로 응답하는 것을 포함할 수도 있다. 다른 일례로, 구성 기입 레지스터는 구성 레지스터의 콘텐츠를 업데이트하는 것을 포함할 수도 있다. 일부 경우에, 구성 기입은, 기입 트랜잭션이 완료한 애크(acknowledgment)에 응답될 수도 있다.
일부 구현예들에서, 에뮬레이션 모듈(236)은, 구성 트랜잭션이 네이티브 구성 공간(212)으로 또는 에뮬레이션된 구성 공간(242)으로 향하는지를 결정할 수도 있다. 구성 트랜잭션이 네이티브 구성 공간(212)으로 향하는 경우, 에뮬레이션 모듈(236)은 네이티브 구성 레지스터를 판독 또는 기입하도록 버스 인터페이스 코어(210)와 통신할 수도 있다. 구성 판독이 에뮬레이션된 구성 공간(242)으로 향하는 경우, 에뮬레이션 모듈(236)은 에뮬레이션된 구성 공간(242)으로부터 구성 레지스터의 콘텐츠를 나타내는 값을 판독할 수도 있다. 구성 기입이 에뮬레이션된 구성 공간(242)으로 향하는 경우, 에뮬레이션 모듈(236)은 구성 레지스터의 콘텐츠를 나타내는 에뮬레이션된 구성 공간(242)에 데이터를 기입 또는 업데이트할 수도 있다. 일부 구현예들에서, 구성 트랜잭션은 하나 이상의 기능에 연관된 구성 레지스터들로 향할 수도 있고, 이 경우, 에뮬레이션 모듈(236)은 기능을 식별할 수도 있고 그 기능에 대하여 특정한 에뮬레이션된 구성 레지스터에 액세스할 수도 있다. 다른 구현예들에서, 구성 트랜잭션은, 서로 다른 운영 시스템들을 실행할 수도 있는 여러 가상 기계들 중 하나의 기계와 같은 다수의 소스들 중 하나로부터 온 것일 수도 있다. 이러한 구현예들에서, 에뮬레이션 모듈(236)은, 소스를 식별할 수도 있고, 그 소스에 적절하거나 그 소스에 할당될 수도 있는 에뮬레이션된 구성 레지스터에 액세스할 수도 있다.
메모리(240)는 로컬 하드웨어(230)에 의해 동작될 수도 있는 데이터에 대한 저장소를 제공한다. 메모리 모듈(240)은, DRAM(예를 들어, SDRAM, DDR-SDRAM), SRAM, 플래시, 또는 다른 소정의 메모리 유형, 또는 이들의 임의의 조합을 포함할 수도 있다. 일부 실시예에서, 메모리(240)는, 외부 메모리 모듈로서, 또는 주변 장치(200)의 내부 메모리로서, 또는 이들의 조합으로서 구현될 수 있다. 메모리 모듈(240)은 에뮬레이션된 구성 공간(242)을 저장할 수도 있다. 에뮬레이션된 구성 공간(242)은, 임의의 개수의 주변 장치들에 대하여 정의된 구성 레지스터 어드레스 공간의 일부 또는 전부에 대한 표현을 포함할 수도 있다. 일부 구현예들에서, 에뮬레이션된 구성 공간(242)은 주변 장치의 기능의 동작에 영향을 끼칠 수도 있는 구성 공간을 포함한다. 일부 구현예들에서, 에뮬레이션된 구성 공간(242)은, 버스 프로토콜을 구현하는 모든 주변 장치들에 대하여 기본일 수도 있고 및/또는 공통될 수도 있는, 또는 에뮬레이션하는 데 불필요하거나 불편한 네이티브 구성 공간을 배제한다. 에뮬레이션된 구성 레지스터들은, 판독 전용, 클리어-온-리드(clear-on-read)이며(또는 클리어-온-리드 비트들을 갖고), 판독과 기입 모두 가능할 수도 있고, 라이트-제로-투-클리어(write-zero-to-clear)일 수도 있고(또는 라이트-제로-투-클리어 비트들을 가질 수도 있고),및/또는 라이트-원-투-세트일 수도 있는(또는 라이트-온-투-세트 비트들을 가질 수도 있는) 필드들을 포함할 수도 있다.
에뮬레이션된 구성 공간(242)은, 텍스트 파일, 소스 코드, 오브젝트 코드, 스크립트로서, 및/또는 에뮬레이션 모듈(236)에 의해 판독가능한 다른 소정의 포맷으로 메모리(240)에 저장될 수도 있다. 일부 실시예에서, 에뮬레이션된 구성(242)은 암호화될 수도 있다. 일부 구현예들에서, 에뮬레이션된 구성(242)은 수정 또는 교체될 수 있다. 예를 들어, 추가 에뮬레이션된 구성 레지스터들, 또는 에뮬레이션된 구성 레지스터들의 업데이트된 버전들이, 예를 들어, 인터넷의 웹사이트를 통해 제공될 수도 있다. 이러한 구현예들에서, 추가 또는 업데이트된 에뮬레이션된 구성 레지스터들은 인터넷으로부터 다운로드될 수 있고 메모리(240)에 업로드될 수 있다. 일부 구현예들에서, 메모리(240)는, 다수의 에뮬레이션된 구성 공간들(242) 또는 동일한 에뮬레이션된 구성 공간(242)의 다수의 버전들을 저장할 수도 있다.
도 3은, 일부 실시예에 따라 주변 장치(300)의 PCIe 구현의 일례를 도시한다. 도 3의 PCIe 주변 장치(300)는, PCIe 코어(310), 구성 관리 모듈(320), 로컬 하드웨어(330), 및 메모리(340)를 포함할 수도 있다. PCIe 주변 장치(300)는 버스(302)를 통해 컴퓨팅 시스템과 통신할 수도 있다. 버스(302)는 PCIe 프로토콜을 구현할 수도 있다.
PCIe 코어(310)는, PCIe를 사용하는 버스에서의 통신을 지원하는 데 요구되는 기능 중 적어도 일부를 포함할 수도 있다. PCIe 코어(310)는 버스 인터페이스(314)를 포함할 수도 있다. 버스 인터페이스(314)는, 인입 및 인출 트랜잭션들을 관리하는 네트워크 프로토콜층들(314a 내지 314d)을 구현할 수도 있다. 아웃바운드 트랜잭션에 대하여, 트랜잭션층(314a)은, PCIe 코어(310) 자체, 구성 관리 모듈(320), 또는 로컬 하드웨어(330) 등의 트랜잭션 개시자에 의해 제공되는 정보를 갖는 패킷을 형성할 수도 있다. 데이터 링크층(314b)은, 패킷에 추가 정보를, 예를 들어, 정보의 무결성을 검증하도록 트랜잭션의 수신자에 의해 사용될 수 있는 패킷 헤더 정보 및/또는 에러 확인 정보를 추가할 수도 있다. 미디어 액세스층(314c)은 트랜잭션의 소스와 목적지의 물리적 어드레스 등의 어드레싱 정보를 제공할 수도 있다. 물리층(314d)은 패킷을 전기 신호로 인코딩할 수도 있고 패킷을 버스(302)에 송신할 수도 있다. 인입 트랜잭션에 대하여, 물리층(314d)은 버스(302)로부터 패킷을 수용하고 그 패킷을 디코딩한다. 미디어 액세스층(314c)은 트랜잭션의 소스와 목적지 어드레스를 처리할 수도 있다. 데이터 링크층(314b)은, 패킷 헤더 정보를 파싱할 수도 있고 에러를 확인할 수도 있다. 트랜잭션층(314a)은 패킷에 포함된 정보를 PCIe 코어(310) 및/또는 로컬 프로세서(330)에 의해 처리될 수 있는 포맷으로 변환할 수 있다.
PCIe 코어(310)는 또한 네이티브 구성 공간(312)을 포함할 수도 있다. 네이티브 구성 공간(312)은, 기본 기능에 연관된 그리고/또는 모든 PCIe 기반 주변 장치들에 공통될 수도 있는 그리고/또는 에뮬레이션하는 데 불필요하거나 불편할 수도 있는 구성 레지스터들을 포함할 수도 있다. 이러한 레지스터들의 예로는, 유형 0/1 공통 레지스터 헤더(316), 고급 에러 보고 기능 레지스터(312a), 메시지 신호처리된 인터럽트 확장(MSI-X) 기능 레지스터(312b), 및 파워 버짓(budgeting) 기능 레지스터(312c)가 있다. 남아 있는 임의의 구성 레지스터 공간은, 예를 들어, 에뮬레이션된 구성 공간(324)에서 찾을 수도 있다. 일부 실시예에서는, 네이티브 구성 공간(312)이 또한 에뮬레이션될 수도 있다. 따라서, 예를 들어, 일부 실시예에서, PCIe 기반 주변 장치에서는, 그 장치의 모든 PCI 구성 공간 레지스터들이 에뮬레이션될 수도 있다.
일부 구현예들에서, PCIe 코어(310)는 네이티브 구성 공간(312)으로 어드레싱된 판독 및 기입 트랜잭션들을 검출할 수도 있다. 이러한 구현예들에서, PCIe 코어(310)는 네이티브 구성 공간(312)으로 향하는 구성 트랜잭션들을 서비스할 수도 있다. 게다가, 이러한 구현예들에서, 네이티브 구성 공간(312) 내에 없는 구성 공간으로 어드레싱되어 있는 구성 트랜잭션들은 구성 관리 모듈(320)로 향할 수도 있다. 다른 구현예들에서, PCIe 코어(310)는, 네이티브 구성 공간(312)으로 어드레싱되어 있는지 여부에 상관없이, 모든 구성 판독 및 기입 트랜잭션들을 구성 관리 모듈(320)로 향하게 한다.
구성 관리 모듈(320)은 구성 레지스터들로 향하는 판독 및 기입 트랜잭션들을 관리할 수도 있다. 일부 구현예들에서, 구성 관리 모듈(310)은 트랜잭션 로깅을 제공할 수도 있다. PCIe 코어(310)는, 구성 트랜잭션을 수신하면, 구성 관리 모듈(320)에 트랜잭션을 로깅할 수도 있다. 이어서, PCIe 코어(310)는 다른 동작들로 계속 진행될 수도 있다. 구성 트랜잭션들은 로그로부터 판독될 수도 있고 로컬 하드웨어(330)에 의해 서비스될 수도 있다. 로컬 프로세서(330)는, 트랜잭션이 판독되는 경우 로그로부터 트랜잭션을 제거할 수도 있고, 또는 트랜잭션이 실행 및 응답된 후 트랜잭션을 제거할 수도 있고, 또는 그 외에는 트랜잭션이 서비스되었거나 서비스되고 있는 중임을 로그에 나타낼 수도 있다.
로컬 하드웨어(330)는, 구성 트랜잭션들을 처리하도록 적응된, 하나 이상의 프로세서, 하나 이상의 프로세서 코어, 프로세서 클러스터, 프로그래머블 게이트 어레이, 또는 제어 로직 회로를 포함할 수도 있다. 로컬 하드웨어(330)는 운영 시스템(332)을 실행할 수도 있다. 운영 시스템(332)은 사용자 모드(332a)와 독점적 모드(332b)를 제공할 수도 있다. 사용자 모드(332a)는, 예를 들어, PCIe 주변 장치(300)에 로딩된 사용자 애플리케이션을 실행할 수도 있다. 독점적 모드(332b)는 시스템 기능을 실행할 수도 있다.
로컬 하드웨어(330)는, 또한, 안전 동작 모드(334)(예를 들어, ARM 안전 모드 등)를 포함할 수도 있다. 안전 모드(334)에서 실행되는 프로그램 또는 소프트웨어는 로컬 하드웨어(330) 내의 다른 프로그램들과는 분리될 수도 있다. 예를 들어, 운영 시스템 모듈(332) 및/또는 운영 시스템 모듈(332)에서 실행되는 애플리케이션은 안전 모드(334) 내에서 실행되는 모듈들에 액세스하지 못할 수도 있다. 역으로, 일부 실시예에서, 안전 모드(334) 내에서 실행되는 프로그램들은 안전 모드(234)의 외부에서 실행되는 모듈들에 영향을 끼치지 못할 수도 있다. 따라서, 안전 모드(334)는, 로컬 하드웨어(330) 내에서 실행될 수도 있는 다른 프로그램의 개입이나 간섭 없이, 프로그램이 실행될 수 있는 환경을 제공할 수도 있다. 안전 모드(334)에서 실행되는 프로그램들은, 상당히 최적화될 수도 있고/있거나, 다른 프로그램들보다 높은 우선순위를 가질 수도 있다. 일부 실시예에서, 안전 모드(334)는, 로컬 하드웨어(330) 내에 논리적으로 그리고/또는 물리적으로 분리된 하드웨어 및/또는 소프트웨어의 섹션으로서 구현될 수도 있다.
일부 실시예에서, 에뮬레이션 모듈(336)은, 로컬 하드웨어(330)의 에뮬레이션 제어 로직 회로로서 및/또는 안전 모드(334)에서 실행되고 있는 에뮬레이션 소프트웨어로서 구현될 수 있다. 에뮬레이션 소프트웨어는 구성공간 에뮬레이션 소프트웨어(ConfigSpace Emulation Software; CSES)라 칭할 수도 있다. 에뮬레이션 모듈(336)은, 구성 관리 모듈(320)로부터 구성 트랜잭션들을 포함하는 트랜잭션들을 수신할 수도 있고, 그러한 트랜잭션들을 서비스할 수도 있다. 예를 들어, 구성 판독 트랜잭션을 서비스하는 것은, 에뮬레이션된 구성 공간으로부터 구성 레지스터를 판독하는 것, 및 레지스터로부터 판독되는 정보로 응답하는 것을 포함할 수도 있다. 다른 일례로, 구성 기입 레지스터를 서비스하는 것은, 에뮬레이션된 구성 공간의 구성 레지스터의 콘텐츠를 업데이트하는 것을 포함할 수도 있다. 일부 경우에, 구성 기입은 기입 트랜잭션이 완료되었다는 애크로 응답될 수도 있다.
일부 구현예들에서, 에뮬레이션 모듈(336)은 주변 장치로 향하는 구성 트랜잭션들의 일부 또는 전부를 수신할 수도 있다. 일부 구현예들에서, 에뮬레이션 모듈(336)은, 구성 트랜잭션이 네이티브 구성 공간(312)으로 향하는지 또는 에뮬레이션된 구성 공간(342)으로 향하는지를 결정할 수도 있다. 구성 트랜잭션이 네이티브 구성 공간(312)으로 향하는 경우, 에뮬레이션 모듈(336)은 네이티브 구성 레지스터를 판독 또는 기입하도록 PCIe 코어(310)와 통신할 수도 있다. 일부 실시예에서, 구성 관리 모듈은 에뮬레이션 모듈(336)과의 관련 없이 네이티브 구성 레지스터 액세스를 다룰 수도 있다. 구성 판독이 에뮬레이션 구성 공간(342)으로 향하는 경우, 에뮬레이션 모듈(336)은 에뮬레이션된 구성 공간(342)으로부터의 구성 레지스터의 콘텐츠를 나타내는 값을 판독할 수도 있다. 구성 기입이 에뮬레이션된 구성 공간(342)으로 향하는 경우, 에뮬레이션 모듈(336)은 구성 레지스터를 나타내는 에뮬레이션된 구성 공간(342)에 데이터를 기입하거나 업데이트할 수도 있다. 일부 구현예들에서, 에뮬레이션 모듈(336)은 자체적으로 하나 이상의 구성 레지스터들을 내부적으로 에뮬레이션할 수도 있다. 이러한 구현예들에서, 에뮬레이션 모듈(336)은, 자신의 구성 레지스터의 내부 표현을 판독 또는 기입할 수도 있고, 에뮬레이션된 구성 공간(342)에 액세스할 필요가 없을 수도 있다.
일부 구현예들에서, 에뮬레이션 모듈(336)은, PCI 인터럽트 기구를 이용하여 에뮬레이션된 구성 레지스터 액세스를 처리할 수도 있다. 예를 들어, 에뮬레이션 모듈(336)은, PCIe 코어 0 인터럽트를 안전 인터럽트로서 정의할 수도 있고, 이 인터럽트에 핸들러를 등록할 수도 있다. 인터럽트 핸들러는, 인터럽트가 수신되면 트리거되는 독립적 소프트웨어 기능이다. PCIe 코어 0 인터럽트가 트리거되면, 에뮬레이션 모듈(336)은 경보를 받을 수도 있고, 구성 관리 모듈(320)로부터의 트랜잭션들을 서비스하는 것을 시작할 수도 있다. PCIe 코어 0 인터럽트를 안전한 것으로서 정의함으로써, 인터럽트는, 운영 시스템 모듈(332) 등의 비안전 모듈들로부터 숨겨질 수도 있고 또는 마스킹될 수도 있다. 일부 실시예에서, 안전 인터럽트는 또한 비안전 인터럽트핸들러를 인터럽트할 수도 있다.
메모리(340)는 로컬 하드웨어(330)에 의해 동작될 수도 있는 데이터 저장소를 제공한다. 메모리(340)는, DRAM(예를 들어, SDRAM, DDR-SDRAM 등), SRAM, 플래시 메모리, 또는 다른 소정의 메모리 유형, 또는 이들의 조합을 포함할 수도 있다. 일부 실시예에서, 메모리(340)는, 외부 메모리 모듈로서, 또는 주변 장치(200)의 내부 메모리로서, 또는 이들의 조합으로서 구현될 수 있다. 메모리(340)는 에뮬레이션된 구성 공간(342)을 저장할 수도 있다. 에뮬레이션된 구성 공간(342)은 PCIe 구성 어드레스의 4KB 중 일부 또는 전부에 대한 표현을 포함할 수도 있다. 일부 구현예들에서, 에뮬레이션된 구성 공간(342)은 PCIe 확장형 기능 레지스터들을 포함할 수도 있다. 예를 들어, 에뮬레이션된 구성 공간(342)은, 고급 오류 보고 기능 레지스터, 가상 채널 기능 레지스터, 장치 일련번호 레지스터, 및/또는 파워 버짓 기능 레지스터를 포함할 수도 있다. 대안으로 또는 또한, 에뮬레이션된 구성 공간(342)은 SR-IOV 확장형 기능 레지스터를 포함할 수도 있다. 이러한 경우, 에뮬레이션된 구성 공간(342)은, SR-IOV 물리적 및 가상 기능들이 제어될 수 있게 하는 기능 레지스터들을 포함할 수도 있다. SR-IOV는 아래에서 더욱 상세히 설명한다.
일부 구현예들에서, 에뮬레이션된 구성 공간(342)은 동적으로 교체 및/또는 수정될 수도 있다. 예를 들어, 에뮬레이션된 구성 공간(342)에서 PCIe 확장형 기능이 추가 또는 제거될 수도 있다. 다른 구현예들에서, PCIe 주변 장치(300)는, 서로 다른 가상 기계들, 서로 다른 운영 시스템들, 및/또는 서로 다른 장치 유형들에 대하여 적절한 다수의 에뮬레이션된 구성 공간들을 포함할 수도 있다.
표 2는 에뮬레이션된 구성 공간(342)의 일례를 도시한다. 오프셋은 에뮬레이션된 구성 공간의 시작으로부터의 오프셋을 설명한다. 오프셋은 12비트 16진수 값으로서 주어진다. 에뮬레이션된 구성은 각 에뮬레이션된 구성 레지스터에 관한 다른 정보를 포함할 수도 있다. 예를 들어, 일부 에뮬레이션된 구성 레지스터들은, 루트 컴플렉스에 의해 판독 전용, 기입 전용, 또는 판독가능/기입가능으로만 마킹될 수도 있다. 다른 일례로, 일부 에뮬레이션된 구성 레지스터들에는 디폴트 또는 리셋 값이 제공될 수도 있다. 일부 실시예에서, 에뮬레이션된 구성 공간(342)은 표 2에 도시한 구성 레지스터들의 다수의 세트들에 대한 표현을 포함할 수도 있다. 예를 들어, 일부 실시예에서, PCIe 주변 장치(300)는 하나 이상의 PCI 엔드포인트들에 대한 접속을 제공할 수도 있는 PCI 스위치, 브리지, 또는 허브를 구현하는 데 사용될 수 있다. 이러한 상황에서, 에뮬레이션된 구성 공간(342)은, 스위치, 브리지, 또는 허브에 연관된 각 엔드포인트 장치에 대한 구성 레지스터들 및 스위치, 브리지, 또는 허브의 구성 레지스터들을 위한 표현들을 포함할 수도 있다.
에뮬레이션된 구성의 예
오프셋 설명
000h-003h 벤더 ID 및 장치 ID
004h-007h 커맨드 및 상태
009h-00Bh 클래스 코드
00Ch-00Ch 캐시 라인 크기
00Dh-00Dh 레이턴시 타이머
010h-027h 베이스 어드레스 레지스터(BAR) 0-5.
028h-02Bh 카드버스 카드 정보 구조(CIS) 포인터
02Ch-02Fh 서브시스템 벤더 ID, 서브시스템 ID
030h-033h 확장 판독 전용(ROM) 베이스 어드레스
034h-03Bh 기능 포인터
03Ch-03Fh 인터럽트 라인
040h-041h 파워 관리 기능 헤더
042h-046h 파워 관리 기능 본문
047h-06Fh 파워 관리 기능 필러
070h-077h PCIe 기능 헤더
078h-07Bh PCIe 기능 제어
07Ch-0AFh PCIe 기능
0B0h-0B1h MSI-X 기능 헤더
0B2h-0B3h MSI-X 기능 제어
0B4h-0BBh MSI-X 기능 본문
0BCh-0FFh MSI-X 기능 필러
100h-103h 대체 라우팅 ID-확장형(ARI-X) 기능 헤더
104h-107h ARI-X 기능 본문
108h-13Fh ARI-X 기능 필러
140h-143h 직렬번호 확장형(SN-X) 기능 헤더
144h-14Bh SN-X 기능 본문
14Ch-14Fh SN-X 기능 필러
150h-153h PCIe-확장형(PCIe-X) 기능 헤더
154h-157h PCIe-X 기능 본문
158h-1FFh PCIe-X 기능 필러
200h-203h 고급 에러 보고 확장형(AER-X) 기능 헤더
204h-247h AER-X 기능 본문
248h-2FFh AER-X 기능 필러
300h-303h SR-IOV-확장형(SR-IOV-X) 기능 헤더
304h-307h SR-IOV-X 기능 능력
308h-30Bh SR-IOV-X 기능 제어
30Ch-323h SR-IOV-X 기능 본문
324h-33Bh SR-IOV-X 기능 바
전술한 바와 같이, 구성 트랜잭션 로깅은 인입 구성 트랜잭션들을 추적하도록 구현될 수도 있다. 구성 트랜잭션 로깅은 모든 인입 구성 판독 및 기입 트랜잭션들 중 일부 또는 전부의 로그를 유지할 수도 있다. 일부 구현예들에서, 구성 트랜잭션 로깅은 여러 레지스터들을 사용하여 주어진 구성 트랜잭션을 로깅할 수도 있다. 이러한 레지스터들은, 어드레스 레지스터, 데이터 레지스터, 및 완료 레지스터를 포함할 수도 있다.
어드레스 레지스터는, 구성 판독 또는 기입 트랜잭션이 구성 트랜잭션 로깅에 송신될 때 설정될 수도 있다. 어드레스 레지스터는, 인바운드 구성 트랜잭션들의 타겟인 구성 레지스터를 식별하는 데 필요한 정보를 포함할 수도 있다. 일부 경우에, 어드레스 레지스터는 에뮬레이션 모듈(336)에 의해 판독되는 경우 클리어될 수도 있다. 일례로, 어드레스 레지스터는, 어드레스 레지스터가 유효한지 여부를 나타내는 유효 표시자, 구성 유형(예를 들어, 유형 0 또는 유형 1), 타겟 레지스터 오프셋, 트랜잭션이 판독 액세스인지 기입 액세스인지를 나타내는 판독/기입 표시자, 물리적 또는 가상 기능이 구성 액세스의 타겟임을 나타내는 장치 기능 필드, 및 타겟 버스 번호 등의 정보를 포함할 수도 있다. 일부 실시예에서는, 유효 지시자를 설정함으로써, 에뮬레이션 모듈에 대한 인터럽트 또는 저-지연 통지를 트리거하여 구성 액세스 요청을 서비스하도록 에뮬레이션 모듈에 요청할 수도 있다.
데이터 레지스터는 구성 트랜잭션에 연관된 데이터를 저장할 수도 있다. 구성 기입 트랜잭션들에 대하여, 데이터 레지스터는 기입될 데이터를 저장할 수도 있다. 구성 판독 트랜잭션들에 대하여, 데이터 레지스터는 에뮬레이션 모듈(336)에 의해 타겟 구성 레지스터로부터 판독되는 데이터를 저장할 수도 있다.
완료 레지스터는 구성 판독 또는 기입 트랜잭션의 상태를 나타낸다. 완료 레지스터는, 에뮬레이션 모듈(336)이 구성 트랜잭션을 완료할 때 에뮬레이션 모듈(336)에 의해 기입될 수도 있다. 완료 레지스터에 기입된 값을 사용하여 구성 트랜잭션의 개시자(예를 들어, 루트 컴플렉스)에 송신되는 완료 응답을 포맷할 수도 있다. 예를 들어, 완료 레지스터의 값을 사용하여 완료 표시를 생성할 수도 있다. 완료 표시는, 버스 번호, 장치 번호, 및/또는 주변 장치의 기능 번호, 및 구성 트랜잭션을 수용하고 서비스한 기능을 식별할 수도 있다. 일부 경우에, 에뮬레이션 모듈(336)이 완료 레지스터에 기입하는 경우, 보류 중인 구성 트랜잭션은 완료된 것으로서 간주하고 해제될 수도 있다. 일부 경우에, 완료 레지스터는 각 인바운드 구성 트랜잭션에 대하여 한번만 기입될 수도 있다.
일례로, 완료 레지스터는, 완료 상태, 타겟 버스 번호, 타겟 장치 번호, 및 타겟 기능 번호 등의 정보를 포함할 수도 있다. 완료 상태는, 구성 트랜잭션이 성공적으로 완료되었는지 여부, 구성 트랜잭션이 무효인지 여부(예를 들어, 타겟 기능 또는 타겟 버스 번호가 존재하지 않을 수도 있음),구성 트랜잭션이 재시도되어야 하는지 여부(예를 들어, 주변 장치가 구성 트랜잭션을 수용할 수 없고, 구성 트랜잭션이 트랜잭션의 개시자에 의해 다시 송신되어야 함), 또는 구성 트랜잭션이 취소되었는지 여부(예를 들어, 주변 장치가 구성 트랜잭션을 수용하였지만 구성 트랜잭션을 완료할 수 없음)를 나타낼 수도 있다. 타겟 버스 번호는, 완료 식별자에서 어떤 버스 번호를 사용해야 하는지를 나타낼 수도 있다(예를 들어, 어드레스 레지스터에 제공된 타겟 버스 번호는 리턴되고, 또는 타겟 기능에 연관된 버스 번호가 리턴된다). 예를 들어, 주변 장치는 버스 번호 1에 상주할 수도 있다. 인바운드 구성 트랜잭션은, 구성 유형 1일 수도 있고, 버스 번호 2로 향할 수도 있다. 이 경우, 에뮬레이션 모듈은 버스 번호 1 또는 2를 리턴할 수도 있다. 타겟 장치 번호는, 완료 식별자에 있어서 어떤 타겟 장치 번호를 사용해야 하는지를 나타낼 수도 있다(예를 들어, 어드레스 레지스터에 제공된 타겟 장치 번호가 리턴되고, 또는 타겟 기능에 연관된 타겟 장치 번호가 리턴된다). 타겟 기능 번호는, 완료 식별자에 있어서 어떤 기능 번호를 사용해야 하는지를 나타낼 수도 있다(예를 들어, 어드레스 레지스터에 제공된 타겟 기능 번호가 리턴되고, 또는 포트 기능 번호가 리턴된다).
유연성과 구성가능성에 더하여, 에뮬레이션 구성 기술을 이용한 주변 장치는, 또한, 넌에뮬레이션된 주변 장치들이 이용하지 못할 수도 있는 향상된 보안을 제공할 수도 있다.
예를 들어, 주변 장치는 서비스 거부 공격을 받을 수도 있다. 이러한 공격에 있어서, 악의적 가상 기계는, 장치 하드웨어 및/또는 소프트웨어가 고장나도록 주변 장치를 구성 트랜잭션들로 넘치게 할 수도 있다. 그러나. 에뮬레이션 모듈을 갖는 주변 장치는, (예를 들어, 트랜잭션 로그를 감시함으로써) 가상 기계에 의한 구성 액세스들의 레이트(rate)를 추적할 수도 있다. 따라서, 에뮬레이션 모듈은, 가상 기계에 의한 액세스의 비정상적인 증가를 검출할 수도 있고, 그 가상 기계로부터의 임의의 추가 액세스를 거부할 수도 있다.
다른 일례로, 가상 기계는, 초기화되지 않은 또는 존재하지 않는 기능에 액세스할 수도 있다. 정상적인 주변 장치는 이러한 경우에 동작 정지될 수도 있다. 그러나, 에뮬레이션 모듈은, 이러한 액세스들을 캡처할 수도 있으며, 초기화되지 않은 또는 존재하지 않는 기능에 대한 구성 레지스터들을 에뮬레이션함으로써 또는 액세스가 존재하지 않는 기능에 대한 것임을 인식함으로써 적절히 대응할 수도 있다. 따라서, 에뮬레이션 모듈은 주변 장치가 동작 정지되는 것을 방지할 수도 있다.
다른 일례로, 가상 기계는 부적절한 시간에 기능의 리셋을 개시할 수도 있다. 그러나, 에뮬레이션 모듈은 이러한 소프트웨어 기반 리셋을 캡처하고 로깅할 수도 있다. 에뮬레이션 모듈은, 예를 들어, 모든 보류 중인 트랜잭션들을 완료할 수 있게 한 후, 적절한 시간에 리셋을 후속 처리할 수 있다. 대안으로, 에뮬레이션 모듈은 단순히 부적절한 리셋을 차단할 수도 있다.
최종 일례로, 가상 기계는 무효의 또는 시기가 적절하지 않은 구성 변경을 시도할 수도 있다. 예를 들어, 가상 기계는 버스 링크의 속도 또는 폭을 변경하려 할 수도 있다. 그러나, 에뮬레이션 모듈은, 이러한 부적절한 구성 변경을 포함한 모든 구성 액세스를 캡처할 수도 있고, 이러한 무효의 또는 시기가 적절하지 않은 구성 변경 액세스들을 거부할 수도 있다.
III. 구성 트랜잭션 프로세스
도 4는 구성 판독 트랜잭션을 서비스하는 주변 장치(400)의 일례를 도시한다. 도 4의 주변 장치(400)는 다른 주변 장치들 및/또는 다수의 장치 기능들을 유연하게 에뮬레이션할 수도 있다. 주변 장치(400)는, 버스 인터페이스 코어(410), 구성 트랜잭션 로깅 유닛(408), 네이티브 구성 공간(412), 에뮬레이션 모듈(430), 및 메모리(440)를 포함할 수도 있다.
버스 인터페이스 코어(410)는, 주변 장치(400)를 컴퓨팅 시스템에 접속하는 버스와 통신하기 위한 기능을 포함할 수도 있다. 버스 인터페이스 코어(410)는, 버스에 대한 물리적 접속부를 포함할 수도 있고, 버스에 대한 전기적 접속을 관리하고 인입 트랜잭션들을 디코딩하고 인출 트랜잭션들을 인코딩하고 및/또는 인입 및 인출 트랜잭션들의 에러를 관리하기 위한 하드웨어 및/또는 소프트웨어를 제공할 수도 있다.
구성 트랜잭션 로깅 유닛(408)은 인입 구성 트랜잭션들을 추적할 수도 있다. 구성 트랜잭션 로깅 유닛(408)은 모든 인입 구성 판독 및 기입 트랜잭션들 중 일부 또는 전부의 로그를 유지할 수도 있다. 로그는, 리스트 또는 표, 또는 리스트들 및/또는 표들의 조합의 형태를 취할 수도 있다. 일부 구현예들에서, 구성 트랜잭션 로깅 유닛(408)은 인입 구성 트랜잭션들에 대하여 우선순위를 할당할 수도 있어서, 일부 트랜잭션들이 다른 트랜잭션들보다 먼저 서비스될 수도 있다. 이러한 구현예들에서, 구성 트랜잭션 로깅 유닛(408)은, 또한, 일관성을 유지할 수도 있으며, 즉, 판독과 기입이 적절한 순서로 발생하는 것을 확보할 수도 있다. 예를 들어, 레지스터의 판독 트랜잭션이 동일한 레지스터에 대한 기입 트랜잭션 후에 수신되면, 기입 트랜잭션이 먼저 발생해야 한다. 다른 구현예들에서, 구성 로깅(408)은 인입 트랜잭션들이 수신된 순서로 인입 트랜잭션들을 유지한다.
네이티브 구성 공간(412)은, 주변 장치(400)에 의해 에뮬레이션되지 않는 네이티브 구성 레지스터들을 포함할 수도 있다. 네이티브 구성 레지스터들은, 일반적으로, 물리적 어드레스를 갖고, 따라서, 하나 이상의 어드레스 공간을 점유할 수도 있다.
에뮬레이션 모듈(430)은, 구성 트랜잭션들을 처리하도록 적응된, 하나 이상의 프로세서, 하나 이상의 프로세서 코어, 프로세서 클러스터, 프로그래머블 게이트 어레이, 또는 제어 로직 회로를 사용하여 구현될 수 있다. 에뮬레이션 모듈(430)은, 전술한 바와 같이, 운영 시스템 및/또는 에뮬레이션 소프트웨어 등의 소프트웨어 코드를 실행할 수도 있다. 일부 실시예에서, 에뮬레이션 소프트웨어의 기능은 하드웨어(예를 들어, 제어 로직 회로)에서 구현될 수 있다. 에뮬레이션 모듈(430)은, 네이티브 구성 공간(412)을 타겟으로 하는 트랜잭션들과 에뮬레이션된 구성 공간(442)을 타겟으로 하는 트랜잭션들 모두를 포함한 모든 인입 구성 판독 및 기입 트랜잭션들 중 일부 또는 전부를 서비스할 수도 있다.
메모리(440)는 에뮬레이션 모듈(430)에 의해 동작될 수도 있는 데이터를 위한 저장소를 제공한다. 메모리(440)는 에뮬레이션된 구성 공간(442)을 저장할 수도 있다. 에뮬레이션된 구성 공간(442)은, 주변 장치(400)에 의해 에뮬레이션되는 하나 이상의 주변 장치에 대하여 정의된 구성 레지스터들 중 일부 또는 전부에 대한 표현을 포함할 수도 있다. 일부 구현예들에서, 에뮬레이션된 구성 공간(442)은, 에뮬레이션되는 주변 장치의 동작에 영향을 끼치는 구성 레지스터들을 주로 포함할 수도 있다. 에뮬레이션된 구성 공간(442)은, 텍스트 파일, 소스 코드, 오브젝트 코드, 스크립트, 또는 다른 소정의 포맷의 형태로 저장될 수도 있다. 일부 실시예에서, 에뮬레이션된 구성 공간(442)은 암호화될 수도 있다. 일부 구현예들에서, 메모리(440)는 하나보다 많은 에뮬레이션된 구성 공간을 포함할 수도 있다. 예를 들어, 주변 장치는 다른 많은 주변 장치들 및/또는 다수의 기능들을 에뮬레이션할 수도 있다. 이러한 경우에, 메모리(440)는, 에뮬레이션되는 각 주변 장치에 대한 및/또는 에뮬레이션되는 각 기능에 대한 에뮬레이션된 구성 공간을 포함할 수도 있다.
도 4의 예는, 구성 판독 트랜잭션이 수신되는 경우 주변 장치(400)에 의해 실행될 수도 있는 단계들을 도시한다. 단계(452)에서, 구성 판독 트랜잭션은 버스로부터(예를 들어, 루트 컴플렉스 또는 호스트로부터) 수신된다. 버스 인터페이스 코어(410)는, 구성 트랜잭션을 수신할 수도 있고, 트랜잭션을 수용해야 한다고 결정할 수도 있다. 버스 인터페이스 코어(410)는, 예를 들어, 트랜잭션의 타겟 버스 식별자, 장치 식별자, 기능 식별자, 및/또는 어드레스를 검사하여 이러한 결정을 내릴 수도 있다. 주변 장치(400)는 하나보다 많은 주변 장치 및/또는 하나보다 많은 기능을 에뮬레이션할 수도 있다. 따라서, 버스 인터페이스 코어(410)는, 에뮬레이션되는 임의의 개수의 주변 장치들에 대한 트랜잭션들을 수용할 수도 있다.
단계(454)에서, 버스 인터페이스 코어(410)는 구성 판독 트랜잭션을 구성 트랜잭션 로깅 유닛(408)에 송신할 수도 있다. 구성 트랜잭션 로깅 유닛(408)은 판독 트랜잭션을 자신의 트랜잭션 로그에 추가할 수도 있다. 일부 실시예에서, 일단 판독 트랜잭션이 로깅되었다면, 버스 인터페이스 코어(410)는 다른 동작을 진행할 수도 있고, 판독 트랜잭션의 완료를 기다릴 필요가 없을 수도 있다.
단계(456)에서, 구성 트랜잭션 로깅 유닛(408)은 인터럽트를 에뮬레이션 모듈(430)에 송신할 수도 있다. 에뮬레이션 모듈(430)은 에뮬레이션 프로세스를 호출함으로써 인터럽트에 응답할 수도 있다. 에뮬레이션 프로세스는, 구성 트랜잭션 로깅 유닛(408)으로부터 구성 트랜잭션을 검색할 수도 있고, 구성 트랜잭션을 서비스할 수도 있다. 일부 실시예에서, 에뮬레이션 모듈(430)은, 구성 트랜잭션을 서비스할 준비가 될 때마다 또는 인터럽트 루틴에 따라 구성 트랜잭션을 서비스할 수도 있다. 일부 실시예에서, 에뮬레이션 모듈(430)은 구성 트랜잭션을 서비스하기 위한 전용 자원들을 포함할 수도 있다. 예를 들어, 에뮬레이션 모듈(430)은, 구성 트랜잭션을 서비스하도록 전용되는 프로세서 코어 또는 실행 스레드를 가질 수도 있다. 또한 또는 대안으로, 구성 트랜잭션 로깅 유닛(408)은, 단계(454)에서 트랜잭션이 구성 트랜잭션 로깅에 송신될 때마다 인터럽트를 에뮬레이션 모듈(430)에 송신할 수도 있다. 인터럽트는 에뮬레이션 모듈이 액션을 취해야 한다는 점을 에뮬레이션 모듈(430)에 통지한다. 일부 경우에, 에뮬레이션 모듈(430)은, 또한, 버스에 의해 지시되는 타이밍 요건들을 준수해야 할 필요가 있을 수도 있다. 예를 들어, 일부 버스 프로토콜들은, 주변 장치가 소정의 시간 내에 판독 트랜잭션에 응답할 것을 예상할 수도 있다.
구성 트랜잭션들은, 단계(456)에서 단계(452)에서 버스 인터페이스 코어(410)에 의해 수신된 바와 동일한 순서로 페치 또는 수신될 수도 있다. 대안으로, 구성 트랜잭션 로깅 유닛(408)은 로깅된 트랜잭션들에 다시 우선순위를 부여할 수도 있어서, 높은 우선순위의 트랜잭션들이 먼저 서비스된다.
에뮬레이션 모듈(430)은, 구성 판독 트랜잭션을 수신하거나 페치하면, 트랜잭션이 에뮬레이션된 구성 공간(442)으로 또는 네이티브 구성 공간(412)으로 향하는지를 결정할 수도 있다. 이러한 결정은, 에뮬레이션된 구성 공간 또는 네이티브 구성 공간 내에 속할 수도 있는 판독될 구성 레지스터의 어드레스에 기초할 수도 있다. 일부 경우에, 판독 트랜잭션이 에뮬레이션된 구성 공간(442)으로 향하는 경우, 에뮬레이션 모듈(430)은, 단계(458a)에서, 메모리(440)의 에뮬레이션된 구성 공간(442)으로부터 타겟 구성 레지스터의 콘텐츠를 나타내는 값을 판독할 수도 있다. 다른 경우에, 에뮬레이션 모듈(430)은, 타겟 구성 레지스터가 에뮬레이션되지 않으며 네이티브 구성 공간(412)의 일부라고 결정할 수도 있다. 이러한 경우에, 에뮬레이션 모듈(430)은, 단계(458b)에서, 네이티브 구성 공간(412)으로부터 구성 레지스터의 콘텐츠를 판독할 수도 있다.
다음으로, 단계(460)에서, 에뮬레이션 모듈(430)은 구성 판독에 대한 응답을 생성할 수도 있다. 일부 구현예들에서, 에뮬레이션 모듈(430)은 버스 인터페이스 코어(410)에 검색된 데이터를 송신할 수도 있다. 이러한 구현예들에서, 버스 인터페이스 코어(410)는 버스에서의 송신을 위해 판독 데이터를 패키징할 수도 있고, 패키징된 데이터를 송신할 수도 있다. 다른 구현예들에서, 에뮬레이션 모듈(430)은, 판독 데이터를 버스 인터페이스 코어(410)에 제공하기 전에 판독 데이터를 패키징할 수도 있다.
단계(462)에서는, 에뮬레이션 모듈(430)이, 단계(462) 후에, 구성 판독 트랜잭션이 행해졌음을 나타내도록 구성 트랜잭션 로깅 유닛(408)을 업데이트할 수도 있다. 일부 구현예들에서, 에뮬레이션 모듈(430)은, 판독 트랜잭션을 서비스한 후 구성 트랜잭션 로깅 유닛(408)으로부터 판독 트랜잭션을 제거할 수도 있다.
주변 장치(400)는 PCI를 구현하는 주변 장치일 수도 있다. 주변 장치(400)가 PCI 주변 장치인 경우, 전술한 단계들은 일부 실시예에 따라 다음과 같이 설명될 수도 있다.
단계(452)에서, 예를 들어, 루트 컴플렉스로부터 구성 판독 트랜잭션 층 패킷(TLP)을 수신할 수도 있다. 구성 판독 TLP는, PCIe 버스에서 수신될 수도 있고, PCIe 코어에 의해 수신될 수도 있다. PCIe 코어는, TLP를 언팩킹할 수도 있고 구성 요청을 더욱 쉽게 처리되는 포맷으로 감소시킬 수도 있다.
단계(454)에서, PCIe 코어는 구성 판독 요청을 구성 트랜잭션 로깅에 전달할 수도 있다. 예를 들어, PCIe 코어는, 구성 트랜잭션 로깅의 어드레스 레지스터를 구성 판독 요청 정보로 업데이트할 수도 있다. 구성 트랜잭션 로깅은, 구성 판독 요청을 자신의 보류 중인 구성 트랜잭션들의 로그에 추가할 수도 있다. 구성 판독 요청을 구성 트랜잭션 로깅에 전달한 후, PCIe 코어는 다른 동작들을 자유롭게 실행할 수도 있다.
단계(456)에서, 구성 트랜잭션 로깅은 에뮬레이션 모듈에 인터럽트를 송신할 수도 있다. 에뮬레이션 모듈은, 인터럽트를 수신하면, 에뮬레이션 프로세스를 호출할 수도 있고, 구성 트랜잭션 로깅은 응답을 대기할 수도 있다.
단계(458a)에서, 에뮬레이션 모듈은 구성 판독 트랜잭션에 의해 타겟으로 되는 에뮬레이션된 구성 레지스터를 찾을 수도 있다. 에뮬레이션 모듈은, 메모리의 에뮬레이션된 구성 공간에 액세스할 수도 있고, 그 공간에서의 요청된 에뮬레이션된 구성 레지스터를 위치파악할 수도 있다. 에뮬레이션 모듈은, 요청된 에뮬레이션된 구성 레지스터를 위치파악하면, 에뮬레이션된 구성 레지스터의 값을 판독할 수도 있다. 일부 경우에, 판독 요청을 에뮬레이션된 구성 레지스터에 서비스하려면, 주변 장치의 하드웨어로부터 추가 정보를 필요로 할 수도 있다. 이러한 경우에, 에뮬레이션 모듈은, 네이티브 구성 공간의 레지스터 또는 물리적 포트 구성 레지스터 등의 추가 구성 레지스터를 판독할 수도 있다.
단계(460)에서, 에뮬레이션 모듈은, 에뮬레이션된 구성 레지스터로부터 판독된 값을 구성 트랜잭션 로깅 유닛에 전달할 수도 있고, 구성 트랜잭션 로깅 유닛에서 완료 상태를 성공적인 완료로서 업데이트한다. 단계(462)에서, 에뮬레이션 모듈 또는 구성 트랜잭션 로깅 유닛은 판독 값을 PCIe 장치 코어에 통신하고, PCIe 장치 코어는 후속하여 판독 값을 패키징하여 루트 컴플렉스에 송신한다. 예를 들어, PCIe 장치 코어는 구성 완료 TLP를 루트 컴플렉스에 송신할 수도 있다. 일부 실시예에서, 구성 판독 요청이 완료될 수 없다면, 이에 따라 에뮬레이션 모듈이 완료 상태를 업데이트할 수도 있다.
도 5는 구성 기입 요청을 서비스하는 주변 장치(500)의 일례를 도시한다. 주변 장치(500)는 서로 다른 주변 장치들 및/또는 다수의 장치 기능들을 유연하게 에뮬레이션할 수도 있다. 주변 장치(500)는, 버스 인터페이스 코어(510), 구성 트랜잭션 로깅 유닛(508), 네이티브 구성 공간(512), 에뮬레이션 모듈(530), 및 메모리(540)를 포함할 수도 있다. 버스 인터페이스 코어(510)는, 주변 장치를 컴퓨팅 시스템에 접속하는 버스와 통신하기 위한 기능을 포함할 수도 있다. 구성 트랜잭션 로깅 유닛(508)은 인입 구성 트랜잭션들을 추적할 수도 있다. 구성 트랜잭션 로깅 유닛(508)은 인입 구성 판독 및 기입 트랜잭션들 중 일부 또는 전부의 로그를 유지할 수도 있다. 네이티브 구성 공간(512)은 주변 장치(500)에 의해 에뮬레이션되지 않는 구성 레지스터들을 포함할 수도 있다. 에뮬레이션 모듈(530)은, 구성 트랜잭션들을 처리하도록 적응된, 하나 이상의 프로세서, 하나 이상의 프로세서 코어, 프로세서 클러스터, 프로그래머블 게이트 어레이, 또는 제어 로직 회로를 사용하여 구현될 수 있다. 에뮬레이션 모듈(530)은 운영 시스템 및/또는 에뮬레이션 모듈 등의 소프트웨어 코드를 실행할 수도 있다. 일부 실시예에서, 에뮬레이션 소프트웨어의 기능은 하드웨어(예를 들어, 제어 로직 회로)에서 구현될 수 있다. 메모리(540)는 에뮬레이션 모듈(530)에 의해 동작될 수 있는 데이터를 위한 저장소를 제공한다. 메모리(540)는 하나 이상의 에뮬레이션된 구성 공간을 포함할 수도 있다. 에뮬레이션된 구성 공간(542)은, 에뮬레이션될 기능 및/또는 주변 장치를 위해 정의된 구성 레지스터들 중 일부 또는 전부에 대한 표현을 포함할 수도 있다. 일부 실시예에서, 메모리(540)는, 에뮬레이션될 각 주변 장치 및/또는 기능에 대한 에뮬레이션된 구성 공간(542)을 포함할 수도 있다.
도 5에 도시한 예는, 구성 기입 트랜잭션이 수신되는 경우 주변 장치(500)에 의해 실행될 수도 있는 단계들을 예시한다. 단계(552)에서는, 버스로부터(예를 들어, 루트 컴플렉스 또는 호스트로부터) 구성 기입 요청을 수신한다. 버스 인터페이스 코어(510)는, 구성 기입 트랜잭션을 수신할 수도 있고, 그 트랜잭션을 수용해야 한다고 결정할 수도 있다. 주변 장치(500)는 하나보다 많은 주변 장치 및/또는 기능을 에뮬레이션할 수도 있다. 따라서, 장치 코어(510)는 에뮬레이션되는 임의의 개수의 주변 장치들에 대한 트랜잭션들을 수용할 수도 있다.
단계(554)에서, 버스 인터페이스 코어(510)는 구성 기입 트랜잭션을 구성 트랜잭션 로깅(508)에 송신할 수도 있다. 구성 트랜잭션 로깅(508)은 구성 기입 트랜잭션을 자신의 트랜잭션 로그에 추가할 수도 있다. 일단 구성 기입 트랜잭션이 로깅되었다면, 버스 인터페이스 코어(510)는, 다른 동작들을 진행할 수도 있고, 기입 트랜잭션의 완료를 기다릴 필요가 없을 수도 있다.
단계(556)에서, 구성 트랜잭션 로깅(508)은 인터럽트를 에뮬레이션 모듈(530)에 송신할 수도 있다. 에뮬레이션 모듈(530)은 에뮬레이션 모듈을 호출함으로써 인터럽트에 응답할 수도 있다. 에뮬레이션 모듈(530)은, 구성 트랜잭션 로깅 유닛(508)으로부터 구성 트랜잭션을 검색할 수도 있고, 구성 트랜잭션을 서비스할 수도 있다. 에뮬레이션 모듈(530)은, 구성 트랜잭션을 서비스할 준비가 될 때마다 구성 트랜잭션을 서비스할 수도 있다. 일부 실시예에서, 에뮬레이션 모듈(530)은 구성 트랜잭션을 서비스하기 위한 전용 자원들을 포함할 수도 있다. 일부 경우에, 에뮬레이션 모듈(530)은, 단계(554)에서 구성 트랜잭션이 구성 트랜잭션 로깅 유닛(508)에 추가될 때마다 인터럽트를 수신할 수도 있다.
에뮬레이션 모듈(530)은, 구성 기입 트랜잭션을 수신 또는 페치하면, 트랜잭션이 에뮬레이션된 구성 공간(542)으로 향하는지 또는 네이티브 구성 공간(512)으로 향하는지를 결정할 수도 있다. 일부 경우에, 구성 기입 트랜잭션이 에뮬레이션된 구성 공간(542)으로 향할 때, 프로세스 클러스터(530)는, 단계(558a)에서, 에뮬레이션된 구성 공간(542)의 타겟 구성 레지스터의 표현을 기입 데이터로 업데이트할 수도 있다. 기입 트랜잭션이 네이티브 구성 공간(512)으로 향할 때, 에뮬레이션 모듈(530)은, 단계(558b)에서, 네이티브 구성 공간(512)의 구성 레지스터를 기입 데이터로 업데이트할 수도 있다.
단계(562)에서, 에뮬레이션 모듈(530)은 구성 트랜잭션 로깅 유닛(508)을 업데이트하여 구성 기입 트랜잭션이 완료되었음을 나타낼 수도 있다. 일부 구현예들에서, 에뮬레이션 모듈(530)은 기입 트랜잭션을 서비스한 후에 구성 트랜잭션 로깅 유닛(508)으로부터 기입 트랜잭션을 제거할 수도 있다.
일부 구현예들에서, 에뮬레이션 모듈(530)은, 기입 트랜잭션에 대한 응답을 생성하여 기입 트랜잭션이 성공적으로 완료되었음을 나타낼 수도 있다. 이러한 구현예들에서, 에뮬레이션 모듈(530)은 응답을 생성하도록 버스 인터페이스 코어(510)에 지시할 수도 있다. 대안으로, 에뮬레이션 모듈(530)은 자체적으로 응답을 생성하고 그 응답을 버스에 송신할 수도 있다.
주변 장치(500)는 PCI를 구현하는 주변 장치일 수도 있다. 주변 장치(500)가 PCI 주변 장치일 때, 일부 실시예에 따라 상술한 단계들은 다음과 같이 설명될 수도 있다.
단계(552)에서, 구성 기입 TLP는 예를 들어 루트 컴플렉스로부터 수신될 수도 있다. 구성 기입 TLP는, PCIe 버스에서 수신될 수도 있으며, PCIe 코어에 의해 수신될 수도 있다. PCIe 코어는 TLP를 언팩킹하고 구성 요청을 더욱 쉽게 처리되는 포맷으로 감소시킬 수도 있다.
단계(554)에서, PCIe 코어는, 예를 들어, 어드레스 레지스터를 구성 기입 요청 정보로 업데이트함으로써 구성 기입 요청을 구성 트랜잭션 로깅에 송신할 수도 있다. 구성 트랜잭션 로깅은 자신의 보류 중인 구성 트랜잭션의 로그에 구성 기입 요청을 추가할 수도 있다. 구성 기입 요청을 구성 트랜잭션 로깅 유닛에 전달한 후, PCIe 코어는 다른 동작들을 자유롭게 실행할 수도 있다.
단계(556)에서, 구성 트랜잭션 로깅 유닛은 인터럽트를 에뮬레이션 모듈에 송신할 수도 있다. 에뮬레이션 모듈은, 인터럽트를 수신하면, 에뮬레이션 모듈을 호출할 수도 있고, 구성 트랜잭션 로깅 유닛은 응답을 기다릴 수도 있다.
단계(558a)에서, 에뮬레이션 모듈은 구성 기입 트랜잭션에 의해 기입될 에뮬레이션된 구성 레지스터를 검색할 수도 있다. 에뮬레이션 모듈은, 메모리 내의 에뮬레이션된 구성 공간에 액세스할 수도 있고, 그 공간에서 요청된 에뮬레이션된 구성 레지스터를 위치파악할 수도 있다. 에뮬레이션 모듈은, 타겟 에뮬레이션된 구성 레지스터를 위치파악하면, 에뮬레이션된 구성 공간의 에뮬레이션된 구성 레지스터를 기입 데이터로 업데이트할 수도 있다. 일부 경우에, 에뮬레이션된 구성 레지스터에 기입된 값은 주변 장치(500)의 하드웨어에 대한 업데이트를 필요로 할 수도 있다. 이러한 경우, 에뮬레이션 모듈은, 물리적 포트 구성 레지스터 또는 네이티브 구성 공간의 레지스터와 같은 추가 구성 레지스터를 기입할 수도 있다.
단계(562)에서, 에뮬레이션 모듈은 구성 트랜잭션 로그에서 완료 상태를 업데이트할 수도 있다. 이 완료 상태는 구성 기입 트랜잭션이 성공적으로 완료되었음을 나타낼 수도 있다. 구성 트랜잭션 로깅은 완료 상태를 PCIe 장치 코어에 통신할 수도 있다. PCIe 장치 코어는 루트 컴플렉스에 대한 성공적인 완료를 나타낼 수도 있다. 예를 들어, PCIe 장치 코어는 루트 컴플렉스에 구성 완료 TLP를 송신할 수도 있다. 일부 실시예에서, 구성 기입 요청이 완료될 수 없다면, 이에 따라 에뮬레이션 모듈이 완료 상태를 업데이트할 수도 있다.
도 4 내지 도 5는, 에뮬레이션된 구성 공간을 갖는 주변 장치가 어떻게 구성 판독 및 기입 트랜잭션들을 서비스할 수도 있는지에 대한 일례를 도시한다. 에뮬레이션된 구성 공간은 수정 및/또는 교체될 수도 있어서, 에뮬레이션되는 주변 장치 및/또는 기능들을 수정 및/또는 교체할 수도 있다. 게다가, 주변 장치의 에뮬레이션 구성 공간은 다수의 에뮬레이션된 구성들을 포함할 수도 있어서, 주변 장치는 다수의 장치들 및/또는 기능들을 에뮬레이션할 수 있다. 따라서, 에뮬레이션 기술은, 유연하고 적응 가능한 구성 공간을 갖는 주변 장치들의 구성을 가능하게 할 수도 있으며, 일부 경우에는, 주변 장치들의 고정되고 변경 불가능한 구성 정의를 감소시키거나 제거할 수도 있다.
IV. SR-IOV
도 6은 단일 루트 입력/출력 가상화(SR-IOV) 기능을 갖는 주변 장치(600)의 일례를 도시한다. SR-IOV는, 물리적 자원(예를 들어, 단일 네트워크 인터페이스 제어기)이 다중 자원들(예를 들어, 64개의 네트워크 인터페이스 제어기)로서 보일 수 있게 하는 확장된 기능이다. 따라서, 소정의 기능을 제공하는 주변 장치는 그 기능을 제공하는 다수의 장치들인 것처럼 보일 수도 있다. SR-IOV 가능 주변 장치의 기능들은 물리적 기능(PF) 및 가상 기능(VF)으로 분류될 수도 있다. 물리적 기능은 발견, 관리 및 조작될 수 있는 장치의 완전한 특징 기능이다. 물리적 기능에는 주변 장치를 구성하거나 제어하는 데 사용될 수 있는 구성 자원들이 있다. 물리적 기능에는, 가상화되지 않은 장치가 갖추었을 것과 동일한 구성 어드레스 공간과 메모리 어드레스 공간이 포함된다. 물리적 기능은 물리적 기능에 연관된 다수의 가상 기능들을 가질 수도 있다. 가상 기능은, 물리적 기능과 유사하지만, 구성 자원들이 부족한 경량 기능이며, 일반적으로 기저 물리적 기능의 구성에 의해 제어된다. 물리적 기능들 및/또는 가상 기능들의 각각은 컴퓨팅 시스템 상에서 실행되는 각각의 실행 스레드(예를 들어, 가상 기계)에 할당될 수도 있다.
도 6에 도시된 SR-IOV 가능 장치(600)의 예는, 물리적 기능(610a 내지 610m)당 PCIe 포트(602), 내부 라우팅(604, 606a 내지 606m), 하나 이상의 물리적 기능(610a 내지 610m), 및 하나 이상의 가상 기능(예를 들어, 620a 내지 620c, 621a 내지 621c)을 포함할 수도 있다. PCIe 포트(602)는 PCIe 버스에 대한 물리적 접속을 제공할 수도 있다. 내부 라우팅(604 및 606a 내지 606m)은 버스 트랜잭션을 적절한 물리적 기능(610a 내지 610m) 및 가상 기능으로 향하게 할 수도 있다. 각 물리적 기능(610a 내지 610m)은 내부 라우팅(604)을 통해 PCIe 포트(602)에 접속될 수도 있다. 각 가상 기능은, 제1레벨의 내부 라우팅(606a 내지 606m)을 통해, 이어서 제2레벨의 내부 라우팅(604)을 통해 PCIe 포트(602)에 접속될 수도 있다. 내부 라우팅(604)은, 각각의 물리적 기능(610a 내지 610m)과 PCIe 포트(602) 간에, 또는 임의의 가상 기능(6120a 내지 6120f)과 PCIe 포트(602) 간에 점대점 접속을 제공할 수도 있다.
각각의 물리적 기능(610a 내지 610m)은 자신들의 각각의 물리적 기능을 구현하기 위해 물리적 자원들과 연관될 수도 있다. 예를 들어, PF0(610a)은 물리적 자원(618a)에 연관될 수도 있고, PFm(610m)은 물리적 자원(618m)에 연관될 수도 있다. 가상 기능들의 각각은 또한 가상 기능의 기능성을 구현하기 위해 각각의 물리적 자원에 연관될 수도 있다. 각 물리적 기능(610a 내지 610m)은 또한 각각의 구성 자원(612a 내지 612m) 및 각각의 어드레스 변환 캐시(ATC)(614a 내지 614m)를 포함할 수도 있다. 구성 자원들(612a 내지 612m)의 각각은, 예를 들어, 4KB 구성 어드레스 공간을 포함할 수도 있다. 어드레스 변환 캐시들(614a 내지 614m)의 각각은 최근에 사용된 어드레스 변환들을 저장할 수도 있다. 물리적 기능(610a 내지 610m)은, 컴퓨팅 시스템에 대해 가시적인 어드레스 공간이 부착된 주변 장치의 물리적 어드레스 공간과 다를 때, 어드레스 변환을 제공할 수도 있다. 예를 들어, 위치에 액세스하는 가상 컴퓨터는 물리적 어드레스로 변환되는 가상 어드레스를 사용할 수도 있다.
일부 실시예에서, SR-IOV에 연관된 구성 레지스터는 주변 장치의 에뮬레이션된 구성 공간에서 에뮬레이션될 수 있다. 각 물리적 기능에는 소정 개수의 기본 어드레스 레지스터(BAR)가 포함될 수도 있다. 기본 어드레스 레지스터들은, 물리적 기능의 I/O의 어드레스 범위 및 메모리 어드레스 범위를 특정하는 구성 레지스터들이다. 기본 어드레스 레지스터에 저장된 값은, 필요에 따라, 물리적 기능에 할당된 어드레스 공간을 변경하도록 수정될 수도 있다. 기본 어드레스 레지스터는 에뮬레이션된 구성 공간에 포함될 수도 있다. 에뮬레이션된 구성 공간은, 예를 들면, 물리적 기능에 연관된 6개의 BAR, SR-IOV 기능에 대한 6개의 BAR, 및 (주변 장치가 장치 ROM을 통합하는 경우에) 확장 판독 전용 메모리(ROM)를 위한 어드레스를 저장하기 위한 1개의 BAR를 위한 표현을 포함할 수도 있다. 일부 구현예들에서, 물리적 기능의 에뮬레이션된 구성 공간의 베이스 어드레스 레지스터는 디폴트 값을 가질 수도 있다.
물리적 기능 에뮬레이션된 구성 공간은 또한 SR-IOV 기능 레지스터의 표현을 포함할 수도 있다. 일부 경우에, SR-IOV 기능 레지스터는 물리적 기능 에뮬레이션된 구성 공간의 기능 리스트로부터 판독될 수 있는 오프셋에 있을 수도 있다. 대안으로 또는 또한, 에뮬레이션 모듈은, 이 오프셋의 로컬 카피를 유지할 수도 있어서, 에뮬레이션 모듈은, 기능 리스트를 먼저 판독하지 않고 SR-IOV 기능 레지스터에 액세스할 수도 있다.
일부 구현예들에서, SR-IOV 기능 레지스터의 설정(예를 들어, 구성 기입)을 변경하려면, 가상 기능이 비활성화되어야 할 수도 있다. 예를 들어, 가상 기능의 개수 및/또는 가상 기능의 기본 어드레스 레지스터를 변경하려면, 가상 기능이 비활성화되어야 할 수도 있다. 일부 경우에는, 가상 기능을 비활성화하고 가상 기능을 재활성화함으로써, 가상 기능이 리셋될 수도 있다. SR-IOV 기능 레지스터의 설정이 변경되면, 물리적 기능이 모든 활성 가상 기능을 리셋할 수도 있다. 물리적 기능은, 수정된 SR-IOV 기능 레지스터를 더 판독할 수도 있고, 어떤 설정이 변경되었는지를 결정할 수도 있다. 이어서, 물리적 기능은, 필요할 경우, SR-IOV 기능 레지스터의 수정된 설정에 기초하여 가상 기능의 구성을 업데이트할 수도 있다.
일부 구현예들에서, 물리적 기능 및 이에 연관된 가상 기능에 대한 에뮬레이션된 구성 공간은, 제1어드레스 오프셋에서의 물리적 기능 구성 공간, 제2어드레스 오프셋에서의 가상 기능 구성 공간, 및 제3어드레스 오프셋에서의 추가 구성 화상으로 조직화된 구성 화상의 일부일 수도 있다.
SR-IOV를 위한 에뮬레이션된 구성 공간은, 각 물리적 기능을 위한 SR-IOV 기능 구성 공간, 각 가상 기능의 상태 및 기능을 유지하기 위한 구성 공간, 및 SR-IOV BAR(베이스 어드레스 레지스터)에 대한 구성 공간인, 적어도 3개의 구성 요소를 포함할 수도 있다. 일부 구현예들에서, 물리적 기능 에뮬레이션된 구성 및 가상 기능 에뮬레이션된 구성에 대한 액세스는, PCIe 코어에 도달하는 구성 공간 액세스를 포착하고 처리함으로써 처리될 수 있다. 일부 구현예들에서, SR-IOV 기본 어드레스 레지스터는, 예를 들어, 네이티브 구성 공간에 적어도 한 쌍의 기본 어드레스 레지스터들을 예약함으로써 네이티브 구성 공간의 기본 어드레스 레지스터를 사용하여 구현될 수도 있다.
일부 실시예에서, 기능 레벨 리셋(FLR), 버스 마스터 인에이블(BME), 메모리 공간 인에이블(MSE) 등의 구성 공간 내의 특정 비트에 대한 변경은, 대응하는 물리적 기능 및 연관된 가상 기능을 이용하여 애플리케이션에 통신된다. 예를 들어, 애플리케이션은 FLR 요청을 수신하고 애크할 수도 있고, 에뮬레이션 모듈은, 애플리케이션 FLR이 완료됨을 애크할 때까지 보류 중인 FLR 기능에 대한 임의의 트랜잭션에 응답하는 것을 보류할 수도 있다. 애플리케이션은, 임의의 커맨드를 실행하기 전에 각 기능(FLR, BME, MSE 등)의 상태를 확인할 수도 있니다. 애플리케이션은, 각 기능에 대하여 보류 중인 트랜잭션이 있는 경우 에뮬레이션 모듈에 통지할 수도 있고, BAR, 가상 기능의 개수 등의 구성 공간에 대하여 구성된 다양한 설정들을 확인할 수도 있다.
일부 실시예에서, 물리적 기능 및 연관된 가상 기능의 상태(기능 특성이라고도 함)는, 에뮬레이션된 구성 공간에서 유지될 수 있고, 애플리케이션 또는 에뮬레이션 모듈에 통신될 수 있다. 각 기능의 상태를 추적하기 위한 메모리 공간의 크기는, 예를 들어, 물리적 기능 또는 가상 기능마다 4바이트 정수일 수 있다. 첫 번째 정수는 물리적 기능의 상태를 제공할 수도 있고, 두 번째 정수는 첫 번째 가상 기능의 상태를 제공할 수도 있고, 이러한 방식으로 이루어질 수도 있다.
각 기능의 상태는, 즉각적인 애플리케이션 응답을 필요로 하지는 않지만 I/O 처리 중에 애플리케이션이 검사해야 하는 특성들인 정보를 포함할 수도 있다. 예를 들어, 기능이 보유 중인 FLR이면, 이를 위해 수신된 임의의 커맨드를 폐기해야 한다. 다른 일례로, BME가 설정되지 않은 경우, 애플리케이션은 DMA 트랜잭션을 해당 기능에 포스팅하지 않아야 한다. 일부 실시예에서, 각 기능의 상태는, 기능이 활성화되는지 여부(물리적 기능을 항상 활성화할 수 있는지), 기능이 보류 중인 FLR을 갖는지 여부, MSE가 (물리적 기능에 대하여) 활성화되는지 여부, BME가 활성화되는지 여부, 및 MSI -X가 활성화되는지 여부 등의 정보를 제공할 수도 있다.
다음에 따르는 것은 기능 레벨 리셋을 수행하는 일례를 제공한다. 기능 레벨 리셋은, 특정 물리적 기능 및 이에 연관된 가상 기능을 리셋하기 위한 기구를 제공한다. 일반적으로, 물리적 기능을 리셋하는 것은 물리적 기능에 연관된 가상 기능의 리셋을 트리거할 수도 있다. 기능 레벨 리셋은, 점진적 기구이며, 가상 기능과 물리적 기능이 보류 중인 동작을 완료할 수 있게 하고 정지 상태 또는 유휴 상태로 될 수 있게 한다. 기능들은, 일단 정지 상태에 있으면, 리셋될 수도 있다.
에뮬레이션 모듈은 리셋할 물리적 기능을 식별하는 기능 레벨 리셋 요청을 수신할 수도 있다. 연관된 가상 기능이 먼저 정지 상태로 될 수도 있다. 에뮬레이션 모듈은, 가상 기능에 대한 기능 특성들에서 FLR 비트를 설정함으로써 가상 기능이 리셋되고 있음을 나타낼 수도 있다. 이어서, 에뮬레이션 모듈은 FLR 메시지를 애플리케이션 큐에 송신할 수도 있고, 애플리케이션이 FLR을 애크할 때까지 가상 기능에 대한 임의의 추가 요청이 "미지원 않는 요청" 응답으로 응답된다. 일단 가상 기능이 보류 중인 임의의 트랜잭션을 완료하였다면, 애플리케이션은 기능 레벨 리셋 요청을 애크한다. 이어서, 애플리케이션은, 에뮬레이션 모듈에 대한 큐에 메시지를 송신할 수도 있다. 에뮬레이션 모듈이 구성 액세스 요청을 수신하면, 에뮬레이션 모듈은 큐를 폴링하고 FLR 애크를 수신한다. 이어서, 에뮬레이션 모듈은 가상 기능에 대한 추가 요청에 응답할 수도 있다. 가상 기능의 상태 또는 특성이 업데이트될 수도 있다. 예를 들어, MSI-X 및 BME가 비활성화될 수 있다.
물리적 기능의 경우, 에뮬레이션 모듈은, 기능 레벨 리셋을 수신하면, MSE 및 BME 상태 비트들을 통해 메모리 공간 및 버스 마스터를 비활성화할 수도 있다. 게다가, 에뮬레이션 모듈은, 모든 에뮬레이션된 및 네이티브 구성 레지스터들을 기본 값들로 되돌릴 수도 있다. 에뮬레이션 모듈은 또한 애플리케이션 큐에 FLR 메시지를 송신할 수도 있고, 물리적 기능에 대한 추가 요청은, 애플리케이션이 달리 지시할 때까지 "미지원 요청" 응답으로 응답된다. 애플리케이션은, 자신의 물리적 기능 데이터 구조 및 보류 중인 트랜잭션 큐를 리셋할 수도 있다. 애플리케이션은, 이러한 동작들을 완료하면, 에뮬레이션 모듈에 대한 큐에 메시지를 송신함으로써 기능 레벨 리셋 요청을 애크할 수도 있다. 에뮬레이션 모듈은, 구성 액세스 요청을 수신하면, 큐를 폴링하고 FLR 애크를 수신한다. 이어서, 에뮬레이션 모듈은 물리적 기능에 대한 추가 요청에 응답할 수도 있다. 물리적 기능에 연관된 모든 가상 기능들은, 루트 컴플렉스에 의해 재활성화될 때까지 비활성화될 수도 있다.
다음에 따르는 예는 주변 장치에 의한 SR-IOV 기능의 에뮬레이션을 나타낸다. 주변 장치는 예를 들어 PF0으로 할당된 하나의 물리적 기능을 포함할 수도 있다. PF0에 대한 에뮬레이션된 구성은 SR-IOV 확장 기능 레지스터를 포함한다. 게다가, 주변 장치는, PF0를 사용하여 PF0에 연관된 가상 기능을 발견, 구성, 및 관리할 수도 있다. 일반적으로, 에뮬레이션된 SR-IOV 레지스터는, SR-IOV 프로토콜에 의해 정의된 것과 동일한 디폴트 값으로 주변 장치에 업로드될 수도 있다. 일부 구현예들에서, SR-IOV 레지스터는 다른 값으로 업로드될 수도 있다. 예를 들어, PF0에 할당된 가상 함수의 총 개수는 4K로 설정될 수도 있으며, 에뮬레이션된 SR-IOV 레지스터 내의 제1가상 기능에 대한 기본 오프셋은 257로 설정될 수도 있고, 기본 가상 함수 stride는 1로 설정될 수도 있다.
이 예에서, 가상 기능은 MSI-X 기능을 포함할 수도 있다. 게다가, 물리적 기능과 가상 기능 모두는 고급 라우팅 식별(ARI) 기능을 포함할 수도 있다. ARI는, 주변 장치가 8개보다 많은 기능을 지원할 수 있게 하는 기구를 제공한다. ARI를 지원하는 주변 장치는, PCI 구성 헤더의 장치 ID 필드를 기능 번호의 일부로서 해석할 수도 있다. 이에 따라, 주변 장치가 최대 256개의 기능을 지원할 수 있다.
일부 구현예들에서, SR-IOV 제어 레지스터는 ARI 가능 계층이 활성화되는지 여부를 나타낸다. ARI 가능 계층 구조를 활성화함으로써, 예를 들어, 가상 기능이 기능 번호 8 내지 255를 사용할 수 있다. ARI 가능 계층 구조 설정은, 또한, ARI가 루트 컴플렉스에서 또는 주변 장치로부터 바로 상류측에 있는 스위치에서 활성화되었음을 나타낸다. 루트 컴플렉스는, 루트 컴플렉스 또는 스위치의 ARI 포워딩 활성화 설정과 일치하도록 ARI 가능 계층 설정을 설정할 수도 있다. 주변 장치는, ARI 가능 계층 설정의 구성을 사용하여 제1가상 기능의 오프셋을 결정할 수도 있다. 예를 들어, ARI 및 넌-ARI 모드 모두에 대하여, 제1가상 기능에 대한 기본 오프셋을 257로 설정할 수 있다.
일반적으로, 컴퓨팅 시스템에 포함된 PCI 계층이 루트 컴플렉스에 의해 열거되기 전에는, 버스 및 장치 번호가 할당되지 않는다. 열거 프로세스 중에, 열거 모듈은, PF0을 타겟으로 하지 않는 구성 액세스들에 응답하지 않을 수도 있다. 이는, 주변 장치가 주변 장치가 하나보다 많은 물리적 기능을 포함한다는 인상을 루트 컴플렉스에 제공하기를 원하지 않을 수도 있기 때문이다. 컴퓨팅 시스템의 기능 및 장치가 루트 컴플렉스에 의해 맵핑된 후, 루트 컴플렉스는, SR-IOV 구성 레지스터에 가상 기능 활성화 설정을 설정하고 ARI 기능 계층 설정을 활성화할 수도 있다.
일부 경우에, 에뮬레이션 모듈은 가상 기능을 활성화하는 트랜잭션을 캡처할 수도 있다. 이러한 경우에, 일단 가상 기능이 활성화되었다면, 에뮬레이션 모듈은, 버스 번호, 장치 번호, 및 PF0에 할당된 것 이외의 기능 번호를 타겟으로 하는 구성 트랜잭션들을 허용할 수도 있다.
일부 구현예들에서, 주변 장치는, 물리적 기능에 대한 버스 번호보다 높은 버스 번호에 위치하는 바와 같은 가상 기능을 에뮬레이션할 수도 있다. 이러한 구현예들에서, 가상 기능에 대한 구성 액세스는 구성 유형 1일 수도 있고, 이는 구성 액세스가 상위 번호 버스에 연결되어야 함을 의미한다. 표 3은 이 예의 다양한 구성 트랜잭션들이 어떻게 처리될 수도 있는지의 일례를 제공한다. 구성 트랜잭션은, 구성 유형 0(로컬 버스로 향함) 또는 구성 유형 1(상위 레벨 버스로 향하며, 해당 버스에 도달하기 위해 연결되어야 함)일 수도 있다. 타겟 버스는, 예를 들어, 주변 장치가 위치하는 버스일 수도 있고, 또는 더 높은 버스 번호일 수도 있다. 구성 유형 및 타겟 버스가 주어진 경우, 표는 구성 트랜잭션들이 물리적 기능 및/또는 연관된 가상 기능을 타겟으로 할지를 나타낸다. 마지막으로, 표는 주변 장치가 이러한 구성 트랜잭션들에 어떻게 반응할 수도 있는지를 나타낸다.
구성 트랜잭션과 응답의 예.
구성 유형(0/1) 타겟 버스 허용된 타겟 기능 응답
0 PF와 동일 PF 또는 VF 성공적임; 컴플리터 식별자가 업데이트될 수도 있음.
1 PF와 동일 PF 또는 VF 미지원 요청.
0 PF보다 높음 PF 성공적임; 컴플리터 식별자가 업데이트될 수도 있음.
1 PF보다 높음 VF 성공적임; 일반적으로, 컴플리터 식별자는 업데이트되지 않음.
구성 트랜잭션이 물리적 기능 또는 가상 기능들 중 임의의 것에 할당되지 않은 버스 번호를 타겟으로 하는 경우, 주변 장치는 미지원 요청으로 응답할 수도 있다.
표 4는 서로 다른 개수의 가상 기능들에 대한 버스 할당의 일례를 제공한다.
버스 할당의 예.
VF의 개수 ARI 가능 계층 맵핑
128 활성화 모든 가상 기능들은 물리적 기능과 동일한 버스 번호에 매핑된다.
128 비활성화 모든 가상 기능들은 물리적 기능의 버스 번호+1에 맵핑된다(예를 들어, PF0이 버스 0에 있으면, 가상 함수들은 버스 1에 있다).
4096 활성화 첫 번째 255개의 가상 함수들은 물리적 기능의 버스 번호에 맵핑될 수 있고, 나머지 가상 함수들은, 물리적 기능의 버스 번호 + 1로 시작하여 순차적으로 맵핑된다(예를 들어, PF0이 버스 0에 있으면, VF256은 버스 1에 있고, VF257은 버스 2에 있고, VF258은 버스 3에 있고, 이러한 방식으로 이어진다).
물리적 기능 및 가상 기능에 대한 에뮬레이션된 구성을 판독함으로써, 버스 할당 및 어떠한 물리적 기능과 가상 기능을 이용할 수 있는지를 학습할 수 있다. 존재하지 않는 기능에 대한 구성 트랜잭션이 수신되면, 에뮬레이션 모듈은 미지원 요청 응답으로 응답할 수도 있다.
표 5는, 가상 기능들의 활성화 여부 및 ARI 가능 계층의 활성화 여부에 기초하는 응답의 일례를 제공한다.
다양한 구성 조합에 대한 응답의 예.
VF
활성화
ARI 가능
계층
구성 유형
(0/1)
응답
아니오 비활성화 0 PF를 타겟으로 하면 성공적임; 그렇지 않다면 미지원 요청.
1 모든 액세스에 대하여 미지원 요청.
아니오 활성화
0 PF를 타겟으로 하면 성공적임; 그렇지 않다면 미지원 요청.
1 모든 액세스에 대하여 미지원 요청.
활성화 0 PF와 동일한 버스에 맵핑된 VF와 PF를 타겟으로 하면 성공적임; 그렇지 않다면 미지원 요청.
비활성화 0 PF를 타겟으로 하면 성공적임; 그렇지 않다면 미지원 요청.
1 PF의 버스 번호보다 높은 버스 번호에 맵핑된 VF를 타겟으로 하면 성공적임; 그렇지 않다면 미지원 요청. 그 이유는 기능 번호 및/또는 버스 번호가 기존의 기능에 맵핑되지 않기 때문이다.
V. 방법
도 7 내지 도 9는 주변 장치의 구성 공간을 에뮬레이션하는 방법들의 실시예들을 도시한다. 이러한 방법들은 전술한 시스템들에 의해 구현될 수도 있다.
도 7은 구성 액세스 요청을 서비스하기 위한 프로세스(700)를 도시한다. 구성 액세스 요청은 에뮬레이션된 구성 공간을 포함하는 주변 장치에 의해 수신될 수도 있다. 에뮬레이션된 구성 공간은, 주변 장치가 하나 이상의 상이한 주변 장치 및/또는 기능들을 에뮬레이션하게 할 수도 있다. 구성 액세스 요청은 구성 레지스터를 판독하고 및/또는 구성 레지스터를 기입하기 위한 요청일 수도 있다.
단계(702)에서, 주변 장치는 구성 액세스 요청을 수신할 수도 있다. 구성 액세스 요청은 버스를 통해 수신될 수도 있다. 구성 액세스 요청은 구성 액세스 요청의 타겟을 식별하는 정보를 포함할 수도 있다. 예를 들어, 구성 액세스 요청은 버스 식별자, 장치 식별자, 기능 식별자, 및/또는 어드레스를 포함할 수도 있다. 이 식별 정보는, 주변 장치가 구성 액세스 요청을 수용하고 서비스해야 하는지 여부를 나타낼 수도 있다. 일부 구현예들에서, 주변 장치는 다수의 주변 장치들 및/또는 기능들을 에뮬레이션할 수도 있다. 이러한 구현예들에서, 주변 장치는, 하나보다 많은 주변 장치 및/또는 기능에 대한 구성 액세스 요청을 수용할 수도 있다.
단계(706)에서, 주변 장치는, 구성 액세스 요청이 주변 장치의 네이티브 구성 공간 이외의 구성 공간에 대한 것인지를 결정할 수도 있다. 구성 액세스 요청은 에뮬레이션된 어드레스 공간에 있는 구성 레지스터에 대한 것일 수도 있다. 네이티브 구성 공간에 대한 구성 액세스 요청은 프로세스(700)에 의해 도시된 것과는 다르게 처리될 수도 있다. 예를 들어, 네이티브 구성에 대한 구성 액세스 요청은, 주변 장치의 버스 인터페이스 코어 등의 주변 장치의 네이티브 하드웨어에 의해 처리될 수도 있다.
단계(710)에서, 주변 장치는 에뮬레이션된 구성 공간으로부터 에뮬레이션된 구성을 검색할 수도 있다. 에뮬레이션된 구성은 하나 이상의 구성 레지스터에 대한 표현을 포함할 수도 있다. 일부 구현예들에서, 에뮬레이션된 구성 공간은, 하나보다 많은 기능에 대한 에뮬레이션된 구성 헤더 및/또는 레지스터(에뮬레이션된 구성이라 칭할 수도 있음)를 포함한다. 이러한 구현예들에서, 주변 장치는, 구성 액세스 요청에 대한 타겟 기능을 결정할 수도 있고, 적절한 에뮬레이션된 구성을 검색할 수도 있다.
단계(712)에서, 주변 장치는 에뮬레이션된 구성을 사용하여 구성 액세스 요청을 서비스할 수도 있다. 구성 액세스 요청을 서비스하는 것은 구성 액세스 요청이 액세스를 요청하고 있는 레지스터를 식별하는 것을 포함할 수도 있다. 일부 구현예들에서, 구성 액세스 요청을 서비스하는 것은 에뮬레이션된 구성을 구성 액세스 요청의 소스에 제공하는 것을 포함할 수도 있다. 이러한 구현예들에서, 주변 장치는 에뮬레이션된 구성으로부터 식별된 구성 레지스터의 표현을 판독할 수도 있다. 다른 구현예들에서, 구성 액세스 요청을 서비스하는 것은 에뮬레이션된 구성을 업데이트하는 것을 포함할 수도 있다. 이러한 구현예들에서, 주변 장치는 에뮬레이션된 구성에서 식별된 구성 레지스터의 표현을 기입하거나 업데이트할 수도 있다.
도 8은 구성 레지스터를 판독하도록 구성 액세스 요청을 서비스하기 위한 프로세스(800)의 일례를 도시한다. 프로세스(800)는 주변 장치에 의해 구현될 수도 있는 버스 프로토콜의 일례로서 PCI를 사용하여 도시된다. 주변 장치는 PCI 에뮬레이션된 구성 공간을 구현할 수도 있다. PCI 에뮬레이션된 구성 공간은, 주변 장치가 하나 이상의 PCI 장치 및/또는 기능을 에뮬레이션하도록 허용할 수도 있다. 일부 실시예에서, 프로세스(800)는, 주변 장치가 다른 버스 프로토콜에 맞춰진 에뮬레이션된 구성 공간을 사용하는 경우와 같이 기타 버스 프로토콜들로 구현될 수도 있다.
단계(802)에서, 주변 장치의 PCI 코어는 루트 컴플렉스로부터 PCI 구성 액세스 요청을 수신할 수도 있다. 구성 액세스 요청은 구성 액세스 요청의 타겟을 식별하는 정보를 포함할 수도 있다. 식별 정보는, 주변 장치가 구성 액세스 요청을 수용하고 서비스해야 하는지 여부를 나타낼 수도 있다. 주변 장치는 다수의 주변 장치들 및/또는 기능들을 에뮬레이션할 수도 있다. 이러한 구현예들에서, 주변 장치는 하나보다 많은 주변 장치 및/또는 기능에 대한 구성 액세스 요청을 수용할 수도 있다.
단계(804)에서, 주변 장치의 PCI 코어는 주변 장치의 구성 관리 모듈에 PCI 구성 액세스 요청을 송신할 수도 있다. 구성 관리 모듈은 구성 액세스 요청들의 로그를 유지할 수도 있다. 로그는 주변 장치에 의해 수신된 구성 액세스 요청들을 추적할 수도 있다.
단계(806)에서, 구성 관리 모듈은, PCI 구성 액세스 요청이 네이티브 구성 공간 이외의 구성 공간을 타겟으로 하고 있다고 결정할 수도 있다. 네이티브 구성 공간은, 불필요할 수도 있고 및/또는 에뮬레이션하는 데 바람직하지 않을 수도 있는 버스 속도 선택 등의 기본 기능을 위한 구성 레지스터를 포함할 수도 있다. 네이티브 구성 공간 이외의 구성 공간을 에뮬레이션할 수도 있다. 에뮬레이션된 구성 공간은 에뮬레이션된 구성 헤더를 사용하여 표현될 수도 있다.
단계(808)에서, 주변 장치의 구성 관리 모듈은, 주변 장치의 (예를 들어, 프로세서, 제어 로직 회로 등으로서 구현될 수 있는) 에뮬레이션 모듈에 저-지연 통지(예를 들어, 인터럽트 요청)를 송신할 수도 있다. 인터럽트는, 구성 액세스 요청이 수신되었다는 것 및/또는 에뮬레이션 모듈이 구성 액세스 요청을 서비스해야 한다는 것을 주변 장치의 에뮬레이션 모듈에 통지할 수도 있다.
단계(810)에서, 주변 장치의 에뮬레이션 모듈은 (예를 들어, 구성 액세스 에뮬레이션 소프트웨어를 실행하여 구성 액세스 요청을 처리함으로써) 인터럽트 요청에 응답할 수도 있다. 에뮬레이션 모듈은 에뮬레이션된 구성 공간으로부터 에뮬레이션된 구성을 검색할 수도 있다. 일부 구현예들에서, 주변 장치는 하나 이상의 주변 장치 및/또는 기능을 에뮬레이션할 수도 있다. 이러한 구현예들에서, 구성 액세스 요청은 타깃 에뮬레이션된 주변 장치 및/또는 기능의 아이덴티티를 포함할 수도 있다. 또한, 구성 공간 에뮬레이션 소프트웨어는 타겟 에뮬레이션된 주변 장치 및/또는 기능에 대한 구성을 검색할 수도 있다. 일부 구현예들에서, 에뮬레이션된 구성 공간은 DRAM에 저장되거나, 내부적으로 에뮬레이션될 수 있다. 영구 메모리는, 에뮬레이션된 구성 공간이 전원이 꺼진 상태에서 메모리에 유지되도록 에뮬레이션된 구성 공간을 저장하는 데에도 사용할 수 있다. 일부 실시예에서, 영구 메모리에 저장된 에뮬레이션 구성 공간은, 기동시 DRAM 또는 로컬 메모리에 로딩되어 에뮬레이션 구성 공간에 대한 더욱 빠른 액세스를 제공할 수 있다. 일부 구현예들에서, 구성 공간 에뮬레이션 소프트웨어는 고립된 환경(isolated environment)에서 실행된다. 고립된 환경에서, 구성 공간 에뮬레이션 소프트웨어는 다른 소프트웨어의 개입이나 간섭 없이 안전하게 실행될 수도 있다.
단계(812)에서, PCI 구성 액세스 요청은 검색된 에뮬레이션된 구성을 사용하여 서비스될 수도 있다. 일부 구현예들에서, 구성 액세스 요청은 구성 판독 요청일 수도 있다. 이러한 구현예들에서, 프로세스(800)는, 구성 액세스 요청을 서비스하는 것이 검색된 에뮬레이션된 구성을 PCI 루트 컴플렉스에 송신하는 것을 포함할 수도 있는 단계(814)를 포함할 수도 있다. 일부 실시예에서, 판독되는 에뮬레이션된 구성이 판독시 자신의 상태를 변경하는 레지스터의 유형(예를 들어, 클리어-온-판독 레지스터, 또는 클리어-온-판독 비트를 갖는 것)을 포함하면, 프로세스(800)는, 또한, 에뮬레이션된 구성의 콘텐츠를 구성 액세스 요청을 서비스하는 것의 일부로서 수정할 수도 있다.
도 9는, 구성 레지스터를 기입하기 위한 구성 액세스 요청을 서비스하기 위한 프로세스(900)의 일례를 도시한다. 프로세스(900)는 주변 장치에 의해 구현될 수도 있는 버스 프로토콜의 일례로서 PCI를 사용하여 도시된다. 주변 장치는 PCI 에뮬레이션 시스템을 구현할 수도 있다. PCI 에뮬레이션 시스템은 주변 장치가 하나 이상의 PCI 장치 및/또는 기능을 에뮬레이션하도록 허용할 수도 있다. 프로세스(900)는, 주변 장치가 다른 버스 프로토콜을 사용하는 에뮬레이션 시스템을 사용하는 경우와 같이 기타 버스 프로토콜들로 구현될 수도 있다.
단계(902)에서, 주변 장치의 PCI 코어는 루트 컴플렉스로부터 PCI 구성 액세스 요청을 수신할 수도 있다. 구성 액세스 요청은 구성 액세스 요청의 타겟을 식별하는 정보를 포함할 수도 있다. 식별 정보는 주변 장치가 구성 액세스 요청을 수용하고 서비스해야 하는지 여부를 나타낼 수도 있다. 주변 장치는 다수의 주변 장치들 및/또는 기능들을 에뮬레이션할 수도 있다. 이러한 구현예들에서, 주변 장치는 하나보다 많은 주변 장치 및/또는 기능에 대한 구성 액세스 요청을 수용할 수도 있다.
단계(904)에서, 주변 장치의 PCI 코어는 주변 장치의 구성 관리 모듈에 PCI 구성 액세스 요청을 송신할 수도 있다. 구성 관리 모듈은 구성 액세스 요청들의 로그를 유지할 수도 있다. 로그는 주변 장치에 의해 수신된 구성 액세스 요청들을 추적할 수도 있다.
단계(906)에서, 구성 관리 모듈은, PCI 구성 액세스 요청이 네이티브 구성 공간 이외의 구성 공간을 타겟으로 한다고 결정할 수도 있다. 네이티브 구성 공간은, 불필요할 수도 있고 및/또는 에뮬레이션하는 데 바람직하지 않을 수도 있는 버스 속도 선택과 같은 기본 기능을 위한 구성 레지스터를 포함할 수도 있다. 기본 구성 공간 이외의 구성 공간을 에뮬레이션할 수도 있다. 에뮬레이션된 구성 공간은 에뮬레이션된 구성 헤더를 사용하여 표현될 수도 있다.
단계(908)에서, 주변 장치의 구성 관리 모듈은 주변 장치의 에뮬레이션 모듈에 저-지연 통지(예를 들어, 인터럽트 요청)를 송신할 수도 있다. 인터럽트는, 구성 액세스 요청이 수신되었다는 것 및/또는 에뮬레이션 모듈이 구성 액세스 요청을 서비스해야 한다는 것을 주변 장치의 에뮬레이션 모듈에 통지할 수도 있다.
단계(910)에서, 주변 장치의 에뮬레이션 모듈은 인터럽트 요청(예컨대, 구성 공간 에뮬레이션 소프트웨어를 실행)에 응답할 수도 있다. 에뮬레이션 모듈은 에뮬레이션된 구성 공간으로부터 에뮬레이션된 구성을 검색할 수도 있다. 일부 구현예들에서, 주변 장치는 하나 이상의 주변 장치 및/또는 기능을 에뮬레이션할 수도 있다. 이러한 구현예들에서, 구성 액세스 요청은 타겟 에뮬레이션된 주변 장치 및/또는 기능의 아이덴티티를 포함할 수도 있다. 게다가, 구성 공간 에뮬레이션 소프트웨어는 타겟 에뮬레이션된 주변 장치 및/또는 기능에 대한 구성을 검색할 수도 있다. 일부 구현예들에서, 에뮬레이션된 구성 공간은 DRAM에 저장되거나, 내부적으로 에뮬레이션될 수 있다. 영구 메모리는, 에뮬레이션된 구성 공간이 전원이 꺼진 상태에서 메모리에 유지되도록 에뮬레이션된 구성 공간을 저장하는 데에도 사용될 수 있다. 일부 실시예에서, 영구 메모리에 저장된 에뮬레이션 구성 공간은, 기동시 DRAM 또는 로컬 메모리에 로딩되어 에뮬레이션 구성 공간에 더욱 빨리 액세스할 수 있다. 일부 구현예들에서, 구성 공간 에뮬레이션 소프트웨어는 고립된 환경에서 실행된다. 고립된 환경에서, 구성 공간 에뮬레이션 소프트웨어는 다른 소프트웨어의 개입이나 간섭 없이 안전하게 실행될 수도 있다.
단계(912)에서, PCI 구성 액세스 요청은 에뮬레이션된 구성 헤더를 사용하여 서비스될 수도 있다. 일부 구현예들에서, 구성 지원 요청은 구성 기입 요청일 수도 있다. 이러한 구현예들에서, 프로세스(900)는, 구성 액세스 요청을 서비스하는 것이 에뮬레이션된 구성을 업데이트하는 것을 포함할 수도 있는 단계(914)를 포함할 수도 있다.
도 7 내지 도 9에 도시한 프로세스들(또는 본 명세서에서 설명하는 다른 임의의 프로세스들, 또는 변형예들, 및/또는 이들의 조합)의 일부 또는 전부는, 실행가능 명령어들과 함께 구성된 하나 이상의 컴퓨터 시스템들의 제어 하에 수행될 수도 있고, 하드웨어 또는 이들의 조합에 의해 하나 이상의 프로세서에서 집합적으로 실행되는 코드(예를 들어, 실행가능 명령어, 하나 이상의 컴퓨터 프로그램, 또는 하나 이상의 애플리케이션)로서 구현될 수도 있다. 코드는, 예를 들어, 하나 이상의 프로세서에 의해 실행가능한 복수의 명령어를 포함하는 컴퓨터 프로그램의 형태로 컴퓨터 판독가능 저장 매체에 저장될 수도 있다. 컴퓨터 판독가능 저장 매체는 비일시적일 수도 있다.
일반적으로, 본 명세서에 개시된 구성 요소들, 시스템들, 및 주변 장치들 중 임의의 것은, 하드웨어로 또는 하드웨어와 소프트웨어의 조합으로 부분적으로 또는 전체적으로 구현될 수 있다. 하드웨어는, SoC(시스템-온-칩), ASIC(주문형 집적 회로), 프로세서 또는 FPGA(필드 프로그래머블 게이트 어레이)와 같은 전자 회로들을 포함할 수 있다.
VI. 컴퓨터 시스템
도 10은, 적어도 하나의 예시적인 실시예에 따라, 하나 이상의 네트워크들을 통해 접속된 하나 이상의 서비스 제공자 컴퓨터 및/또는 사용자 장치를 포함하는 본 명세서에 설명된 특징부들과 시스템들에 대한 아키텍처의 일례를 도시한다. 도 1 내지 도 14에서 설명한 장치들은, 도 10에 설명된 컴퓨팅 장치들의 하나 이상의 구성요소들을 사용할 수도 있고, 또는 도 10에 설명된 하나 이상의 컴퓨팅 장치를 나타낼 수도 있다. 도시된 아키텍처(1000)에서, 하나 이상의 사용자(1002)는, 하나 이상의 네트워크(1008)를 통해 애플리케이션(1006)(예를 들어, 웹 브라우저 또는 모바일 장치 애플리케이션)에 액세스하기 위해 사용자 컴퓨팅 장치들(1004(1)-(N))을 사용할 수도 있다. 일부 양태들에서, 애플리케이션(1006)은 컴퓨팅 자원 서비스 또는 서비스 제공자에 의해 호스팅, 관리 및/또는 제공될 수도 있다. 하나 이상의 서비스 제공자 컴퓨터(1010)는, 사용자(들)(1002)가 상호작용할 수도 있는 사용자 장치(1004)에서 동작하도록 구성된 네이티브 애플리케이션을 제공할 수도 있다. 일부 예들에서, 서비스 제공자 컴퓨터(들)(1010)는, 저-지연 데이터 저장, 내구성 데이터 저장, 데이터 액세스, 관리, 가상화, 클라우드 기반 소프트웨어 솔루션, 전자 콘텐츠 성능 관리 등의 컴퓨팅 자원들을 제공할 수도 있지만, 이에 한정되지 않는다. 서비스 제공자 컴퓨터(들)(1010)는, 또한, 웹 호스팅, 컴퓨터 애플리케이션 개발 및/또는 구현 플랫폼, 전술한 것들의 조합 등을 사용자(들)(1002)에게 제공하도록 동작할 수도 있다. 일부 예들에서, 서비스 제공자 컴퓨터(들)(1010)는 하나 이상의 제3자 컴퓨터(1012)와 통신할 수도 있다.
일부 예들에서, 네트워크(들)(1008)는, 케이블 네트워크, 인터넷, 무선 네트워크, 셀룰러 네트워크, 및 다른 개인 및/또는 공용 네트워크들 등의 서로 다른 많은 유형의 네트워크들 중 임의의 하나 또는 조합을 포함할 수도 있다. 도시된 예는 네트워크(들)(1008)를 통해 애플리케이션(1006)에 액세스하는 사용자(들)(1002)를 나타내고 있지만, 설명된 기술들은, 사용자(들)(1002)가 유선 전화선을 거친 사용자 장치(들)(1004)를 통해, 키오스크를 통해, 또는 다른 임의의 방식으로 서비스 제공자 컴퓨터(들)(1010)와 상호작용하는 경우에 적용될 수도 있다. 또한, 설명된 기술들은 넌-클라이언트/서버 장치(예컨대, 국부적으로 저장된 애플리케이션 등)뿐만 아니라 다른 클라이언트/서버 장치(예를 들어, 셋톱 박스 등)에도 적용될 수도 있다는 점에 주목한다.
간략하게 전술한 바와 같이, 애플리케이션(1006)은, 사용자(들)(1002)가 서비스 제공자 컴퓨터(1010)와 상호 작용하게 예를 들어 웹 콘텐츠(예를 들어, 웹 페이지, 음악, 비디오 등)에 액세스하게 할 수도 있다. 서버들의 클러스터에 또는 서버 팜으로서 배치될 수도 있는 서비스 제공자 컴퓨터(들)(1010)는 애플리케이션(1006) 및/또는 클라우드 기반 소프트웨어 서비스를 호스팅할 수도 있다. 다른 서버 아키텍처들은, 또한, 애플리케이션(1006)을 호스팅하는 데 사용될 수도 있다. 애플리케이션(1006)은 많은 사용자들(1002)로부터의 요청을 처리할 수도 있고, 이에 응답하여 다양한 아이템 웹 페이지들을 제공할 수도 있다. 애플리케이션(1006)은, 소셜 네트워킹 사이트, 온라인 소매업체, 정보 사이트, 블로그 사이트, 검색 엔진 사이트, 뉴스 및 엔터테인먼트 사이트 등을 포함하는 사용자 상호작용을 지원하는 임의의 유형의 웹사이트를 제공할 수 있다. 상술한 바와 같이, 설명된 기술들은, 사용자 장치(들)(1004)에서 실행되고 있는 다른 애플리케이션들과 같이 애플리케이션(1006)의 외부에서 유사하게 구현될 수 있다.
사용자 장치(들)(1004)는, 이동 전화, 스마트폰, PDA(개인 정보 단말기), 랩톱 컴퓨터, 데스크톱 컴퓨터, 씬 클라이언트(thin-client) 장치, 태블릿 PC, 전자 서적(e-book) 판독기 등의 임의의 유형의 컴퓨팅 장치일 수도 있지만, 이러한 예로 한정되지 않는다. 일부 예들에서, 사용자 장치(들)(1004)는, 네트워크(1008)를 통해 또는 다른 네트워크 접속을 통해 서비스 제공자 컴퓨터(들)(1010)와 통신할 수도 있다. 또한, 사용자 장치(들)(1004)는, 서비스 제공자 컴퓨터(들)(1010)(예를 들어, 서비스 제공자 컴퓨터(1010)와 통합된 콘솔 장치)에 의해 관리되고 제어되는 분산형 시스템의 일부일 수도 있고 그 외에는 그 서비스 제공자 컴퓨터(들)의 일부일 수도 있다.
예시적인 한 구성에 있어서, 사용자 장치(들)(1004)는, 적어도 하나의 메모리(1014) 및 하나 이상의 처리 유닛(또는 프로세서(들)(1016))을 포함할 수도 있다. 프로세서(들)(1016)는 하드웨어, 컴퓨터 실행가능 명령어, 펌웨어, 또는 이들의 조합으로 적절하게 구현될 수도 있다. 프로세서(들)(1016)의 컴퓨터 실행가능 명령어 또는 펌웨어 구현은, 기술된 다양한 기능들을 수행하기 위해 임의의 적절한 프로그래밍 언어로 작성된 컴퓨터 실행가능 또는 기계 실행가능 명령어들을 포함할 수도 있다. 사용자 장치(들)(1004)는, 또한, 사용자 장치(들)(1004)에 연관된 지리적 위치 정보를 제공 및/또는 기록하기 위한 지리적 위치 장치(예를 들어, 글로벌 위치확인 시스템(GPS) 장치 등)를 포함할 수도 있다.
메모리(1014)는, 프로세서(들)(1016) 상에 로딩가능하며 실행가능한 프로그램 명령어 및 이들 프로그램의 실행 동안 생성되는 데이터를 저장할 수도 있다. 사용자 장치(들)(1004)의 구성 및 유형에 따라, 메모리(1014)는 (RAM 등의) 휘발성 및/또는 (ROM, 플래시 메모리 등의) 비휘발성일 수도 있다. 사용자 장치(들)(1004)는, 또한, 자기 저장 장치, 광 디스크, 및/또는 테이프 저장 장치를 포함하지만 이에 제한되지 않는 추가 탈착가능 저장 장치 및/또는 탈착불가 저장 장치를 포함할 수도 있다. 디스크 드라이브 및 이에 연관된 컴퓨터 판독가능 매체는 컴퓨팅 장치에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 및 기타 데이터의 비휘발성 저장 장치를 제공할 수도 있다. 일부 구현예들에서, 메모리(1014)는, SRAM, DRAM, 또는 ROM 등의 서로 다른 다수의 유형의 메모리를 포함할 수도 있다.
메모리(1014)의 내용을 보다 상세히 설명하면, 메모리(1014)는, 예를 들어 브라우저 애플리케이션(1006) 또는 전용 애플리케이션(예를 들어, 스마트폰 애플리케이션, 태블릿 애플리케이션 등)을 통해 적어도 하나의 사용자 제공 입력 요소 또는 전자 서비스 웹 페이지를 포함하는 본 명세서에 개시된 특징부들을 구현하기 위한 운영 시스템 및 하나 이상의 애플리케이션 또는 서비스를 포함할 수도 있다. 브라우저 애플리케이션(1006)은, 서비스 제공자 컴퓨터(들)(1010)와 상호작용하기 위한 웹사이트 또는 다른 인터페이스를 수신, 저장, 및/또는 표시하도록 구성될 수도 있다. 또한, 메모리(1014)는, 사용자 ID, 패스워드, 및/또는 다른 사용자 정보 등의 액세스 증명서 및/또는 다른 사용자 정보를 저장할 수도 있지만, 이에 한정되는 것은 아니다. 일부 예들에서, 사용자 정보는, 장치 ID, 쿠키, IP 어드레스, 위치 등의 계정 액세스 요청을 인증하기 위한 정보를 포함할 수도 있지만, 이러한 예로 한정되지 않는다. 또한, 사용자 정보는, 보안 질문에 대한 사용자 제공 응답 또는 사용자 장치(1004)에 의해 취득된 지리적 위치를 포함할 수도 있다.
일부 양태들에서, 서비스 제공자 컴퓨터(들)(1010)는, 또한, 이동 전화, 스마트폰, 개인 정보 단말기(PDA), 랩톱 컴퓨터, 데스크톱 컴퓨터, 서버 컴퓨터, 씬 클라이언트 장치, 태블릿 PC 등의 임의의 유형의 컴퓨팅 장치일 수도 있지만, 이러한 예로 한정되지 않는다. 또한, 일부 실시예에서, 서비스 제공자 컴퓨터(들)(1010)는 호스팅된 컴퓨팅 환경에서 구현되는 하나 이상의 가상 기계에 의해 실행된다는 점을 주목해야 한다. 호스팅된 컴퓨팅 환경은 하나 이상의 신속하게 프로비저닝되고 해제된 컴퓨팅 자원들을 포함할 수도 있으며, 이러한 컴퓨팅 자원들은 컴퓨팅 장치, 네트워킹 장치, 및/또는 저장 장치를 포함할 수도 있다. 호스팅된 컴퓨팅 환경은 또한 클라우드 컴퓨팅 환경이라고 할 수도 있다. 일부 예들에서, 서비스 제공자 컴퓨터(들)(1010)는, 네트워크(들)(1008)를 통해 또는 다른 네트워크 접속을 통해 사용자 장치(들)(1004) 및/또는 다른 서비스 제공자들과 통신할 수도 있다. 서비스 제공자 컴퓨터(들)(1010)는, 아마도 클러스터 내에, 서버 팜으로서, 또는 서로 연관되지 않은 개별 서버들로서 배열된 하나 이상의 서버를 포함할 수도 있다. 이러한 서버들은, 통합 분산형 컴퓨팅 환경의 일부로서 본 명세서에서 설명된 키워드 분류 및 등급 특징 서비스를 구현하도록 구성될 수도 있다.
예시적인 한 구성에 있어서, 서비스 제공자 컴퓨터(들)(1010)는, 적어도 하나의 메모리(1018) 및 하나 이상의 처리 유닛(또는 프로세서(들)(1020))을 포함할 수도 있다. 프로세서(들)(1020)는, 하드웨어, 컴퓨터 실행가능 명령어, 펌웨어, 또는 이들의 조합으로 적절하게 구현될 수도 있다. 프로세서(들)(1020)의 컴퓨터 실행가능 명령어 또는 펌웨어 구현은, 기술된 다양한 기능들을 수행하기 위해 임의의 적절한 프로그래밍 언어로 작성된 컴퓨터 실행가능 또는 기계 실행가능 명령어들을 포함할 수도 있다.
일부 경우에, 하드웨어 프로세서(들)(1020)는 단일 코어 프로세서 또는 멀티 코어 프로세서일 수도 있다. 멀티 코어 프로세서는 동일한 프로세서 내에 다수의 처리 유닛들을 포함할 수도 있다. 일부 실시예에서, 멀티 코어 프로세서들은, 멀티 코어들 간의 제2레벨 또는 제3레벨 캐시와 버스 등의 소정의 자원들을 공유할 수도 있다. 일부 경우에, 단일 코어 또는 멀티 코어 프로세서의 각 코어는, 또한, 다중 실행 논리 프로세서(또는 스레드)를 포함할 수도 있다. (다중 논리 프로세서들을 지원하는) 이러한 코어에서는, 실행 파이프 라인의 여러 단계들과 하위 수준 캐시들도 공유될 수도 있다.
메모리(1018)는, 프로세서(들)(1020) 상에 로딩될 수 있고 실행가능한 프로그램 명령어들 및 이들 프로그램의 실행 동안 생성된 데이터를 저장할 수도 있다. 서비스 제공자 컴퓨터(들)(1010)의 구성 및 유형에 따라, 메모리(1018)는 (RAM 등의) 휘발성 및/또는 (ROM, 플래시 메모리 등의) 비휘발성일 수도 있다. 서비스 제공자 컴퓨터(들)(1010) 또는 서버는, 또한, 탈착가능 저장 장치 및/또는 탈착불가 저장 장치를 포함할 수도 있는 추가 저장 장치(1022)를 포함할 수도 있다. 추가 저장 장치(1022)는 자기 저장 장치, 광학 디스크, 및/또는 테이프 저장 장치를 포함할 수도 있지만, 이에 한정되는 것은 아니다. 디스크 드라이브 및 이에 연관된 컴퓨터 판독가능 매체는 컴퓨팅 장치에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 및 기타 데이터의 비휘발성 저장 장치를 제공할 수도 있다. 일부 구현예들에서, 메모리(1018)는, SRAM, DRAM, 또는 ROM 등의 서로 다른 다수의 유형의 메모리를 포함할 수도 있다.
탈착가능 및 탈착불가인, 메모리(1018), 추가 저장 장치(1022)는 모두 컴퓨터 판독가능 저장 매체의 예들이다. 예를 들어, 컴퓨터 판독가능 저장 매체는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 다른 데이터와 같은 정보를 저장하기 위한 임의의 방법 또는 기술로 구현된 휘발성 또는 비휘발성, 탈착가능 및 탈착불가 매체를 포함할 수도 있다. 메모리(1018)와 추가 저장 장치(1022)는 모두 컴퓨터 저장 매체의 예들이다. 서비스 제공자 컴퓨터(들)(1010)에 존재할 수도 있는 추가 유형의 컴퓨터 저장 매체는, PRAM, SRAM, DRAM, RAM, ROM, EEPROM, 플래시 메모리, 또는 다른 메모리 기술, CD-ROM, DVD, 또는 다른 광학 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치, 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 서비스 제공자 컴퓨터(들)(1010)에 의해 액세스될 수 있는 다른 임의의 매체를 포함할 수도 있지만, 이러한 예들로 한정되지 않는다. 상기한 예들 중 임의의 것의 조합도 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
대안으로, 컴퓨터 판독가능 통신 매체는, 반송파 또는 다른 전송과 같이 데이터 신호 내에서 송신되는 컴퓨터 판독가능 명령어, 프로그램 모듈, 또는 다른 데이터를 포함할 수도 있다. 그러나, 본 명세서에서 사용되는 바와 같이, 컴퓨터 판독가능 저장 매체는 컴퓨터 판독가능 통신 매체를 포함하지 않는다.
서비스 제공자 컴퓨터(들)(1010)는, 또한, 서비스 제공자 컴퓨터(들)(1010)가 저장된 데이터베이스, 다른 컴퓨팅 장치 또는 서버, 사용자 단말, 및/또는 네트워크(들)(1008) 상의 다른 장치들과 통신할 수 있게 하는 통신 접속부(들)(1024)를 포함할 수도 있다. 서비스 제공자 컴퓨터(들)(1010)는, 또한, 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 디스플레이, 스피커, 프린터 등과 같은 I/O 장치(들)(1026)를 포함할 수도 있다.
메모리(1018)는, 관리 버퍼(1032)와 로깅 버퍼(1040)를 포함하여, 본 명세서에 개시된 특징부들을 구현하기 위한 운영 시스템(1028), 하나 이상의 데이터 저장소(1030), 및/또는 하나 이상의 애플리케이션 프로그램 또는 서비스를 포함할 수도 있다. 본 명세서에 설명된 모듈들은 소프트웨어 모듈, 하드웨어 모듈, 또는 이들의 적절한 조합일 수도 있다. 모듈이 소프트웨어 모듈인 경우, 모듈은, 비일시적 컴퓨터 판독가능 매체에서 구체화될 수 있고, 본 명세서에 설명된 컴퓨터 시스템의 프로세서에 의해 처리될 수 있다. 설명된 프로세스 및 아키텍처는 임의의 사용자 상호작용 전에 실시간으로 또는 비동기 모드에서 수행될 수 있다는 점에 주목해야 한다. 모듈은 도 10에서 제안된 방식으로 구성될 수도 있고/있거나, 본 명세서에서 설명된 기능들은 개별 모듈들로서 존재하는 하나 이상의 모듈들에 의해 제공될 수 있고 및/또는 본 명세서에서 설명된 모듈 기능들은 다수의 모듈들에 걸쳐 분산될 수 있다.
도 11은 다양한 실시예에 따라 양태들을 구현하기 위한 예시적인 환경(1100)의 양태들을 도시한다. 인식할 수 있는 바와 같이, 웹 기반 환경이 설명을 위해 사용되지만, 다양한 환경들을 구현하도록 상이한 환경들이 적절하게 사용될 수도 있다. 환경은, 적절한 네트워크(1104)를 통해 요청, 메시지, 또는 정보를 송신 및 수신하고 정보를 장치의 사용자에게 다시 반송하도록 동작가능한 임의의 적절한 장치를 포함할 수 있는 전자 클라이언트 장치(1102)를 포함한다. 이러한 클라이언트 장치의 예로는, 퍼스널 컴퓨터, 휴대폰, 핸드헬드 메시징 장치, 랩톱 컴퓨터, 셋톱 박스, 개인 정보 단말기, 전자 북 판독기 등이 있다. 네트워크는, 인트라넷, 인터넷, 셀룰러 네트워크, 로컬 영역 네트워크, 또는 다른 임의의 이러한 네트워크 또는 이들의 조합을 포함하는 임의의 적절한 네트워크를 포함할 수 있다. 이러한 시스템에 사용되는 구성요소들은 선택되는 환경 및/또는 네트워크의 유형에 적어도 부분적으로 의존할 수 있다. 이러한 네트워크를 통해 통신하기 위한 프로토콜과 구성요소는 공지되어 있으며 본 명세서에서 상세히 설명하지 않는다. 네트워크를 통한 통신은 유선 접속 또는 무선 접속 및 이들의 조합에 의해 가능해질 수 있다. 이 예에서, 환경이 요청을 수신하고 이에 응답하여 콘텐츠를 제공하도록 웹 서버(1106)를 포함하므로 네트워크가 인터넷을 포함하지만, 다른 네트워크에 대해서는, 유사한 목적을 제공하는 대체 장치가 통상의 기술자에게 자명하다.
예시적인 환경은 적어도 하나의 애플리케이션 서버(1108) 및 데이터 저장소(1110)를 포함한다. 적절한 데이터 저장소로부터 데이터를 취득하는 것과 같은 작업을 수행하기 위해 상호작용할 수 있는, 여러 애플리케이션 서버들, 계층들, 또는 기타 요소들, 프로세스들 또는 구성요소들이 연결되거나 그 외에는 구성될 수도 있음을 이해해야 한다. 본 명세서에서 사용되는 바와 같이, "데이터 저장소"라는 용어는, 임의의 표준 환경, 분산 환경, 또는 클러스터된 환경에서 다수의 데이터 서버들, 데이터베이스들, 데이터 저장 장치들, 및 데이터 저장 매체들의 임의의 개수와 조합을 포함할 수도 있는, 데이터를 저장, 액세스, 및 검색할 수 있는 임의의 장치 또는 장치들의 조합을 가리킨다. 애플리케이션 서버는, 애플리케이션을 위한 데이터 액세스와 비즈니스 로직의 대부분을 처리하는, 클라이언트 장치를 위한 하나 이상의 애플리케이션의 양태들을 실행하는 데 필요한 바와 같이 데이터 저장소와 통합하기 위한 임의의 적절한 하드웨어 및 소프트웨어를 포함할 수 있다. 애플리케이션 서버는, 데이터 저장소와 협력하여 액세스 제어 서비스를 제공하며, 사용자에게 전송될 텍스트, 그래픽, 오디오, 및/또는 비디오와 같은 콘텐츠를 생성할 수 있으며, 이러한 콘텐츠는, 이 예에서 HTML, XML, 또는 다른 적절한 구조화된 언어의 형태로 웹 서버에 의해 사용자에게 제공될 수도 있다. 클라이언트 장치(1102)와 애플리케이션 서버(1108) 간의 콘텐츠 전달뿐만 아니라 모든 요청과 응답의 처리는 웹 서버에 의해 처리될 수 있다. 본 명세서에서 논의된 구조화된 코드가 본원의 다른 곳에서 논의된 바와 같이 임의의 적절한 장치 또는 호스트 기계 상에서 실행될 수 있으므로, 웹 및 애플리케이션 서버는 요구되지 않으며 단지 예시적인 구성 요소들일 뿐이라는 것을 이해해야 한다.
데이터 저장소(1110)는, 특정 양태에 관한 데이터를 저장하기 위한 몇몇 별도의 데이터 테이블, 데이터베이스, 또는 다른 데이터 저장 기구 및 매체를 포함할 수 있다. 예를 들어, 도시된 데이터 저장소는, 생산측을 위한 콘텐츠를 제공하는 데 사용될 수 있는 생산 데이터(1112) 및 사용자 정보(1116)를 저장하기 위한 기구를 포함한다. 데이터 저장소는, 또한, 보고, 분석, 또는 이러한 다른 목적을 위해 사용될 수 있는 로그 데이터(1114)를 저장하기 위한 기구를 포함하는 것으로 도시된다. 페이지 이미지 정보 및 적절한 정보에 액세스하는 것과 같이 데이터 저장소에 저장될 필요가 있는 많은 다른 양태들이 있을 수 있으며, 이러한 정보는 데이터 저장소(1110)의 추가 기구들에 또는 적절한 경우 위에서 열거된 기구들 중 임의의 것에 저장될 수 있다는 점을 이해해야 한다. 데이터 저장소(1110)는, 애플리케이션 서버(1108)로부터 명령어를 수신하고 이에 응답하여 데이터를 취득, 업데이트, 또는 그 외에는 처리하도록 연관된 로직을 통해 동작 가능하다. 일례로, 사용자는 소정 유형의 항목에 대한 검색 요청을 제출할 수도 있다. 이 경우, 데이터 저장소는, 사용자 정보에 액세스하여 사용자의 아이덴티티를 검증할 수도 있고, 카탈로그 세부 정보에 액세스하여 해당 유형의 항목에 대한 정보를 취득할 수 있다. 이어서, 정보는, 사용자가 사용자 장치(1102) 상의 브라우저를 통해 볼 수 있는 웹 페이지 상의 결과 리스트와 같이 사용자에게 리턴될 수 있다. 관심있는 특정 항목에 대한 정보는 브라우저의 전용 페이지 또는 창에서 볼 수 있다.
각각의 서버는, 통상적으로 해당 서버의 일반적인 관리 및 동작을 위한 실행 가능한 프로그램 명령어들을 제공하는 운영 시스템을 포함하며, 통상적으로, 서버의 프로세서에 의해 실행될 때 서버로 하여금 의도된 기능을 수행하게 하는 명령어를 저장하는 컴퓨터 판독가능 저장 매체(예를 들어, 하드 디스크, 랜덤 액세스 메모리, 판독 전용 메모리 등)를 포함한다. 서버의 운영 시스템 및 일반적인 기능에 대한 적절한 구현예들은, 공지되어 있거나 상업적으로 이용가능하며, 특히 본원의 개시 내용에 비추어 볼 때 통상의 기술자에 의해 용이하게 구현된다.
일 실시예에서의 환경은, 하나 이상의 컴퓨터 네트워크 또는 직접 접속을 이용하여 통신 링크를 통해 상호 접속되는 여러 컴퓨터 시스템들과 구성요소들을 이용하는 분산형 컴퓨팅 환경이다. 그러나, 통상의 기술자는, 이러한 시스템이 도 11에 도시된 것보다 적은 또는 많은 구성요소들을 갖는 시스템에서 동등하게 동작할 수 있음을 알 것이다. 따라서, 도 11의 시스템(1100)의 예는 본질적으로 예시적인 것이며 본 개시 내용의 범위를 제한하지 않는 것으로 취급해야 한다.
다양한 실시예는, 또한, 어떤 경우에는 다수의 애플리케이션들 중 임의의 애플리케이션을 동작시키는 데 사용될 수 있는 하나 이상의 사용자 컴퓨터, 컴퓨팅 장치 또는 처리 장치를 포함할 수 있는 다양한 운영 환경들에서 구현될 수 있다. 사용자 또는 클라이언트 장치는, 모바일 소프트웨어를 실행하고 다수의 네트워킹 및 메시징 프로토콜들을 지원할 수 있는 셀룰러, 무선, 및 핸드헬드 장치들뿐만 아니라 표준 운영 시스템을 실행하는 데스크톱 또는 랩톱 컴퓨터와 같은 다수의 범용 개인 컴퓨터들 중 임의의 것도 포함할 수 있다. 또한, 이러한 시스템은, 상업적으로 이용가능한 다양한 운영 시스템들 중 임의의 것을 실행하는 다수의 워크스테이션들, 및 개발 및 데이터베이스 관리와 같은 목적을 위한 다른 공지된 애플리케이션들을 포함할 수 있다. 이러한 장치들은, 또한, 네트워크를 통해 통신할 수 있는, 더미 단말, 씬 클라이언트, 게임 시스템, 및 기타 장치 등의 다른 전자 장치를 포함할 수 있다.
대부분의 실시예들은, 전송 제어 프로토콜/인터넷 프로토콜("TCP/IP"), 개방 시스템 상호접속("OSI"), 파일 전송 프로토콜("FTP"), 범용 플러그 앤 플레이("UpnP"), 네트워크 파일 시스템(NFS), 공통 인터넷 파일 시스템("CIFS"), 및 AppleTalk 등의 상업적으로 이용가능한 다양한 프로토콜들 중 임의의 것을 사용하는 통신을 지원하도록 통상의 기술자에게 익숙한 적어도 하나의 네트워크를 이용한다. 네트워크는, 예를 들어, 로컬 에리어 네트워크, 광역 네트워크, 가상 사설망, 인터넷, 인트라넷, 엑스트라넷, 공중 교환 전화망, 적외선 네트워크, 무선 네트워크, 및 이들의 임의의 조합일 수 있다.
웹 서버를 이용하는 실시예들에서, 웹 서버는, "HTTP" 서버, FTP 서버, CGI(공통 게이트웨이 인터페이스) 서버, 데이터 서버, Java 서버, 및 비즈니스 애플리케이션 서버를 포함하는 다양한 서버 또는 미드티어 애플리케이션들 중 임의의 것을 실행할 수 있다. 서버(들)는, 또한, 예를 들어, Java(등록상표), C, C# 혹은 C++, 또는 임의의 스크립팅 언어, 예컨대, Perl, Python 또는 TCL, 및 이들의 조합 등의 임의의 프로그래밍 언어로 기입된 하나 이상의 스크립트 또는 프로그램으로서 구현될 수도 있는 하나 이상의 웹 애플리케이션을 실행함으로써, 사용자 장치로부터의 요청에 응답하여 프로그램 또는 스크립트를 실행할 수도 있다. 서버(들)는, 또한, Oracle(등록상표), Microsoft(등록상표), Sybase(등록상표) 및 IBM(등록상표)에 의해 상업적으로 이용가능한 것을 포함하는 데이터베이스 서버를 포함할 수도 있지만, 이러한 예로 한정되지는 않는다.
환경은 상술한 바와 같이 다양한 데이터 저장소들 및 다른 메모리 및 저장 매체를 포함할 수 있다. 이들은, 네트워크에 걸쳐 컴퓨터들 중 임의의 컴퓨터 또는 모든 컴퓨터로부터 원격된 또는 컴퓨터들 중 하나 이상에 대하여 로컬인(및/또는 그 하나 이상에 상주하는) 저장 매체 상과 같은 다양한 위치에 상주할 수 있다. 실시예들의 특정 세트에 있어서, 정보는 통상의 기술자에게 익숙한 SAN(저장장치 영역 네트워크)에 상주할 수도 있다. 유사하게, 컴퓨터, 서버, 또는 다른 네트워크 장치에 기인하는 기능들을 수행하기 위한 임의의 필요한 파일들은 적절하게 로컬 및/또는 원격으로 저장될 수도 있다. 시스템이 컴퓨터화된 장치들을 포함하는 경우, 이러한 각 장치는 버스를 통해 전기적으로 결합될 수 있는 하드웨어 요소들을 포함할 수 있으며, 이 요소들은, 예를 들어, 적어도 하나의 CPU(중앙 처리 유닛), 적어도 하나의 입력 장치(예를 들어, 마우스, 키보드, 제어기, 터치 스크린, 또는 키패드), 및 적어도 하나의 출력 장치(예를 들어, 표시 장치, 프린터, 또는 스피커)를 포함할 수 있다. 또한, 이러한 시스템은, 디스크 드라이브, 광 저장 장치, 및 랜덤 액세스 메모리("RAM") 또는 판독 전용 메모리("ROM") 등의 고체 상태 저장 장치와 같은 하나 이상의 저장 장치 및 탈착가능 미디어 장치, 메모리 카드, 플래시 카드 등을 포함할 수도 있다.
이러한 장치는, 또한, 전술한 바와 같이, 컴퓨터 판독가능 저장매체 판독기, 통신 장치(예를 들어, 모뎀, 네트워크 카드(무선 또는 유선), 적외선 통신 장치 등), 및 작업 메모리를 포함할 수 있다. 컴퓨터 판독가능 저장매체 판독기는, 원격, 로컬, 고정식 및/또는 착탈식 저장 장치를 나타내는 컴퓨터 판독가능 저장 매체 및 컴퓨터 판독가능 정보를 일시적으로 및/또는 더욱 영구적으로 포함, 저장, 송신, 및 검색하기 위한 저장 매체에 접속될 수 있거나 이러한 저장 매체들을 수용하도록 구성될 수 있다. 시스템 및 다양한 장치들은, 또한, 통상적으로, 클라이언트 애플리케이션 또는 웹 브라우저와 같은 운영 시스템과 애플리케이션 프로그램을 포함하는 적어도 하나의 작업 메모리 장치 내에 위치하는 다수의 소프트웨어 애플리케이션, 모듈, 서비스 또는 다른 요소들을 포함한다. 다른 실시예들은 상술한 바로부터 변형된 많은 예들을 가질 수도 있음을 이해해야 한다. 예를 들어, 맞춤형 하드웨어가 또한 사용될 수 있고/있거나, 특정 요소들이 하드웨어, (애플릿 등의 휴대용 소프트웨어를 포함하는) 소프트웨어, 또는 둘 모두로 구현될 수도 있다. 또한, 네트워크 입력/출력 장치 등의 컴퓨팅 장치에 대한 접속을 채택할 수도 있다.
코드 또는 코드의 일부를 포함하기 위한 저장 매체 및 컴퓨터 판독가능 매체는, RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD, 또는 기타 광학 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소, 또는 기타 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 시스템 장치에 의해 액세스될 수 있는 다른 임의의 매체를 포함하는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등의 정보의 저장 및/또는 송신을 위한 임의의 방법이나 기술로 구현되는 휘발성 및 비휘발성, 탈착가능 또는 탈착불가 매체 등의 저장 매체와 통신 매체를 포함하지만 이에 한정되지 않는, 당업계에 알려져 있거나 사용되는 임의의 적절한 매체를 포함할 수 있다. 본 명세서에서 제공된 교시와 개시 내용에 기초하여, 통상의 기술자는 다양한 실시예를 구현하기 위한 다른 방식 및/또는 방법을 이해할 것이다.
이에 따라, 명세서 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 한다. 그러나, 특허청구범위에 기재된 본 개시 내용의 사상 및 범위를 벗어나지 않으면서 다양한 변경 및 수정이 이루어질 수도 있음은 명백할 것이다.
본 개시 내용의 실시예들은 아래와 같은 관점으로 설명될 수 있다.
제1절. 주변 구성요소 상호접속(PCI) 구성 공간을 에뮬레이션하는 방법으로서,
PCI 장치의 PCI 코어에 의해 PCI 루트 컴플렉스로부터의 PCI 구성 액세스 요청을 수신하는 단계;
상기 PCI 코어에 의해 상기 PCI 구성 액세스 요청을 상기 PCI 장치의 구성 관리 모듈에 송신하는 단계;
상기 구성 관리 모듈에 의해, 상기 PCI 구성 액세스 요청이 상기 PCI 코어의 네이티브 구성 공간과는 다른 구성 공간에 대한 것이라고 결정하는 단계;
상기 구성 관리 하드웨어에 의해, 상기 PCI 구성 액세스 요청에 연관된 인터럽트 요청을 상기 PCI 장치의 에뮬레이션 모듈에 송신하는 단계;
상기 인터럽트 요청에 응답하여, 상기 에뮬레이션 모듈에 의해, 구성 공간 에뮬레이션 소프트웨어를 실행하여 에뮬레이션된 구성 공간으로부터 에뮬레이션된 구성을 검색하는 단계; 및
상기 에뮬레이션된 구성을 이용하여 상기 PCI 구성 액세스 요청을 서비스하는 단계를 포함하는, 방법.
제2절. 제1절에 있어서, 상기 PCI 구성 액세스 요청을 서비스하는 단계는, 상기 PCI 구성 액세스 요청이 구성 판독 요청인 경우 상기 에뮬레이션된 구성을 상기 PCI 루트 컴플렉스에 송신하는 단계를 포함하는, 방법.
제3절. 제2절에 있어서, 상기 PCI 구성 액세스 요청을 서비스하는 단계는 상기 에뮬레이션된 구성을 수정하는 단계를 더 포함하는, 방법.
제4절. 선행하는 절 중 어느 한 절에 있어서, 상기 PCI 구성 액세스 요청을 서비스하는 단계는, 상기 PCI 구성 액세스 요청이 구성 기입 요청인 경우 상기 에뮬레이션된 구성을 업데이트하는 단계를 포함하는, 방법.
제5절. 선행하는 절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성 공간은 복수의 PCI 장치에 대한 에뮬레이션된 구성들을 포함하는, 방법.
제6절. 선행하는 절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성 공간은 DRAM에 저장되는, 방법.
제7절. 제1절 내지 제5절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성 공간은 영구 메모리에 저장되는, 방법.
제8절. 선행하는 절 중 어느 한 절에 있어서, 상기 구성 공간 에뮬레이션 소프트웨어는 고립된 환경에서 실행되는, 방법.
제9절. 장치에 있어서,
에뮬레이션 구성요소;
네이티브 구성 레지스터들의 세트를 포함하는 버스 인터페이스 코어; 및
상기 버스 인터페이스 코어에 결합된 구성 관리 구성요소를 포함하되,
상기 구성 관리 구성요소는,
상기 버스 인터페이스 코어로부터 구성 액세스 요청을 수신하고,
에뮬레이션된 구성 공간으로부터 에뮬레이션된 구성을 검색하도록 상기 에뮬레이션 구성요소에 요청하고,
상기 에뮬레이션된 구성을 이용하여 상기 구성 액세스 요청을 서비스하도록 구성된, 장치.
제10절. 제9절에 있어서, 상기 에뮬레이션된 구성 공간은 복수의 주변 장치를 위한 에뮬레이션된 구성들을 포함하는, 장치.
제11절. 제9절 또는 제10절에 있어서, 상기 에뮬레이션된 구성은 물리적 기능 자원을 나타내는, 장치.
제12절. 제9절 내지 제11절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성은 가상 기능 자원을 나타내는, 장치.
제13절. 제9절 내지 제12절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성은 고립된 환경에서 운용되는 구성 에뮬레이션 소프트웨어의 실행을 통해 검색되는, 장치.
제14절. 제9절 내지 제13절 중 어느 한 절에 있어서, 상기 구성 관리 구성요소는 상기 구성 액세스 요청의 진행을 추적하기 위한 상태 레지스터를 포함하고, 상기 상태 레지스터는 상기 구성 액세스 요청의 서비스 완료 후에 업데이트되는, 장치.
제15절. 제9절 내지 제14절 중 어느 한 절에 있어서, 상기 에뮬레이션 구성요소는 DRAM에 결합되고, 상기 에뮬레이션된 구성 공간은 상기 DRAM에 저장되는, 장치.
제16절. 제9절 내지 제15절 중 어느 한 절에 있어서, 상기 에뮬레이션 구성요소는 영구 메모리에 결합되고, 상기 에뮬레이션된 구성 공간은 상기 영구 메모리에 저장되는, 장치.
제17절. 제9절 내지 제16절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성 공간은 텍스트 파일로서 저장되는, 장치.
제18절. 제9절 내지 제17절 중 어느 한 절에 있어서, 상기 에뮬레이션 구성요소, 상기 버스 인터페이스 코어, 및 상기 구성 관리 구성요소 중 적어도 하나는 전자 회로를 포함하는, 장치.
제19절. 제9절 내지 제18절 중 어느 한 절에 있어서, 상기 장치는, 시스템-온-칩(SoC), 주문형 집적 회로(ASIC), 프로세서, 또는 필드 프래그래머블 게이트 어레이(FPGA)에서 구현되는, 장치.
제20절. 주변 장치에 의해 구성 공간을 에뮬레이션하는 방법으로서,
상기 주변 장치에 의해, 구성 액세스 요청을 수신하는 단계;
상기 주변 장치에 의해, 상기 구성 액세스 요청이 에뮬레이션된 구성 공간에 대한 것이라고 결정하는 단계;
상기 주변 장치에 의해, 상기 에뮬레이션된 구성 공간으로부터 에뮬레이션된 구성을 검색하는 단계; 및
상기 주변 장치에 의해, 상기 에뮬레이션된 구성을 이용하여 상기 구성 액세스 요청을 서비스하는 단계를 포함하는, 방법.
제21절. 제20절에 있어서, 상기 에뮬레이션된 구성 공간은 복수의 주변 장치 기능을 위한 에뮬레이션된 구성들을 포함하는, 방법.
제22절. 제20절 또는 제21절에 있어서, 상기 에뮬레이션된 구성은 물리적 기능 자원을 나타내는, 방법.
제23절. 제20절 또는 제21절에 있어서, 상기 에뮬레이션된 구성은 가상 기능 자원을 나타내는, 방법.
제24절. 제20절 내지 제23절 중 어느 한 절에 있어서, 상기 구성 액세스 요청을 서비스하는 단계는 상기 에뮬레이션된 구성을 상기 구성 액세스 요청의 소스에 제공하는 단계를 포함하는, 방법.
제25절. 제20절 내지 제24절 중 어느 한 절에 있어서, 상기 구성 액세스 요청을 서비스하는 단계는 상기 에뮬레이션된 구성을 업데이트하는 단계를 포함하는, 방법.
제26절. 확장된 주변 구성요소 상호접속(PCI) 기능을 에뮬레이션하는 방법으로서,
PCI 장치의 PCI 코어에 의해, 호스트 컴퓨터에 의해 발생하는 PCI 장치 구성 판독 요청을 수신하는 단계;
기본 PCI 기능 회로를 포함하는 상기 PCI 코어에 의해, 상기 PCI 장치 구성 판독 요청을 관리 하드웨어에 송신하는 단계;
상기 관리 하드웨어에 의해, PCI 구성 판독 요청이 수신되었음을 프로세서에 통지하는 단계;
상기 프로세서에 의해, 상기 PCI 장치에 의해 지원되는 상기 PCI 장치의 확장된 PCI 기능을 나타내는 에뮬레이션된 구성 헤더를 검색하는 단계; 및
상기 에뮬레이션된 구성 헤더를 상기 호스트 컴퓨터에 송신하는 단계를 포함하는, 방법.
제27절. 제26절에 있어서, 상기 프로세서의 분리된 소프트웨어 콘텐츠에서 운용되는 펌웨어에 의해 인터럽트 요청에 응답하는 단계를 포함하는, 방법.
제28절. 제26절 또는 제27절에 있어서, 상기 관리 하드웨어의 상태 레지스터들을 업데이트함으로써 상기 에뮬레이션된 구성 헤더의 검색의 진행을 추적하는 단계를 포함하는, 방법.
제29절. 제26절 내지 제28절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성 헤더의 검색은 상기 프로세서에 의한 구성 공간 에뮬레이션 소프트웨어의 실행을 포함하는, 방법.
제30절. 제26절 내지 제29절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성 헤드는 가상 기능 자원의 상태를 나타내는, 방법.
제31절. 제26절 내지 제29절 중 어느 한 절에 있어서, 상기 에뮬레이션된 구성 헤드는 물리적 기능 자원의 상태를 나타내는, 방법.
제32절. 제26절 내지 제31절 중 어느 한 절에 있어서, 상기 PCI 코어에 의해, 상기 에뮬레이션된 구성 헤더를 업데이트하기 위한 PCI 장치 구성 기입 요청을 수신하는 단계로서, 상기 PCI 장치 구성 기입 요청은 상기 호스트 컴퓨터에 의해 발생한 것인, 상기 수신하는 단계;
상기 PCI 코어에 의해, 상기 PCI 장치 구성 기입 요청을 상기 관리 하드웨어에 송신하는 단계;
상기 관리 하드웨어에 의해, 상기 PCI 장치 구성 기입 요청이 수신되었음을 상기 프로세서에 통지하는 단계; 및
상기 프로세서에 의해 상기 에뮬레이션된 구성 헤더를 검색하는 단계; 및
상기 프로세서에 의해 상기 에뮬레이션된 구성 헤더를 업데이트하는 단계를 더 포함하는, 방법.
제33절. 제32절에 있어서, 상기 업데이트하는 단계는 가상 기능 자원의 상태를 업데이트하는 단계를 포함하는, 방법.
제34절. 제32절에 있어서, 상기 업데이트하는 단계는 물리적 기능 자원의 상태를 업데이트하는 단계를 포함하는, 방법.
제35절. 제26절 내지 제34절 중 어느 한 절에 있어서, 상기 PCI 코어에 의해, 새로운 에뮬레이션된 구성 헤더를 기입하기 위한 PCI 장치 구성 기입 요청을 수신하는 단계로서, 상기 PCI 장치 구성 기입 요청은 상기 호스트 컴퓨터에 의해 발생한 것인, 상기 수신하는 단계;
상기 PCI 코어에 의해, 상기 PCI 장치 구성 기입 요청을 상기 관리 하드웨어에 송신하는 단계;
상기 관리 하드웨어에 의해, 상기 PCI 장치 구성 기입 요청이 수신되었음을 상기 프로세서에 통지하는 단계; 및
상기 프로세서에 의해, 상기 새로운 에뮬레이션 구성 헤더를 상기 프로세서가 액세스가능한 메모리에 기입하는 단계를 더 포함하는, 방법.
제36절. 주변 구성요소 상호접속(PCI) 장치로서,
호스트 컴퓨터에 의해 발생하는 PCI 장치 구성 판독 요청을 수신하도록 배치되고, 기본 PCI 기능 회로를 포함하는, PCI 코어;
상기 PCI 코어로부터 상기 PCI 장치 구성 판독 요청을 수신하고, 상기 PCI 장치 구성 판독 요청에 응답하여 인터럽트 요청을 프로세서에 송신하도록 배치된 관리 하드웨어; 및
상기 인터럽트 요청에 응답하여, 상기 PCI 장치에 의해 지원되는 상기 PCI 장치의 확장된 PCI 기능을 나타내는 에뮬레이션된 구성 헤더를 검색하도록 배치된 프로세서를 포함하되,
상기 PCI 장치는 상기 에뮬레이션된 구성 헤더를 상기 호스트 컴퓨터에 송신하도록 배치된, PCI 장치.
제37절. 일단 주변 구성요소 상호접속(PCI) 장치에 의해 실행되면 상기 PCI 장치로 하여금 단계들을 수행하게 하는 명령어들을 저장하는 비일시적 컴퓨터 판독가능 매체로서, 상기 단계들은,
PCI 장치의 PCI 코어에 의해, 호스트 컴퓨터에 의해 발생하는 PCI 장치 구성 판독 요청을 수신하는 단계;
기본 PCI 기능 회로를 포함하는 상기 PCI 코어에 의해, 상기 PCI 장치 구성 판독 요청을 관리 하드웨어에 송신하는 단계;
상기 관리 하드웨어에 의해, 상기 PCI 장치 구성 판독 요청에 응답하여 인터럽트 요청을 프로세서에 송신하는 단계;
상기 프로세서에 의해, 상기 인터럽트 요청에 응답하여, 상기 PCI 장치에 의해 지원되는 상기 PCI 장치의 확장된 PCI 기능을 나타내는 에뮬레이션된 구성 헤더를 검색하는 단계; 및
상기 에뮬레이션된 구성 헤더를 상기 호스트 컴퓨터에 송신하는 단계인, 비일시적 컴퓨터 판독가능 매체.
다른 변형도 본 개시 내용의 사상 내에 있다. 따라서, 개시된 기술들은 다양한 변형 및 대안적인 구조의 영향을 받기 쉽지만, 그 기술들의 예시된 실시예들은 도면에 도시되어 있으며 위에서 상세히 설명하였다. 그러나, 본 개시 내용을 개시된 특정 형태 또는 형태들로 한정하려는 의도는 없지만, 반대로, 첨부된 청구범위에 정의된 바와 같이, 본 개시 내용의 사상 및 범위 내에 있는 모든 변형, 대안적인 구성, 및 등가물을 포함하려는 것임을 이해해야 한다.
(특히, 이하의 청구범위의 문맥에서) 개시된 실시예들을 기술할 때 "한"(a), "하나"(an), "그"(the) 및 유사한 지시자의 사용은, 본 명세서에서 달리 명시되거나 문맥에 의해 명확하게 모순되지 않는 한, 단수 및 복수를 모두 포함하는 것으로 해석되어야 한다. "포함하는"(comprising), "갖는"(having), "포함하는"(including), 및 "포함하는"(containing)이라는 용어들은, 다른 언급되지 않는 한, 개방형 용어들(즉, "포함하지만 이에 한정되지 않는"을 의미)로서 해석되어야 한다. "접속된"이라는 용어는, 사이에 개재하는 것이 있더라도, 부분적으로 또는 전체적으로 포함되거나, 부착되거나, 함께 연결된 것으로서 해석되어야 한다. 본 명세서에서의 값들의 범위 열거는, 본 명세서에서 달리 지시되지 않는 한, 그 범위 내에 속하는 각각의 개별적인 값을 개별적으로 언급하는 약식 방법으로서 기능하기 위한 것일 뿐이며, 각각의 개별적인 값은 본 명세서에서 개별적으로 인용된 것처럼 본 명세서에 통합된다. 본 명세서에 기술된 모든 방법들은, 본 명세서에서 달리 지시되지 않는 한 또는 문맥에 의해 명백하게 모순되지 않는 한, 임의의 적합한 순서로 수행될 수 있다. 본 명세서에서 제공된 임의의 모든 예들 또는 예시적인 언어(예를 들어, "등의")를 사용하는 것은, 다르게 주장하지 않는 한, 본 개시 내용의 실시예들을 더욱 잘 나타내기 위한 것이며, 본 개시 내용의 범위를 한정하지 않는다. 명세서에서의 어떠한 언어도, 청구되지 않은 요소를 본 개시 내용의 실시에 필수적인 것으로 나타내는 것으로서 해석되어서는 안 된다.
달리 특정하게 명시되지 않는 한, "X, Y, Z 중 적어도 하나"라는 문구와 같은 분리어는, 일반적으로 항목, 용어 등이 X, Y, 또는, Z, 또는 이들의 임의의 조합(예를 들어, X, Y 및/또는 Z)일 수도 있다는 점을 나타내도록 사용되는 문맥으로 이해된다. 따라서, 이러한 분리어는, 일반적으로, 어떤 실시예들이 X 중 적어도 하나, Y 중 적어도 하나, 또는 Z 중 적어도 하나가 각각에 대하여 존재해야 한다는 점을 암시하려는 것이 아니며 그러한 암시로 되어서도 안 된다.
본 개시 내용을 수행하기 위해 본 발명자들에게 공지된 최상의 모드를 포함하여 본 개시 내용의 다양한 실시예가 본 명세서에 기술된다. 이들 실시예의 변형은 전술한 설명을 읽음으로써 통상의 기술자에게 명백해질 수도 있다. 본 발명자는 통상의 기술자가 그러한 변형을 적절하게 사용하고, 본 발명자는 본 개시 내용을 본 명세서에 구체적으로 기술된 것 이외의 방법으로 실시하고자 한다. 이에 따라, 본 개시 내용은 적용가능한 법률에 의해 허용되는 바와 같이 본 명세서에 첨부된 청구범위에 기재된 청구 대상의 모든 변경 및 등가물을 포함한다. 또한, 본 명세서에서 달리 지시되지 않는 한 또는 문맥에 의해 명확하게 모순되지 않는 한, 모든 가능한 변형에서 상기 언급된 요소들의 임의의 조합이 본 개시 내용에 포함된다.

Claims (20)

  1. 주변 장치로서,
    구성 액세스 요청을 수신하도록 구성되는 버스 인터페이스;
    제1 종류의 주변 장치에 대응하는 제1 세트의 기능에 대한 제1 세트의 구성 레지스터를 에뮬레이팅하는 에뮬레이션된 구성 공간; 및
    상기 에뮬레이션된 구성 공간에서 에뮬레이션된 구성 레지스터를 검색하고 상기 구성 액세스 요청을 서비스함으로써 상기 구성 액세스 요청을 처리하도록 구성되는 에뮬레이션 모듈을 포함하고,
    상기 에뮬레이션된 구성 공간은 제2 종류의 주변 장치에 대응하는 제2 세트의 기능에 대한 제2 세트의 구성 레지스터를 에뮬레이팅하도록 동적으로 변경할 수 있는 것인 주변 장치.
  2. 청구항 1에 있어서,
    상기 제1 종류의 주변 장치와 상기 제2 종류의 주변 장치는 저장 장치, 네트워크 장치, 디스플레이 장치, 멀티미디어 장치, 메모리 장치, 브리지 장치, 통신 장치, 입력 장치, 도킹 스테이션, 프로세서, 직렬 버스 장치, 무선 장치, 인텔리전트 I/O 장치, 위성 통신 장치, 암호화/복호화 장치, 또는 데이터 획득 장치를 포함하는 주변 장치 종류의 세트에서 선택된 두 개의 다른 종류의 주변 장치인 주변 장치.
  3. 청구항 1에 있어서,
    상기 제1 세트의 기능은 물리적 기능과 상기 물리적 기능에 관련된 가상 기능을 포함하는 주변 장치.
  4. 청구항 3에 있어서,
    에뮬레이션된 상기 제1 세트의 구성 레지스터는 상기 물리적 기능에 의하여 사용되는 어드레스 범위를 특정하는 기본 어드레스 레지스터를 포함하는 주변 장치.
  5. 청구항 3에 있어서,
    에뮬레이션된 상기 제1 세트의 구성 레지스터는 상기 물리적 기능과 관련된 기능 레지스터(capability register)를 포함하는 주변 장치.
  6. 청구항 5에 있어서,
    상기 기능 레지스터에 대한 변경은 상기 물리적 기능과 관련된 상기 가상 기능을 리셋하는 주변 장치.
  7. 청구항 1에 있어서,
    인입되는 구성 액세스 요청을 저장하는 구성 트랜잭션 로깅 유닛을 더 포함하는 주변 장치.
  8. 청구항 7에 있어서,
    상기 구성 트랜잭션 로깅 유닛은 상기 인입되는 구성 액세스 요청이 처리되는 순서를 결정하는 주변 장치.
  9. 청구항 1에 있어서,
    상기 주변 장치의 기동시 상기 에뮬레이션된 구성 공간은 영구 메모리에서 로컬 메모리로 로딩되는 주변 장치.
  10. 청구항 1에 있어서,
    상기 에뮬레이션 모듈은 초기화되지 않는 또는 존재하지 않는 기능으로의 액세스 요청에 응답하도록 더 구성되는 주변 장치.
  11. 에뮬레이션된 구성 공간 내의 주변 장치에 의하여, 제1 종류의 주변 장치에 대응하는 제1 세트의 기능에 대한 제1 세트의 구성 레지스터를 에뮬레이팅하는 단계;
    상기 주변 장치에 의하여 구성 액세스 요청을 수신하는 단계;
    상기 주변 장치에 의하여, 상기 에뮬레이션된 구성 공간에서 에뮬레이션된 구성 레지스터를 검색하는 단계;
    상기 주변 장치에 의하여, 상기 구성 액세스 요청을 서비스하는 단계; 및
    상기 에뮬레이션된 구성 공간이 동적으로 변경된 후의 상기 에뮬레이션된 구성 공간 내의 상기 주변 장치에 의하여, 제2 종류의 주변 장치에 대응하는 제2 세트의 기능에 대한 제2 세트의 구성을 에뮬레이팅하는 단계를 포함하는 방법.
  12. 청구항 11에 있어서,
    상기 제1 종류의 주변 장치 및 상기 제2 종류의 주변 장치는 저장 장치, 네트워크 장치, 디스플레이 장치, 멀티미디어 장치, 메모리 장치, 브리지 장치, 통신 장치, 입력 장치, 도킹 스테이션, 프로세서, 직렬 버스 장치, 무선 장치, 인텔리전트 I/O 장치, 위선 통신 장치, 암호화/복호화 장치, 또는 데이터 획득 장치를 포함하는 주변 장치 종류의 세트에서 선택된 두 개의 다른 종류의 주변 장치인 방법.
  13. 청구항 11에 있어서,
    상기 제1 세트 기능은 물리적 기능과, 상기 물리적 기능과 관련된 가상 기능을 포함하는 방법.
  14. 청구항 13에 있어서,
    에뮬레이션된 상기 제1 세트의 구성 레지스터는 상기 물리적 기능에 의하여 사용되는 어드레스 범위를 특정하는 기본 어드레스 레지스터를 포함하는 방법.
  15. 청구항 13에 있어서,
    에뮬레이션된 상기 제1 세트의 구성 레지스터는 상기 물리적 기능과 관련된 기능 레지스터를 포함하는 방법.
  16. 청구항 15에 있어서,
    상기 기능 레지스터에 대한 변경은 상기 물리적 기능과 관련된 상기 가상 기능을 리셋하는 방법.
  17. 청구항 11에 있어서,
    구성 트랜잭션 로그 내로 인입되는 구성 액세스 요청을 로깅하는 단계를 더 포함하는 방법.
  18. 청구항 17에 있어서,
    인입되는 구성 액세스 요청이 처리되는 순서를 결정하는 단계를 더 포함하는 방법.
  19. 청구항 11에 있어서,
    상기 주변 장치의 기동시 상기 에뮬레이션된 구성 공간을 영구 메모리에서 로컬 메모리로 로딩하는 단계를 더 포함하는 방법.
  20. 청구항 11에 있어서,
    초기화되지 않는 또는 존재하지 않는 기능으로의 액세스 요청에 응답하는 단계를 더 포함하는 방법.
KR1020187034414A 2014-10-05 2015-10-01 에뮬레이션된 엔드포인트 구성 KR102111229B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201462059914P 2014-10-05 2014-10-05
US62/059,914 2014-10-05
PCT/US2015/053596 WO2016057315A1 (en) 2014-10-05 2015-10-01 Emulated endpoint configuration

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020177008809A Division KR102125604B1 (ko) 2014-10-05 2015-10-01 에뮬레이션된 엔드포인트 구성

Publications (2)

Publication Number Publication Date
KR20180129998A KR20180129998A (ko) 2018-12-05
KR102111229B1 true KR102111229B1 (ko) 2020-05-14

Family

ID=54364667

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020177008809A KR102125604B1 (ko) 2014-10-05 2015-10-01 에뮬레이션된 엔드포인트 구성
KR1020187034414A KR102111229B1 (ko) 2014-10-05 2015-10-01 에뮬레이션된 엔드포인트 구성

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020177008809A KR102125604B1 (ko) 2014-10-05 2015-10-01 에뮬레이션된 엔드포인트 구성

Country Status (9)

Country Link
US (4) US10521365B2 (ko)
EP (1) EP3204862B1 (ko)
JP (2) JP6543714B2 (ko)
KR (2) KR102125604B1 (ko)
CN (2) CN111258930B (ko)
IL (1) IL251417B (ko)
SG (1) SG11201702584UA (ko)
TW (2) TWI655543B (ko)
WO (1) WO2016057315A1 (ko)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102125604B1 (ko) 2014-10-05 2020-06-22 아마존 테크놀로지스, 인크. 에뮬레이션된 엔드포인트 구성
CN104951412B (zh) * 2015-06-06 2018-01-02 华为技术有限公司 一种通过内存总线访问的存储装置
US10846195B2 (en) * 2015-10-05 2020-11-24 Unisys Corporation Configuring logging in non-emulated environment using commands and configuration in emulated environment
US10572180B1 (en) * 2015-11-09 2020-02-25 Seagate Technology Llc Method and apparatus to perform a function level reset in a memory controller
US10817456B2 (en) * 2015-11-18 2020-10-27 Oracle International Corporation Separation of control and data plane functions in SoC virtualized I/O device
US10853303B2 (en) * 2015-11-18 2020-12-01 Oracle International Corporation Separation of control and data plane functions in SoC virtualized I/O device
US10860520B2 (en) * 2015-11-18 2020-12-08 Oracle International Corporation Integration of a virtualized input/output device in a computer system
US11226891B2 (en) * 2017-04-21 2022-01-18 Razer (Asia-Pacific) Pte. Ltd. Testing devices and methods for testing a device driver software
US10360092B1 (en) 2017-05-17 2019-07-23 Amazon Technologies, Inc. Hybrid hardware and software reporting management
US10908998B2 (en) * 2017-08-08 2021-02-02 Toshiba Memory Corporation Managing function level reset in an IO virtualization-enabled storage device
US20190095554A1 (en) * 2017-09-28 2019-03-28 Intel Corporation Root complex integrated endpoint emulation of a discreet pcie endpoint
US10509758B1 (en) 2017-09-28 2019-12-17 Amazon Technologies, Inc. Emulated switch with hot-plugging
US10996969B1 (en) * 2017-11-28 2021-05-04 Amazon Technologies, Inc. Controlling access by a network interface
US10877766B2 (en) 2018-05-24 2020-12-29 Xilinx, Inc. Embedded scheduling of hardware resources for hardware acceleration
US10705993B2 (en) 2018-11-19 2020-07-07 Xilinx, Inc. Programming and controlling compute units in an integrated circuit
US11030144B2 (en) * 2018-12-14 2021-06-08 Texas Instruments Incorporated Peripheral component interconnect (PCI) backplane connectivity system on chip (SoC)
US10984062B2 (en) 2019-01-07 2021-04-20 Citrix Systems, Inc. Device augmentation of real time communications
US10783100B2 (en) * 2019-03-27 2020-09-22 Intel Corporation Technologies for flexible I/O endpoint acceleration
US11265247B2 (en) * 2019-05-14 2022-03-01 Red Hat, Inc. Downtime reduction with VF MAC filter programming by hypervisors
CN111831330B (zh) * 2020-07-10 2022-02-01 深圳致星科技有限公司 用于联邦学习的异构计算系统设备交互方案
US11386034B2 (en) 2020-10-30 2022-07-12 Xilinx, Inc. High throughput circuit architecture for hardware acceleration
US20220197679A1 (en) * 2020-12-18 2022-06-23 Advanced Micro Devices (Shanghai) Co., Ltd. Modifying device status in single virtual function mode
CN113037286A (zh) * 2021-02-26 2021-06-25 许继集团有限公司 一种继电保护模拟量采样控制方法及装置
KR102568906B1 (ko) * 2021-04-13 2023-08-21 에스케이하이닉스 주식회사 PCIe 디바이스 및 그 동작 방법
US11928070B2 (en) 2021-04-13 2024-03-12 SK Hynix Inc. PCIe device
KR102568909B1 (ko) * 2021-04-13 2023-08-21 에스케이하이닉스 주식회사 PCIe 펑션 및 그 동작 방법
US11734217B2 (en) * 2021-12-13 2023-08-22 Xilinx, Inc. Software or firmware managed hardware capability and control configuration for PCIe devices

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080228971A1 (en) 2007-03-13 2008-09-18 Rothman Michael A Device modeling in a multi-core environment
US8387043B2 (en) 2008-02-07 2013-02-26 Hitachi, Ltd. USB port shared control method in a plurality of virtual machines
US20140040672A1 (en) 2012-08-06 2014-02-06 Lsi Corporation Methods and structure for trapping requests directed to hardware registers of an electronic circuit

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60125116U (ja) 1984-01-31 1985-08-23 トヨタ自動車株式会社 ストツク手段を備えたシ−ト溶着装置
JPH09288583A (ja) 1996-04-19 1997-11-04 Nec Corp 情報処理装置
JPH11288400A (ja) * 1998-04-03 1999-10-19 Nec Shizuoka Ltd Pciブリッジデバイス
US6553439B1 (en) * 1999-08-30 2003-04-22 Intel Corporation Remote configuration access for integrated circuit devices
US6647434B1 (en) * 1999-12-28 2003-11-11 Dell Usa, L.P. Multifunction device with register space for individually enabling or disabling a function of plurality of functions in response to function configuration
US7035850B2 (en) * 2000-03-22 2006-04-25 Hitachi, Ltd. Access control system
US6823418B2 (en) * 2001-06-29 2004-11-23 Intel Corporation Virtual PCI device apparatus and method
US7103743B2 (en) * 2002-08-23 2006-09-05 Intel Corporation System and method of accessing vital product data
JP2005010919A (ja) 2003-06-17 2005-01-13 Canon Inc 情報処理装置及び情報処理方法及びプログラム並びに記憶媒体
US7051749B2 (en) * 2003-11-24 2006-05-30 Advanced Technology Materials, Inc. Gas delivery system with integrated valve manifold functionality for sub-atmospheric and super-atmospheric pressure applications
US7383547B1 (en) * 2004-12-03 2008-06-03 Lecroy Corporation Apparatus and technique for device emulation
US7392172B2 (en) 2005-04-28 2008-06-24 Hewlett-Packard Development Company, L.P. Providing virtual device access via firmware
JP2007048019A (ja) * 2005-08-10 2007-02-22 Sony Computer Entertainment Inc エミュレーション方法、エミュレータ、コンピュータ組込型デバイスおよびエミュレータ用プログラム
US7743197B2 (en) * 2006-05-11 2010-06-22 Emulex Design & Manufacturing Corporation System and method for virtualizing PCIe devices
US7613847B2 (en) 2006-05-16 2009-11-03 Hewlett-Packard Development Company, L.P. Partially virtualizing an I/O device for use by virtual machines
JP4810349B2 (ja) * 2006-08-11 2011-11-09 日本電気株式会社 I/o装置及び方法
US8683110B2 (en) * 2007-08-23 2014-03-25 Nec Corporation I/O system and I/O control method
US7827343B2 (en) * 2007-09-20 2010-11-02 International Business Machines Corporation Method and apparatus for providing accelerator support in a bus protocol
US8359408B2 (en) * 2008-06-30 2013-01-22 Intel Corporation Enabling functional dependency in a multi-function device
JP5272265B2 (ja) * 2008-09-29 2013-08-28 株式会社日立製作所 Pciデバイス共有方法
US8346997B2 (en) * 2008-12-11 2013-01-01 International Business Machines Corporation Use of peripheral component interconnect input/output virtualization devices to create redundant configurations
US20100169069A1 (en) 2008-12-29 2010-07-01 Nimrod Diamant Composite device emulation
US8595386B2 (en) * 2009-08-03 2013-11-26 Advanced Micro Devices, Inc. Software controlled redirection of configuration address spaces
US8521915B2 (en) * 2009-08-18 2013-08-27 Fusion-Io, Inc. Communicating between host computers and peripheral resources in an input/output (I/O) virtualization system
JP5482263B2 (ja) * 2010-02-08 2014-05-07 日本電気株式会社 エンドポイント共有システムおよびデータ転送方法
US9852087B2 (en) * 2010-04-20 2017-12-26 Avago Technologies General Ip (Singapore) Pte. Ltd. Inline PCI-IOV adapter
US8782461B2 (en) * 2010-09-24 2014-07-15 Intel Corporation Method and system of live error recovery
US8527666B2 (en) * 2011-02-21 2013-09-03 International Business Machines Corporation Accessing a configuration space of a virtual function
US8966477B2 (en) 2011-04-18 2015-02-24 Intel Corporation Combined virtual graphics device
US9218195B2 (en) 2011-05-17 2015-12-22 International Business Machines Corporation Vendor-independent resource configuration interface for self-virtualizing input/output device
US9411654B2 (en) 2011-12-16 2016-08-09 International Business Machines Corporation Managing configuration and operation of an adapter as a virtual peripheral component interconnect root to expansion read-only memory emulation
US9311127B2 (en) * 2011-12-16 2016-04-12 International Business Machines Corporation Managing configuration and system operations of a shared virtualized input/output adapter as virtual peripheral component interconnect root to single function hierarchies
JP2014085956A (ja) * 2012-10-25 2014-05-12 Fujitsu Semiconductor Ltd シミュレーション制御プログラム、シミュレーションプログラム、シミュレーション制御装置、シミュレーション装置、シミュレーション制御方法、およびシミュレーション方法
US8886671B1 (en) * 2013-08-14 2014-11-11 Advent Software, Inc. Multi-tenant in-memory database (MUTED) system and method
IN2013CH05400A (ko) * 2013-11-22 2015-05-29 Ineda Systems Pvt Ltd
KR102125604B1 (ko) 2014-10-05 2020-06-22 아마존 테크놀로지스, 인크. 에뮬레이션된 엔드포인트 구성

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080228971A1 (en) 2007-03-13 2008-09-18 Rothman Michael A Device modeling in a multi-core environment
US8387043B2 (en) 2008-02-07 2013-02-26 Hitachi, Ltd. USB port shared control method in a plurality of virtual machines
US20140040672A1 (en) 2012-08-06 2014-02-06 Lsi Corporation Methods and structure for trapping requests directed to hardware registers of an electronic circuit

Also Published As

Publication number Publication date
US20200133892A1 (en) 2020-04-30
US20240126705A1 (en) 2024-04-18
KR20170051475A (ko) 2017-05-11
JP6871957B2 (ja) 2021-05-19
KR20180129998A (ko) 2018-12-05
CN111258930A (zh) 2020-06-09
CN106796556B (zh) 2020-02-11
TW201629783A (zh) 2016-08-16
EP3204862B1 (en) 2019-09-18
TWI655543B (zh) 2019-04-01
EP3204862A1 (en) 2017-08-16
KR102125604B1 (ko) 2020-06-22
TW201805821A (zh) 2018-02-16
CN106796556A (zh) 2017-05-31
IL251417A0 (en) 2017-05-29
JP6543714B2 (ja) 2019-07-10
TWI655542B (zh) 2019-04-01
IL251417B (en) 2020-06-30
US11321247B2 (en) 2022-05-03
WO2016057315A1 (en) 2016-04-14
JP2017535894A (ja) 2017-11-30
JP2019091494A (ja) 2019-06-13
SG11201702584UA (en) 2017-04-27
US11886355B2 (en) 2024-01-30
US20220253392A1 (en) 2022-08-11
CN111258930B (zh) 2024-04-12
US20160098365A1 (en) 2016-04-07
US10521365B2 (en) 2019-12-31

Similar Documents

Publication Publication Date Title
KR102111229B1 (ko) 에뮬레이션된 엔드포인트 구성
US11249937B1 (en) Storage adapter device for communicating with network storage
US10282192B1 (en) Updating device code through a bus
US10241951B1 (en) Device full memory access through standard PCI express bus
JP6514330B2 (ja) 複数のコンピュートサブシステムを備えるチップ上のシステム
US9959214B1 (en) Emulated translation unit using a management processor
US9378049B1 (en) Servicing I/O requests in an I/O adapter device
US9733980B1 (en) Virtual machine management using I/O device logging
US10915486B1 (en) Ingress data placement
US9864538B1 (en) Data size reduction
US10621114B1 (en) Standardized interface for storage using an input/output (I/O) adapter device
US10248607B1 (en) Dynamic interface port assignment for communication transaction
US10621134B1 (en) Generating transactions with a configurable port
US9864701B1 (en) Resource mapping for an input/output device
US9984021B1 (en) Location-aware self-configuration of a peripheral device
US9836421B1 (en) Standardized interface for network using an input/output (I/O) adapter device
US10075398B2 (en) Systems and methods for enabling a host system to use a network interface of a management controller

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right