KR20130032358A - 메시지 시그널 인터럽션을 i/o 어댑터 이벤트 통지로 변환 - Google Patents

메시지 시그널 인터럽션을 i/o 어댑터 이벤트 통지로 변환 Download PDF

Info

Publication number
KR20130032358A
KR20130032358A KR1020137001068A KR20137001068A KR20130032358A KR 20130032358 A KR20130032358 A KR 20130032358A KR 1020137001068 A KR1020137001068 A KR 1020137001068A KR 20137001068 A KR20137001068 A KR 20137001068A KR 20130032358 A KR20130032358 A KR 20130032358A
Authority
KR
South Korea
Prior art keywords
adapter
function
interruption
pci
aibv
Prior art date
Application number
KR1020137001068A
Other languages
English (en)
Other versions
KR101455011B1 (ko
Inventor
3세 구스타브 시트만
데이비드 크래독
토마스 그레그
마크 패럴
자넷 이스턴
에릭 노먼 레이스
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 KR20130032358A publication Critical patent/KR20130032358A/ko
Application granted granted Critical
Publication of KR101455011B1 publication Critical patent/KR101455011B1/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/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
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Bus Control (AREA)
  • Debugging And Monitoring (AREA)

Abstract

하나 또는 그 이상의 입력/출력(I/O) 어댑터들로부터의 하나 또는 그 이상의 메시지 시그널 인터럽션 요청들이 I/O 어댑터 이벤트 통지들로 변환된다. 각각의 I/O 어댑터 이벤트 통지는 시스템 메모리 내의 하나 또는 그 이상의 특정 인디케이터들의 설정(setting)과 인터럽션 요청을 포함하며, 그 중 첫 번째가 계류 I/O 어댑터 인터럽션 요청을 일으킨다. 하나의 I/O 어댑터 인터럽션 요청이 계류 중일 동안, 후속의 메시지 시그널 인터럽션 요청들은 I/O 어댑터 이벤트 통지들로 변환되지만, I/O 어댑터 인터럽션들을 위해 추가의 요청들을 일으키지는 않는다.

Description

메시지 시그널 인터럽션을 I/O 어댑터 이벤트 통지로 변환{CONVERTING A MESSAGE SIGNALED INTERRUPTION INTO AN I/O ADAPTER EVENT NOTIFICATION}
본 발명은 일반적으로 컴퓨팅 환경 내에서 인터럽션 처리에 관한 것이며, 구체적으로는 컴퓨팅 환경의 어댑터들에 의해 생성되는 인터럽션들을 처리하는 것에 관한 것이다.
메시지 시그널 인터럽션 (Message signaled interruption, MSI)은 어떤 이벤트의 발생(the occurrence of an event) 또는 어떤 상태의 존재(the presence of some status)를 운영체제에 통지하기 위해 주변 컴포넌트 인터커넥트(Peripheral Component Interconnect, PCI) 펑션과 같은 어댑터 펑션이 중앙처리장치 (CPU) 인터럽션을 생성하기 위한 방법이다. MSI는 각각의 디바이스상에 전용 인터럽션 핀(dedicated interruption pin)을 갖는 것에 대한 대안(alternative)이다. 어댑터 펑션이 MSI를 사용하도록 구성되는 경우, 이 펑션은 명시된 수의 바이트(a specified number of bytes)의 데이터를 특정 주소(a special address)로 MSI 라이트 동작(MSI write operation)을 수행함에 의해서 인터럽션을 요청한다. 이 특정 주소와 고유 데이터 값(a unique data value)의 조합을 MSI 벡터라고 부른다.
어떤 어댑터 펑션들은 하나의 MSI 벡터만을 지원하고, 다른 어댑터 펑션들은 다수의 MSI 벡터를 지원한다. 다수의 MSI 벡터를 지원하는 펑션들에 있어서, 동일한 특정 주소가 다른 여러 데이터 값들을 갖고 사용된다.
많은 컴퓨팅 플랫폼에서, 디바이스 드라이버는 자신을 MSI 벡터와 연관된 인터럽트 처리기(interrupt handler)로 구성한다(configure). 이것은 MSI 벡터와 CPU 인터럽트 벡터 내의 엔트리를 효과적으로 연관시킨다. 따라서, 어댑터 펑션이 다수의 MSI 벡터를 지원하고 다수의 MSI 벡터를 사용하도록 구성되면, 이 펑션은 상기 CPU 인터럽션 벡터에서도 대응하는 수의 엔트리들을 소비한다.
미국 특허공보 2007/0271559 A1호 (2007년 11월 22일 공고, Easton외 공동발명자들) "Virtualization of Infiniband Host Channel Adapter Interruptions"는 두 레벨의 서버 가상화(server virtualization)를 가능하게 하기 위한 방법, 시스템, 프로그램 제품 및 컴퓨터 데이터 스트럭처에 관해 기술한다. 제1 하이퍼바이저가 다수의 논리적 파티션들이 일 세트의 리소스들을 공유하도록 인에이블시키고 제1 레벨의 가상화를 제공한다. 제2 하이퍼바이저가 다수의 독립 가상 머신들이 단일 논리적 파티션에 할당된 리소스들을 공유하도록 인에이블시키고 제2 레벨의 가상화를 제공한다. 상기 단일 논리적 파티션 내의 모든 가상 머신들에 대한 모든 이벤트들은 그 단일 논리적 파티션을 위해 공유된 리소스들로부터 이벤트 통지들을 수신하기 위한 단일 파티션-소유 이벤트 큐(a single partition-owned event queue)로 그룹화된다. 그룹화된 이벤트들의 역다중화를 위해 파티션-소유 이벤트 큐로부터 상기 그룹화된 이벤트들을 위한 인터럽트 요청이 시그널 되는데(signaled), 상기 머신에 의해서, 상기 파티션-소유 이벤트 큐로부터 가상 머신별 기준으로(on a per virtual machine basis) 할당되는 가상화된 개별적인 이벤트 큐들로 시그널 된다.
미국 특허공보 2005/0289271 A1호 (2005년 12월 29일 공개, Martinez외 공동발명) "Circuitry to Selectively Produce MSI Signals"는 일부 실시 예들에서, 발명들이 인터럽트 이벤트 신호들(interrupt event signals)을 수신하여 그 인터럽트 이벤트 신호들에 대응하는 소스 신호들을 제공하도록 도체들(conductors)에 결합된 상태 레지스터 회로(a status register circuit)를 갖는 칩을 포함하는 것에 관해 기술한다. 상기 칩은 또한 상기 인터럽트 소스들 중 선택적인 것들에 대한 소스 인에이블 신호들을 제공하기 위해 제어 레지스터 회로(a control register circuit)를 포함하고, 상기 인터럽트 이벤트 신호들을 수신하고 재-활성화 신호(a re-arming signal)를 제공하기 위해 상기 도체들에 결합된 재-활성화 논리 회로(a re-arming logic circuit)를 포함한다. 상기 칩은 초기 인터럽트 신호(an initial interrupt signal)를 제공하기 위해 상기 소스 신호들, 상기 소스 인에이블 신호들 및 재-활성화 신호를 수신하기 위한 제1 논리 회로와, 상기 초기 인터럽트 신호를 수신하고 그것에 응답하여 MSI 신호를 제공하기 위한 메시지 시그널 인터럽트 (MSI) 신호 펄스 생성 논리를 더 포함한다. 기타 실시 예들도 기술되고 청구된다.
미국 특허 7,562,366호 (2009년 7월 14일 발행, Pope외 공동발명) "Transmit Completion Event Batching"은 호스트 및 네트워크 인터페이스 디바이스와 함께 사용할 용도로 데이터 송신 큐(a data transmit queue)를 관리하기 위한 방법에 관해 기술한다. 대략적으로 기술하면, 호스트가 데이터 버퍼 서술자들(data buffer descriptors)을 송신 서술자 큐(a transmit descriptor queue)에 라이트하고(write), 네트워크 인터페이스 디바이스가 송신 데이터 버퍼의 처리를 완료했을 때 호스트에 통지하기 위해 이벤트들을 라이트(write)한다. 각각의 송신 완료 이벤트 서술자들이 호스트에 복수의 송신 데이터 버퍼들의 완료를 통지한다.
본 발명의 일 실시 예를 따르면, 본 발명은 어댑터들로부터 오는 인터럽트 요청들의 관리를 용이하게 해주는 능력(capability)을 제공한다.
컴퓨팅 환경에서 인터럽션 요청들을 관리하기 위한 청구항 1항에 따른 방법과, 그에 대응하는 시스템과 컴퓨터 프로그램 제품의 제공을 통해서 선행 기술의 단점들은 극복되고 장점들이 제공된다.
본 명세서의 마지막의 청구 범위에서 본 발명의 하나 또는 그 이상의 실시 예들이 예들로서 구체적으로 지정되고 분명하게 청구된다. 본 발명의 이전의 그리고 기타 객체들, 특징들 및 장점들은 첨부하는 도면들과 함께 이어지는 상세한 설명을 참조하여 분명히 알 수 있다.
도 1은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨팅 환경의 일 실시 예를 도시한다.
도 2는 본 발명의 일 실시 예에 따라서, 도 1의 시스템 메모리와 I/O 허브의 추가적인 상세한 사항들의 일 실시 예를 도시한다.
도 3a-3b는 본 발명의 일 실시 예에 따라서, 어댑터 인터럽션 비트 벡터들의 할당의 예들을 도시한다.
도 3c-3d는 본 발명의 일 실시 예에 따라서, 어댑터 인터럽션 요약 비트들의 할당의 예들을 도시한다.
도 4는 본 발명의 일 실시 예에 따라서, I/O 어댑터 이벤트 통지를 위한 어댑터 펑션을 구성하기 위해 초기화 동안에 수행되는 논리의 개요의 일 실시 예를 도시한다.
도 5는 본 발명의 일 실시 예에 따라서, 메시지 시그널 인터럽션 (MSI)의 I/O 어댑터 이벤트 통지로의 변환을 인에이블하기 위한 등록을 수행하는 논리의 일 실시 예를 도시한다.
도 6a는 본 발명의 일 실시 예에 따라서, MSI 요청을 I/O 어댑터 이벤트 통지로 변환하기 위한 논리의 일 실시 예를 도시한다.
도 6b는 본 발명의 일 실시 예에 따라서, I/O 어댑터 이벤트 통지를 운영체제에 제공하기 위한 논리의 일 실시 예를 도시한다.
도 7a는 본 발명의 일 실시 예에 따라서 사용되는 수정 PCI 펑션 컨트롤들 명령(a Modify PCI Function Controls intruction)의 일 실시 예를 도시한다.
도 7b는 본 발명의 일 실시 예에 따라서, 도 7a의 수정 PCI 펑션 컨트롤들 명령이 사용하는 필드의 일 실시 예를 도시한다.
도 7c는 본 발명의 일 실시 예에 따라서, 도 7a의 수정 PCI 펑션 컨트롤들 명령이 사용하는 또 하나의 필드의 일 실시 예를 도시한다.
도 7d는 본 발명의 일 실시 예에 따라서 사용되는 펑션 정보 블록 (FIB)의 내용들의 일 실시 예를 도시한다.
도 8은 본 발명의 일 실시 예에 따라서, 수정 PCI 펑션 컨트롤들 명령의 논리의 개요의 일 실시 예를 도시한다.
도 9는 본 발명의 일 실시 예에 따라서, 수정 PCI 펑션 컨트롤들 명령에 의해 지정될 수 있는 레지스터 어댑터 인터럽션들의 동작(a register adapter interruptions operation)과 연관되는 논리의 일 실시 예를 도시한다.
도 10은 본 발명의 일 실시 예에 따라서, 수정 PCI 펑션 컨트롤들 명령에 의해 지정될 수 있는 언레지스터 어댑터 인터럽션들의 동작(an unregister adapter interruptions operation)과 연관된 논리의 일 실시 예를 도시한다.
도 11a는 본 발명의 일 실시 예에 따라서 사용되는 콜 논리 프로세서(Call Logical Processor) 명령의 일 실시 예를 도시한다.
도 11b는 본 발명의 일 실시 예에 따라서, 리스트 동작(list operation)을 위해 도 11a의 콜 논리 프로세서(Call Logical Processor) 명령이 사용하는 요청 블록의 일 실시 예를 도시한다.
도 11c는 본 발명의 일 실시 예에 따라서, 도 11b의 리스트 동작(list operation)에 대한 응답 블록(a response block)의 일 실시 예를 도시한다.
도 11d는 본 발명의 일 실시 예에 따라서 사용되는 펑션 리스트 엔트리(a function list entry)의 일 실시 예를 도시한다.
도 12a는 본 발명의 일 실시 예에 따라서, 조사 펑션 동작(a query function operation)에 대한 도 11a의 콜 논리 프로세서(Call Logical Processor) 명령이 사용하는 요청 블록의 일 실시 예를 도시한다.
도 12b는 본 발명의 일 실시 예에 따라서, 도 12a의 조사 펑션 동작에 대한 응답 블록의 일 실시 예를 도시한다.
도 13a는 본 발명의 일 실시 예에 따라서, 조사 그룹 동작(a query group operation)에 대한 도 11a의 콜 논리 프로세서 명령이 사용하는 요청 블록의 일 실시 예를 도시한다.
도 13b는 본 발명의 일 실시 예에 따라서, 도 13a의 조사 그룹 동작에 대한 응답 블록의 일 실시 예를 도시한다.
도 14는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하는 컴퓨터 프로그램 제품의 일 실시 예를 도시한다.
도 15는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 호스트 컴퓨터 시스템의 일 실시 예를 도시한다.
도 16은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨터 시스템의 추가적인 예를 도시한다.
도 17은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 또 다른 예를 도시한다.
도 18은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨터 시스템의 여러 엘리먼트들의 일 실시 예를 도시한다.
도 19a는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 도 18의 컴퓨터 시스템의 실행 유닛(execution unit)의 일 실시 예를 도시한다.
도 19b는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 도 18의 컴퓨터 시스템의 분기 유닛(branch unit)의 일 실시 예를 도시한다.
도 19c는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 도 18의 컴퓨터 시스템의 로드/저장 유닛(load/store unit)의 일 실시 예를 도시한다.
도 20은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 에뮬레이트된 호스트 컴퓨터 시스템(an emulated host computer system)의 일 실시 예를 도시한다.
본 발명의 일 실시 예에 따라, 메시지 시그널 인터럽션 (MSI) 요청을 입력/출력 (I/O) 어댑터 이벤트 통지로 변환하기 위한 능력이 제공된다. MSI는 어댑터에 의해 요청되고 어댑터 이벤트 통지로 변환되며, 이 어댑터 이벤트 통지로 하나 또는 그 이상의 특정 인디케이터(specific indicator)들이 세트되고 인터럽션이 운영체제 (또는 다른 프로그램들 등과 같은 다른 소프트웨어에. 여기에서 사용될 때, 운영체제라는 말은 운영체제 디바이스 드라이버들을 포함한다)에 제공되도록 하는 요청이 생성된다. 한 구체적인 예에서, 각각의 MSI 요청이 운영체제에 대한 인터럽션을 위한 하나의 요청을 일으키는 것은 아니지만, 그 대신에, 하나의 인터럽션 요청은 복수의 MSI 요청들을 포괄한다(encompass).
여기에서 사용될 때, "어댑터"라는 말은 어느 유형의 어댑터든 (예, 저장 어댑터, 네트워크 어댑터, 프로세싱 어댑터(processing adapter), 암호화 어댑터(cryptographic adapter), PCI 어댑터, 기타 유형의 입력/출력 어댑터 등) 포함한다. 일 실시 예에서, 어댑터는 하나의 어댑터 펑션을 포함한다. 그러나, 다른 실시 예들에서, 어댑터는 복수의 어댑터 펑션들을 포함할 수 있다. 어댑터가 하나의 어댑터 펑션을 포함하든 또는 복수의 어댑터 펑션들을 포함하든 본 발명의 하나 또는 그 이상의 실시 예들이 적용된다. 또한, 여기에 제시된 예들에서, 달리 언급이 없으면 어댑터는 어댑터 펑션 (예, PCI 펑션)과 교환하여 사용하는 것이 가능하다.
본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨팅 환경의 일 실시 예를 도 1을 참고하여 기술한다. 한 예에서, 컴퓨팅 환경 (100)은 인터내셔널 비니네스 머신즈 코포레이션(International Business Machines Corporation)에서 제공하는 System z? 서버이다. System z?은 인터내셔널 비니네스 머신즈 코포레이션에서 제공하는 z/Architecture?에 기반한다. z/Architecture?에 관한 세부사항들은 2009년 2월에 공개된 공개 번호 SA22-7832-07의 "z/Architecture 동작 원리(z/Architecture Principles of Operation)"라는 이름의 IBM? 간행물에 기술되어 있다. IBM?, System z? 및 z/Architecture?은 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션의 등록 상표이다. 여기에서 사용되는 다른 이름들도 인터내셔널 비지네스 머신즈 코포레이션 또는 다른 회사들의 등록 상표, 상표 또는 제품일 수 있다.
한 예에서, 컴퓨팅 환경 (100)은 메모리 제어기 (106)를 통하여 시스템 메모리 (메인 메모리라고도 알려짐)에 결합된 하나 또는 그 이상의 중앙 처리 장치들 (CPU들, 102)을 포함한다. 시스템 메모리 (104)에 액세스하기 위해, 중앙 처리 장치 (102)는 시스템 메모리 액세스에 사용되는 주소를 포함하는 리드 또는 라이트 요청(a read or write request)을 발행한다. 상기 요청에 포함된 주소는 통상적으로 시스템 메모리 액세스에 직접적으로 사용할 수 없으며, 따라서 시스템 메모리 액세스에 직접적으로 사용할 수 있는 주소로 변환된다(translated). 상기 주소는 변환 메커니즘 (translation mechanism, XLATE) (108)을 통하여 변환된다. 예를 들면, 상기 주소는 예를 들어 동적 주소 변환 (dynamic address translation, DAT)을 이용하여 가상 주소에서 실제 또는 절대 주소로 변환된다.
주소 (필요할 경우, 변환된)를 포함하는 요청이 메모리 제어기 (106)에서 수신된다. 한 예에서, 메모리 제어기 (106)은 하드웨어로 구성되고 시스템 메모리에 액세스를 위해 중재하고(arbitrate) 그 메모리의 일관성(consistency)을 유지하는데 사용된다. 이 중재(arbitration)는 하나 또는 그 이상의 어댑터들 (110)으로부터 수신되는 요청들을 위해서뿐만 아니라 CPU들 (102)로부터 수신되는 요청들을 위해서도 수행된다. 중앙 처리 장치들처럼, 어댑터들도 시스템 메모리에 액세스하기 위해 시스템 메모리 (104)에 요청들을 발행한다.
한 예에서, 어댑터 (110)은 하나 또는 그 이상의 PCI 펑션들을 포함하는 PCI(Peripheral Component Interconnect) 또는 PCI 익스프레스 (PCI Express, PCIe) 어댑터이다. PCI 펑션은 요청을 발행하고 이것은 하나 또는 그 이상의 스위치들 (예, PCIe 스위치들) (114)를 통하여 입력/출력 허브 (112) (예, PCI 허브)로 라우팅된다(routed). 한 예에서, 입력/출력 허브는 하나 또는 그 이상의 상태 머신들(state machines)을 포함하는 하드웨어로 구성된다.
입력/출력 허브는, 예를 들어, 스위치로부터 상기 요청을 수신하는 루트 복합체 (root complex, 116)을 포함한다. 상기 요청은, 예를 들자면, 직접 메모리 액세스 (DMA)를 수행하거나 메시지 시그널 인터럽션 (MSI)를 요청하는데 사용되는 입력/출력 주소를 포함한다. 이 주소는 주소 변환 및 보호 유닛 (address translation and protection unit, 118)에 제공되고, 이 유닛 (118)은 DMA 또는 MSI 요청 중 하나를 위해 사용되는 정보에 액세스한다.
DMA 동작에 있어서, 주소 변환 및 보호 유닛 (118)은 상기 주소를 시스템 메모리 액세스에 사용할 수 있는 주소로 변환할 수 있다. 그 다음, 상기 어댑터로부터 개시된 요청 (변환된 주소를 포함함)이 예를 들어 I/O-메모리 버스 (120)을 통하여 메모리 제어기 (106)에 제공된다. 메모리 제어기는 중재를 수행하고 변환된 주소를 갖는 상기 요청을 적절한 시기에 시스템 메모리로 전송한다.
MSI 요청을 위해, 주소 변환 및 보호 유닛 (118) 내의 정보가 획득되어 MSI 요청의 I/O 어댑터 이벤트 통지로의 변환을 용이하게 한다. 여기에 기술된 실시 예들은 인터럽트 처리(interrupt processing)에 관한 것이므로, 인터럽트 처리와 관련이 있는 I/O 허브 및 시스템 메모리에 관한 추가적인 세부사항들은 도 2를 참고하여 기술한다. 도 2에서, 메모리 제어기는 도시되지 않지만, 사용될 수도 있다. I/O 허브는 시스템 메모리 (104) 및/또는 프로세서 (254)에 직접 결합되거나 메모리 제어기를 통하여 결합될 수 있다.
도 2를 참조하면, 한 예에서, 시스템 메모리 (104)는 인터럽션 처리를 용이하게 하는데 사용할 수 있는 하나 또는 그 이상의 데이터 스트럭처들을 포함한다. 이 예에서, 시스템 메모리 (104)는 어댑터 인터럽션 비트 벡터 (adapter interruption bit vector, AIBV) (200)과 특정한 어댑터와 연관된 선택적 어댑터 인터럽션 요약 비트 (adapter interruption summary bit, AISB) (202)를 포함한다. 각각의 어댑터에 대해서 AIBV와 그 대응 AISB가 있을 수 있다.
한 예에서, 어댑터 인터럽션 비트 벡터 (200)은 어댑터 (예, PCI 펑션)와 연관된 메인 스토리지 내의 하나 또는 그 이상의 비트들의 1차원 배열(a single dimension array)이다. 상기 어댑터 인터럽션 비트 벡터 내의 비트들은 MSI 벡터의 수들(MSI vector numbers)을 나타낸다. AIBV에서 1로 세트된 비트는 그 연관된 어댑터에 대한 이벤트의 조건(condition) 또는 유형(type)을 표시한다(indicate). PCI 펑션의 예에서, 연관된 AIBV 내의 각각의 비트는 MSI 벡터에 대응한다. 따라서, PCI 펑션이 하나의 MSI 벡터만 지원하면, AIBV는 단일 비트를 포함하고; PCI 펑션이 다수의 MSI 벡터들을 지원하면, AIBV는 MSI 벡터 마다 하나의 비트를 포함한다. 도 2에 도시된 예에서, PCI 펑션은 다수의 MSI 벡터들 (예, 3)을 지원하고, 따라서 AIBV (200)에는 다수의 비트들 (예, 3)이 있다. 각각의 비트는 특정한 이벤트에 대응하는데, 예를 들면, AIBV의 비트 0이 1로 세트될 때 완료된 동작을 표시하고; AIBV의 비트 1이 1로 세트될 때 에러 이벤트에 대응하는 식이다. 도시된 바와 같이, 이 예에서는 비트 1이 세트된다.
한 구체적인 예에서, 하나의 커맨드 (예, 수정 PCI 펑션 컨트롤들 커맨드)가 PCI 펑션에 대한 AIBV를 지정하기 위해 사용된다. 구체적으로, 상기 커맨드는 운영체제에 의해 발행되며 PCI 펑션의 아이덴티티(identity), AIBV를 포함하는 영역의 메인 스토리지 위치, 상기 위치에서 AIBV의 제1 비트까지의 오프셋, 및 AIBV를 포함하는 비트들의 수(the number of bits)를 명시한다. 구체적으로, 이 커맨드를 사용하여, 어댑터 인터럽션 파라미터들을 그러한 정보 (예를 들면, 초기화 및/또는 구성으로부터 획득된)를 저장하는 펑션 정보 블록으로부터 어댑터의 디바이스 테이블 엔트리 (아래에 기술됨) 및/또는 펑션 테이블 엔트리 (아래에 기술됨)로 복사한다.
PCI 펑션의 아이덴티티는, 한 예에서, 펑션 핸들(a function handle)이다. 펑션 핸들은, 예를 들어 PCI 펑션 핸들이 인에이블되는지를 표시하는 인에이블 인디케이터, 상기 펑션을 식별하는 PCI 펑션 번호(a PCI function number) (이것은 정적 식별자임), 및 이 펑션 핸들의 특정한 인스턴스를 표시하는 인스턴스 번호(instance number)를 포함한다. 예를 들어, 펑션 핸들이 인에이블될 때마다, 인스턴스 번호는 새로운 인스턴스 번호를 제공하기 위해 증분된다(incremented). 펑션 핸들은 펑션 테이블에서 하나 또는 그 이상의 엔트리들을 포함하는 펑션 테이블 엔트리를 찾는데 사용된다. 예를 들어, 펑션 핸들의 하나 또는 그 이상의 비트들은 특정한 펑션 테이블 엔트리를 찾기 위해 펑션 테이블의 인덱스로 사용된다. 펑션 테이블 엔트리는 연관된 PCI 펑션에 관한 정보를 포함한다. 예를 들면, 그것은 연관된 어댑터 펑션의 상태에 관한 여러(various) 인디케이터들을 포함할 수 있고, 그것은 이 어댑터 펑션에 대한 디바이스 테이블 엔트리들을 찾는데 사용되는 하나 또는 그 이상의 디바이스 테이블 엔트리 인덱스들을 포함할 수 있다. (한 실시 예에서, 운영체제에게, 상기 핸들은 단순히 어댑터의 오페이크 식별자(opaque identifier)이다.
AIBV는 모든 바이트 경계 (any byte boundary)와 모든 비트 경계(any bit boundary)상에 할당될 수 있다. 이것은 운영체제에게 다수 어댑터들의 AIBV들을 연속한 범위(contiguous range)의 비트들과 바이트들로 묶을(pack) 수 있는 유연성(flexibility)을 부여한다. 예를 들어, 도 3a에 도시된 바와 같이, 한 예에서, 운영체제는 공통 스토리지 영역(a common storage area)을 위치 X에 지정하여 다섯 개의 연속한 AIBV들을 포함하도록 한다. 각각의 AIBV와 연관된 어댑터는 문자 A-E로 식별된다. 각각의 AIBV 비트가 어댑터에 대해서 표현하는 이벤트는 숫자 0-n에 의해서 추가적으로 식별된다. 할당되지 않은 비트들은 소문자 "u"에 의해서 식별된다.
추가 예가 도 3b에 도시된다. 이 예에서, 운영체제는 세 개의 고유 스토리지 영역(unique storage areas)을 위치 X, Y 및 Z에 지정하여 다섯 개의 I/O 어댑터들에 대한 AIBV들을 포함하도록 한다. 위치 X의 스토리지는 어댑터 A와 B에 대한 AIBV들을 포함하고, 위치 Y의 스토리지는 어댑터 C에 대한 AIBV만을 포함하며, 위치 Z의 스토리지는 어댑터 D와 E에 대한 AIBV들을 포함한다. 각각의 AIBV 비트가 I/O 어댑터에 대해서 표현하는 이벤트는 숫자 0-n에 의해서 식별된다. 할당되지 않은 비트들은 문자 "u"에 의해서 식별된다.
도 2로 다시 돌아가서 살펴보면, 이 예에는, AIBV이외에, 상기 어댑터를 위해 AISB (202)도 있는데, 이것은 상기 어댑터와 연관된 단일 비트(a single bit)를 포함한다. AISB가 1이면, 이는 이 AISB와 연관된 AIBV내의 하나 또는 그 이상의 비트들이 1로 세트되었음을 표시한다. AISB는 선택적(optional)이며, 각각의 어댑터를 위해서 하나가 있거나, 각각의 선택된(selected) 어댑터를 위해서 하나가 있거나 또는 한 그룹의 어댑터들을 위해서 하나가 있을 수 있다.
PCI 펑션들을 위한 한 특정의 구현에서, 커맨드 (예, 수정 PCI 펑션 컨트롤들 커맨드)가 PCI 펑션에 대한 AISB를 지정하는데 사용된다. 구체적으로, 이 커맨드는 운영체제에 의해 발행되며 그리고 PCI 펑션 (예, 핸들)의 아이덴티티, AISB를 포함하는 영역의 메인 스토리지 위치, 상기 위치로부터 AISB까지의 오프셋, 및 요약 비트가 있음을 표시하는 어댑터 인터럽션 요약 통지 인에이블먼트 컨트롤(adapter interruption summary notification enablement control)을 명시한다.
AISB는 모든 바이트 경계와 모든 비트 경계상에 할당될 수 있다. 이것은 운영체제에게 다수 어댑터들의 AISB들을 연속 범위의 비트들과 바이트들로 묶을(pack) 수 있는 유연성을 부여한다. 한 예에서, 도 3c에 도시된 바와 같이, 운영체제는 공통 스토리지 영역을 위치 X에 지정하여 아홉 개의 연속 AISB들을 포함하도록 한다. 각각의 AISB와 연관된 어댑터는 문자 A-I에 의해서 식별된다. 할당되지 않은 비트들은 소문자 "u"에 의해서 식별된다.
추가 할당 예가 도 3d에 도시되며, 여기에서 운영체제는 세 개의 고유 AISB 저장 위치들을 위치 X와, Y와 Z에 지정하여 세 어댑터들의 각각의 AISB들을 포함하도록 한다. 각각의 AISB와 연관된 어댑터들은 문자 A-C에 의해서 식별된다. 할당되지 않은 비트들은 소문자 "u"에 의해서 식별된다.
또한, 이 프로그램은 단일 AISB를 다수의 PCI 펑션들에 할당할 수도 있다. 이것은 다수의 AIBV들을 단일 요약 비트와 연관시킨다. 따라서, 이러한 AISB가 1이면, 이는 운영체제가 다수의 AIBV들을 스캔해야 한다는 것을 표시한다.
도 2로 돌아가서 살펴보면, 한 예에서, AIBV와 AISB는 I/O 허브 (112) 내의 디바이스 테이블 (208)의 디바이스 테이블 엔트리 (206)에 위치한 주소들에 의해서 포인트된다. 한 예에서, 디바이스 테이블 (208)은 I/O 허브의 주소 변환 보호 유닛 내에 위치한다.
디바이스 테이블 (208)은 하나 또는 그 이상의 엔트리들 (206)을 포함하고, 이들 각각은 특정 어댑터 펑션 (210)에 대해서 할당된다. 디바이스 테이블 엔트리 (206)은 다수의 필드들을 포함하는데, 이들은 예를 들어 위에서 언급한 커맨드들을 사용하여, 채워질 수 있다(populated). 하나 또는 그 이상의 필드들의 값들은 폴리시(policy) 및/또는 구성(configuration)에 기초를 둔다. 필드들의 예는 다음과 같다:
인터럽션 서브클래스 (ISC) (214): 인터럽션에 대한 인터럽션 서브클래스를 나타냄. ISC는 운영체제가 인터럽션을 처리할 우선순위와 연관될 수 있는, 어댑터 인터럽션들의 마스크 가능 클래스를 식별한다;
AIBV 주소 (@) (216): 예를 들어, 이 디바이스 테이블 엔트리에 할당된 특정한 어댑터 펑션에 대한 AIBV를 포함하는 스토리지 위치의 시작점(beginning)의 절대 주소를 제공한다;
AIBV 오프셋 (218): AIBV의 시작점에 대한 메인 스토리지 위치의 오프셋(an offset into the main storage location);
AISB 주소 (@) (220): 운영체제가 AISB를 지정하였다면, 예를 들어, 이 PCI 펑션을 위한 상기 AISB를 포함하는 스토리지 위치의 시작점의 절대 주소를 제공한다;
AISB 오프셋 (222): AISB에 대한 메인 스토리지 위치의 오프셋(an offset into the main storage location);
어댑터 인터럽션 요약 통지 인에이블먼트 컨트롤 (인에이블) (224): 이 컨트롤은 AISB가 있는지를 표시한다;
인터럽션들의 수 (NOI) (226): 이 PCI 펑션을 위해 허용된 MSI 벡터들의 최대 개수를 표시하며, 제로(0)는 아무것도 허용되지 않았음을 표시한다.
다른 실시 예들에서, DTE는 더 많거나, 더 적거나 또는 다른 정보를 포함할 수 있다.
한 실시 예에서, 어댑터에 의한 특정 인터럽션 요청을 위해 사용될 디바이스 테이블 엔트리는, 예를 들어, 어댑터 (예, PCI 펑션 210)에 의해 발행된 요청 내에 위치한 요청자 식별자 (requestor identifier, RID) (및/또는 주소의 일부)를 사용하여 찾는다. 상기 요청자 ID(예, 버스 번호, 디바이스 번호 및 펑션 번호를, 예로서, 명시하는 16-비트 값)가 상기 요청 내에 포함되어 있을 뿐만 아니라, 또한 상기 인터럽트를 위해 사용될 주소도 상기 요청 내에 포함된다. 상기 RID와 상기 주소를 포함하는 상기 요청은, 예를 들어 내용 주소화 메모리 (contents addressable memory, CAM 230)에 제공되는데, 이는, 예를 들어 스위치를 통해서 제공되며, 이 내용 주소화 메모리는 인덱스 값을 제공하는데 사용된다. 예를 들어, CAM은 다수의 엔트리들을 포함하며, 각각의 엔트리는 디바이스 테이블의(into) 인덱스에 대응한다. 각각의 CAM 엔트리는 RID의 값을 포함한다. 예를 들어, 만일 수신된 RID가 CAM 내의 엔트리에 포함된 값과 일치한다면, 그 대응하는 디바이스 테이블 인덱스는 디바이스 테이블 엔트리를 찾는데 사용된다. 다시 말하면, CAM의 출력(output)은 디바이스 테이블 (208)로 인덱스하는데 사용된다. 일치하지 않는다면, 수신된 패킷은 폐기된다. (다른 실시 예들에서, CAM 또는 기타 룩업(lookup)은 필요하지 않고 RID가 인덱스로 사용된다.) 상기 찾아낸 DTE는, 전술한 바와 같이, 인터럽트 요청을 처리하는데 사용된다.
인터럽션을 요청하기 위해, 어댑터 펑션 (210)은 I/O 허브에 하나의 패킷을 전송한다. 이 패킷은 MSI 주소 (232)와 그와 연관된 데이터 (234)를 갖는다. I/O 허브는 상기 수신된 주소의 적어도 일 부분을 MSI 비교 레지스터 (MSI compare register, 250) 내의 값과 비교한다. 일치한다면, DMA 동작이 아니라, 인터럽션 (예, MSI)이 요청된다. 상기 요청에 대한 이유 (즉, 발행한 이벤트의 유형)는 연관된 데이터 (234)에 표시된다. 예를 들어, 데이터의 하나 또는 그 이상의 하위 비트들이 그 이유 (이벤트)를 표시하는 특정한 인터럽트 벡터 (즉, MSI 벡터)를 명시하는데 사용된다.
본 발명의 일 실시 예에 따라, 어댑터로부터 수신된 인터럽션 요청이 I/O 어댑터 이벤트 통지로 변환된다. 다시 말하면, 하나 또는 그 이상의 인디케이터들 (예, 하나 또는 그 이상의 AIBV들과 선택적으로 AISB)이 세트되고, 이미 인터럽션이 계류 중이 아니라면, 운영체제에 대한 인터럽션이 요청된다. 한 실시 예에서, 하나 또는 그 이상의 어댑터들로부터 다수의 인터럽션 요청들 (예, MSI들)이 운영체제에 대한 단일 인터럽션으로 합병된다(coalesced), 그러나 각각의 AIBV및 AISB 표시들은 유지된다. 예를 들어, 만일I/O 허브가 이미 MSI 요청을 받았고, 그 다음에(in turn), 프로세서에 인터럽션 요청을 제공했으나, 그 인터럽션이 아직 계류 중인 경우 (예를 들어, 이런저런 이유로 상기 인터럽션이 운영체체에 일어나지 않은 경우 (예를 들어, 인터럽트들이 디스에이블되어 있는 경우)), 상기 허브가 하나 또는 그 이상의 다른 MSI들을 수신한다면, 상기 허브는 추가적인 인터럽트들을 요청하지 않는다. 상기 하나의 인터럽션은 상기 복수의 MSI 요청들을 대체하며(replace) 표시한다(represent). 그러나, 하나 또는 그 이상의 AIBV들과 선택적으로 하나 또는 그 이상의 AISB들이 세트된다.
MSI (또는 다른 어댑터 인터럽션 요청)를 I/O 어댑터 이벤트 통지로 변환하는 것에 관한 추가적인 세부사항들이 도 4-6b를 참조하여 아래에 기술된다. 구체적으로, 도 4는 수행될 여러 초기화를 기술하고, 도 5는 등록 프로세스를 기술하고, 도 6a는 MSI를 어댑터 이벤트 통지로 변환하는 논리를 기술하며, 도 6b는 I/O 어댑터 이벤트 통지(adapter event notification)를 운영체제에 제시하는 논리를 기술한다.
도 4를 참조하면, 한 예에서, MSI 요청을 I/O 어댑터 이벤트 통지로 변환하기 위해 특정의(certain) 초기화가 수행된다. 초기화 동안에, 운영체제는 MSI 요청을 통해서 어댑터 이벤트 통지를 위해 어댑터를 구성하는(configure) 다수의 단계들을 수행한다. 이 예에서, 구성되는 것은 PCI 펑션이지만, 다른 실시 예들에서는, 다른 유형의 어댑터 펑션들을 포함하여 다른 어댑터들일 수 있다.
초기에, 한 예에서, 단계 (400)에서, 구성 내의 PCI 펑션들에 관한 결정이 내려진다. 한 예에서, 운영체제에 의해 발행된 커맨드 (예, 조사 리스트 커맨드(a Query List command))가 요청하는 구성(the requesting configuration)에 할당된 (예, 특정 운영체제에 할당된) PCI 펑션들의 리스트를 획득하는데 사용된다. 이 정보는 이 정보를 유지하는 구성 데이터 스트럭처(a configuration data structure)로부터 획득된다.
그 다음, 단계 (402)에서, 상기 리스트 내의 PCI 펑션들 중 하나가 선택되고, PCI 펑션을 위해 사용될 MSI 주소와 그 PCI 펑션에 의해 지원되는(supported) MSI 벡터들의 수에 관한 결정이 내려진다. MSI 주소는 I/O 허브와 그것이 설치된 시스템의 특성들에 기초하여 결정된다. 지원되는 MSI 벡터들의 수는 폴리시에 기초하며 구성 가능하다(configurable).
그 다음, 단계 (410)에서, AIBV가 할당되고, AISB도 있다면 할당된다. 한 예에서, 운영체제는 하나 또는 그 이상의 어댑터들의 효율적인 처리를 제공하기 위하여, 통상적으로 어댑터의 클래스에 기초하여, AIBV의 위치를 결정한다. 예를 들면, 스토리지 어댑터들을 위한 AIBV들은 서로 인접하게 위치할 수 있다. AIBV와 AISB는 할당되고 0으로 클리어되며, 레지스터 어댑터 인터럽션 동작이 명시된다(예를 들어, 수정 PCI 펑션 컨트롤들 명령을 사용하여). 단계 (412)에서, 이 동작은 AIBV, AISB, ISC, 인터럽션들 (MSI 벡터들)의 수, 및 어댑터 인터럽션 요약 통지 인에이블먼트 컨트롤을 등록하며, 아래에서 더 상세하게 기술된다. 그 후에, 단계 (414)에서, PCI 펑션의 구성 공간(configuration space)이 리드/라이트된다(read/written). 구체적으로는, MSI 주소와 MSI 벡터 카운트(count)는 이전의 등록(previous registration)과 일관되게 라이트된다.
그 후에, 조사단계 (416)에서, 리스트 내에 추가의 펑션들이 존재하는지에 대한 결정이 내려진다. 존재한다면, 단계 (402)로 가서 처리는 계속된다. 존재하지 않는다면, 초기화 처리는 완료된다.
여러 파라미터들의 등록에 관한 추가 세부사항들이 도 5를 참조하여 기술된다. 초기에, 초기화가 수행될 PCI 펑션에 대응하는 디바이스 테이블 엔트리 (DTE)가 선택된다. 이 선택은 예를 들어, 디바이스 테이블로부터 이용 가능한 DTE를 선택하는 관리 펌웨어(managing firmware)에 의해 수행된다. 그 후에, 단계 (502)에서, 여러 파라미터들이 디바이스 테이블 엔트리에 저장된다. 예를 들어, ISC, AIBV 주소, AIBV 오프셋, AISB 주소, AISB 오프셋, 인에이블먼트 컨트롤, 및 인터럽션들의 수 (NOI)가 상기 펑션의 구성으로부터 획득된 값들로 세트된다. 이것으로 등록 프로세스는 완료된다.
여기에서 사용된, 펌웨어는 예를 들어, 프로세서의 마이크로코드, 밀리코드 및/또는 매크로코드를 포함한다. 그것은 예를 들어, 하드웨어-레벨 명령들 및/또는 고-레벨 머신 코드의 구현에 사용되는 데이터 스트럭처들을 포함한다. 한 실시 예에서, 그것은 예를 들어, 하위의 하드웨어에 특정된(specific) 신뢰성 있는 소프트웨어(trusted software) 또는 마이크로코드를 포함하고 운영체제가 시스템 하드웨어에 액세스하는 것을 제어하는 마이크로코드로서 통상적으로 배포되는 재산권이 있는 코드(proprietary code)를 포함한다.
동작 동안, PCI 펑션이 MSI를 생성하기를 원할 때, 통상적으로 그 조건을 기술하는 운영체제에 이용 가능한 어떤 정보를 만든다. 이것은 PCI 펑션의 MSI 요청을 운영체제에 대한 I/O 어댑터 이벤트 통지로 변환하는 것이 순차적으로 일어나도록 하나 또는 그 이상의 단계들을 일으킨다. 이것은 도 6a를 참조하여 기술된다.
도 6a를 참조하면, 초기에, 단계 (600)에서, 인터럽션이 요청되는 이벤트의 기술(a description of the event)이 기록된다. 예를 들어, PCI 펑션은 시스템 메모리에 저장된 하나 또는 그 이상의 어댑터 특정 이벤트-기술-기록 스트럭처들(adapter-specific event-description-recording structures) 내에 이벤트의 기술(a description of the event)을 기록한다. 이것은 추가의 정보를 기록하는 것뿐만 아니라 이벤트의 유형을 기록하는 것도 포함한다. 그 다음, 단계 (601)에서, 요청자 ID와 함께 MSI 주소와 MSI 벡터 수를 명시하는 요청이 PCI 펑션에 의해 개시된다. 단계 (602)에서, 이 요청은 I/O 허브에 의해 수신되고, 이 요청을 수신한 것에 응답하여, 이 요청에 있는 요청자 ID가 사용되어 PCI 펑션에 대한 디바이스 테이블 엔트리를 찾는다. 조사 단계 (603)에서, I/O 허브가 이 요청 내 주소의 적어도 일 부분을 MSI 비교 레지스터(MSI compare register) 내 값과 비교한다. 이들이 같은 값이 아니면(unequal), MSI는 요청되지 않는다. 그러나 이들이 같은 값이면(equal), MSI 주소가 명시되었고, 따라서 직접 메모리 액세스 동작 대신에 MSI가 요청되었다.
그 후에, 조사 단계 (604)에서, 상기 요청에서 명시된 MSI 벡터 수가 이 펑션에 허용된 인터럽션들의 수 (NOI)보다 작거나 또는 그와 같은지에 대한 결정이 내려진다. MSI 벡터 수가 NOI보다 크면, 에러가 표시된다. 그렇지 않으면, I/O 허브가 세트 비트 펑션(a set bit function)을 발행하여 스토리지 내에 적절한 AIBV 비트를 세트한다. 단계 (605)에서, 상기 적절한 비트는 MSI 벡터 수를 디바이스 테이블 엔트리에서 명시된 AIBV 오프셋에 더하고 상기 디바이스 테이블 엔트리에서 명시된 AIBV 주소로부터 이 비트들의 수를 디스플레이스(displace)함으로써 결정된다. 그 다음 단계 (606)에서, AISB가 지정되었다면, I/O 허브가 세트 비트 펑션을 사용하여 AISB를 세트하는데, 디바이스 테이블 엔트리 내의 AISB 주소와 AISB 오프셋을 사용하여 세트한다.
그 다음, 한 실시 예에서, 인터럽션 요청이 아직 계류 중인 것이 있는지에 대한 결정이 (예를 들어, CPU 또는 I/O 허브에 의해) 내려진다. 이 결정을 내리기 위해, 계류 인디케이터(a pending indicator)가 사용된다. 예를 들어, 조사 단계 (608)에서, 인터럽트를 처리할 수 있는 컴퓨팅 환경의 프로세서들 (예, 도 1의 CPU들 (102))에 액세스 가능한 프로세서 (254)의 메모리 내에 저장된 (도 2의) 계류 인디케이터가 체크된다. 그것이 세트되지 않았다면, 단계 (610)에서 (예를 들어, 1로) 세트된다. 이미 세트되어 있다면, 처리는 완료된 것이고 또 다른 인터럽션 요청은 요청되지 않는다. 따라서, 후속 인터럽션 요청들은 이미 계류 중인 상기 하나의 요청에 의해 포괄된다(encompassed).
한 특정 예에서, 인터럽션 서브클래스 당 하나의 계류 인디케이터가 존재할 수 있으며, 따라서, 요청하는 펑션에 할당된 인터럽션 서브클래스의 계류 인디케이터가 체크되는 인디케이터이다.
도 6b에 도시된 바와 같이, 조사 단계 (640)에서, 하나 또는 그 이상의 프로세서들이 계류 인디케이터를, 비동기적으로, 체크한다. 특히, ISC(와 다른 실시 예에서 존(zone))을 위해 인에이블된 각각의 프로세서는, 예를 들어 인터럽트들이 그 프로세서를 위해 (즉, 자신의 운영체제를 위해) 인에이블될 때, 상기 ISC를 위한 상기 인디케이터 상에 폴링(poll)한다. 만일 상기 프로세서들 중 하나가 상기 인디케이터가 세트되었다고 결정하면, 단계 (642)에서, 그 프로세서는 인터럽션을 제출하기 위해서(present) 상기 동일 ISC(와 다른 실시 예에서 존(zone))을 위해 인에이블된 다른 프로세서들과 중재를 한다. 조사 단계 (640)으로 다시 돌아가서, 만일 계류 인디케이터가 세트되어 있지 않다면, ISC를 위해 인에이블된 프로세서들은 세트 인디케이터를 위해 폴링을 계속한다(continue to poll).
단계 (642)에서, 운영체제에 인터럽션이 제출된 것에 응답하여, 조사 단계 (643)에서, 운영체제는 AISB들(any AISBs)이 등록되었는지에 관하여 결정한다. 만일 등록되지 않았다면, 단계 (645)에서, 운영체제는 세트된 AIBV들을, 아래에 기술하는 바와 같이, 처리한다. 그렇지 않은 경우, 단계 (644, 645)에서, 운영체제는 모든 세트된 AISB들과 AIBV들을 처리한다. 예를 들어, 그것은 모든 AISB들이 세트 되었는지를 체크한다. 만일 세트 되었다면, 그것은 AISB를 사용하여 하나 또는 그 이상의 AIBV들의 위치를 결정한다. 예를 들어, 운영체제는 AISB들 및 AIBV들의 위치를 기억한다. 더욱이, 그것은 각각의 AISB 및 AIBV가 표시하는 어댑터에 관해서도 기억한다. 따라서, 그것은 AISB들 및 AIBV들의 위치와 AISB들, AIBV들 및 어댑터ID 사이의 연관을 포함하는 컨트롤 블록 또는 다른 데이터 구조의 형태(form)를 유지할 수 있다. 그것은 이 컨트롤 블록을 사용하여 연관된 AISB에 기초하여 AIBV의 찾기(location)를 용이하게 할 수 있다. 추가의 실시 예에서, AISB는 사용되지 않는다. 그러한 상황에서, 컨트롤 블록이 특정 AIBV를 찾기 위해 사용된다.
상기 하나 또는 그 이상의 AIBV들을 찾는 것에 응답하여, 운영체제는 상기 AIBV들을 스캔하고 모든 세트된 AIBV들(any set AIBVs)을 처리한다. 그 것은 일어난 이벤트(presented event)에 일치하는 방식으로 인터럽션을 처리한다(예를 들어, 상태를 제공한다). 예를 들어, 스토리지 어댑터에서, 하나의 이벤트가 동작이 완료되었음을 표시할 수 있다. 이는 그 동작이 성공적으로 완료되었는지와 그 동작의 상세 내용을 보기 위해 상기 어댑터에 의해서 저장된 상태를 운영체제가 체크하도록 한다. 스토리지 리드(a storeage read)의 경우, 이는 상기 어댑터로부터 리드된 데이터가 시스템 메모리 내에서 이제 이용가능하고 처리될 수 있음을 표시하는 것이다.
한 실시 예에서, 만일 변환의 동작 동안, 에러가 검출된다면, MSI요청을 어댑터 이벤트 통지로 변환하는 대신, 주의(attention)가 시스템 펌웨어에 대해서 생성된다.
어댑터 인터럽션들(adapter interruptions)을 등록하기 위해 사용된 수정 PCI 펑션 컨트롤들 명령(the Modify PCI Function Controls instruction)과 관련된 상세사항들이 지금부터 기술된다. 도 7a를 참조하면, 수정PCI 펑션 컨트롤들 명령 (700)은, 예를 들면, 수정 PCI 펑션 컨트롤들 명령을 표시하는 오피코드 (opcode) (702)와; 하나의 위치를 명시하는 제 1 필드(704) - 상기 위치에 상기 어댑터 펑션에 관하여 다양한 정보가 저장되며, 상기 어댑터 펑션을 위하여 동작 파라미터들(the operational parameters)이 설정됨(established) - 와; 그리고 하나의 위치를 명시하는 제 2필드 (706) - 상기 위치로부터 PCI 펑션 정보 블록 (FIB)이 페치됨 - 을 포함한다. 필드들 1및 2에 의해 지정되는 위치들의 내용들은 아래에서 더 기술된다.
한 실시 예에서, 필드 1은 여러 정보를 포함하는 범용 레지스터(general register)를 지정한다. 도 7b에 도시된 바와 같이, 상기 레지스터의 내용들은, 예를 들면, 어댑터 펑션의 핸들을 식별하는 펑션 핸들 (710) - 수정 명령은 상기 펑션 핸들을 위해 수행될 것임- 과; 상기 펑션 핸들에 의해 지정되는 어댑터 펑션과 연관된 시스템 메모리 내의 주소 공간을 지정하는 주소 공간 (712)와; 상기 어댑터 펑션을 위해 수행될 동작을 명시하는 동작 컨트롤(operation control) (714)와; 상기 명령이 미리 정의된 코드로 완료될 때 그 명령에 관한 상태를 제공하는 상태 (716)를 포함한다.
한 실시 예에서, 상기 펑션 핸들은, 예를 들어, 상기 핸들이 인에이블 되었는지를 표시하는 인에이블 인디케이터(enable indicator)와, 어댑터 펑션을 식별하는 펑션 번호 (이것은 정적 식별자(static identifier)이며 펑션 테이블로(into) 인덱스 하는데 사용될 수 있음), 및 이 펑션 핸들의 특정 인스턴스(the particular instance)를 명시하는 인스턴스 번호(an instance number)를 포함한다. 각각의 어댑터 펑션에 대해 하나의 펑션 핸들이 있으며, 이것은 펑션 테이블 내에서 펑션 테이블 엔트리 (FTE)를 찾는데 사용된다. 각각의 펑션 테이블 엔트리는 동작 파라미터들 및/또는 자신의 어댑터 펑션과 연관된 다른 정보를 포함한다. 한 예로서, 펑션 엔트리는 다음과 같은 것들을 포함한다:
인스턴스 번호(Instance Number): 이 필드는 펑션 테이블 엔트리와 연관된 어댑터 펑션 핸들의 특정 인스턴스를 표시한다.
디바이스 테이블 엔트리 (DTE) 인덱스 1...n: 하나 또는 그 이상의 디바이스 테이블 인덱스들이 있을 수 있으며, 각각의 인덱스는 디바이스 테이블 엔트리 (DTE)를 찾기 위한 디바이스 테이블의 인덱스이다. 어댑터 펑션 마다 하나 또는 그 이상의 디바이스 테이블 엔트리들이 있으며, 각각의 엔트리는 자신의 어댑터 펑션과 연관된 정보를 포함하며, 이 정보에는 어댑터 펑션의 요청들 (예, DMA 요청들, MSI 요청들)을 처리하기 위해 사용되는 정보와 어댑터 펑션과 연관된 요청들 (예, PCI 명령들)과 관련된 정보가 포함된다. 각각의 디바이스 테이블 엔트리는 상기 어댑터 펑션에 할당된 시스템 메모리 내의 하나의 주소 공간과 연관된다. 어댑터 펑션은 그 어댑터 펑션에 할당된 시스템 메모리 내에 하나 또는 그 이상의 주소 공간들을 가질 수 있다.
비지 인디케이터(Busy Indicator): 이 필드는 어댑터 펑션이 비지(busy)인지를 표시한다;
영구 에러 상태 인디케이터(Permanent Error State Indicator): 이 필드는 어댑터 펑션이 영구 에러 상태에 있는지를 표시한다;
복구 개시 인디케이터(Recovery Initiated Indicator): 이 필드는 어댑터 펑션에 대한 복구가 개시되었는지를 표시한다;
허가 인디케이터(Permission Indicator): 이 필드는 어댑터 펑션을 컨트롤하려고 하는 운영체제가 그렇게 할 권한(authority)이 있는지를 표시한다.
인에이블 인디케이터(Enable Indicator): 이 필드는 어댑터 펑션이 인에이블되는지를 표시한다(예, 1=인에이블, 0=디스에이블);
요청자 식별자 (Requestor Identifier, RID): 이것은 어댑터 펑션의 식별자이며, 예를 들어, 버스 번호, 디바이스 번호 및 펑션 번호를 포함한다.
[0095] 한 예에서, 이 필드는 어댑터 펑션의 구성 공간(configuration space)의 액세스(accesses)를 위해 사용된다. (어댑터의 메모리는, 예를 들어, 구성 공간, I/O 공간, 및/또는 하나 또는 그 이상의 메모리 공간들을 포함하는 주소 공간들(address spaces)로 정의될 수 있다.) 한 예에서, 이 구성 공간은 운영체제 (또는 다른 구성)에 의해 어댑터 펑션에 대하여 발행된 명령 내에 이 구성 공간을 명시함으로써 액세스될 수 있다. 이 명령 내에 명시되는 것은 그 구성 공간의 오프셋과, RID를 포함하는 적절한 펑션 테이블 엔트리를 찾는데 사용되는 펑션 핸들이다. 펌웨어(firmware)가 상기 명령을 수신하고 그것이 구성 공간을 위한 것인지 결정한다. 따라서, I/O 허브에 요청을 생성하기 위해 RID를 사용하고, 상기 I/O 허브는 어댑터를 액세스하기 위한 요청을 생성한다. 어댑터 펑션의 위치는 RID에 기초하여 정해지며, 상기 오프셋은 어댑터 펑션의 구성 공간의 오프셋을 명시한다.
베이스 주소 레지스터 (Base Address Register, BAR) (1 ~ n): 이 필드는 BAR0 - BARn로 지정되는 복수의 부호가 없는 정수들(unsigned integers)을 포함하며, 이들은 본래 명시된 어댑터 펑션과 연관되고, 이들의 값들은 또한 어댑터 펑션과 연관된 베이스 주소 레지스터들에 저장된다. 각각의 BAR은 어댑터 펑션 내의 메모리 공간 또는 I/O 공간의 시작점 주소(starting address)를 명시하고, 또한 주소 공간의 유형을 표시하는데, 즉, 예를 들어 그것이 64 또는 32 비트 메모리 공간인지, 아니면 32 비트 I/O 공간인지 표시한다.
한 예에서, 그것은 어댑터 펑션의 메모리 공간 및/또는 I/O 공간에 액세스하기 위해 사용된다. 예를 들어, 어댑터 펑션에 액세스하기 위한 명령에서 제공된 오프셋은 어댑터 펑션에 액세스하기 위해 사용될 주소를 획득하기 위해서 명령 내에 지정된 주소 공간과 연관된 베이스 주소 레지스터(base address register) 내의 값에 더해진다. 상기 명령 내에 제공된 주소 공간 식별자는 액세스 될 어댑터 펑션 내의 주소 공간과 사용될 대응 BAR을 식별한다.
사이즈(Size) 1....n: 이 필드는 SIZE0 - SIZEn으로 지정되는 복수의 부호 없는 정수들을 포함한다. 0이 아닌(non-zero) 때, 사이즈 필드의 값은 각각의 엔트리가 앞에서 기술된 BAR에 대응하는 각각의 주소 공간의 사이즈를 나타낸다.
BAR과 사이즈에 관한 추가적인 세부사항은 아래와 같다.
1. BAR이 어댑터 펑션을 위해 구현되지 않을 때, BAR 필드와 그 대응하는 사이즈 필드는 둘 모두 제로(0)로 저장된다.
2. BAR 필드가 I/O 주소 공간 또는 32 비트 메모리 주소 공간 중 하나를 나타낼 때, 대응하는 사이즈 필드는 제로가 아니며(non-zero) 주소 공간의 사이즈를 나타낸다.
3. BAR 필드가 64 비트 메모리 주소 공간을 나타낼 때,
a. BARn 필드는 최하위 주소 비트(least significant address bit)들을 나타내고,
b. 다음 번(next consecutive) BARn +1 필드는 최상위 주소 비트(most significant address bit)들을 나타내며,
c. 대응하는 SIZEn 필드는 제로가 아니며 주소 공간의 사이즈를 나타내고,
d. 대응하는 SIZEn +1 필드는 의미가 없으며(not meaningful) 제로로 저장된다.
내부 라우팅 정보(Internal Routing Information): 이 정보는 어댑터에 특정 라우팅을 수행하는데 사용된다. 예를 들어, 이것은 노드, 프로세서 칩, 및 허브 주소지정 정보(hub addressing information)를 포함하며, 이는 예이다.
상태 표시(Status Indication): 이것은, 예를 들어, 로드/저장 동작들이 차단되는지(blocked) 또는 어댑터가 에러 상태에 있는지에 대한 표시와 다른 표시들을 제공한다.
한 예에서, 비지 인디케이터, 영구 에러 상태 인디케이터, 및 복구 개시 인디케이터는 펌웨어에 의해 수행되는 모니터링에 기초하여 세트된다. 또한, 허가 인디케이터는, 예를 들면, 폴리시(policy)에 기초하여 세트되고, BAR 정보는 프로세서 (예, 프로세서의 펌웨어)에 의한 버스 워크(bus walk) 동안에 발견된 구성 정보에 기초한다. 다른 필드들은 구성(configuration), 초기화(initialization), 및/또는 이벤트(event)들에 기초하여 세트될 수 있다. 다른 실시 예들에서, 펑션 테이블 엔트리는 더 많은 정보, 또는 더 적은 정보, 또는 다른 정보를 포함할 수 있다. 포함된 정보는 어댑터 펑션에 의해 지원되는 동작들 또는 어댑터 펑션을 위해 인에이블되는 동작들에 따라 달라질 수 있다.
도 7c를 참조하면, 한 예에서, 필드 2는, 연관된 어댑터 펑션에 관련된 정보를 포함하는, PCI 펑션 정보 블록 (FIB)의 논리 주소 (720)을 지정한다. 펑션 정보 블록은 디바이스 테이블 엔트리 및/또는 어댑터 펑션과 연관된 펑션 테이블 엔트리 (또는 다른 위치)를 업데이트하는데 사용된다. 이 정보는 어댑터의 초기화 및/또는 구성 동안에, 그리고/또는 특정한 이벤트들에 응답하여 FIB에 저장된다.
펑션 정보 블록 (FIB)에 관련된 추가 세부사항들이 도 7d를 참조하여 기술된다. 한 실시 예에서, 펑션 정보 블록 (750)은 다음의 필드들을 포함한다:
포맷(Format) (751): 이 필드는 FIB의 포맷을 명시한다.
인터셉션 컨트롤(Interception Control) (752): 이 필드는 페이지 가능 모드 게스트(a pageable mode guest)에 의한 특정 명령들의 게스트 실행(guest execution)이 명령 인터셉션(instruction interception)을 초래하는지를 표시하기 위해 사용된다.
에러 표시(Error Indication) (754): 이 필드는 직접 메모리 액세스와 어댑터 인터럽션(interruption)들에 대한 에러 상태 표시(error state indication)를 포함한다. 비트가 세트가 되면 (예를 들면, 1), 하나 또는 그 이상의 에러들이 어댑터 펑션에 대한 직접 메모리 액세스 또는 어댑터 인터럽션을 수행하는 중에 검출된 것이다.
로드/저장 차단(Load/Store Blocked) (756): 이 필드는 로드/저장 동작들이 차단되는지를 표시한다.
PCI 펑션 유효(PCI Function Valid) (758): 이 필드는 어댑터 펑션에 대한 인에이블먼트 컨트롤(enablement control)을 포함한다. 비트가 세트되면 (예를 들면, 1), 어댑터 펑션은 I/O 동작들에 대해서 인에이블된 것으로 간주된다.
주소 공간 등록(Address Space Registered) (760): 이 필드는 어댑터 펑션에 대한 직접 메모리 액세스 인에이블먼트 컨트롤을 포함한다. 이 필드가 세트될 때 (예를 들면, 1), 직접 메모리 액세스는 인에이블 된다.
페이지 사이즈(Page Size) (761): 이 필드는 DMA 메모리 액세스에 의해 액세스될 메모리의 페이지 또는 다른 유닛의 크기를 표시한다.
PCI 베이스 주소(PCI Base Address) (PBA) (762): 이 필드는 어댑터 펑션에 할당된 시스템 메모리 내의 주소 공간에 대한 베이스 주소이다. 이것은 어댑터 펑션이 명시된 DMA 주소 공간에 직접 메모리 액세스를 위해 사용하도록 허용되는 최하위 가상 주소(the lowest virtual address)를 나타낸다.
PCI 주소 한계치(PCI Address Limit) (PAL) (764): 이 필드는 어댑터 펑션이 명시된 DMA 주소 공간 내에서 액세스하도록 허용되는 최상위 가상 주소(the highest virtual address)를 나타낸다.
입력/출력 주소 변환 포인터(Input/Output Address Translation Pointer) (IOAT) (766): 입력/출력 주소 변환 포인터는 PCI 가상 주소 변환에 의해 사용되는 변환 테이블들 중 첫 번째를 지정하거나, 또는 변환의 결과인 스토리지의 프레임의 절대 주소를 직접 지정할 수 있다.
인터럽션 서브클래스(Interruption Subclass) (ISC, 768): 이 필드는 어댑터 펑션을 위해 어댑터 인터럽션들을 제시하는데 사용되는 인터럽션 서브클래스를 포함한다.
인터럽션들의 수(Number of Interruptions) (NOI) (770): 이 필드는 어댑터 펑션을 위해 수용된 확실한 인터럽션 코드들의 수(the number of distinct interruption codes)를 지정한다. 이 필드는 또한 어댑터 인터럽션 비트 벡터 주소 필드 및 어댑터 인터럽션 비트 벡터 오프셋 필드에 의해 지정되는 어댑터 인터럽션 비트 벡터의 사이즈를, 비트로, 정의한다.
어댑터 인터럽션 비트 벡터 주소(Adapter Interruption Bit Vector Address) (AIBV) (772): 이 필드는 어댑터 펑션에 대한 어댑터 인터럽션 비트 벡터의 주소를 명시한다. 이 벡터는 인터럽트(interrupt) 처리에 사용된다.
어댑터 인터럽션 비트 벡터 오프셋(Adapter Interruption Bit Vector Offset) (774): 이 필드는 어댑터 펑션에 대한 제1 어댑터 인터럽션 비트 벡터 비트의 오프셋을 명시한다.
어댑터 인터럽션 요약 비트 주소 (Adapter Interruption Summary Bit Address) (AISB) (776): 이 필드는 인터럽트 처리에 선택적으로 사용되는 어댑터 인터럽션 요약 비트를 지정하는 주소를 제공한다.
어댑터 인터럽션 요약 비트 오프셋(Adapter Interruption Summary Bit Offset) (778): 이 필드는 어댑터 인터럽션 요약 비트 벡터의 오프셋을 제공한다.
펑션 측정 블록 (FMB) 주소(Function Measurement Block (FMB) Address) (780): 이 필드는 어댑터 펑션에 관련된 측정치들(measurements)을 수집하는데 사용되는 펑션 측정 블록의 주소를 제공한다.
펑션 측정 블록 키(Function Measurement Block Key) (782): 이 필드는 펑션 측정 블록에 액세스하기 위한 액세스 키를 포함한다.
요약 비트 통지 컨트롤 (Summary Bit Notification Control) (784): 이 필드는 사용 중인 요약 비트 벡터가 있는지를 표시한다.
명령 승인 토큰(Instruction Authorization Token) (786): 이 필드는 페이지 가능 스토리지 모드 게스트(a pageable storage mode guest)가 호스트의 개입 없이 PCI 명령들을 수행하도록 승인되는지를 결정하기 위해 사용된다.
한 예에서, z/Architecture?의, 페이지 가능 게스트는, 해석 레벨 2에서 (at level 2 of interpretation), 스타트 해석적 실행(Start Interpretive Execution, SIE) 명령을 통해 해석적으로 실행된다. 예를 들면, 논리적 파티션 (logical partition, LPAR) 하이퍼바이저는 SIE 명령을 실행하여 물리적, 고정 메모리 내의 논리적 파티션(logical partition)을 시작한다. z/VM?이 그 논리적 파티션에서 운영체제라면, 이것은 SIE 명령을 발행하여 자신의 V=V (가상) 스토리지에서 자신의 게스트들 (가상) 머신들을 실행하게 한다. 따라서, LPAR 하이퍼바이저는 레벨-1 SIE를 사용하고, z/VM? 하이퍼바이저는 레벨-2 SIE를 사용한다.
주소 변환 포맷(Address Translation Format) (787): 이 필드는 변환에 사용될 최상위 레벨 변환 테이블의 주소 변환을 위해 선택된 포맷을 표시한다(예, 최상위 레벨 테이블 (예, 세그먼트 테이블, 영역 제3 등)의 표시).
수정 PCI 펑션 컨트롤들 명령 내에 지정된 펑션 정보 블록은 선택된 디바이스 테이블 엔트리, 펑션 테이블 엔트리 및/또는 그 명령 내에 지정된 어댑터 펑션과 연관된 다른 펌웨어 컨트롤들을 수정하는데 사용된다. 디바이스 테이블 엔트리, 펑션 테이블 엔트리 및/또는 다른 펌웨어 컨트롤들을 수정함에 의해서, 어댑터를 위해 특정 서비스들(certain services)을 제공한다. 이 서비스들은, 예를 들면, 어댑터 인터럽션들; 주소 변환들; 에러 상태 리셋(reset error state); 로드/저장 차단 리셋(reset load/store blocked); 펑션 측정 파라미터들 세트(set function measurement parameters); 및 인터셉션 컨트롤 세트(set interception control)를 포함한다.
수정 PCI 펑션 컨트롤들 명령과 연관된 논리의 한 실시 예가 도 8을 참조하여 기술된다. 한 예에서, 상기 명령은 운영체제 (또는 다른 구성)에 의해 발행되고 그 운영체제를 실행하는 프로세서 (예, 펌웨어)에 의해 실행된다. 여기에 있는 예들에서, 상기 명령과 어댑터 펑션들은 PCI에 기초한다. 그러나, 다른 예들에서는, 다른(different) 어댑터 아키텍처와 그 대응 명령들이 사용될 수 있다.
한 예에서, 운영체제는 다음의 오퍼랜드들을 명령에 제공한다(예를 들어, 상기 명령에 의해서 지정된 하나 또는 그 이상의 레지스터들 내에): PCI 펑션 핸들; DMA 주소 공간 식별자; 동작 컨트롤; 및 펑션 정보 블록의 주소.
도 8을 참조하면, 초기에, 조사 단계(INQUIRY) (800)에서, 수정 PCI 펑션 컨트롤들 명령을 허용하는 퍼실리티(facility)가 설치되어 있는 지에 관한 결정이 내려진다. 이 결정은, 예를 들어, 컨트롤 블록에 저장된 인디케이터를 체크함에 의해서 내려질 수 있다. 만일 상기 퍼실리티가 설치되어 있지 않다면, 단계 (802)에서 예외 조건(an exception condition)이 제공된다. 그렇지 않다면, 조사 단계(INQUIRY) (804)에서, 페이지가능 스토리지 모드 게스트 (PSM guest) (또는 다른 게스트)에 의해서 명령이 발행되었는지에 관한 결정이 내려진다. 만일 "예(yes)"라는 결정이 내려지면, 단계 (806)에서, 호스트 운영체제는 그 게스트를 위해 동작을 에뮬레이트 할 것이다.
그렇지 않다면, 조사단계 (808)에서, 상기 오퍼랜드들 중 하나 또는 그 이상이 정렬되어 있는지(aligned)에 관한 결정이 내려진다. 예를 들어, 상기 펑션 정보 블록의 주소가 더블워드 경계 상에(on a double word boundary)있는지에 관한 결정이 내려진다. 한 예에서, 이것은 선택적이다. 만일 상기 오퍼랜드들이 정렬되어 있지 않다면, 단계 (810)에서, 예외 조건(an exception condition)이 제공된다.
그렇지 않으면, 조사단계 (812)에서, 상기 펑션 정보 블록이 액세스 가능한지에 관한 결정이 내려진다. 만일 "아니오(no)"라는 결정이 내려지면, 단계 (814)에서, 예외 조건이 제공된다. 그렇지 않으면, 조사단계 (816)에서, 상기 수정 PCI펑션 컨트롤들 명령의 오퍼랜드들 내에 제공된 핸들이 인에이블되어 있는지에 관한 결정이 내려진다. 이 예에서, 이러한 결정은 상기 핸들 내의 인에이블 인디케이터를 체크함으로써 내려진다. 만일 상기 핸들이 인에이블되어 있지 않다면, 단계 (818)에서, 예외 조건이 제공된다.
만일 상기 핸들이 인에이블되어 있다면, 단계(820)에서, 상기 핸들은 펑션 테이블 엔트리를 찾기 위해 사용된다. 다시 말하면, 상기 핸들의 적어도 일 부분이 상기 펑션 테이블의 인덱스로 사용되어 상기 어댑터 펑션에 대응하는 펑션 테이블 엔트리를 찾아내며, 상기 어댑터 펑션을 위해서 동작 파라미터들(operational parameters )이 설정된다.
조사단계 (822)에서, 상기 펑션 테이블 엔트리를 찾았는지에 관한 결정이 내려진다. 만일 결정이 "아니오"라고 내려지면, 단계 (824)에서, 예외 조건이 제공된다. 그렇지 않고, 조사단계 (826)에서, 만일 상기 명령을 발행하는 구성이 게스트라면, 단계 (828)에서 예외 조건 (예를 들어, 호스트에 대한 인터셉션)이 제공된다. 만일 상기 구성이 게스트가 아니라면 이 조사 단계가 무시될 수 있거나 또는 다른 승인들이, 지정된 경우, 체크될 수 있다.
그 다음, 조사단계 (830)에서, 상기 펑션이 인에이블되어 있는지에 관한 결정이 내려진다. 한 예에서, 이러한 결정은 상기 펑션 테이블 엔트리 내의 인에이블 인디케이터를 체크함으로써 내려진다. 만일 상기 펑션이 인에이블되어 있지 않다면, 단계 (832)에서, 예외 조건이 제공된다.
만일 상기 펑션이 인에이블되어 있다면, 조사단계 (834)에서, 복구가 활성(active)인지에 관한 결정이 내려진다. 만일 상기 펑션 테이블 엔트리 내의 복구 인디케이터에 의해서 결정된 복구가 활성이면, 단계 (836)에서 예외 조건이 제공된다. 그러나, 만일 복구가 활성이 아니면, 조사단계 (838)에서, 상기 펑션이 비지(busy)인지에 관한 추가의 결정이 내려진다. 이러한 결정은 상기 펑션 테이블 엔트리 내의 비지 인디케이터를 체크함으로써 내려진다. 만일 상기 펑션이 비지라면, 단계 (840)에서, 비지 조건이 제공된다. 상기 비지 조건이 제공되면, 상기 명령은 드롭되지(dropped) 않고 재시도될 수 있다.
만일 상기 펑션이 비지가 아니라면, 조사단계 (842)에서, 상기 펑션 정보 블록 포맷이 유효한지에 관한 추가의 결정이 내려진다. 예를 들어, 상기 FIB의 포맷 필드는 이 포맷이 시스템에 의해서 지원되는지 아닌지에 관해 결정하기 위해 체크된다. 만일 유효하지 않다면, 단계 (844)에서, 예외 조건이 제공된다. 만일 상기 펑션 정보 블록 포맷이 유효하다면, 조사단계 (846)에서, 상기 명령의 오퍼랜드들 내에 명시된 상기 동작 컨트롤이 유효한지에 관한 추가의 결정이 내려진다. 다시 말하면, 상기 동작 컨트롤은 이 명령을 위해 명시된 동작 컨트롤들 중 하나이다. 만일 그것이 유효하지 않다면, 단계 (848)에서, 예외 조건이 제공된다. 그러나, 만일 상기 동작 컨트롤이 유효하다면, 상기 특정 동작 컨트롤이 명시된 대로 처리가 계속된다.
한 예에서, 상기 동작 컨트롤은 레지스터 어댑터 인터럽션들 동작이고, 이는 어댑터 인터럽션들을 컨트롤하기 위해 사용된다. 이 동작 컨트롤에 응답하여, 어댑터 인터럽션들과 관련된 어댑터 펑션 파라미터들은 펑션 정보 블록의 적절한 내용들에 기초하여 디바이스 테이블 엔트리 내에 세트된다.
이 동작과 연관된 논리의 한 실시 예가 도 9를 참조하여 기술된다. 한 예로서, 이 동작을 위한 오퍼랜드들은, 펑션 정보 블록으로부터 획득되며, 예를 들어, 다음을 포함한다: 인터럽션 서브클래스 (ISC); 허용된 인터럽션들의 수 (NOI); 어댑터 인터럽션 비트 벡터 오프셋(AIBVO); 요약 통지 (S); 어댑터 인터럽션 요약 비트 벡터 오프셋 (AISBVO); 어댑터 인터럽션 비트 벡터 (AIBV) 주소; 및 어댑터 인터럽션 요약 비트 벡터 (AISBV) 주소.
도 9를 참조하면, 초기에 조사단계 (900)에서, FIB 내에 명시된 인터럽션들의 수(NOI들)가 모델-종속 최대값(model-dependent maximum)보다 큰 지에 관한 결정이 내려진다. 만일 인터럽션들의 수가 크다면, 단계 (902)에서 예외 조건(an exception condition)이 제공된다. 그러나, 만일 인터럽션들의 수(NOI들)가 모델-종속 최대값보다 크지 않다면, 조사 단계 (904)에서, 어댑터 인터럽션 비트 벡터 오프셋에 인터럽션들의 수를 더한 값(NOI+AIBVO)이 모델-종속 최대값보다 큰지에 관한 추가의 결정이 내려진다. 만일 "예"라는 결정이 내려지면, 단계 (906)에서, 예외 조건(an exception condition)이 제공된다. 만일 AIBVO에 NOI를 더한 값이 모델-종속 최대값보다 크지 않다면, 조사 단계 (908)에서, AIBV주소에 NOI를 더한 값이 4k 경계(boundary)에 걸치는지(span)에 관한 추가의 결정이 내려진다. 만일 4k 경계에 걸치지 않는다면, 단계(910)에서, 예외 조건(an exception condition)이 제공된다. 그렇지 않다면, 단계 (912)에서, 모든 필요한 리소스들만큼 충분한 리소스들이 이용 가능한 지에 관한 결정이 내려진다. 만일 리소스들이 충분하지 않다면, 단계 (914)에서, 예외 조건이 제공된다.
그렇지 않다면, 단계 (916)에서, 어댑터 인터럽션들이 이 펑션을 위해 이미 등록되었는지에 관한 결정이 내려진다. 한 실시 예에서, 이것은 하나 또는 그 이상의 파라미터들 (예를 들어, DTE/FTE 내의)을 체크함으로써 결정된다. 특히, NOI와 같은, 인터럽션들과 연관된 파라미터들이 체크된다. 만일 필드들이 채워져(populated) 있다면, 어댑터는 인터럽트들을 위해 둥록된 것이다. 만일 어댑터가 이미 등록되어 있다면, 단계 (918)에서, 예외 조건이 제공된다. 그렇지 않으면, 인터럽션 파라미터들은 FIB로부터 획득되어 디바이스 테이블 엔트리 내에 그리고 선택적으로 대응 펑션 테이블 엔트리 (FTE) 내에 (또는 다른 명시된 위치에) 배치된다(placed). 또한, 단계 (920)에서, MSI 인에이블먼트 인디케이터가 DTE 내에 세트된다. 다시 말하면, 어댑터 인터럽션과 관련된 PCI 펑션 파라미터들은 DTE 내에 그리고 선택적으로, FTE 내에 펑션 정보 블록으로부터 리트리브된(retrieved) 정보에 기초하여 세트된다. 이들 파라미터들은, 예를 들어, ISC, NOI, AIBVO, S, AISBVO, AIBV 주소 및 AISBV 주소를 포함한다
전술한 것에 더하여, 명시될 수 있는 다른 동작 컨트롤은 언레지스터 어댑터 인터럽션들 동작(an unregister adapter interruptions operation)이며, 이에 관한 예가 도 10을 참조하여 기술된다. 이 동작으로, 어댑터 인터럽션에 관련된 어댑터 펑션 파라미터들이 리셋된다(reset).
도 10을 참조하면, 초기에 조사 단계 (INQUIRY) (1000)에서, 펑션 핸들에 의해서 명시된 어댑터가 인터럽트들을 위해 등록되어 있는지에 관한 결정이 내려진다. 만일 등록되어 있지 않다면, 단계 (1002)에서, 예외 조건(an exception condition)이 제공된다. 그렇지 않다면, 조사 단계 (1004)에서, 펑션 테이블 엔트리 (또는 다른 위치) 및 대응 디바이스 테이블 엔트리 내의 인터럽션 파라미터들은 제로들(0)로 세트된다. 한 예에서, 이들 파라미터들은 ISC, NOI, AIBVO, S, AISBVO, AIBV 주소 및 AISBV 주소를 포함한다.
전술한 바와 같이, 한 실시 예에서, 어댑터 펑션에 관한 정보를 획득하기 위해, 콜 논리 프로세서 명령(a Call Logical Processor instruction)이 사용된다. 이 명령의 한 실시 예가 도 11a에 도시되어 있다. 도시된 바와 같이, 한 실시 예에서, 콜 논리 프로세서(CLP) 명령 (1100)은 자신이 콜 논리 프로세서 명령임을 표시하는 오퍼레이션 코드 (1102) 및 커맨드를 위한 표시(indication for a command) (1104)를 포함한다. 한 예에서, 이 표시는 수행될 커맨드를 기술하는 요청 블록의 주소이며, 요청 블록 내의 정보는 상기 커맨드에 따라 달라진다. 여러 커맨드들을 위한 요청들의 블록들 및 대응 응답 블록들의 예들이 도 11b-13b를 참조하여 기술된다.
도 11b를 먼저 참조하면, 리스트 PCI 펑션들 커맨드를 위한 요청블록(a request block for a list PCI functions command)이 제공된다. 리스트 PCI 펑션들 커맨드는 요청하는 구성(the requesting configuration) (예를 들어, 요청하는 운영체제)에 할당된 PCI 펑션들의 리스트를 획득하기 위해 사용된다. 요청 블록 (1120)은 예를 들어 다음과 같은 다수의 파라미터들을 포함한다:
길이 필드(Length field) (1122): 이 필드는 요청 블록의 길이를 표시한다;
커맨드 코드(Command Code) (1124): 이 필드는 리스트 PCI 펑션들 커맨드를 표시한다; 그리고
재개 토큰(Resume Token) (1126): 이 필드는 새로운 리스트 PCI 펑션들 커맨드를 시작하거나 또는 이전의 리스트 PCI 펑션들 커맨드를 재개하기 위해 사용되는 정수(integer)이며, 이에 관해서는 이하에서 더 상세히 기술한다.
커맨드 요청 블록 내의 재개 토큰 필드가, 예를 들어, 제로의 값(a value of zero)을 포함하면, PCI 펑션들의 새로운 리스트가 요청된다. 커맨드 요청 블록 내의 재개 토큰 필드가, 예를 들어, 제로가 아닌 값(a non-zero value)을 포함하면, 이는 이전의(previous) 리스트 PCI 펑션들 커맨드로부터 리턴된 것이며, PCI 펑션들의 이전의 리스트가 요청된다.
리스트 PCI 펑션들 커맨드를 위해 콜 논리 프로세서 명령을 발행하고 처리하는 것에 응답하여, 응답 블록이 리턴된다. 응답 블록의 한 실시 예가 도 11c에 도시되어 있다. 한 예에서, 리스트 PCI 펑션들 커맨드를 위한 응답 블록 (1150)은 다음을 포함한다:
길이 필드(Length field) (1152): 이 필드는 응답 블록의 길이를 표시한다;
응답 코드(Response Code) (1154): 이 필드는 상기 커맨드의 상태(status)를 표시한다;
PCI 펑션 리스트(PCI Function List) (1156): 이 필드는 요청하는 운영체제가 이용 가능한 하나 또는 그 이상의 PCI 펑션들의 리스트를 표시한다.
재개 토큰(Resume Token) (1158): 이 필드는 PCI 펑션들의 이전의 리스트의 연속되는 것(a continuation of previous list)이 요청되었는지를 표시한다. 한 예에서, 요청 블록 내의 재개 토큰과 응답 블록 내의 재개 토큰이 제로(0)이면, 요청하는 구성에 대해 할당된 모든 PCI 펑션들은 PCI 펑션 리스트 내에 표시된다(represented); 만일 요청 블록 내의 재개 토큰이 제로이고 응답 블록 내의 재개 토큰이 제로가 아니면, PCI 펑션 리스트 내에 표시되지 않은(not represented), 요청 구성에 대해 할당된 추가의 PCI 펑션들이 존재할 수 있다; 만일 요청 블록 내의 재개 토큰이 제로가 아니고 응답 블록 내의 재개 토큰이 제로이면, 재개 포인트(resume point)로부터, 요청하는 구성에 대해 할당된 남아있는 (remaining) PCI 펑션들이 상기 리스트 내에 표시된다; 요청 블록 내의 재개 토큰 및 응답 블록 내의 재개 토큰이 재개 포인트로부터 모두 제로가 아니면, 연관된 PCI 펑션 리스트 어디에도 표시되지 않은(not represented in any associated PCI function list), 요청 구성에 대해 할당된 추가의 PCI 펑션들이 존재할 수 있다, 재개 토큰은 리턴된 후에는 무한의 기간(an indefinite period of time) 동안 유효하지만, 시스템 로드 경과 시간(system load elapse time)을 포함하여, 다양한 모델 종속의 이유들(a variety of model dependent reasons) 때문에 유효하지 않을 수 있다.
모델 종속 데이터(Model Dependent Data) (1160): 이 필드는 시스템에 의존하는 데이터를 포함한다;
PCI 펑션들의 수(Number of PCI Functions) (1162): 이 필드는 퍼실리티에 의해서 지원되는 PCI 펑션들의 최대 수(the maximum number)를 표시한다; 그리고
엔트리 사이즈(Entry Size) (1164): 이 필드는 PCI 펑션 리스트 내 각 엔트리의 사이즈를 표시한다.
PCI 펑션 리스트에 관한 더 상세한 사항이 도 11d를 참조하여 기술된다. 한 예에서, PCI 펑션 리스트는 복수의 엔트리들을 포함하며 각각의 엔트리 (1156)은 예로서 다음의 정보를 포함한다:
디바이스 ID(Device ID) (1170): 이 필드는 대응 PCI 펑션과 연관된 I/O 어댑터를 표시한다;
벤더 ID(Vendor ID) (1172): 이 필드는 대응 PCI 펑션과 연관된 I/O 어댑터의 제조자를 식별한다;
펑션 식별자(Function Identifier) (1174): 이 필드는 PCI 펑션의 지속 식별자(a persistent identifier)를 포함한다;
펑션 핸들(Function Handle) (1176): 이 필드는 PCI 펑션을 식별한다. 저장된 PCI 펑션 핸들은 그 핸들의 명시된 비트가 제로일 때 일반 핸들(a general handle)이며, 그 비트가 1일 때 인에이블된다. 만일 PCI 펑션이 디스에이블되면, 일반 PCI 펑션 핸들이 저장된다. 만일 PCI 펑션이 인에이블되면, 인에이블된 PCI 펑션 핸들이 저장된다. PCI 펑션 핸들은, 한 예에서, PCI 펑션 ID와는 달리, IPL을 넘어서 지속적이지(persistent beyond an IPL) 않은데, PCI 펑션 ID는 지속적(persistent)이고 I/O 구성 정의의 수명(life of the I/O configuration definition) 동안 세트된다.
구성 상태(Configuration State) (1178): 이 필드는 PCI 펑션의 상태를 표시한다. 이 인디케이터가, 예를 들어, 제로이면, 그 상태는 대기상태(standby)이고, 예를 들어, 1이면, 그 상태는 구성된 것이다. 대기상태에 있을 때, PCI 펑션 핸들은 일반 PCI 펑션 핸들이고, 구성된 상태일 때, 그것은 PCI 펑션이 인에이블되어 있는가에 따라서 일반 또는 인에이블된 PCI 펑션 핸들이 된다.
어댑터 펑션들의 리스트를 획득하고 나서, 명시된 PCI 펑션 핸들에 의해 지정된, 선택된 펑션의 속성들에 관한 정보가 획득될 수 있다. 이 정보는 조사 펑션 커맨드(a query function command)와 함께 CLP 명령을 발행함으로써 획득될 수 있다.
조사 PCI 펑션 커맨드(a query PCI function command)를 위한 요청 블록의 한 실시 예가 도 12a를 참조하여 기술된다. 한 예에서, 요청 블록 (1200)은, 예를 들어, 다음을 포함한다:
길이 필드(Length field) (1202): 이 필드는 요청 블록의 길이를 표시한다;
커맨드 코드(Command Code) (1204): 이 필드는 조사 PCI 펑션들 커맨드를 표시한다; 그리고
펑션 핸들(Function Handle) (1206): 이 필드는 조사될 PCI 펑션을 지정하는 (예를 들어, 일반 또는 인에이블된) PCI 펑션 핸들을 포함한다.
조사 PCI 펑션 커맨드를 위해 콜 논리 프로세서 명령을 발행하는 것에 응답하여, 응답 블록이 리턴된다. 응답 블록의 한 실시 예가 도 12b에 도시된다. 한 예에서, 응답 블록은 다음을 포함한다:
길이(Length) (1252): 이 필드는 응답 블록의 길이를 표시한다;
응답 코드(Response Code) (1254): 이 필드는 커맨드의 상태(status)를 표시한다;
펑션 그룹 ID(Function Group ID) (1256): 이 필드는 PCI 펑션 그룹 식별자를 표시한다. PCI 그룹 식별자는 한 그룹의 PCI 펑션들을 한 세트의 속성들(또한 이를 특성들이라고도 한다)에 연관시키기 위해 사용된다. 동일 PCI 펑션 그룹 식별자를 갖는 각각의 PCI 펑션은 동일 세트의 속성들을 갖는다;
펑션 ID(Function ID) (1258): PCI 펑션 id는 PCI 펑션 핸들에 의해서 본래 명시된 PCI 펑션의 지속 식별자이고 I/O 구성 정의의 수명 동안 세트된다;
물리적 채널 어댑터(Physical Channel Adapter) (1260): 이 값은 PCI 펑션에 대응하는 물리적 I/O 어댑터의 위치에 대한 모델 종속 식별(a model dependent identification)을 표시한다;
베이스 주소 레지스터들(BAR들) 1...n(Base Address Registers (BARs) l...n) (1262): 이 필드는, BAR0 - BARn으로 지정된, 복수의 부호 없는 정수들을 포함하며, 이들은 원래 명시된 PCI 펑션과 연관되고, 이들의 값들은 또한 PCI 펑션과 연관된 베이스 주소 레지스터들 내에 저장된다. 각각의 BAR은 어댑터 내의 메모리 공간 또는 I/O 공간의 시작점 주소를 명시하며, 또한 주소 공간의 유형을 표시하는데, 예를 들면, 64 또는 32 비트 메모리 공간, 또는 32비트 I/O 공간이 될 수 있다;
사이즈 1....n(Size 1....n) (1264): 이 필드는, SIZE0 - SIZEn으로 지정된, 복수의 부호 없는(unsigned) 정수들을 포함한다. 사이즈 필드의 값은, 제로가 아닐(non-zero) 때, 이전에 기술된 BAR에 대응하는 각각의 엔트리를 갖는 각각의 주소 공간의 사이즈를 표시한다.
스타트 이용가능 DMA(Start Available DMA) (1266): 이 필드는 DMA 동작들을 위해 이용 가능한 PCI 주소들의 범위의 시작점을 표시하는 주소를 포함한다;
엔드 이용가능 DMA(End Available DMA) (1268): 이 필드는 DMA 동작들을 위해 이용 가능한 PCI 주소들의 범위의 끝점을 표시하는 값을 포함한다
특정 어댑터 펑션들에 관하여 속성들을 획득하는 것에 더하여, 속성들은 이 펑션을 포함하는 그룹에 관하여서도 획득될 수 있다. 이들 공통 속성들은 조사 PCI 펑션 그룹 커맨드(a query PCI function group command)를 갖는 CLP 명령을 발행하는 것으로부터도 획득될 수 있다. 이 커맨드는 명시된 PCI 펑션 그룹 식별자에 의해서 지정된 하나 또는 그 이상의 PCI 펑션들의 그룹을 위해 지원되는 한 세트의 특성들을 획득하기 위해 사용된다. PCI 펑션 그룹 식별자가 사용되어 한 그룹의 PCI 펑션들을 동일한 세트의 특성들과 연관시킨다. 조사 PCI 펑션 그룹 커맨드에 대한 요청 블록의 한 실시 예가 도 13a를 참조하여 기술된다. 한 예에서, 요청 블록 (1300)은 다음을 포함한다:
길이 필드(Length field) (1302): 이 필드는 요청 블록의 길이를 표시한다;
커맨드 코드(Command Code) (1304): 이 필드는 조사 PCI 펑션 그룹 커맨드를 표시한다; 그리고
펑션 그룹 ID(Function Group ID) (1306): 이 필드는 PCI 펑션 그룹 식별자 - 이 식별자를 위해 속성들이 획득될 것임 - 를 명시한다.
조사 PCI 펑션 그룹 커맨드를 갖는 콜 논리 프로세서 명령을 발행하고 처리하는 것에 응답하여, 응답 블록은 리턴된다. 응답 블록의 한 실시 예가 도 13b에 도시되어 있다. 한 예에서, 응답 블록 (1350)은 다음을 포함한다;
길이 필드(Length Field) (1352): 이 필드는 응답 블록의 길이를 표시한다;
응답 코드(Response Code) (1354): 이 필드는 커맨드의 상태(status)를 표시한다;
인터럽션들의 수(Number of Interruptions) (1356): 이 필드는 명시된 PCI 펑션 그룹 내의 각 PCI 펑션을 위해 PCI 퍼실리티에 의해서 지원되는 연속적인 MSI 벡터 수들 (consecutive MSI vector numbers)(즉, 인터럽션 이벤트 인디케이터들) 의 최대 갯수(the maximum number)를 표시한다. 인터럽션들의 수의 가능한 유효 값들은, 한 예에서, 제로에서 2,048의 범위 내에 있다.
버전(Version) (1358): 이 필드는 PCI 퍼실리티에 의해서 지원되는 PCI 사양의 버전(the version of the PCI specification)을 표시하며, 명시된 PCI 그룹 식별자에 의해서 지정된 PCI 펑션들의 그룹은 이 PCI 퍼실리티에 부속된다(attached);
프레임(Frame) (1362): 이 필드는 I/O 주소 변환을 위해 지원되는 프레임(또는 페이지)의 사이즈들을 표시한다;
측정 블록 업데이트 인터벌(Measurement Block Update Interval) (1364): 이것은 대략의 시간 인터벌을 (예를 들어, 밀리세컨드로)표시하는 값이다. PCI 펑션 측정 블록은 이 시간 인터벌에서 업데이트된다;
DMA 주소 공간 마스크(DMA Address Space Mask) (1366): 이것은 DMA 주소 공간을 식별하기 위해 PCI 주소 내의 어느 비트들이 사용되는 지를 표시하는데 사용된 값이다; 그리고
MSI 주소(MSI Address) (1368): 이것은 메시지 시그널 인터럽션 요청들(message signal interruption requests)을 위해 사용될 값이다.
전술한 조사 리스트 및 펑션 커맨드들은 정보를, 예를 들어, 펑션 테이블로부터 리트리브(retrieve)한다. 초기화 시간에 또는 어댑터의 핫 플러그(a hot plug) 후에, 펌웨어가 버스 워크(a bus walk)를 수행하여 어댑터의 위치를 결정하고 그것의 기본 특성들(its basic characteristics)을 결정한다. 이 정보는 상기 펌웨어에 의해서 각 어댑터를 위해 펑션 테이블 엔트리(FTE) 내에 저장된다. 어댑터에 대한 액세스 가능성은 시스템 관리자가 세트한 폴리시에 기초하여 결정되고 또한 펌웨어에 의해서 FTE 내에 세트된다. 그리고 나서 상기 조사 리스트 및 펑션 커맨드들은 이 정보를 리트리브하여 그것을 운영체제에 액세스 가능한 자신들 각각의 응답 블록들 내에 저장할 수 있다.
또한, 그룹 정보는 주어진 시스템 I/O 인프라스트럭처 및 상기 펌웨어와 I/O 허브의 능력들에 기초한다. 이것은 조사 처리 동안 나중의 리트리벌(later retrieval)을 위해 FTE 내에 또는 기타 편리한 위치에 저장될 수 있다. 구체적으로, 조사 그룹 커맨드가 이 정보를 리트리브하여 그것을 운영체제에 액세스 가능한 자신의 응답 블록 내에 저장한다.
PCI 메시지 시그널 인터럽션을 운영체제에 대한 I/O 어댑터 통지로 변환하는 능력에 관하여 위에서 상세히 기술하였다. 이것은 낮은 대기시간의 인터럽션 요청(a low latency interruption request); MSI들을 상당히 많은 수의 PCI 펑션들로부터 운영체제로 전달(a delivery of MSIs from a relatively large number of PCI functions to the operating system); 및 MSI를 어댑터 이벤트 통지 아키텍처에 맞추는(fit) MSI 벡터 지정 플레이버의 유지(the retaining of the flavor of the MSI vector designation)를 제공한다. 그것은 I/O 허브가 상당히 많은 수의 PCI 펑션들에 연결되어 고유 인터럽션(unique interruption)을 생성하는 MSI 벡터에 대한 각각의 라이트(each write) 문제를 제거하도록 돕는다.
여기서 기술한 실시 예들에서, 어댑터들은 PCI 어댑터들이다. PCI는 여기서 사용된 바와 같이, 주변 컴포넌트 인터커넥트 특별 이해 그룹(the Peripheral Component Interconnect Special Interest Group) (PCI-SIG) (www.pcisig.com/home)에 의해서 정의된 PCI-기반의 사양(a PCI-based specification)에 따라 구현된 모든 어댑터들을 말하며 이는 PCI 또는 PCIe를 포함하지만, 이에 한정되지는 않는다. 한 특정 예에서, 주변 컴포넌트 인터커넥트 익스프레스(the Peripheral Component Interconnect Express) (PCle)는 컴포넌트 레벨 인터커넥트 표준이며, 이는 I/O 어댑터들과 호스트 시스템들 사이의 트랜잭션들(transactions)을 위한 양-방향 통신 프로토콜(a bi-directional communication protocol)을 정의한다. PCIe 통신들은 PCIe 버스 상에서의 전송을 위해 PCIe 표준에 따라 패킷들 내에 캡슐화된다(encapsulated). I/O 어댑터들에서 시작되고(originating) 호스트들에서 종료되는(ending) 트랜잭션들을 업바운드 트랜잭션들(upbound transactions)이라 한다. 호스트들에서 시작되고(originating) I/O 어댑터들에서 종료되는(terminating) 트랜잭션들을 다운바운드 트랜잭션들(downbound transactions)이라 한다. PCIe 토폴로지(topology)는 포인트-투-포인트 일방향 링크들(point-to-point unidirectional links)에 기초하는데, 이들은 PCIe 버스를 형성하기 위해 쌍으로 구성된다(예를 들어, 하나의 업바운드 링크, 하나의 다운바운드 링크로 구성된다). PCIe 표준은 PCI-SIG에 의해서 유지되고 발표된다.
당업자들이 알 수 있듯이, 본 발명의 실시 예들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 따라서, 본 발명의 실시 예들은 전체로서 하드웨어 형태, (펌웨어, 상주 소프트웨어, 마이크로-코드 등을 포함하여) 전체로서 소프트웨어 형태, 또는 소프트웨어와 일반적으로 "회로", "모듈", 또는 "시스템"으로 일컫는 하드웨어를 조합하는 형태를 취할 수 있다. 더 나아가서, 본 발명의 실시 예들은 컴퓨터 프로그램 제품의 형태를 취할 수 있는데, 이는 하나 또는 그 이상의 컴퓨터 리드가능 매체(들) 내에 구현되며, 컴퓨터 리드가능 프로그램 코드가 그 위에 구현된다.
하나 또는 그 이상의 컴퓨터 리드가능 매체(들)의 모든 조합이 이용될 수 있다. 컴퓨터 리드가능 매체는 컴퓨터 리드가능 스토리지 매체일 수 있다. 컴퓨터 리드가능 스토리지 매체는, 예를 들어, 전자, 자기, 광, 전자기, 적외선 또는 반도체 시스템, 장치, 또는 디바이스, 또는 이들의 모든 적절한 조합이 포함될 수 있으나, 이에 한정되지 않는다. 컴퓨터 리드가능 스토리지 매체의 더 구체적인 예들(비-포괄적 리스트)에는 다음의 것들이 포함된다: 하나 또는 그 이상의 배선들을 갖는 전기적 커넥션, 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 리드-전용 메모리(ROM), 지울 수 있는 프로그램가능 리드-전용 메모리(EPROM 또는 플래시 메모리), 광 섬유, 휴대용 컴팩트 디스크 리드-전용 메모리(CD-ROM), 광 스토리지 디바이스, 자기 스토리지 디바이스, 또는 이들의 모든 적절한 조합. 이 문서의 맥락에서, 컴퓨터 리드가능 스토리지 매체는 명령 실행 시스템, 장치, 또는 디바이스에 의해서 또는 연결해서 사용할 프로그램을 포함 또는 저장할 수 있는 모든 유형의 매체가 될 수 있다.
이제 도 14를 참조하면, 한 예에서, 컴퓨터 프로그램 제품 (1400)은, 예를 들어, 하나 또는 그 이상의 컴퓨터 리드가능 스토리지 매체 (1402)를 포함하는데, 이는 컴퓨터 리드가능 프로그램 코드 수단 또는 논리 (1404)를 그 위에 저장하여서, 본 발명의 하나 또는 그 이상의 실시 예들을 제공하거나 실시할 수 있도록 한다.
컴퓨터 리드가능 매체 상에 구현된 프로그램 코드는 적절한 매체를 사용하여 전송될 수 있는데, 이 매체에는 무선, 유선, 광 섬유 케이블, RF 등과 이들의 모든 적절한 조합이 포함될 수 있으나, 이에 한정되지 않는다.
본 발명의 실시 예들을 수행하기 위한 컴퓨터 프로그램 코드는 하나 또는 그 이상의 프로그래밍 언어들의 모든 조합으로 작성될 수 있으며, 이들 언어들은 Java, Smalltalk, C++ 또는 이와 유사한 언어들 같은 객체지향 프로그래밍 언어와, "C"프로그래밍 언어, 어셈블러, 또는 이와 유사한 프로그래밍 언어들과 같은 종래의 절차적인 프로그래밍 언어들을 포함한다. 프로그램 코드는 독립 소프트웨어 패키지로서, 전적으로 유저의 컴퓨터 상에서, 부분적으로 유저의 컴퓨터 상에서 실행될 수 있고, 부분적으로 유저의 컴퓨터 상에서, 부분적으로 원격 컴퓨터 상에서 또는 전적으로 원격 컴퓨터 또는 서버 상에서 실행될 수 있다. 후자의 경우에, 원격 컴퓨터는 모든 유형의 네트워크를 통해서 유저 컴퓨터에 연결될 수 있는데, 그러한 네트워크는 근거리 네트워크(LAN) 또는 광역 네트워크(WAN)를 포함하며, 또는 그러한 연결이 (예를 들어, 인터넷 서비스 제공자를 사용하여 인터넷을 통해서) 외부 컴퓨터에 대해 이루어질 수 있다.
본 발명의 실시 예들이 지금까지 발명의 실시 예들에 따른 방법들, 장치(시스템들) 및 컴퓨터 프로그램 제품들에 관한 흐름 예시도 및/또는 블록도를 참조하여 기술되었다. 흐름 예시도 및/또는 블록도의 각 블록과, 흐름 예시도의 블록들 및/또는 블록도들의 조합들은 컴퓨터 프로그램 명령들에 의해서 구현될 수 있음을 이해할 수 있을 것이다. 이들 컴퓨터 프로그램 명령들은 범용 컴퓨터, 특별 목적 컴퓨터, 또는 기타 프로그램가능 데이터 처리 장치의 프로세서에 제공될 수 있는데, 이는 컴퓨터 또는 기타 프로그램가능 데이터 처리 장치의 프로세서를 통해서 실행되는, 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 펑션들/동작들을 구현하기 위한 수단을 생성하도록 머신을 만들기 위함이다.
이들 컴퓨터 프로그램 명령들은 또한 컴퓨터 리드가능 매체에 저장되어서 컴퓨터, 기타 프로그램가능 데이터 처리 장치 또는 기타 디바이스들을 지시하여 상기 컴퓨터 리드가능 매체에 저장된 명령들이 상기 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 펑션/동작을 구현하는 명령들을 포함하는 제품을 생성하도록, 특별한 방식으로, 기능하게 할 수 있다.
상기 컴퓨터 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 장치 또는 기타 디바이스들에 로드되어 일련의 동작 단계들이 컴퓨터, 기타 프로그램가능 데이터 처리 장치 또는 기타 디바이스들 상에서 수행되도록 하여, 상기 컴퓨터 또는 기타 프로그램가능 데이터 처리 장치 상에서 실행되는 상기 명령들이 상기 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 펑션/동작을 구현하는 프로세스들을 제공하도록 컴퓨터 구현 프로세스를 생성할 수 있다.
도면들에서, 흐름도와 블록도들은 본 발명의 다양한 실시 예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능성, 및 동작을 예시한다. 따라서, 흐름도 내의 각 블록 또는 블록도들은 상기 명시된 논리적 펑션(들)을 구현하기 위한 하나 또는 그 이상의 실행가능 명령들을 포함하는, 모듈, 세그먼트, 또는 코드의 부분을 나타낸다. 또한, 일부 다른 구현들에서, 상기 블록에 표시된 펑션들은 상기 도면들에 표시된 순서와 다르게 일어날 수 있음도 주목해야 한다. 예를 들어, 연속으로 도시된 두 개의 블록들은, 사실, 거의 동시에 실행되거나, 또는 포함된 기능성에 따라서, 상기 블록들은 때때로 역순으로 실행될 수도 있다. 또한, 상기 블록도들 및/또는 흐름 예시도의 각 블록, 그리고 상기 블록도들 및/또는 흐름 예시도에서 블록들의 조합은 명시된 펑션들 또는 동작들을 수행하는 특별 목적 하드웨어 기반 시스템들 또는 특별 목적 하드웨어와 컴퓨터 명령들의 조합에 의해서 구현될 수 있음도 주목해야 한다.
전술한 것에 더하여, 본 발명의 하나 또는 그 이상의 실시 예들은 고객 환경들의 관리를 제공하는 서비스 제공자에 의해서 제공되거나, 배치되거나, 관리되거나 서비스될 수 있다. 예를 들어, 상기 서비스 제공자는 하나 또는 그 이상의 고객들을 위해 본 발명의 하나 또는 그 이상의 실시 예들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라스트럭처를 생성, 유지, 지원할 수 있다. 그 대가로, 상기 서비스 제공자는, 예를 들어, 구독 및/또는 요금 계약 하에서 고객으로부터 비용지급을 받을 수 있다. 추가적으로 또는 이와 달리, 상기 서비스 제공자는 하나 또는 그 이상의 제 3자들에게 광고 컨텐츠를 판매하여 비용지급을 받을 수도 있다.
본 발명의 한 실시 예에서, 하나의 애플리케이션이 본 발명의 하나 또는 그 이상의 실시 예들을 수행하기 위해 배치될 수 있다. 한 예로서, 애플리케이션의 배치는 본 발명의 하나 또는 그 이상의 실시 예들을 수행하도록 동작하는 컴퓨터 인프라스트럭처를 제공하는 것을 포함한다.
본 발명의 다른 실시 예로서, 컴퓨팅 인프라스트럭처가 배치될 수 있는데, 이는 컴퓨터 리드가능 코드를 컴퓨팅 시스템에 통합하는 것을 포함하며, 이 컴퓨팅 시스템에서 컴퓨팅 시스템과 조합하는 코드는 본 발명의 하나 또는 그 이상의 실시 예들을 수행할 수 있다.
본 발명의 또 다른 실시 예로서, 컴퓨터 리드가능 코드를 통합하는 것을 포함하여 컴퓨팅 인프라스트럭처를 컴퓨터 시스템에 통합하는 프로세스가 제공될 수 있다. 상기 컴퓨터 시스템은 컴퓨터 리드가능 매체를 포함하고, 컴퓨터 리드가능 매체는 본 발명의 하나 또는 그 이상의 실시 예들을 포함한다. 컴퓨터 시스템과 코드를 조합하여 본 발명의 하나 또는 그 이상의 실시 예들을 수행할 수 있다.
다양한 실시 예들이 위에서 기술되었지만, 이들은 예들로서만 기술되었다. 예를 들어, 다른 아키텍처들의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 실시 예들을 포함하고 사용할 수 있다. 예들로서, Power Systems 서버들과 같은, System z? 서버들이 아닌 서버들 또는 인터내셔널 비지네스 머신즈 코포레이션이 제공하는 다른 서버들 또는 다른 회사들의 서버들도 본 발명의 하나 또는 그 이상의 실시 예들을 포함하고, 사용하고 및/또는 이들로부터 혜택을 받을 수 있다. 또한, 여기에서는 예로서, 어댑터들 및 PCI 허브가 서버의 일부로서 고려되었을지라도, 다른 실시 예들에서는, 이들이 반드시 서버의 일부로서 고려될 필요는 없으며, 단순히 시스템 메모리에 및/또는 컴퓨팅 환경의 다른 컴포넌트들에 결합되는 것으로 고려될 수 있다. 컴퓨팅 환경이 서버일 필요는 없다. 또한, 어댑터들이 PCI에 기초한 것으로 되어 있지만, 본 발명의 하나 또는 그 이상의 실시 예들은 다른 어댑터들 또는 다른 I/O컴포넌트들에도 사용 가능하다. 어댑터 및 PCI 어댑터는 단지 예들이다. 더 나아가서, 본 발명의 하나 또는 그 이상의 실시 예들은 PCI MSI가 아닌 인터럽션 스킴(interruption schemes)에 대해서도 적용 가능하다. 또한 예들은 비트들이 세트되는 것으로 기술되었지만, 다른 실시 예들에서 인디케이터들의 바이트들 또는 다른 유형도 세트될 수 있다. 또한, DTE는 더 많은, 더 적은 또는 다른 정보를 포함할 수 있다. 다른 많은 변경들이 가능하다.
또한, 다른 유형의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 실시 예들로부터 혜택을 받을 수 있다. 한 예로서, 시스템 버스를 통해서 메모리 엘리먼트들에 직접 또는 간접적으로 결합된 적어도 2개의 프로세서들을 포함하는 프로그램 코드를 저장 및/또는 실행하기 적합한 데이터 처리 시스템이 사용 가능하다. 상기 메모리 엘리먼트들은, 예를 들어, 프로그램 코드의 실제 실행 동안 채용되는 로컬 메모리, 벌크 스토리지, 및 캐시 메모리를 포함하는데, 이 캐시 메모리는 실행 동안 코드가 벌크 스토리지로부터 리트리브(retrieve) 되어야 하는 횟수를 감소시키기 위해서 적어도 일부 프로그램 코드의 일시적 스토리지를 제공한다.
입력/출력 또는 I/O 디바이스들(키보드들, 디스플레이들, 포인팅 디바이스들, DASD, 테이프, CD들, DVD들, 썸(thumb) 드라이브들, 및 기타 메모리 매체들 등을 포함하나 이에 한정되지 않음)은 시스템에 직접 또는 중개하는 I/O 컨트롤러들을 통해서 결합될 수 있다. 네트워크 어댑터들은 또한 시스템에 결합되어 중개하는 사설 또는 공공 네트워크들을 통해서 데이터 처리 시스템이 다른 데이터 처리 시스템들 또는 원격 프린터들 또는 스토리지 디바이스들과 결합되도록 인에이블 할 수 있다. 모뎀들, 케이블 모뎀들, 및 이더넷 카드들은 단지 이용 가능한 네트워크 어댑터들의 몇 가지 유형들이다.
도 15을 참조하면, 본 발명의 하나 또는 그 이상의 실시 예들을 구현하기 위한 호스트 컴퓨터 시스템 (5000)의 대표적인 컴포넌트들이 도시되어 있다. 대표적인 호스트 컴퓨터 (5000)은 하나 또는 그 이상의 CPU들 (5001)을 포함하는데, 이들은, 스토리지 매체 디바이스들 (5011) 및 다른 컴퓨터들 또는 SAN들 및 이와 유사한 것들과 통신하기 위한 네트워크들 (5010)에 대한 I/O 인터페이스들뿐만 아니라, 컴퓨터 메모리 (즉, 중앙 스토리지) (5002)와 통신한다. CPU (5001)은 아키텍처된 명령 세트(an architected instruction set) 및 아키텍처된 기능성(architected functionality)을 갖는 아키텍처를 준수한다. CPU (5001)은 프로그램 주소들 (가상 주소들)을 실제 메모리 주소들로 변환시키기 위한 동적 주소 변환기(DAT) (5003)을 가질 수 있다. DAT는 통상적으로 변환 색인 버퍼(a translation lookaside buffer) (TLB) (5007)를 포함하여 변환들을 캐싱함으로서(caching) 컴퓨터 메모리 (5002)의 블록에 나중에 액세스하더라도 주소 변환의 지연이 일어나지 않게 한다. 통상적으로, 캐시 (5009)는 컴퓨터 메모리 (5002)와 프로세서 (5001) 사이에 채용된다. 캐시 (5009)는 계층적으로 되어(hierarchical) 하나 이상의 CPU에 대해서는 큰 캐시가 이용 가능할 수 있고 큰 캐시와 각 CPU 사이에는 더 작고(smaller), 더 빠른(faster)(하위 레벨) 캐시들이 이용 가능할 수 있다. [연결] 일부 실시 예들에서, 상기 하위 레벨 캐시들은(the lower level caches) 명령 페칭 및 데이터 액세스를 위한 별도의 하위 레벨 캐시들(separate low level caches)을 제공하기 위해 분리된다(split). 한 실시 예에서, 명령은 캐시 (5009)를 통해 명령 페치 유닛 (5004)에 의해서 메모리 (5002)로부터 페치된다(fetched). 상기 명령은 명령 디코드 유닛 (5006)에서 디코드되어 명령 실행 유닛 또는 유닛들 (5008)로 전송된다(dispatched) (일부 실시 예들에서는 다른 명령들과 함께). 통상적으로 여러 실행 유닛들 (5008)이 채용되는데, 이들에는, 예를 들어, 산술 연산 실행 유닛(arithmetic execution unit), 부동 소수점 연산 실행 유닛(floating point execution unit), 및 분기 명령 실행 유닛(branch instruction execution unit)이 있다. 상기 명령은 실행 유닛에 의해서 실행되는데, 필요에 따라 명령 지정 레지스터들(instruction specified registers) 또는 메모리로부터 오퍼랜드들(operands)을 액세스함으로써 실행된다. 만일 오퍼랜드가 메모리 (5002)로부터 액세스되어야 한다면 (로드되거나 저장되어야 한다면), 로드/저장 유닛 (5005)가 실행될 명령의 컨트롤 하에 그 액세스를 통상적으로 처리한다. 명령들은 하드웨어 회로들에서 또는 내부 마이크로코드 (펌웨어)에서 또는 이 둘의 조합에 의해서 실행될 수 있다.
이미 살펴보았듯이, 컴퓨터 시스템은 정보를 로컬(또는 메인) 스토리지에 포함하는데, 어드레싱, 보호, 참조 및 변경 기록과 같은 정보를 포함한다. 어드레싱의 일부 예들(some aspects)에는 주소들의 포맷, 주소 공간들의 개념, 주소들의 다양한 유형들, 한 유형의 주소가 다른 유형의 주소로 변환되는 방식이 포함된다. 메인 스토리지의 일부에는 영구적으로 할당된 스토리지 위치들이 포함된다. 메인 스토리지는 시스템에 데이터의 직접 어드레스가능 고속-액세스 스토리지(directly addressable fast-access storage of data)를 제공한다. 데이터와 프로그램들 모두는 처리되기 전에 (입력 디바이스들로부터) 메인 스토리지에 로드된다.
메인 스토리지는, 때때로 캐시들이라 부르는, 하나 또는 그 이상의 더 작고, 더 고속의-액세스 버퍼 스토리지들(one or more smaller, faster-access buffer storages)을 포함할 수 있다. 캐시는 통상적으로 CPU 또는 I/O 프로세서와 물리적으로 연관되어 있다. 성능 상에서의 경우를 제외하고, 특별한 스토리지 매체의 물리적 구성 및 사용의 효과들은 프로그램에 의해서는 일반적으로 관찰 가능하지 않다.
개별 캐시들이 명령들을 위해서 그리고 데이터 오퍼랜드들을 위해서 유지될 수 있다. 캐시 내의 정보는 캐시 블록 또는 캐시 라인 (또는, 간단히 라인이라 함)으로 불리는 인테그럴 경계(integral boundary) 상에 인접 바이트들(in contiguous bytes)로 유지된다. 한 모델에서 익스트랙트 캐시 속성 명령(EXTRACT CACHE ATTRIBUTE instruction)을 제공할 수 있는데, 이는 캐시 라인의 사이즈를 바이트로 리턴한다. 한 모델에서, 또한 프리페치 데이터 및 프리페치 데이터 렐러티브 롱 명령들(PREFETCH DATA and PREFETCH DATA RELATIVE LONG instructions)을 제공하는데, 이는 데이터 또는 명령 캐시로 스토리지의 프레페칭을 실행하거나 또는 캐시로부터 데이터의 릴리싱(releasing)을 실행한다.
스토리지는 긴 수평적 비트들의 스트링(long horizontal string of bits)으로 생각할 수 있다. 대부분의 동작들에서, 스토리지에 대한 액세스들은 왼쪽에서 오른쪽 순서로 진행된다. 비트들의 스트링은 8 비트들의 단위로 나누어진다. 8비트 단위를 바이트라 하며, 이는 모든 정보 포맷들의 기본적 빌딩 블록이다. 스토리지 내에서 각 바이트의 위치는 고유한 음수 아닌 정수(unique nonnegative integer)에 의해서 식별되는데, 이 정수를 그 바이트 위치의 주소 또는, 그냥 바이트 주소라 한다. 인접 바이트 위치들은 연속 주소들을 갖는데, 이는 왼쪽에서 0으로 시작하여 왼쪽으로부터 오른쪽의 순서로 진행된다. 주소는 부호가 없는 2진 정수들(unsigned binary integers)이며, 24, 31, 또는 64비트들이다.
정보는 스토리지와 CPU 또는 채널 서브시스템 사이에서, 한번에, 한 바이트, 또는 바이트들의 그룹으로 전송된다. 달리 명시하지 않는 한, 예를 들어, z/Architecture?에서는, 스토리지 내 바이트들의 그룹이 그 그룹의 가장 왼쪽 바이트(the leftmost byte)에 의해서 어드레스 된다. 그룹 내의 바이트들의 수는 수행될 오퍼레이션에 의해서 암시되거나 또는 명시된다. CPU 오퍼레이션에서 사용될 때, 바이트들의 그룹을 필드(field)라 한다. 바이트들의 각 그룹 내에서, 예를 들어, z/Architecture?에서는, 비트들은 왼쪽에서 오른쪽의 순서로 번호가 매겨진다(numbered). z/Architecture?에서는, 가장 왼쪽의 비트들은 때때로 "상위" 비트들("high-order" bits)이라 하고, 가장 오른쪽의 비트들은 "하위" 비트들("low-order" bits)이라 한다. 그러나, 비트 번호들이 스토리지 주소는 아니다. 오직 바이트들만이 어드레스될 수 있다. 스토리지 내 바이트의 개별 비트들에 관해서 연산하기 위해서는, 전체 바이트가 액세스된다. 바이트 내의 비트들은, 왼쪽에서 오른쪽으로(예를 들어, z/Architecture?에서), 0에서 7까지 번호가 매겨진다. 주소 내의 비트들은 24 비트 주소를 위해서는 8-31 또는 40-63으로, 또는 31비트 주소를 위해서는 1-31 또는 33-63으로, 64비트 주소를 위해서는 0-63으로 번호가 매겨질 수 있다. 다수의 바이트들의 기타 고정-길이 포맷(any other fixed-length format of multiple bytes) 내에서, 상기 포맷을 구성하는 비트들은 0에서 시작하여 연속적으로 번호가 매겨진다. 에러 검출의 목적을 위해서, 더 바람직하게는 교정을 위해서, 하나 또는 그 이상의 체크 비트들(check bits)이 각 바이트와 함께 또는 바이트들의 그룹과 함께 전송될 수 있다. 그러한 체크 비트들은 자동적으로 머신에 의해서 생성되며, 프로그램에 의해서 직접적으로 제어될 수 없다. 스토리지 용량(storage capacities)은 바이트들의 수로 표시된다. 스토리지-오퍼랜드 필드의 길이가 명령의 오퍼레이션 코드에 의해서 암시되는 경우, 그 필드는 고정 길이를 갖는다고 말하며, 이 때 필드의 길이는 한 바이트, 두 바이트, 4바이트, 8바이트 또는 16바이트가 될 수 있다. 일부 명령들을 위해 더 큰 필드들이 암시될 수 있다. 스토리지-오퍼랜드 필드의 길이가 암시되지 않고, 명시적으로 언급될 때, 그 필드는 가변 길이를 갖는다고 말한다. 가변-길이 오퍼랜드들은 한 바이트의 증가에 의해서 (또는 일부 명령들로, 두 바이트의 배수들로 또는 기타 배수들로) 길이가 변화될 수 있다. 정보가 스토리지에 저장될 때, 비록 스토리지에 대한 물리적 경로의 폭(width)이 저장되는 필드의 길이보다 더 클 수 있더라도, 오직 그 바이트 위치들의 컨텐츠만 교체되어 지정된 필드 내에 포함된다.
정보의 특정 유닛들(certain units)은 스토리지 내의 인테그럴 경계 상에 위치한다. 스토리지 주소가 바이트들의 단위 길이의 배수(multiple)일 때, 경계(a boundary)를 정보의 유닛을 위한 인테그럴(integral)이라 한다. 인테그럴 경계 상에서 2, 4, 8, 및 16 바이트들의 필드들에는 특별한 이름이 주어진다. 하프워드(halfword)는 2 바이트 경계상에서 2개의 연속 바이트들의 그룹이고, 명령들의 기본적인 빌딩 블록이다. 워드(a word)는 4 바이트 경계상에서 4개의 연속 바이트들의 그룹이다. 더블워드(a doubleword)는 8 바이트 경계상에서 8개의 연속 바이트들의 그룹이다. 쿼드워드(a quadword)는 16 바이트 경계상에서 16개의 연속 바이트들의 그룹이다. 스토리지 주소들이 하프워드들, 워드들, 더블워드들, 및 쿼드워드들을 지정할 때, 상기 주소의 2진 표시는 하나, 둘, 셋, 또는 네 개의 가장 오른쪽 (rightmost) 제로(0) 비트들을, 각각, 포함한다. 명령들은 2바이트 인테그럴 경계 상에 위치한다. 대부분의 명령들의 스토리지 오퍼랜드들은 경계 정렬 요건들(boundary-alignment requirements)을 갖지 않는다.
명령들 및 데이터 오퍼랜드들을 위한 개별 캐시들을 구현하는 디바이스들 상에서, 만일 프로그램이 캐시 라인 내에 저장되고 그로부터 명령들이 후속으로 페치 된다면, 그 저장된 값이 후속으로 페치되는 명령들을 변경하든 안 하든지 상관없이, 심각한 지연이 일어날 수 있다.
한 실시 예에서, 본 발명은 (때때로, 라이선스된 내부 코드, 펌웨어, 마이크로-코드, 밀리-코드, 피코-코드, 등 - 이들은 모두 본 발명과 양립함 -이라 일컬어지는) 소프트웨어에 의해서 실시될 수 있다. 도 15를 참조하면, 본 발명을 실시하는 소프트웨어 프로그램 코드는 통상적으로 호스트 시스템 (5000)의 프로세서 (5001)에 의해서 액세스 되는데, 이는 CD-ROM드라이브, 테이프 드라이브 또는 하드 드라이브와 같은, 롱-텀 스토리지 매체 디바이스들 (5011)로부터 액세스 된다. 상기 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은, 데이터 처리 시스템과 함께 사용되는 다양한 공지의 매체 중 어느 하나에 구현될 수 있다. 상기 코드는 그러한 매체 상에서 배포될 수 있거나, 또는 네트워크 (5010)을 통해서 컴퓨터 메모리 (5002) 또는 한 컴퓨터 시스템의 스토리지로부터 다른 컴퓨터 시스템들로 그러한 다른 시스템들의 유저들의 사용을 위해서 유저들에게 배포될 수 있다.
상기 소프트웨어 프로그램 코드는 다양한 컴퓨터 컴포넌트들의 펑션과 상호작용을 컨트롤하는 운영체제와 하나 또는 그 이상의 애플리케이션 프로그램들을 포함한다. 프로그램 코드는 통상적으로 스토리지 매체 디바이스 (5011)로부터 상대적으로 더 고속인 컴퓨터 스토리지 (5002)로 페이지되어 거기에서 프로세서 (5001)에 의한 처리를 위해 이용 가능하게 된다. 소프트웨어 프로그램 코드를 메모리 내에, 물리적 매체 상에 구현하고, 그리고/또는 소프트웨어 코드를 네트워크들을 통해서 배포하는 방법 및 기술들은 잘 알려져 있으므로 여기서 더 이상 설명하지 않는다. 프로그램 코드는, 유형의 매체 (전자 메모리 모듈들 (RAM), 플래시 메모리, 콤팩트디스크들 (CD들), DVD들, 자기 테이프 등을 포함하나 이에 한정되지 않음) 상에서 생성되고 저장될 때, 종종 이를 "컴퓨터 프로그램 제품"이라 한다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해서 바람직하게는 컴퓨터 내에서 상기 처리회로에 의한 실행을 위하여 리드될 수 있다.
도 16은 본 발명이 실시될 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 도시한다. 도 16의 시스템 (5020)은 개인용 컴퓨터, 워크스테이션 또는 서버와 같은 대표적인 베이스 컴퓨터 시스템 (5021)을 포함하며, 이는 선택적 주변 디바이스들을 포함한다. 베이스 컴퓨터 시스템 (5021)은 하나 또는 그 이상의 프로세서들 (5026)과 상기 프로세서들 사이를 연결하고 통신할 수 있게 하기 위해 채용된 버스 그리고 공지 기술들에 따른 시스템 (5021)의 기타 컴포넌트들을 포함한다. 상기 버스는 프로세서 (5026)을 메모리 (5025) 및 롱-텀 스토리지 (5027)에 연결하며, 스토리지 (5027)은 하드 드라이브 (예를 들어, 자기 매체, CD, DVD, 및 플래시 메모리 중 어느 것이든 포함함) 또는 테이프 드라이브를 예로서 포함할 수 있다. 시스템 (5021)은 또한 유저 인터페이스 어댑터를 포함할 수 있는데, 이는 마이크로프로세서 (5026)을 버스를 통해서 하나 또는 그 이상의 인터페이스 디바이스들, 예를 들어, 키보드 (5024), 마우스 (5023), 프린터/스캐너 (5030) 및/또는 기타 인터페이스 디바이스들에 접속하고, 기타 인터페이스 디바이스들에는 터치 민감성 스크린(a touch sensitive screen), 디지털화된 엔트리 패드(digitized entry pad) 등과 같은 모든 유저 인터페이스 디바이스가 포함될 수 있다. 상기 버스는 또한 디스플레이 디바이스 (5022), 예를 들어 LCD스크린 또는 모니터를, 디스플레이 어댑터를 통해서 마이크로프로세서 (5026)에 연결한다.
시스템 (5021)은 다른 컴퓨터들 또는 네트워크 (5029)와 통신할 수 있는 (5028) 네트워크 어댑터를 통해서 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터들의 예로는 커뮤니케이션들의 채널들, 토큰 링, 이더넷 또는 모뎀들이 있다. 이와 달리, 시스템 (5021)은 CDPD (셀룰러 디지털 패킷 데이터) 카드와 같은 무선 인터페이스를 사용하여 통신할 수도 있다. 시스템 (5021)은 근거리 네트워크 (LAN), 또는 광역 네트워크 (WAN)으로 다른 컴퓨터들과 연관될 수 있거나, 또는 시스템 (5021)은 다른 컴퓨터 등과의 클라이언트/서버 구성에서 클라이언트가 될 수 있다. 적절한 통신 하드웨어 및 소프트웨어뿐만 아니라 이들 모든 구성들은 공지되어 있다.
도 17은 본 발명이 실시될 수 있는 데이터 처리 네트워크 (5040)을 도시한다. 데이터 처리 네트워크 (5040)은 복수의 개별 네트워크들, 예를 들어 무선 네트워크 및 유선 네트워크를 포함할 수 있으며, 이들 각각은 복수의 개별 워크스테이션들 (5041, 5042, 5043, 5044)를 포함할 수 있다. 또한, 당업자들이 알 수 있듯이, 하나 또는 그 이상의 LAN들이 포함될 수 있고, 여기서 LAN은 호스트 프로세서에 결합된 복수의 지능 워크스테이션들을 포함할 수 있다.
다시 도 17로 돌아가서, 상기 네트워크들은 또한 메인프레임 컴퓨터들 또는 서버들, 예를 들어 게이트웨이 컴퓨터 (클라이언트 서버 5046) 또는 애플리케이션 서버 (데이터 저장소로 액세스할 수 있고 또한 워크스테이션 (5045)로부터 직접 액세스될 수도 있는 원격 서버 (5048))을 포함할 수 있다. 게이트웨이 컴퓨터 (5046)은 각 개별 네트워크의 엔트리 포인트로서 기능을 수행한다. 게이트웨이(gateway)는 하나의 네트워킹 프로토콜을 다른 네트워크로 연결할 때 필요하다. 게이트웨이 (5046)은 바람직하게는 통신 링크를 사용하여서 다른 네트워크 (예를 들어 인터넷 (5047))에 결합될 수 있다. 게이트웨이 (5046)은 또한 통신 링크를 사용하여 하나 또는 그 이상의 워크스테이션들 (5041, 5042, 5043, 5044)에 직접적으로 결합될 수 있다. 상기 게이트웨이 컴퓨터는 인터내셔널 비지네스 머신즈 코포레이션으로부터 구입가능한 IBM eServer™ System z? 서버를 이용하여 구현될 수 있다.
도 16 및 도 17을 동시에 참조하면, 본 발명을 구현하는 소프트웨어 프로그래밍 코드는 시스템 (5020)의 프로세서 (5026)에 의해서, CD-ROM드라이브 또는 하드 드라이브와 같은, 롱-텀 스토리지 매체 (5027)로부터 액세스될 수 있다. 상기 소프트웨어 프로그래밍 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템과 함께 사용하기 위한 공지의 다양한 매체들 중 어느 하나 상에 구현될 수 있다. 상기 코드는 그러한 매체 상에서 배포될 수 있고, 또는 네트워크를 통해서 하나의 컴퓨터 시스템의 메모리 또는 스토리지로부터 다른 컴퓨터 시스템들로 그러한 다른 시스템들의 유저들에 의한 사용을 위해 유저들 (5050, 5051)에게 배포될 수 있다.
이와 달리, 상기 프로그래밍 코드는 메모리 (5025)에 구현되어 프로세서 버스를 사용하여 상기 프로세서 (5026)에 의해서 액세스될 수 있다. 그러한 프로그래밍 코드는 다양한 컴퓨터 컴포넌트들의 펑션과 상호 작용을 제어하는 운영체제와 하나 또는 그 이상의 애플리케이션 프로그램들 (5032)를 포함한다. 프로그램 코드는 통상적으로 스토리지 매체 (5027)로부터 고속인 메모리 (5025)로 페이지되어 거기에서 프로세서 (5026)에 의한 처리를 위해 이용 가능하게 된다. 소프트웨어 프로그래밍 코드를 메모리 내에, 물리적 매체 상에 구현하고, 그리고/또는 소프트웨어 코드를 네트워크들을 통해서 배포하는 방법 및 기술들은 잘 알려져 있으므로 여기서 더 이상 설명하지 않는다. 프로그램 코드는, 유형의 매체 (전자 메모리 모듈들(RAM), 플래시 메모리, 콤팩트디스크들 (CD들), DVD들, 자기 테이프 등을 포함하나 이에 한정되지 않음) 상에서 생성되고 저장될 때, 종종 이를 "컴퓨터 프로그램 제품"이라 한다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해서 바람직하게는 컴퓨터 내에서 상기 처리회로에 의한 실행을 위하여 리드될 수 있다.
프로세서에 곧 바로(most readily) 이용 가능한 캐시 (통상적으로 상기 프로세서의 다른 캐시보다 더 빠르고 더 적은)는 최하위(the lowest)(L1또는 레벨 1) 캐시이고, 메인 스토어(주 메모리)는 최상위(the highest) 레벨 캐시(만일 3개의 레벨들이 있다면 L3)이다. 최하위 레벨 캐시는 실행될 머신 명령들을 보유하는 명령 캐시(I-캐시)와 데이터 오퍼랜드들을 보유하는 데이터 캐시(D-캐시)로 종종 나누어진다.
도 18을 참조하면, 프로세서의 한 예시적 실시 예로서 프로세서 (5026)이 도시되어 있다. 통상적으로 하나 또는 그 이상의 레벨들의 캐시 (5053)이 프로세서 성능 향상을 위해서 메모리 블록들을 버퍼링하기 위해 채용된다. 캐시 (5053)은 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 통상적인 캐시 라인들은 64, 128 또는 256바이트의 메모리 데이터이다. 데이터의 캐싱을 위해서보다는 명령들의 캐싱을 위해서 별도의(separate) 캐시들이 종종 채용된다. 캐시 일관성(cahe coherence) (메모리 및 캐시들 내 라인들의 카피들의 동기화)이 공지 기술에서 잘 알려진 다양한 "스누프(snoop)" 알고리즘들에 의해서 종종 제공된다. 프로세서 시스템의 메인 메모리 스토리지 (5025)를 종종 캐시라 한다. 캐시 (5053)의 4 레벨들을 보유하는 프로세서 시스템에서, 메인 스토리지 (5025)는 때때로 레벨 5(L5) 캐시라 하는데, 이는 통상적으로 더 빠르고 그리고 컴퓨터 시스템이 이용 가능한 비 휘발성 스토리지 (DASD, 테이프 등)의 부분을 오직 보유만하기 때문이다. 메인 스토리지 (5025)는 운영체제에 의해서 메인 스토리지 (5025)에 페이지 인 되고(paged in) 페이지 아웃 된(paged out) 데이터의 페이지들을 "캐시"한다.
프로그램 카운터 (명령 카운터) (5061)은 실행될 현재 명령의 주소를 추적한다. z/Architecture? 프로세서에서 프로그램 카운터는 64비트들이고 이전의 어드레싱 한계치들을 지원하기 위해 31 또는 24비트들로 다듬어질 수 있다(truncated). 프로그램 카운터는 통상적으로 문맥 전환(context switching) 동안 계속되도록 컴퓨터의 PSW (프로그램 상태 워드)에 구현된다. 따라서, 프로그램 카운터 값을 갖는, 진행중인 프로그램은, 예를 들어, 운영체제에 의해서 인터럽트 될 수 있다 (프로그램 환경에서 운영체제 환경으로 문맥 전환될 수 있다). 프로그램이 활성(active)이 아닌 동안, 그 프로그램의 PSW는 프로그램 카운터 값을 유지하며, 운영체제가 실행되는 동안은 운영체제의 (PSW 내의) 프로그램 카운터가 사용된다. 통상적으로, 프로그램 카운터는 현재 명령의 바이트들의 수와 같은 양만큼 증가된다. RISC(축소된 명령 세트 컴퓨팅) 명령들은 통상적으로 고정 길이이다. 반면 CISC(복합 명령 세트 컴퓨팅) 명령들은 통상적으로 가변 길이이다. IBM z/Architecture?의 명령들은 2, 4 또는 6 바이트들의 길이를 갖는 CISC 명령들이다. 프로그램 카운터 (5061)은 예를 들어 문맥 전환 동작 또는 분기 명령의 분기 테이큰 동작(a branch taken operation)에 의해서 수정될 수 있다. 문맥 전환 오퍼레이션에서, 현재 프로그램 카운터 값은 실행중인 프로그램에 관한 다른 상태 정보 (예를 들어 컨디션 코드들)와 함께 프로그램 상태 워드(program status word) 내 저장되고, 새로운 프로그램 카운터 값이 로드되어 실행될 새로운 프로그램 모듈의 명령을 가리킨다. 분기 테이큰 동작이 수행되는데, 이는 분기 명령의 결과를 프로그램 카운터 (5061)에 로드함으로써 프로그램이 결정을 내리도록 허가하거나 또는 그 프로그램 내에서 루프를 돌게 허가하기 위해서이다.
통상적으로 명령 페치 유닛 (5055)는 프로세서 (5026) 대신에 명령들을 페치하기 위해 채용된다. 상기 페치 유닛은 분기 테이큰 명령들의 타겟 명령들인, "다음 순서 명령들(next sequential instructions)"을 페치하거나 또는 문맥 전환 이후 이어지는 프로그램의 제 1 명령들을 페치한다. 현대의 명령 페치 유닛들은 종종 프리페치 기술들을 채용해서 프리페치된 명령들이 사용될 가능성을 기초로 명령들을 추론하여(speculatively) 프리페치 한다(prefetch). 예를 들어, 페치 유닛은 16 바이트들의 명령을 페치할 수 있으며, 이들은 다음 순서의 명령 및 그 다음 명령들의 추가 바이트들을 포함한다.
페치된 명령들은 프로세서 (5026)에 의해서 실행된다. 한 실시 예에서, 페치된 명령(들)은 상기 페치 유닛의 디스패치 유닛(dispatch unit) (5056)으로 전송된다. 상기 디스패치 유닛은 상기 명령(들)을 디코드하여 디코드된 명령(들)에 관한 정보를 적절한 유닛들 (5057, 5058, 5060)으로 전송한다. 실행 유닛 (5057)은 통상적으로 명령 페치 유닛 (5055)로부터 디코드된 산술연산 명령들을 수신하여 상기 명령의 오피코드(opcode)에 따라 오퍼랜드들에 관하여 산술 연산들을 수행한다. 오퍼랜드들이 실행 유닛 (5057)에 제공되는데, 바람직하게는 메모리 (5025), 아키텍처된 레지스터들 (5059)로부터 또는 실행될 명령의 즉시 필드(immediate field)로부터 제공된다. 실행 경과들이 저장될 때, 메모리 (5025), 레지스터들 (5059) 또는 다른 머신 하드웨어 (예를 들어, 컨트롤 레지스터들, PSW 레지스터들 등) 내에 저장된다.
프로세서 (5026)은 통상적으로 명령의 펑션을 실행하기 위해 하나 또는 그 이상의 유닛들 (5057, 5058, 5060)을 갖는다. 도 15a를 참조하면, 실행 유닛 (5057)은 인터페이싱 논리 (5071)을 통해서 아키텍처된 범용 레지스터들 (5059), 디코드/디스페치 유닛 (5056), 로드 저장 유닛 (5060), 및 기타 프로세서 유닛들 (5065)와 통신할 수 있다. 실행 유닛 (5057)은 산술 연산 논리 유닛 (ALU) (5066)이 연산할 정보를 저장하기 위해 여러 레지스터 회로들 (5067, 5068, 5069)를 채용할 수 있다. 상기 ALU는 "논리곱(and)", "논리합(or)"과 "배타적 논리합(exclusive-or(XOR))", "로테이트(rotate)" 및 "시프트(shift)"와 같은 논리 펑션 뿐만 아니라, "더하기(add)", "빼기(subtract)", "곱하기(multiply)" 및 "나누기(divide)"와 같은 연산들을 수행한다. 바람직하게도, ALU는 디자인 종속인 전문화된 연산들(specialized operations)을 지원한다. 다른 회로들은, 예를 들어, 조건 코드들(condition codes) 및 복구 지원 논리(recovery support logic)를 포함하는 기타 아키텍처된 퍼실리티들(other architected facilities) (5072)를 제공할 수 있다. 통상적으로, ALU 연산의 결과는 출력 레지스터 회로 (5070)에 저장되는데, 이 회로는 그 결과를 다양한 다른 처리 펑션들에 전송할 수 있다. 프로세서 유닛들의 구성은 다양하며, 여기서 제공하는 설명은 단지 한 실시 예의 대표적인 이해를 제공하기로 계획된 것일 뿐이다.
예를 들어 ADD 명령은 산술 연산 및 논리 기능성을 갖는 실행 유닛 (5057) 내에서 실행될 수 있지만, 예를 들어 부동 소수점 명령은 전문화된 부동 소수점 처리 능력을 갖는 부동 소수점 실행에서 실행될 수 있다. 바람직하게도, 실행 유닛은 오퍼랜드들에 관하여 오피코드 정의된 펑션(opcode defined function)을 수행함으로써 명령에 의해 식별된 오퍼랜드들에 관하여 연산한다. 예를 들어, ADD 명령은 명령의 레지스터 필드들에 의해서 식별된 두 개의 레지스터들 (5059) 내에서 발견된 오퍼랜드들에 관하여 실행 유닛 (5057)에 의해서 실행될 수 있다.
실행 유닛 (5057)은 두 개의 오퍼랜드들에 관하여 산술 연산 덧셈을 수행하여 그 결과를 제 3의 오퍼랜드에 저장하는데, 여기서 제 3의 오퍼랜드는 제 3의 레지스터 또는 상기 두 소스 레지스터들 중 하나가 될 수 있다. 상기 실행 유닛은 바람직하게도 산술연산 논리 유닛 (ALU) (5066)을 이용할 수 있는데, 이 유닛은 더하기, 빼기, 곱하기, 나누기 중 어느 것이든지 포함하여 다양한 대수적 펑션들(algebraic functions) 뿐만 아니라, 시프트(Shift), 로테이트(Rotate), 논리곱(And), 논리합(Or) 및 XOR과 같은 다양한 논리적 펑션들을 수행할 수 있다. 일부 ALU들 (5066)은 스칼라 연산들(scalar operations) 및 부동 소수점 연산들 용으로 설계된다. 데이터는 아키텍처에 따라서 빅 엔디안(Big Endian) (여기서 최하위 바이트는 최상위 바이트 주소에 위치함) 또는 리틀 엔디안(Little Endian) (여기서 최하위 바이트는 최하위 바이트 주소에 위치함)이 될 수 있다. IBM z/Architecture?은 빅 엔디안이다. 부호 달린 필드들(signed fields)은 부호와 크기, 아키텍처에 따라 1의 보수(1's complement) 또는 2의 보수(2's complement)를 포함할 수 있다. 2의 보수가 유용한데, 이는 2의 보수에서는 음의 값(negative value)이든지 양의 값(positive value)이든지 ALU 내에서 오직 더하기만 요구되므로 ALU는 빼기 능력을 설계할 필요가 없기 때문이다. 수들(numbers)은 통상적으로 간단히 기술되는데, 예를 들어, 12비트 필드는 4,096 바이트 블록의 주소를 정의하고, 통상적으로 4Kbyte(Kilobyte)로 기술된다.
도 19b를 참조하면, 분기 명령을 실행하기 위한 분기 명령 정보는 통상적으로 분기 유닛 (5058)에 전송되며, 이 유닛은 종종 분기 이력 테이블 (5082)와 같은 예측 알고리즘을 채용하는데, 이는 다른 조건 연산들이 완료되기 전에 분기의 결과를 예측하기 위해서이다. 현재 분기 명령의 타겟은 페치되어 조건 연산들이 완료되기 전에 추론으로(speculatively) 실행된다. 조건 연산들이 완료되면, 추론으로 실행된 분기 명령들은 조건 연산의 조건들과 추론된 결과에 기초하여 완료되거나 또는 폐기된다. 통상적인 분기 명령은 조건 코드들을 시험하고 만일 조건 코드들이 분기 명령의 분기 요건을 충족한다면 타겟 주소로 분기할 수 있다. 타겟 주소는 예를 들어 레지스터 필드들에서 발견된 수들 또는 명령의 즉시 필드(an immediate field)에서 발견된 수들을 포함하여 여러 수들에 기초하여 계산될 수 있다. 분기 유닛 (5058)은 복수의 입력 레지스터 회로들 (5075, 5076, 5077) 및 하나의 출력 레지스터 회로 (5080)을 갖는 ALU (5074)를 채용할 수 있다. 분기 유닛 (5058)은, 예를 들어, 범용 레지스터들 (5059), 디코드 디스패치 유닛 (5056) 또는 기타 회로들 (5073)과 통신할 수 있다.
한 그룹의 명령들의 실행은 다양한 이유로 인터럽트될 수 있다, 예를 들어, 운영체제에 의해서 개시된(initiated) 문맥 전환, 문맥 전환을 작동시키는 프로그램 예외 또는 에러, 문맥 전환을 작동시키는 I/O 인터럽션 신호 또는 복수의 프로그램들의 (멀티 쓰레드된 환경에서) 멀티-쓰레딩 동작(multi-threading activity)이 그 이유에 포함될 수 있다. 바람직하게도, 문맥 전환 동작은 현재 실행되는 프로그램에 관한 정보를 저장하고, 그리고는 불려오는(invoked) 다른 프로그램에 관한 상태 정보(state information)를 로드한다. 상태 정보는 예를 들어 하드웨어 레지스터들 또는 메모리에 저장될 수 있다. 상태 정보는 바람직하게도 실행될 다음 명령을 가리키는 프로그램 카운터 값, 조건 코드들, 메모리 변환 정보 및 아키텍처된 레지스터 내용을 포함한다. 문맥 전환 동작은 하드웨어 회로들, 애플리케이션 프로그램들, 운영체제 프로그램들 또는 펌웨어 코드 (마이크로코드, 피코-코드, 또는 라이선스된 내부 코드(LIC))의 단독 또는 조합에 의해서 실행될 수 있다.
프로세서는 방법들을 정의하는 명령에 따라 오퍼랜드들에 액세스한다. 상기 명령은 명령의 일부분의 값을 사용하여 즉시 오퍼랜드(an immediate operand)를 제공할 수도 있고, 범용 레지스터들 또는 특별 목적 레지스터들(예를 들어 부동 소수점 레지스터들)을 명시적으로 가리키는 하나 또는 그 이상의 레지스터 필드들을 제공할 수 있다. 상기 명령은 오피코드 필드에 의해서 오퍼랜드들로 식별된 암시 레지스터들 (implied registers)을 이용할 수 있다. 상기 명령은 오퍼랜드들을 위한 메모리 위치들을 이용할 수 있다. 오퍼랜드의 메모리 위치는 레지스터, 즉시 필드(an immediate field), 또는 레지스터들과 즉시 필드의 조합에 의해서 제공될 수 있는데, z/Architecture? 롱 디스플레이스먼트 퍼실리티(long displacement facility)가 그 예이다. 여기서 명령은 베이스 레지스터, 인덱스 레지스터 및 즉시 필드 (디스플레이스먼트 필드)를 정의하는데, 이들은 예들 들어 메모리 내의 오퍼랜드의 주소를 제공하기 위해 다 함께 더하여 진다. 여기서 말하는 위치는 통상적으로 달리 표시하지 않는 한 메인 메모리 (메인 스토리지) 내의 위치를 의미한다.
도 19c를 참조하면, 프로세서는 로드/저장 유닛 (5060)을 사용하여 스토리지에 액세스한다. 로드/저장 유닛 (5060)은 메모리 (5053) 내의 타겟 오퍼랜드의 주소를 획득하고 상기 오퍼랜드를 레지스터 (5059) 또는 다른 메모리 (5053)의 위치에 로드함으로써 로드 동작을 수행할 수 있으며, 또는 메모리 (5053) 내의 타겟 오퍼랜드의 주소를 획득하고 레지스터 (5059) 또는 다른 메모리 (5053)의 위치로부터 획득한 데이터를 메모리 (5053) 내의 타겟 오퍼랜드 위치에 저장함으로써 저장 동작을 수행할 수 있다. 로드/저장 유닛 (5060)은 추론 기능을 가져서 명령 순서와 다른 순서로 메모리에 액세스할 수 있지만, 그러나 로드/저장 유닛 (5060)은 명령들이 순서대로 실행되었다는 외양(appearance)을 프로그램들에 대하여 유지한다. 로드/저장 유닛 (5060)은 범용 레지스터들 (5059), 디코드/디스패치 유닛 (5056), 캐시/메모리 인터페이스 (5053) 또는 기타 엘리먼트들 (5083)과 통신할 수 있으며, 다양한 레지스터 회로들, ALU들 (5085) 및 제어 논리 (5090)을 포함하여 스토리지 주소들을 계산하고 연산들의 순서를 유지하기 위한 파이프라인 시퀀싱(pipeline sequencing)을 제공한다. 일부 연산들은 순서를 벗어나서 처리될 수 있지만 상기 로드/저장 유닛은, 공지 기술에서 알려진 바와 같이, 상기 순서를 벗어난 연산들을 프로그램에는 순서대로 수행된 것으로 보이게 하기 위한 기능을 제공한다.
바람직하게도, 애플리케이션 프로그램들이 "보는(sees)" 주소들은 종종 가상 주소들이라 한다. 가상 주소들은 때때로 "논리 주소들" 및 "실효 (effective) 주소들"이라 한다. 이들 가상 주소들은 이들이 물리적 메모리 위치로 다시 지정된다는 측면에서 가상이다. 이러한 재지정은 다양한 동적 주소 변환(DAT) 기술들 중 하나에 의해서 이루어지며, DAT 기술들에는 간단히 가상 주소에 오프셋 값을 앞에 갖다 붙이는 것(prefixing), 가상 주소를 하나 또는 그 이상의 변환 테이블들을 통해서 변환하는 것이 포함되나 이에 한정되지는 않으며, 상기 변환 테이블들은 바람직하게도 적어도 하나의 세그먼트 테이블 및 페이지 테이블을 단독으로 또는 조합으로 포함하고, 바람직하게는 상기 세그먼트 테이블이 상기 페이지 테이블을 가리키는 엔트리를 갖는다. z/Architecture?에서, 변환의 계층적 구조(hierarchy)가 제공되는데, 이에는 영역 제1 테이블(a region first table), 영역 제2 테이블(a region second table), 영역 제3 테이블(a region third table), 세그먼트 테이블, 및 선택적 페이지 테이블(optional page table)이 포함된다. 상기 주소 변환의 성능은 종종 변환 색인 버퍼 (TLB)를 이용함으로써 개선되는데, 이 TLB는 가상 주소를 연관된 물리적 메모리 위치로 매핑하는 엔트리들을 포함한다. 상기 엔트리들은 상기 DAT가 변환 테이블들을 사용하여 가상 주소를 변환할 때 생성된다. 그 다음 가상 주소를 후속으로 사용할 때 느린 순차적 변환 테이블 액세스(the slow sequential translation table accesses)보다는 빠른 TLB의 엔트리를 이용할 수 있다. TLB 내용은 LRU(Least Recently Used)를 포함하는 다양한 리플레이스먼트 알고리즘들(replacement algorithms)에 의해서 관리될 수 있다.
상기 프로세서가 멀티-프로세서 시스템의 프로세서인 경우, 각 프로세서는, I/O, 캐시들, TLB들 및 메모리와 같은 공유된 리소스들이 일관성(coherency)를 위해 인터로크되게(interlocked)할 책임을 갖는다. 통상적으로 "스누프(snoop)" 기술들이 캐시 일관성 유지에 이용될 수 있다. 스누프 환경에서, 각 캐시 라인은 공유를 유용하게 하기 위해서 공유 상태(a shared state), 배타적 상태(an exclusive state), 변경된 상태(a changed state), 무효의 상태(an invalid state) 및 기타 상태(the like) 등등 중 어느 하나인 것으로 마크될 수 있다(marked).
I/O 유닛들 (5054) (도 18)은, 예를 들어 테이프, 디스크, 프린터들, 디스플레이들, 및 네트워크들을 포함하는 주변 디바이스들에 부착시키는 수단들을 프로세서에 제공한다. I/O 유닛들은 종종 소프트웨어 드라이버들에 의해서 컴퓨터 프로그램에 제공된다. IBM?에서 제공하는 System z?와 같은 메인프레임에서, 채널 어댑터들 및 오픈 시스템 어댑터들(open system adapters)이 메인프레임의 I/O 유닛들이며, 이들은 운영체제와 주변 디바이스들 사이에 통신들을 제공한다.
또한, 다른 유형들의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 실시 예들로부터 혜택을 받을 수 있다. 예를 들어, 어떤 환경은 에뮬레이터 (예를 들어, 소프트웨어 또는 다른 에뮬레이션 메커니즘들)를 포함할 수 있는데, 이 에뮬레이터에서 특정 아키텍처 (예를 들어, 명령 실행, 주소 변환과 같은 아키텍처된 펑션들, 및 아키텍처된 레지스터들을 포함하여) 또는 그들의 서브세트(subset thereof)가 (예를 들어, 프로세서 및 메모리를 갖는 네이티브(native) 컴퓨터 시스템 상에서) 에뮬레이트된다(emulated). 그러한 환경에서, 상기 에뮬레이터의 하나 또는 그 이상의 에뮬레이션 펑션들은, 비록 그 에뮬레이터를 실행하는 컴퓨터가 에뮬레이트 되는 능력과는 다른 아키텍처를 갖고 있다 할지라도, 본 발명의 하나 또는 그 이상의 실시 예들을 구현할 수 있다. 한 예로서, 에뮬레이션 모드에서, 에뮬레이트되는 특정 명령 또는 동작(the specific instruction or operation)은 디코드되어, 적절한 에뮬레이션 펑션이 상기 개별의 명령 또는 동작을 구현하도록 구축된다(built).
한 에뮬레이션 환경에서, 호스트 컴퓨터는, 예를 들어, 명령들과 데이터를 저장하기 위한 메모리; 명령들을 메모리로부터 페치하고 페치된 명령들을 위해 선택적으로 로컬 버퍼링을 제공하기 위한 명령 페치 유닛; 페치된 명령들을 수신하여 페치된 명령들의 유형을 결정하기 위한 명령 디코드 유닛; 및 명령들을 실행하기 위한 실행 유닛을 포함한다. 실행은 데이터를 메모리로부터 레지스터에 로드하는 것; 데이터를 레지스터로부터 다시 메모리에 저장하는 것; 또는 디코드 유닛에 의해서 결정된 바에 따라, 산술 연산 또는 논리 연산의 어떤 유형을 수행하는 것을 포함할 수 있다. 한 예에서, 각 유닛은 소프트웨어로 구현된다. 예를 들어, 상기 유닛들에 의해서 수행되는 동작들은 에뮬레이터 소프트웨어 내에 하나 또는 그 이상의 서브루틴들로서 구현된다.
더 자세하게는, 메인프레임에서, 아키텍처된 머신 명령들이, 컴파일러 애플리케이션 프로그램을 통해서, 프로그래머들에 의해서 사용되는데, 이를 오늘날 보통 "C"프로그래머들이라 한다. 스토리지 매체에 저장된 이들 명령들은 z/Architecture? IBM? 서버에서 그대로(natively) 실행되거나, 아니면 다른 아키텍처들을 실행하는 머신들에서 실행될 수 있다. 그들은 기존의 IBM? 메인프레임 서버들에서 그리고 미래의 IBM? 메인프레임 서버들에서 그리고 IBM?의 다른 머신들 (예를 들어, Power Systems 서버들 및 System x? 서버들) 상에서 에뮬레이트될 수 있다(emulated). 그들은 또한 IBM?, Intel?, AMD™, 및 기타 회사들이 제조한 하드웨어를 사용하는 여러 다양한 머신들 상의 Linux를 실행하는 머신들에서 실행될 수 있다. z/Architecture? 하의 그러한 하드웨어 상의 실행 외에, Linux는 Hercules(www.hercules-390.org를 보라) 또는 FSI(Fundamental Software Inc.) (www.funsoft.com를 보라)에 의한 에뮬레이션을 사용하는 머신들로서 또한 사용될 수 있으며, 여기서 실행은 일반적으로 에뮬레이션 모드로 한다. 에뮬레이션 모드에서, 에뮬레이션 소프트웨어는 에뮬레이트된 프로세서의 아키텍처를 에뮬레이트하기 위해 네이티브(native) 프로세서에 의해서 실행된다.
네이티브 프로세서는 통상적으로 에뮬레이트되는 프로세서의 에뮬레이션을 수행하기 위해 펌웨어 또는 네이티브 운영체제를 포함하는 에뮬레이션 소프트웨어를 실행한다. 에뮬레이션 소프트웨어는 에뮬레이트되는 프로세서 아키텍처의 명령들을 페치하고 실행할 책임이 있다. 에뮬레이션 소프트웨어는 에뮬레이트되는 프로그램 카운터를 유지하여 명령 경계들을 추적한다. 에뮬레이션 소프트웨어는 한 번에 하나 또는 그 이상의 에뮬레이트되는 머신 명령들을 페치하여 상기 하나 또는 그 이상의 에뮬레이트되는 머신 명령들을 네이티브 프로세서에 의해서 실행되기 위해 네이티브 머신 명령들의 대응 그룹으로 변환 할 수 있다(convert). 이들 변환된 명령들은 더 빠른 변환이 달성될 수 있도록 캐시될 수 있다(cached). 그럼에도 불구하고, 상기 에뮬레이션 소프트웨어는 운영체제들과 에뮬레이트되는 프로세서를 위해 작성된 애플리케이션 프로그램들이 정확하게 동작하도록 에뮬레이트되는 프로세서 아키텍처의 아키텍처 규칙들을 유지한다. 더 나아가서, 상기 에뮬레이션 소프트웨어는 에뮬레이트되는 프로세서 상에서 실행되도록 설계된 운영체제 또는 애플리케이션 프로그램이 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서 상에서 실행될 수 있도록 에뮬레이트되는 프로세서 아키텍처에 의해서 식별되는 리소스들을 제공하는데, 이들에는 제어 레지스터들, 범용 레지스터들, 부동 소수점 레지스터들, 예로서 세그먼트 테이블들과 페이지 테이블들을 포함하는 동적 주소 변환 펑션, 인터럽트 메커니즘들, 문맥 전환 메커니즘들, 24시제 (TOD) 클록들 및 I/O 서브시스템들에 대한 아키텍처된 인터페이스들이 포함되며, 이들에 한정되지는 않는다.
에뮬레이트되는 특정 명령(specific instruction)이 디코드되면, 서브루틴이 호출되어 개별 명령의 펑션을 수행한다. 에뮬레이트되는 프로세서의 펑션을 에뮬레이트하는 에뮬레이션 소프트웨어 펑션은, 예를 들어, "C" 서브루틴 또는 드라이버, 또는 특정 하드웨어를 위해 드라이버를 제공하는 기타 다른 방법으로 구현되는데, 이는 본 발명의 바람직한 실시 예에 관한 설명을 이해하고 나면 당업자들의 기술로 구현할 수 있는 것이다. 다양한 소프트웨어 및 하드웨어 에뮬레이션 특허들에는 아래의 것들이 포함되지만 이에 한정되지는 않는다. 발명의 명칭이 "하드웨어 에뮬레이션을 위한 멀티프로세서(Multiprocessor for Hardware Emulation)"이고 발명자는 Beausoleil외 공동 발명자들인 미국 특허번호 5,551,013, 발명의 명칭이 "타겟 프로세서 상에서 양립할 수 없는 명령들을 에뮬레이트하기 위한 저장된 타겟 루틴들의 사전처리(Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor)"이고 발명자는 Scalzi외 공동 발명자들인 미국 특허번호 6,009,261, 발명의 명칭이 "게스트 명령들을 에뮬에이트하는 에뮬레이션 루틴들을 직접 액세스하기 위한 게스트 명령의 디코딩(Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions)"이고 발명자는 Davidian 외 공동 발명자들인 미국 특허번호 5,574,873, 발명의 명칭이 "비-원시 코드가 시스템에서 실행되도록 허용하는 코프로세서 지원을 위해 사용되는 대칭 멀티프로세싱 버스 및 칩셋(Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System)"이고 발명자는 Gorishek 외 공동 발명자들인 미국 특허번호 6,308,255, 발명의 명칭이 "아키텍처 에뮬레이션을 위한 객체 코드 변환기의 동적 최적화 및 객체 코드 변환 방법의 동적 최적화 (Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method)"이고 발명자는 Lethin 외 공동 발명자들인 미국 특허번호 6,463,582, 발명의 명칭이 "호스트 명령들의 동적 리컴파일레이션을 통해서 호스트 컴퓨터 상에 게스트 명령들을 에뮬레이트하기 위한 방법(Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions)"이고 발명자는 Eric Traut인 미국 특허번호 5,790,825, 그리고 다른 많은 문헌들이 당업자들에게 이용가능한 타겟 머신을 위해 다른 머신 용으로 아키텍처된 명령 포맷의 에뮬레이션을 성취하는 다양한 공지의 방법들을 보여주고 있다.
도 20에서, 에뮬레이트되는 호스트 컴퓨터 시스템 (5092)의 예가 제공되는데, 이는 호스트 아키텍처의 호스트 컴퓨터 시스템 (5000')을 에뮬레이트 한다. 에뮬레이트되는 호스트 컴퓨터 시스템 (5092)에서, 호스트 프로세서 (CPU) (5091)은 에뮬레이트 되는 호스트 프로세서 (또는 가상의 호스트 프로세서)이며 에뮬레이션 프로세서 (5093)을 포함하는데, 이는 호스트 컴퓨터 시스템 (5000')의 프로세서 (5091)의 아키텍처와 다른 네이티브 명령 세트 아키텍처를 갖는다. 에뮬레이트되는 호스트 컴퓨터 시스템 (5092)는 에뮬레이션 프로세서 (5093)에 액세스 가능한 메모리 (5094)를 갖는다. 예시적 실시 예에서, 메모리 (5094)는 호스트 컴퓨터 메모리 (5096) 부분과 에뮬레이션 루틴 (5097) 부분으로 파티션된다. 호스트 컴퓨터 메모리 (5096)은 호스트 컴퓨터 아키텍처에 따라 에뮬레이트되는 호스트 컴퓨터 (5092)의 프로그램들에 이용 가능하다. 에뮬레이션 프로세서 (5093)은 에뮬레이트되는 프로세서 (5091)의 아키텍처와 다른 아키텍처의 아키텍처된 명령 세트의 네이티브 명령들(native nstructions)을 실행하고 - 상기 네이티브 명령들은 에뮬레이션 루틴 메모리 (5097)로부터 획득됨 -, 호스트 컴퓨터 메모리 (5096) 내의 프로그램으로부터 실행을 위해 호스트 명령을 액세스 할 수 있는데, 이는 시퀀스 및 액세스/디코드 루틴(a sequence & access/decode routine) 내에서 획득된 하나 또는 그 이상의 명령(들)을 채용함으로써 하며, 이 루틴은 액세스된 호스트 명령의 펑션을 에뮬레이트하기 위한 원시 명령 실행 루틴을 결정하기 위해 액세스되는 호스트 명령(들)을 디코드 할 수 있다. 호스트 컴퓨터 시스템 (5000') 아키텍처를 위해 정의된 기타 퍼실리티들(other facilities)은 아키텍처된 퍼실리티 루틴들(architected facilities routines)에 의해서 에뮬레이트될 수 있으며, 그러한 퍼실리티들에는, 예를 들어 범용 레지스터들, 제어 레지스터들, 동적 주소 변환 및 I/O 서브시스템 지원과 프로세서 캐시가 포함된다. 상기 에뮬레이션 루틴들은 에뮬레이션 루틴들의 성능을 개선하기 위해 (범용 레지스터들 및 가상 주소들의 동적 변환과 같은) 에뮬레이션 프로세서 (5093)에서 이용 가능한 펑션들을 또한 이용할 수 있다. 특별 하드웨어 및 오프-로드 엔진들(off-load engines) 또한 호스트 컴퓨터(5000')의 펑션을 에뮬레이트하는 데 있어서 프로세서 (5093)을 지원하기 위해서 제공될 수 있다.
여기서 사용된 용어는 특정 실시 예들을 설명할 목적으로만 사용된 것이며, 본 발명의 범위를 제한하려는 의도는 없다. 여기서 사용된 단수 형태는 달리 다르게 명시하지 않은 한 복수의 형태도 포함한다. "포함한다" 및/또는 "포함하는"이라는 용어는, 이 명세서에서 사용되었을 때, 진술된 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 명시하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들 및/또는 그와 관련된 그룹들의 존재 또는 추가를 배제하는 것은 아니다.
아래 청구항들 내에, 대응 구조들, 재료들, 동작들, 및 모든 수단들의 균등물 또는 단계 플러스 펑션 엘리먼트들이 있다면, 이들은 구체적으로 청구된 바와 같이 모든 구조, 재료, 또는 다른 청구된 엘리먼트들과 조합하여 펑션을 수행하기 위한 동작을 포함한다. 본 발명의 설명은 예시와 설명의 목적으로 제공된 것이며, 개시된 형태의 발명이 전부라거나 또는 이에 국한한다는 것을 의미하는 것은 아니다. 많은 수정들과 변경들이 본 발명의 범위를 벗어남이 없이 가능하다는 것이 당업자들에게 명백하다. 실시 예는 본 발명의 원리와 실제 응용을 가장 잘 설명하기 위해서 그리고 이 분야에서 통상의 지식을 가진 자들이 고려하는 특정 사용에 적합하도록 다양한 수정들을 갖는 다양한 실시 예를 위해 본 발명을 이해할 수 있도록 선택하고 설명한 것이다.

Claims (9)

  1. 컴퓨팅 환경에서 인터럽션 요청들을 관리하는 방법에 있어서, 상기 방법은:
    어댑터의 펑션 핸들을 명시하는 수정 PCI 펑션 컨트롤들(MPFC) 명령 레지스터 인터럽션들 동작(a Modify PCI Function Controls (MPFC) instruction register interruptions operation)을 실행하는 것에 응답하여, 상기 어댑터의 어댑터 인터럽션 비트 벡터 (AIBV)의 메모리 내의 위치와 - 상기 AIBV는 하나 또는 그 이상의 AIBV들의 배열(array)에 포함됨 - AISB 배열(array)의 어댑터 인터럽션 요약 비트 (AISB)의 메모리 내의 위치를 명시하는 단계;
    상기 어댑터로부터 인터럽션 요청을 수신하는 단계; 및
    상기 수신된 요청에 응답하여, 상기 어댑터로부터의 이벤트를 표시하는 상기 AIBV 내의 인디케이터를 세트하고 상기 AIBV 내에 인디케이터가 세트되어 있음을 표시하는 상기 AISB를 세트하는 단계를 포함하는
    방법.
  2. 제 1항에 있어서, 상기 방법은 운영체제에 인터럽션을 제공하는 단계(presenting) - 상기 인터럽션은 상기 인터럽션 요청에 응답하는 것임 - 를 더 포함하는
    방법.
  3. 제 2항에 있어서, 상기 인터럽션 요청은 복수의 메시지 시그널 인터럽션들(message signaled interruptions)을 표시하고(represent), 상기 운영체제에 제공된 인터럽션은 상기 운영체제를 위한 입력/출력 어댑터 이벤트 통지(an input/output adapter event notification)의 일부분인
    방법.
  4. 제 2항에 있어서, 상기 방법은, 상기 제공하는 단계에 응답하여, 어댑터 당 적어도 하나의 인터럽션 이유를 명시하는 하나 또는 그 이상의 어댑터들을 위한 하나 또는 그 이상의 AIBV 표시들(indications)을 획득하는 단계(obtaining)를 더 포함하는
    방법.
  5. 제 4항에 있어서, 상기 획득하는 단계는 복수의 인터럽션 이유들을 명시하는 AIBV 표시들을 획득하는 단계 - 상기 복수의 인터럽션 이유들은 상기 복수의 인터럽션 요청들에 대응함 - 를 포함하는
    방법.
  6. 제 5항에 있어서, 상기 획득하는 단계는 상기 하나 또는 그 이상의 AIBV들 내의 상기 하나 또는 그 이상의 AIBV 표시들을 획득하는 데 있어서 상기 AISB를 사용하는 단계를 포함하는
    방법.
  7. 제 1항에 있어서, 상기 AIBV 내의 인디케이터를 세트하는 단계는: 디바이스 테이블 엔트리를 획득하기 위해 상기 어댑터로부터의 요청의 식별자를 사용하는 단계 - 상기 디바이스 테이블 엔트리는 상기 어댑터를 위해 허용되는 인터럽션들의 수를 명시하는 값을 포함함 -;
    상기 요청 내에 제공된 벡터 수(a vector number)가 상기 어댑터를 위해 허용된 인터럽션들의 수의 범위 내에 있는 지를 결정하는 단계;
    상기 벡터 수(a vector number)가 상기 인터럽션들의 허용된 수의 범위 내에 있다고 결정하는 것에 응답하여, 상기 AIBV의 시작점 위치(a starting position)를 찾기 위해 상기 디바이스 테이블 엔트리의 하나 또는 그 이상의 파라미터들을 사용하는 단계; 및
    상기 AIBV 내의 상기 인디케이터를 세트하기 위해 상기 벡터 수를 사용하는 단계를 포함하는
    방법.
  8. 제 1 내지 7항의 방법들 중 어느 하나에 따른 모든 단계들을 수행하도록 구성된 수단을 포함하는
    시스템.
  9. 컴퓨터 시스템 상에서 실행될 때, 제 1 내지 7항의 방법들 중 어느 하나에 따른 모든 단계들을 수행하는 명령들을 포함하는
    컴퓨터 프로그램.
KR1020137001068A 2010-06-23 2010-11-08 메시지 시그널 인터럽션을 i/o 어댑터 이벤트 통지로 변환 KR101455011B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/821,175 2010-06-23
US12/821,175 US8572635B2 (en) 2010-06-23 2010-06-23 Converting a message signaled interruption into an I/O adapter event notification
PCT/EP2010/067023 WO2011160707A1 (en) 2010-06-23 2010-11-08 Converting a message signaled interruption into an i/o adapter event notification

Publications (2)

Publication Number Publication Date
KR20130032358A true KR20130032358A (ko) 2013-04-01
KR101455011B1 KR101455011B1 (ko) 2014-10-27

Family

ID=43982256

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137001068A KR101455011B1 (ko) 2010-06-23 2010-11-08 메시지 시그널 인터럽션을 i/o 어댑터 이벤트 통지로 변환

Country Status (22)

Country Link
US (2) US8572635B2 (ko)
EP (1) EP2430558B1 (ko)
JP (1) JP5719435B2 (ko)
KR (1) KR101455011B1 (ko)
CN (1) CN102906722B (ko)
AU (1) AU2010355798B2 (ko)
BR (1) BR112012033821B1 (ko)
CA (1) CA2800629C (ko)
DK (1) DK2430558T3 (ko)
ES (1) ES2535333T3 (ko)
HK (1) HK1180796A1 (ko)
HR (1) HRP20150385T1 (ko)
HU (1) HUE024981T2 (ko)
IL (1) IL223589B (ko)
MX (1) MX2012014861A (ko)
PL (1) PL2430558T3 (ko)
PT (1) PT2430558E (ko)
RU (1) RU2546561C2 (ko)
SG (1) SG186080A1 (ko)
SI (1) SI2430558T1 (ko)
WO (1) WO2011160707A1 (ko)
ZA (1) ZA201209699B (ko)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102016812B (zh) * 2008-04-28 2014-06-11 惠普开发有限公司 虚拟中断模式接口和用于虚拟化中断模式的方法
US8626970B2 (en) 2010-06-23 2014-01-07 International Business Machines Corporation Controlling access by a configuration to an adapter function
US8510599B2 (en) * 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8504754B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Identification of types of sources of adapter interruptions
US9213661B2 (en) 2010-06-23 2015-12-15 International Business Machines Corporation Enable/disable adapters of a computing environment
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8615645B2 (en) * 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8621112B2 (en) 2010-06-23 2013-12-31 International Business Machines Corporation Discovery by operating system of information relating to adapter functions accessible to the operating system
US8478922B2 (en) 2010-06-23 2013-07-02 International Business Machines Corporation Controlling a rate at which adapter interruption requests are processed
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US9342352B2 (en) 2010-06-23 2016-05-17 International Business Machines Corporation Guest access to address spaces of adapter
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8495217B2 (en) * 2010-09-30 2013-07-23 International Business Machines Corporation Mechanism for preventing client partition crashes by removing processing resources from the client logical partition when an NPIV server goes down
WO2012103253A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
US8966148B2 (en) * 2012-06-01 2015-02-24 International Business Machines Corporation Providing real-time interrupts over Ethernet
US8984201B2 (en) 2012-06-01 2015-03-17 International Business Machines Corporation Providing I2C bus over Ethernet
US9152588B2 (en) 2012-10-16 2015-10-06 Apple Inc. Race-free level-sensitive interrupt delivery using fabric delivered interrupts
US9009377B2 (en) * 2012-11-01 2015-04-14 Apple Inc. Edge-triggered interrupt conversion in a system employing level-sensitive interrupts
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
EP2972798B1 (en) 2013-03-15 2020-06-17 Intel Corporation Method and apparatus for guest return address stack emulation supporting speculation
US9465768B2 (en) * 2014-03-14 2016-10-11 International Business Machines Corporation PCI function measurement block enhancements
US10187323B2 (en) * 2016-09-02 2019-01-22 Pivotal Software, Inc. On-demand resource provisioning
DE102017108216A1 (de) * 2017-04-18 2018-10-18 Infineon Technologies Ag Steuersystem und Verfahren des Speicherzugriffs
DE102017108219A1 (de) 2017-04-18 2018-10-18 Infineon Technologies Ag Steuersystem und Verfahren des Speicherzugriffs
CN110597537B (zh) * 2019-08-29 2022-12-13 桂林理工大学南宁分校 一种物联网节点安全更新升级方法
US11347500B2 (en) 2020-06-17 2022-05-31 Bank Of America Corporation Software code converter for resolving conflicts during code development
US11782685B2 (en) 2020-06-17 2023-10-10 Bank Of America Corporation Software code vectorization converter
US11573775B2 (en) 2020-06-17 2023-02-07 Bank Of America Corporation Software code converter for resolving redundancy during code development

Family Cites Families (229)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4028668A (en) 1975-12-22 1977-06-07 Honeywell Information Systems, Inc. Apparatus for selectively addressing sections and locations in a device controller's memory
US4323963A (en) 1979-07-13 1982-04-06 Rca Corporation Hardware interpretive mode microprocessor
US4271468A (en) 1979-11-06 1981-06-02 International Business Machines Corp. Multiprocessor mechanism for handling channel interrupts
WO1983001524A1 (en) 1981-10-13 1983-04-28 Cormier, Roger, Louis Method and apparatus for measurements of channel operation
US5053952A (en) 1987-06-05 1991-10-01 Wisc Technologies, Inc. Stack-memory-based writable instruction set computer having a single data bus
US5282274A (en) 1990-05-24 1994-01-25 International Business Machines Corporation Translation of multiple virtual pages upon a TLB miss
US5170472A (en) 1991-03-28 1992-12-08 International Business Machines Corp. Dynamically changing a system i/o configuration definition
US5465355A (en) 1991-09-04 1995-11-07 International Business Machines Corporation Establishing and restoring paths in a data processing I/O system
JPH05165715A (ja) 1991-12-12 1993-07-02 Nec Corp 情報処理装置
JPH0821015B2 (ja) 1992-01-20 1996-03-04 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータならびにそのシステム再構成化装置および方法
US5617554A (en) 1992-02-10 1997-04-01 Intel Corporation Physical address size selection and page size selection in an address translator
US5600805A (en) 1992-06-15 1997-02-04 International Business Machines Corporation Pass-through for I/O channel subsystem call instructions for accessing shared resources in a computer system having a plurality of operating systems
US5265240A (en) 1992-07-24 1993-11-23 International Business Machines Corporation Channel measurement method and means
US5465332A (en) 1992-09-21 1995-11-07 International Business Machines Corporation Selectable 8/16 bit DMA channels for "ISA" bus
JP2500101B2 (ja) 1992-12-18 1996-05-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 共用変数の値を更新する方法
WO1994027215A1 (en) 1993-05-07 1994-11-24 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5535352A (en) 1994-03-24 1996-07-09 Hewlett-Packard Company Access hints for input/output address translation mechanisms
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
WO1996000940A1 (en) 1994-06-28 1996-01-11 Intel Corporation Pci to isa interrupt protocol converter and selection mechanism
US5748950A (en) 1994-09-20 1998-05-05 Intel Corporation Method and apparatus for providing an optimized compare-and-branch instruction
US5901312A (en) 1994-12-13 1999-05-04 Microsoft Corporation Providing application programs with unmediated access to a contested hardware resource
US5802590A (en) 1994-12-13 1998-09-01 Microsoft Corporation Method and system for providing secure access to computer resources
US5586268A (en) 1995-03-03 1996-12-17 Advanced System Products, Inc. Multiple peripheral adapter device driver architecture
JPH08263424A (ja) 1995-03-20 1996-10-11 Fujitsu Ltd コンピュータ装置
US5671365A (en) * 1995-10-20 1997-09-23 Symbios Logic Inc. I/O system for reducing main processor overhead in initiating I/O requests and servicing I/O completion events
US5790825A (en) 1995-11-08 1998-08-04 Apple Computer, Inc. Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions
US5960213A (en) 1995-12-18 1999-09-28 3D Labs Inc. Ltd Dynamically reconfigurable multi-function PCI adapter device
US5974440A (en) 1996-03-25 1999-10-26 Texas Instruments Incorporated Microprocessor with circuits, systems, and methods for interrupt handling during virtual task operation
US5819053A (en) 1996-06-05 1998-10-06 Compaq Computer Corporation Computer system bus performance monitoring
US5761448A (en) 1996-08-30 1998-06-02 Ncr Corporation Physical-to-logical bus mapping scheme for computer systems having multiple PCI bus configuration
US5838960A (en) 1996-09-26 1998-11-17 Bay Networks, Inc. Apparatus for performing an atomic add instructions
US5995745A (en) 1996-12-23 1999-11-30 Yodaiken; Victor J. Adding real-time support to general purpose operating systems
US5826084A (en) 1997-03-25 1998-10-20 Texas Instruments Incorporated Microprocessor with circuits, systems, and methods for selectively bypassing external interrupts past the monitor program during virtual program operation
US6195674B1 (en) 1997-04-30 2001-02-27 Canon Kabushiki Kaisha Fast DCT apparatus
KR100263672B1 (ko) 1997-05-08 2000-09-01 김영환 가변적인 페이지 크기를 지원하는 어드레스 변환장치
US5914730A (en) 1997-09-09 1999-06-22 Compaq Computer Corp. System and method for invalidating and updating individual GART table entries for accelerated graphics port transaction requests
US6067595A (en) 1997-09-23 2000-05-23 Icore Technologies, Inc. Method and apparatus for enabling high-performance intelligent I/O subsystems using multi-port memories
US5864703A (en) 1997-10-09 1999-01-26 Mips Technologies, Inc. Method for providing extended precision in SIMD vector arithmetic operations
US6078970A (en) 1997-10-15 2000-06-20 International Business Machines Corporation System for determining adapter interrupt status where interrupt is sent to host after operating status stored in register is shadowed to host memory
US6009261A (en) 1997-12-16 1999-12-28 International Business Machines Corporation Preprocessing of stored target routines for emulating incompatible instructions on a target processor
US6023736A (en) 1997-12-19 2000-02-08 International Business Machines Corporation System for dynamically configuring I/O device adapters where a function configuration register contains ready/not ready flags corresponding to each I/O device adapter
US6021458A (en) 1998-01-21 2000-02-01 Intel Corporation Method and apparatus for handling multiple level-triggered and edge-triggered interrupts
US6223299B1 (en) 1998-05-04 2001-04-24 International Business Machines Corporation Enhanced error handling for I/O load/store operations to a PCI device via bad parity or zero byte enables
US6308255B1 (en) 1998-05-26 2001-10-23 Advanced Micro Devices, Inc. Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system
US6460094B1 (en) 1998-07-08 2002-10-01 Microsoft Corporation Peripheral device configured to detect the type of interface to which it is connected and configuring itself accordingly
US6615305B1 (en) 1998-08-27 2003-09-02 Intel Corporation Interrupt pacing in data transfer unit
US6463582B1 (en) 1998-10-21 2002-10-08 Fujitsu Limited Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6408347B1 (en) 1998-12-10 2002-06-18 Cisco Technology, Inc. Integrated multi-function adapters using standard interfaces through single a access point
US6397350B1 (en) 1999-02-19 2002-05-28 International Business Machines Corporation Method of providing direct data processing access using a queued direct input-output device
US6519645B2 (en) 1999-02-19 2003-02-11 International Business Machine Corporation Method and apparatus for providing configuration information using a queued direct input-output device
US6349380B1 (en) 1999-03-12 2002-02-19 Intel Corporation Linear address extension and mapping to physical memory using 4 and 8 byte page table entries in a 32-bit microprocessor
US6557035B1 (en) 1999-03-30 2003-04-29 International Business Machines Corporation Rules-based method of and system for optimizing server hardware capacity and performance
US6330656B1 (en) 1999-03-31 2001-12-11 International Business Machines Corporation PCI slot control apparatus with dynamic configuration for partitioned systems
US6578191B1 (en) 1999-05-17 2003-06-10 International Business Machines Corporation Method and apparatus for dynamic generation of adapters
US6330647B1 (en) 1999-08-31 2001-12-11 Micron Technology, Inc. Memory bandwidth allocation based on access count priority scheme
US6772097B1 (en) 1999-09-30 2004-08-03 Intel Corporation Retrieving I/O processor performance monitor data
US6493741B1 (en) 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
US6970992B2 (en) 1999-10-04 2005-11-29 Intel Corporation Apparatus to map virtual pages to disparate-sized, non-contiguous real pages and methods relating thereto
US6651126B1 (en) 1999-10-29 2003-11-18 Texas Instruments Incorporated Snapshot arbiter mechanism
US7509391B1 (en) 1999-11-23 2009-03-24 Texas Instruments Incorporated Unified memory management system for multi processor heterogeneous architecture
US6529978B1 (en) 2000-02-23 2003-03-04 International Business Machines Corporation Computer input/output (I/O) interface with dynamic I/O adaptor processor bindings
US6963940B1 (en) 2000-03-30 2005-11-08 International Business Machines Corporation Measuring utilization of individual components of channels
US6581130B1 (en) 2000-04-04 2003-06-17 Hewlett Packard Development Company, L.P. Dynamic remapping of address registers for address translation between multiple busses
US6629175B1 (en) 2000-04-14 2003-09-30 International Business Machines Corporation Efficient adapter context switching
US6772264B1 (en) 2000-05-22 2004-08-03 International Business Machines Corporation Enabling a docking station for ISA adapters
US6715011B1 (en) 2000-05-31 2004-03-30 International Business Machines Corporation PCI/PCI-X bus bridge with performance monitor
US6654818B1 (en) 2000-06-22 2003-11-25 International Business Machines Corporation DMA access authorization for 64-bit I/O adapters on PCI bus
US6611883B1 (en) 2000-11-16 2003-08-26 Sun Microsystems, Inc. Method and apparatus for implementing PCI DMA speculative prefetching in a message passing queue oriented bus system
US6704831B1 (en) 2000-11-16 2004-03-09 Sun Microsystems, Inc. Method and apparatus for converting address information between PCI bus protocol and a message-passing queue-oriented bus protocol
US6658521B1 (en) 2000-12-22 2003-12-02 International Business Machines Corporation Method and apparatus for address translation on PCI bus over infiniband network
US6721839B1 (en) 2000-12-27 2004-04-13 International Business Machines Corporation Method of mapping multiple address spaces into single PCI bus
RU2195013C2 (ru) * 2001-02-01 2002-12-20 Научно-исследовательский институт химического машиностроения Способ многоуровневой обработки запросов прерывания и многоуровневая система для его осуществления
TW499795B (en) 2001-03-19 2002-08-21 Realtek Semiconductor Corp PCI extended function interface and the PCI device using the same
US6792492B1 (en) 2001-04-11 2004-09-14 Novell, Inc. System and method of lowering overhead and latency needed to service operating system interrupts
US6820164B2 (en) 2001-04-17 2004-11-16 International Business Machines Corporation Peripheral component interconnect bus detection in logically partitioned computer system involving authorizing guest operating system to conduct configuration input-output operation with functions of pci devices
US20020161907A1 (en) 2001-04-25 2002-10-31 Avery Moon Adaptive multi-protocol communications system
US6968446B1 (en) 2001-08-09 2005-11-22 Advanced Micro Devices, Inc. Flags handling for system call instructions
US6842870B2 (en) 2001-09-20 2005-01-11 International Business Machines Corporation Method and apparatus for filtering error logs in a logically partitioned data processing system
US6801993B2 (en) 2001-09-28 2004-10-05 International Business Machines Corporation Table offset for shortening translation tables from their beginnings
US6880021B2 (en) * 2001-09-28 2005-04-12 International Business Machines Corporation Intelligent interrupt with hypervisor collaboration
US20040025166A1 (en) 2002-02-02 2004-02-05 International Business Machines Corporation Server computer and a method for accessing resources from virtual machines of a server computer via a fibre channel
US6901537B2 (en) 2002-02-27 2005-05-31 International Business Machines Corporation Method and apparatus for preventing the propagation of input/output errors in a logical partitioned data processing system
US6907510B2 (en) 2002-04-01 2005-06-14 Intel Corporation Mapping of interconnect configuration space
US7302692B2 (en) 2002-05-31 2007-11-27 International Business Machines Corporation Locally providing globally consistent information to communications layers
US7197585B2 (en) 2002-09-30 2007-03-27 International Business Machines Corporation Method and apparatus for managing the execution of a broadcast instruction on a guest processor
US7054972B2 (en) 2002-12-13 2006-05-30 Lsi Logic Corporation Apparatus and method for dynamically enabling and disabling interrupt coalescing in data processing system
US7065598B2 (en) 2002-12-20 2006-06-20 Intel Corporation Method, system, and article of manufacture for adjusting interrupt levels
US20040139304A1 (en) 2003-01-09 2004-07-15 International Business Machines Corporation High speed virtual instruction execution mechanism
US7073002B2 (en) 2003-03-13 2006-07-04 International Business Machines Corporation Apparatus and method for controlling resource transfers using locks in a logically partitioned computer system
US7107382B2 (en) 2003-04-03 2006-09-12 Emulex Design & Manufacturing Corporation Virtual peripheral component interconnect multiple-function device
US7139940B2 (en) 2003-04-10 2006-11-21 International Business Machines Corporation Method and apparatus for reporting global errors on heterogeneous partitioned systems
US7281075B2 (en) 2003-04-24 2007-10-09 International Business Machines Corporation Virtualization of a global interrupt queue
US7130938B2 (en) 2003-05-12 2006-10-31 International Business Machines Corporation Method, system and program products for identifying communications adapters of a computing environment
US7000036B2 (en) 2003-05-12 2006-02-14 International Business Machines Corporation Extended input/output measurement facilities
US7290070B2 (en) 2003-05-12 2007-10-30 International Business Machines Corporation Multiple logical input/output subsystem facility
US6996638B2 (en) 2003-05-12 2006-02-07 International Business Machines Corporation Method, system and program products for enhancing input/output processing for operating system images of a computing environment
US7177961B2 (en) 2003-05-12 2007-02-13 International Business Machines Corporation Managing access, by operating system images of a computing environment, of input/output resources of the computing environment
US7174550B2 (en) 2003-05-12 2007-02-06 International Business Machines Corporation Sharing communications adapters across a plurality of input/output subsystem images
US7127599B2 (en) 2003-05-12 2006-10-24 International Business Machines Corporation Managing configurations of input/output system images of an input/output subsystem, wherein a configuration is modified without restarting the input/output subsystem to effect a modification
US7130949B2 (en) 2003-05-12 2006-10-31 International Business Machines Corporation Managing input/output interruptions in non-dedicated interruption hardware environments
US7134052B2 (en) 2003-05-15 2006-11-07 International Business Machines Corporation Autonomic recovery from hardware errors in an input/output fabric
US6931460B2 (en) 2003-05-19 2005-08-16 Emulex Design & Manufacturing Corporation Dynamically self-adjusting polling mechanism
US7420931B2 (en) 2003-06-05 2008-09-02 Nvidia Corporation Using TCP/IP offload to accelerate packet filtering
US7613109B2 (en) 2003-06-05 2009-11-03 Nvidia Corporation Processing data for a TCP connection using an offload unit
EP1489491A1 (en) 2003-06-19 2004-12-22 Texas Instruments Incorporated Dynamically changing the semantic of an instruction
US7013358B2 (en) 2003-08-09 2006-03-14 Texas Instruments Incorporated System for signaling serialized interrupts using message signaled interrupts
US7979548B2 (en) 2003-09-30 2011-07-12 International Business Machines Corporation Hardware enforcement of logical partitioning of a channel adapter's resources in a system area network
US7552436B2 (en) 2003-11-25 2009-06-23 International Business Machines Memory mapped input/output virtualization
US7146482B2 (en) 2003-11-25 2006-12-05 International Business Machines Corporation Memory mapped input/output emulation
US7277968B2 (en) 2004-01-23 2007-10-02 International Business Machines Corporation Managing sets of input/output communications subadapters of an input/output subsystem
US7107384B1 (en) 2004-03-01 2006-09-12 Pericom Semiconductor Corp. Dynamic PCI-bus pre-fetch with separate counters for commands of commands of different data-transfer lengths
US7530071B2 (en) 2004-04-22 2009-05-05 International Business Machines Corporation Facilitating access to input/output resources via an I/O partition shared by multiple consumer partitions
US7209994B1 (en) 2004-05-11 2007-04-24 Advanced Micro Devices, Inc. Processor that maintains virtual interrupt state and injects virtual interrupts into virtual machine guests
US20050289271A1 (en) 2004-06-29 2005-12-29 Martinez Alberto J Circuitry to selectively produce MSI signals
US7496706B2 (en) 2004-06-30 2009-02-24 Intel Corporation Message signaled interrupt redirection table
US20060005083A1 (en) 2004-06-30 2006-01-05 International Business Machines Corporation Performance count tracing
US7418572B2 (en) 2004-08-18 2008-08-26 International Business Machines Corporation Pretranslating input/output buffers in environments with multiple page sizes
TWI252397B (en) 2004-09-17 2006-04-01 Ind Tech Res Inst Method and apparatus of built-in self-diagnosis and repair in a memory with syndrome identification
US7334107B2 (en) 2004-09-30 2008-02-19 Intel Corporation Caching support for direct memory access address translation
US7340582B2 (en) 2004-09-30 2008-03-04 Intel Corporation Fault processing for direct memory access address translation
US7444493B2 (en) 2004-09-30 2008-10-28 Intel Corporation Address translation for input/output devices using hierarchical translation tables
US7373446B2 (en) 2004-11-05 2008-05-13 Microsoft Corporation Method and system for dynamically patching an operating system's interrupt mechanism
US7296120B2 (en) 2004-11-18 2007-11-13 International Business Machines Corporation Mechanism that provides efficient multi-word load atomicity
US7188346B2 (en) 2004-11-29 2007-03-06 International Business Machines Corporation Method, system and program product for correlating data between operating environments
US7284112B2 (en) 2005-01-14 2007-10-16 International Business Machines Corporation Multiple page size address translation incorporating page size prediction
US7886086B2 (en) 2005-02-03 2011-02-08 International Business Machines Corporation Method and apparatus for restricting input/output device peer-to-peer operations in a data processing system to improve reliability, availability, and serviceability
US7562366B2 (en) 2005-02-03 2009-07-14 Solarflare Communications, Inc. Transmit completion event batching
US7464191B2 (en) 2005-02-25 2008-12-09 International Business Machines Corporation System and method for host initialization for an adapter that supports virtualization
US20060195617A1 (en) 2005-02-25 2006-08-31 International Business Machines Corporation Method and system for native virtualization on a partially trusted adapter using adapter bus, device and function number for identification
US7260664B2 (en) 2005-02-25 2007-08-21 International Business Machines Corporation Interrupt mechanism on an IO adapter that supports virtualization
US7493425B2 (en) 2005-02-25 2009-02-17 International Business Machines Corporation Method, system and program product for differentiating between virtual hosts on bus transactions and associating allowable memory access for an input/output adapter that supports virtualization
US7475166B2 (en) 2005-02-28 2009-01-06 International Business Machines Corporation Method and system for fully trusted adapter validation of addresses referenced in a virtual host transfer request
US7567567B2 (en) 2005-04-05 2009-07-28 Sun Microsystems, Inc. Network system including packet classification for partitioned resources
US7260663B2 (en) 2005-04-07 2007-08-21 International Business Machines Corporation System and method for presenting interrupts
US7200704B2 (en) 2005-04-07 2007-04-03 International Business Machines Corporation Virtualization of an I/O adapter port using enablement and activation functions
US7478178B2 (en) 2005-04-22 2009-01-13 Sun Microsystems, Inc. Virtualization for device sharing
US7225287B2 (en) 2005-06-01 2007-05-29 Microsoft Corporation Scalable DMA remapping on a computer bus
US7516252B2 (en) 2005-06-08 2009-04-07 Intel Corporation Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment
US20060288130A1 (en) 2005-06-21 2006-12-21 Rajesh Madukkarumukumana Address window support for direct memory access translation
US7631097B2 (en) 2005-07-21 2009-12-08 National Instruments Corporation Method and apparatus for optimizing the responsiveness and throughput of a system performing packetized data transfers using a transfer count mark
US8028154B2 (en) 2005-07-29 2011-09-27 Broadcom Corporation Method and system for reducing instruction storage space for a processor integrated in a network adapter chip
US7546487B2 (en) 2005-09-15 2009-06-09 Intel Corporation OS and firmware coordinated error handling using transparent firmware intercept and firmware services
US20070073955A1 (en) 2005-09-29 2007-03-29 Joseph Murray Multi-function PCI device
US7882489B2 (en) 2005-11-22 2011-02-01 International Business Machines Corporation Integrated code generation for adapter-specific property template
US20070136554A1 (en) 2005-12-12 2007-06-14 Giora Biran Memory operations in a virtualized system
US7475183B2 (en) 2005-12-12 2009-01-06 Microsoft Corporation Large page optimizations in a virtual machine environment
US7328296B1 (en) 2006-01-03 2008-02-05 Emc Corporation Interrupt processing system
US7398343B1 (en) 2006-01-03 2008-07-08 Emc Corporation Interrupt processing system
US7653803B2 (en) 2006-01-17 2010-01-26 Globalfoundries Inc. Address translation for input/output (I/O) devices and interrupt remapping for I/O devices in an I/O memory management unit (IOMMU)
US7673116B2 (en) 2006-01-17 2010-03-02 Advanced Micro Devices, Inc. Input/output memory management unit that implements memory attributes based on translation data
US7548999B2 (en) 2006-01-17 2009-06-16 Advanced Micro Devices, Inc. Chained hybrid input/output memory management unit
US7849232B2 (en) 2006-02-17 2010-12-07 Intel-Ne, Inc. Method and apparatus for using a single multi-function adapter with different operating systems
US7739422B2 (en) 2006-03-21 2010-06-15 International Business Machines Corporation Method to improve system DMA mapping while substantially reducing memory fragmentation
US7412589B2 (en) 2006-03-31 2008-08-12 International Business Machines Corporation Method to detect a stalled instruction stream and serialize micro-operation execution
US8621120B2 (en) 2006-04-17 2013-12-31 International Business Machines Corporation Stalling of DMA operations in order to do memory migration using a migration in progress bit in the translation control entry mechanism
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
US7954099B2 (en) 2006-05-17 2011-05-31 International Business Machines Corporation Demultiplexing grouped events into virtual event queues while in two levels of virtualization
JP4961833B2 (ja) 2006-05-19 2012-06-27 日本電気株式会社 クラスタシステム、負荷分散方法、最適化クライアントプログラム、及び調停サーバプログラム
TW200801952A (en) 2006-06-02 2008-01-01 Via Tech Inc Method for setting up a peripheral component interconnect express (PCIE)
US7546398B2 (en) 2006-08-01 2009-06-09 International Business Machines Corporation System and method for distributing virtual input/output operations across multiple logical partitions
US7496707B2 (en) 2006-08-22 2009-02-24 International Business Machines Corporation Dynamically scalable queues for performance driven PCI express memory traffic
US8725914B2 (en) 2006-08-28 2014-05-13 International Business Machines Corporation Message signaled interrupt management for a computer input/output fabric incorporating platform independent interrupt manager
US7627723B1 (en) 2006-09-21 2009-12-01 Nvidia Corporation Atomic memory operators in a parallel processor
US20080126652A1 (en) 2006-09-27 2008-05-29 Intel Corporation Managing Interrupts in a Partitioned Platform
US7552298B2 (en) 2006-09-28 2009-06-23 Broadcom Corporation Method and system for deferred pinning of host memory for stateful network interfaces
JP2008090375A (ja) 2006-09-29 2008-04-17 Hitachi Ltd 割込み制御システム、およびこれを利用した記憶制御システム
US9135951B2 (en) 2006-10-10 2015-09-15 Qualcomm Incorporated System and method for dynamic audio buffer management
US20080091868A1 (en) 2006-10-17 2008-04-17 Shay Mizrachi Method and System for Delayed Completion Coalescing
US7587575B2 (en) 2006-10-17 2009-09-08 International Business Machines Corporation Communicating with a memory registration enabled adapter using cached address translations
US20080098197A1 (en) 2006-10-20 2008-04-24 International Business Machines Corporation Method and System For Address Translation With Memory Windows
US7849287B2 (en) 2006-11-13 2010-12-07 Advanced Micro Devices, Inc. Efficiently controlling special memory mapped system accesses
JP2008123298A (ja) 2006-11-13 2008-05-29 Canon Inc 情報処理方法及びシステム
US7624235B2 (en) 2006-11-30 2009-11-24 Apple Inc. Cache used both as cache and staging buffer
US7529860B2 (en) 2006-12-19 2009-05-05 International Business Machines Corporation System and method for configuring an endpoint based on specified valid combinations of functions
US7984454B2 (en) 2006-12-19 2011-07-19 International Business Machines Corporation Migration of single root stateless virtual functions
US7617340B2 (en) 2007-01-09 2009-11-10 International Business Machines Corporation I/O adapter LPAR isolation with assigned memory space
US20080168208A1 (en) 2007-01-09 2008-07-10 International Business Machines Corporation I/O Adapter LPAR Isolation In A Hypertransport Environment With Assigned Memory Space Indexing a TVT Via Unit IDs
JP5119686B2 (ja) 2007-03-06 2013-01-16 日本電気株式会社 情報処理装置および設定方法
EP2075696A3 (en) 2007-05-10 2010-01-27 Texas Instruments Incorporated Interrupt- related circuits, systems and processes
US7617345B2 (en) 2007-07-02 2009-11-10 International Business Machines Corporation Prioritization of interrupts in a storage controller based on interrupt control directives received from hosts
US20090024823A1 (en) 2007-07-20 2009-01-22 Wenjeng Ko Overlayed separate dma mapping of adapters
US8127296B2 (en) 2007-09-06 2012-02-28 Dell Products L.P. Virtual machine migration between processors having VM migration registers controlled by firmware to modify the reporting of common processor feature sets to support the migration
US8762999B2 (en) 2007-09-27 2014-06-24 Oracle America, Inc. Guest-initiated resource allocation request based on comparison of host hardware information and projected workload requirement
JP2009088962A (ja) 2007-09-28 2009-04-23 Panasonic Corp 通信アダプタ、通信装置および通信方法
US8141094B2 (en) 2007-12-03 2012-03-20 International Business Machines Corporation Distribution of resources for I/O virtualized (IOV) adapters and management of the adapters through an IOV management partition via user selection of compatible virtual functions
US7913030B2 (en) 2007-12-28 2011-03-22 Sandisk Il Ltd. Storage device with transaction logging capability
US8151083B2 (en) 2008-01-11 2012-04-03 International Business Machines Corporation Dynamic address translation with frame management
US8037221B2 (en) 2008-01-16 2011-10-11 International Business Machines Corporation Dynamic allocation of DMA buffers in input/output adaptors
US7996628B2 (en) 2008-02-14 2011-08-09 International Business Machines Corporation Cross adapter shared address translation tables
US8332846B2 (en) 2008-02-28 2012-12-11 Sony Mobile Communications Ab Selective exposure to USB device functionality for a virtual machine by filtering descriptors
US20090276774A1 (en) 2008-05-01 2009-11-05 Junji Kinoshita Access control for virtual machines in an information system
US7743189B2 (en) 2008-05-05 2010-06-22 International Business Machines Corporation PCI function south-side data management
US8032680B2 (en) 2008-06-27 2011-10-04 Microsoft Corporation Lazy handling of end of interrupt messages in a virtualized environment
US8359408B2 (en) 2008-06-30 2013-01-22 Intel Corporation Enabling functional dependency in a multi-function device
US9262357B2 (en) 2008-09-29 2016-02-16 International Business Machines Corporation Associating process priority with I/O queuing
JP5352848B2 (ja) * 2008-11-28 2013-11-27 株式会社日立製作所 仮想計算機の制御方法及び計算機装置
US8645596B2 (en) 2008-12-30 2014-02-04 Intel Corporation Interrupt techniques
US8321615B2 (en) 2009-12-18 2012-11-27 Intel Corporation Source core interrupt steering
US8850166B2 (en) 2010-02-18 2014-09-30 International Business Machines Corporation Load pair disjoint facility and instruction therefore
US20110314263A1 (en) 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
US8914619B2 (en) 2010-06-22 2014-12-16 International Business Machines Corporation High-word facility for extending the number of general purpose registers available to instructions
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8677180B2 (en) 2010-06-23 2014-03-18 International Business Machines Corporation Switch failover control in a multiprocessor computer system
US8510599B2 (en) 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US9342352B2 (en) 2010-06-23 2016-05-17 International Business Machines Corporation Guest access to address spaces of adapter
US8639858B2 (en) 2010-06-23 2014-01-28 International Business Machines Corporation Resizing address spaces concurrent to accessing the address spaces
US8645767B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Scalable I/O adapter function level error detection, isolation, and reporting
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8656228B2 (en) 2010-06-23 2014-02-18 International Business Machines Corporation Memory error isolation and recovery in a multiprocessor computer system
US8566480B2 (en) 2010-06-23 2013-10-22 International Business Machines Corporation Load instruction for communicating with adapters
US8504754B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Identification of types of sources of adapter interruptions
US8621112B2 (en) 2010-06-23 2013-12-31 International Business Machines Corporation Discovery by operating system of information relating to adapter functions accessible to the operating system
US8745292B2 (en) 2010-06-23 2014-06-03 International Business Machines Corporation System and method for routing I/O expansion requests and responses in a PCIE architecture
US9213661B2 (en) 2010-06-23 2015-12-15 International Business Machines Corporation Enable/disable adapters of a computing environment
US8417911B2 (en) 2010-06-23 2013-04-09 International Business Machines Corporation Associating input/output device requests with memory associated with a logical partition
US8683108B2 (en) 2010-06-23 2014-03-25 International Business Machines Corporation Connected input/output hub management
US8626970B2 (en) 2010-06-23 2014-01-07 International Business Machines Corporation Controlling access by a configuration to an adapter function
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
US8650337B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Runtime determination of translation formats for adapter functions
US8615622B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Non-standard I/O adapters in a standardized I/O architecture
US8650335B2 (en) 2010-06-23 2014-02-11 International Business Machines Corporation Measurement facility for adapter functions
US8549182B2 (en) 2010-06-23 2013-10-01 International Business Machines Corporation Store/store block instructions for communicating with adapters
US8645606B2 (en) 2010-06-23 2014-02-04 International Business Machines Corporation Upbound input/output expansion request and response processing in a PCIe architecture
US9195623B2 (en) 2010-06-23 2015-11-24 International Business Machines Corporation Multiple address spaces per adapter with address translation
US8478922B2 (en) 2010-06-23 2013-07-02 International Business Machines Corporation Controlling a rate at which adapter interruption requests are processed
US8918573B2 (en) 2010-06-23 2014-12-23 International Business Machines Corporation Input/output (I/O) expansion response processing in a peripheral component interconnect express (PCIe) environment
US8468284B2 (en) 2010-06-23 2013-06-18 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8505032B2 (en) 2010-06-23 2013-08-06 International Business Machines Corporation Operating system notification of actions to be taken responsive to adapter events
US9851969B2 (en) 2010-06-24 2017-12-26 International Business Machines Corporation Function virtualization facility for function query of a processor

Also Published As

Publication number Publication date
RU2012147704A (ru) 2014-05-20
EP2430558B1 (en) 2015-03-25
AU2010355798B2 (en) 2014-05-15
PL2430558T3 (pl) 2015-06-30
IL223589B (en) 2018-02-28
RU2546561C2 (ru) 2015-04-10
MX2012014861A (es) 2013-01-25
KR101455011B1 (ko) 2014-10-27
SI2430558T1 (sl) 2015-07-31
SG186080A1 (en) 2013-01-30
WO2011160707A1 (en) 2011-12-29
BR112012033821B1 (pt) 2020-11-03
ES2535333T3 (es) 2015-05-08
HRP20150385T1 (en) 2015-06-19
US20120221757A1 (en) 2012-08-30
DK2430558T3 (en) 2015-04-27
AU2010355798A1 (en) 2012-12-20
HK1180796A1 (en) 2013-10-25
JP2013533543A (ja) 2013-08-22
US8572635B2 (en) 2013-10-29
CN102906722B (zh) 2015-07-08
US20110321061A1 (en) 2011-12-29
CN102906722A (zh) 2013-01-30
CA2800629C (en) 2018-03-13
US8601497B2 (en) 2013-12-03
JP5719435B2 (ja) 2015-05-20
BR112012033821A2 (pt) 2017-10-24
ZA201209699B (en) 2015-06-24
PT2430558E (pt) 2015-05-20
CA2800629A1 (en) 2011-12-29
EP2430558A1 (en) 2012-03-21
HUE024981T2 (en) 2016-02-29

Similar Documents

Publication Publication Date Title
CA2800629C (en) Converting a message signaled interruption into an i/o adapter event notification
US8631222B2 (en) Translation of input/output addresses to memory addresses
US9195623B2 (en) Multiple address spaces per adapter with address translation
US9134911B2 (en) Store peripheral component interconnect (PCI) function controls instruction
US8639858B2 (en) Resizing address spaces concurrent to accessing the address spaces
EP2430536B1 (en) Controlling access by a configuration to an adapter function
US8458387B2 (en) Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US8478922B2 (en) Controlling a rate at which adapter interruption requests are processed
CA2800630C (en) Runtime determination of translation formats for adapter functions
US20110320637A1 (en) Discovery by operating system of information relating to adapter functions accessible to the operating system
CA2800632A1 (en) Enable/disable adapters of a computing environment

Legal Events

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

Payment date: 20170927

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180928

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190927

Year of fee payment: 6