KR101464897B1 - 어댑터 펑션들을 위한 변환 포맷들의 런타임 결정 - Google Patents

어댑터 펑션들을 위한 변환 포맷들의 런타임 결정 Download PDF

Info

Publication number
KR101464897B1
KR101464897B1 KR1020137000269A KR20137000269A KR101464897B1 KR 101464897 B1 KR101464897 B1 KR 101464897B1 KR 1020137000269 A KR1020137000269 A KR 1020137000269A KR 20137000269 A KR20137000269 A KR 20137000269A KR 101464897 B1 KR101464897 B1 KR 101464897B1
Authority
KR
South Korea
Prior art keywords
address
format
adapter
memory
translation
Prior art date
Application number
KR1020137000269A
Other languages
English (en)
Other versions
KR20130032353A (ko
Inventor
데이비드 크래독
토마스 그레그
단 그레이너
에릭 노먼 레이스
도날드 윌리엄 슈미트
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20130032353A publication Critical patent/KR20130032353A/ko
Application granted granted Critical
Publication of KR101464897B1 publication Critical patent/KR101464897B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Bus Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

시스템 메모리에 억세스함에 있어서, 어댑터 펑션들과 같은 요청자들에 의해 사용하기 위한 시스템 메모리 주소들을 획득함에 있어서 사용하기 위해 여러 가지 주소 변환 포맷들이 이용가능하다. 주어진 요청자에 의해 사용될 특정 주소 변환 포맷은 그 요청자와 연관된 디바이스 테이블 엔트리에 미리 등록된다.

Description

어댑터 펑션들을 위한 변환 포맷들의 런타임 결정{RUNTIME DETERMINATION OF TRANSLATION FORMATS FOR ADAPTER FUNCTIONS}
본 발명은 일반적으로 컴퓨팅 환경에서 시스템 메모리에 억세스하는 것과 관련되고, 구체적으로는 시스템 메모리에 접근함에 있어서 사용가능한 주소의 공급을 용이하게 하는 것과 관련된다.
시스템 메모리는 읽기 및 쓰기 요청들에 의해 접근가능하다. 이들 요청들은 어댑터들뿐만이 아니라 중앙처리장치들을 포함하는 컴퓨팅 환경의 여러 가지 컴포넌트들로부터 제공될 수 있다. 각각의 요청은 시스템 메모리에 억세스하는 것에 사용될 주소를 포함한다. 그러나, 어떤 경우에는, 이 주소는 시스템 메모리에서 물리적 위치와 일대일 대응관계를 갖지 않는다. 따라서, 주소 변환(address translation)이 수행된다.
주소 변환은 시스템 메모리에 억세스함에 있어서 직접적으로 사용가능하지 않은 하나의 형태로 제공되는 주소를 시스템 메모리에서 물리적 위치에 억세스함에 있어서 직접적으로 사용가능한 또 다른 형태로 변환하기 위해 사용된다. 예를 들어, 중앙처리장치에 의해 제공되는 요청에 포함된 가상 주소(virtual address)는 시스템 메모리에서의 실제 또는 절대 주소로 변환된다. 다른 예로서, 어댑터로부터의 요청에서 제공되는 주변 컴포넌트 인터커넥트(Peripheral Component Interconnect, PCI) 주소는 시스템 메모리에서의 절대 주소로 변환될 수 있다.
Biran 등의 미국 공개번호 2007/0136554A1(2007.06.14. 공개), "가상화된 시스템에서 메모리 동작들(Memory Operations in a Virtualized System)"은 호스트 서버 상의 복수의 운영체제 인스턴스들 사이에서 입력/출력 어댑터를 공유하기 위한, 컴퓨터로 구현된 방법, 장치, 및 시스템을 기술하고 있다. 가상 메모리는 할당되고 운영체제 인스턴스와 연관된다. 가상 메모리는 하나 또는 그 이상의 실제 주소들로 변환되며, 여기서 하나 또는 그 이상의 실제 주소들은 더 이상의 변환을 필요로 하지 않는다. 입력/출력 어댑터는 하나 또는 그 이상의 실제 주소들에 노출된다. 운영체제 인스턴스는 운영체제 인스턴스와 연관된 가상 메모리에 억세스하기 위한 하나 또는 그 이상의 실제 주소들을 제공받는다. 주소 변환 및 보호는 입력/출력 어댑터에 의해 또는 운영체제 인스턴스에 의해 수행될 수 있다.
Moertl 등의 미국 공개번호 2008/0091915A1(2008.04.17. 공개), "캐시된 주소 변환들을 사용하여 메모리 등록 인에이블드 어댑터와 통신하기 위한 장치 및 방법(Apparatus and Method for Communicating With a Memory Registration Enabled Adapter Using Cached Address Translations)," 에는 InfiniBandTM 호스트 채널 어댑터와 같은 메모리 등록 인에이블드 어댑터와 통신하기 위한 장치 및 방법이 제공된다. 이 장치 및 방법으로, 디바이스 드라이버 서비스들은 루트 콤플렉스(root complex)의 주소 변환 데이터 구조에서 주소 변환 엔트리들을 초기화하기 위해 디바이스 드라이버에 의해 호출될 수 있다. 디바이스 드라이버 데이터 버퍼 데이터 구조 및 등록 변경자들(registration modifiers)의 주소는 그 디바이스 드라이버에 의해 디바이스 드라이버 서비스들로 패스될 수 있다. 디바이스 드라이버 서비스들은 루트 콤플렉스와 연관된 주소 변환 데이터 구조 내의 주소 변환 데이터 구조 엔트리들 그리고 어댑터의 MR 주소 변환 데이터 구조 내의 메모리 등록(memory registration, MR) 주소 변환 엔트리들을 생성할 수 있다. 그런 다음, MR 주소 변환 데이터 구조는 루트 콤플렉스와 연관된 주소 변환 데이터 구조를 바이패스하기 위해 I/O 동작들과 함께 사용될 수 있다.
Arndt 등의 미국 특허번호 제7,493,425(2009.02.17. 등록됨), "버스 트랜잭션들 상에서 가상 호스트들 간을 차별화하고, 가상화를 지원하는 입력/출력 어댑터에게 허용가능한 메모리 억세스를 연관시키기 위한 방법, 시스템 및 프로그램 제품(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)"는, LPAR 매니저에 의해 신뢰 컴포넌트에 의해 분석되고 검증될 각각의 I/O 동작을 필요로 하지 않고, 공유된 PCI 어댑터에 그것의 연관된 시스템 메모리의 일부 또는 전부를 직접적으로 노출시키면서, 멀티 시스템 이미지 가상 서버 내 시스템 이미지가 다른 시스템 이미지들로부터 아이솔레이션을 유지할 수 있도록 하는 방법, 시스템 및 컴퓨터 프로그램 제품을 기술하고 있다.
청구항 1에 따른 방법, 및 메모리 억세스를 용이하게 하기 위한 대응하는 시스템 및 컴퓨터 프로그램 제품의 제공을 통해, 종래 기술의 단점들은 극복되고 또한 추가 장점들이 제공된다.
본 발명의 하나 또는 그 이상의 측면들은 본 명세서의 말미에서 청구항들에서 예들로서 구체적으로 언급되고 분명하게 청구되고 있다. 본 발명에 관한 앞에서의 목적들, 특징들, 및 장점들, 및 기타 목적들, 특징들, 및 장점들은 첨부되는 도면들과 함께 다음의 상세한 설명을 통해 분명해진다.
도 1은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 컴퓨팅 환경의 일 실시예를 도시한다.
도 2는 본 발명의 일 측면에 따라, 도 1의 시스템 메모리 및 I/O 허브의 추가 세부사항에 관한 일 실시예를 도시한다.
도 3a는 본 발명의 일 측면에 따라, 어댑터에 대해 DMA(직접 메모리 억세스(direct memory access)) 주소 공간을 등록하기 위한 로직 개요의 일 실시예를 도시한다.
도 3b는 본 발명의 일 측면에 따라, 변환 포맷을 선택하기 위한 로직의 일 예를 도시한다.
도 3c는 본 발명의 일 측면에 따라, 어댑터에 대해 DMA 주소 공간을 등록하는 것의 여러 가지 세부사항의 일 실시예를 도시한다.
도 4는 본 발명의 일 측면에 따라, DMA 동작을 처리하기 위한 로직의 일 실시예를 도시한다.
도 5a는 주소를 변환하여 페이지에 억세스하기 위해 전체 주소가 주소 변환 테이블들 내에서 인덱싱하는 데에 사용될 때 채용된 변환 레벨들의 일 예를 도시한다.
도 5b는 본 발명의 일 측면에 따라, 주소 변환 테이블들 내에서 인덱싱할 때 주소의 일부분이 무시될 경우 채용된 변환 레벨들의 일 예를 도시한다.
도 5c는 본 발명의 하나 또는 그 이상의 측면들에 따라 사용가능한 여러 가지 CPU DAT 호환가능 포맷들의 예들을 도시한다.
도 5d는 본 발명의 하나 또는 그 이상의 측면들에 따라 사용가능한 여러 가지 I/O 확장 주소 변환 포맷들의 예들을 도시한다.
도 6a는 본 발명의 일 측면에 따라 변경 PCI 펑션 컨트롤들의 일 실시예를 도시한다.
도 6b는 본 발명의 일 측면에 따라, 도 6a의 변경 PCI 펑션 컨트롤 명령에 의해 사용된 필드의 일 실시예를 도시한다.
도 6c는 본 발명의 일 측면에 따라, 도 6a의 변경 PCI 펑션 컨트롤 명령에 의해 사용된 또 다른 필드의 일 실시예를 도시한다.
도 6d는 본 발명의 일 측면에 따라 사용된 펑션 정보 블록(FIB)의 내용들의 일 실시예를 도시한다.
도 7은 본 발명의 일 측면에 따라, 변경 PCI 펑션 컨트롤 명령의 로직 개요의 일 실시예를 도시한다.
도 8은 본 발명의 일 측면에 따라, 변경 PCI 펑션 컨트롤 명령에 의해 특정될 수 있는 등록 I/O 주소 변환 파라미터 동작과 연관된 로직의 일 실시예를 도시한다.
도 9는 본 발명의 일 측면에 따라, 변경 PCI 펑션 컨트롤 명령에 의해 특정될 수 있는 미등록 I/O 주소 변환 파라미터 동작과 연관된 로직의 일 실시예를 도시한다.
도 10은 본 발명의 하나 또는 그 이상의 측면들을 편입시키는 컴퓨터 프로그램 제품의 일 실시예를 도시한다.
도 11은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 호스트 컴퓨터의 일 실시예를 도시한다.
도 12는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 컴퓨터 시스템의 다른 예를 도시한다.
도 13은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 또 다른 예를 도시한다.
도 14는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 컴퓨터의 여러 가지 구성요소들의 일 실시예를 도시한다.
도 15a는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 도 14의 컴퓨터 시스템의 실행 유닛의 일 실시예를 도시한다.
도 15b는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 도 14의 컴퓨터 시스템의 분기 유닛(branch unit)의 일 실시예를 도시한다.
도 15c는 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 도 14의 컴퓨터 시스템의 로드/저장 유닛의 일 실시예를 도시한다.
도 16은 본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 에뮬레이트된 호스트 컴퓨터 시스템의 일 실시예를 도시한다.
본 발명의 일 측면에 따라, 시스템 메모리에 직접적으로 억세스함에 있어서 사용가능한 주소를 제공하는 것에 사용하기 위해 미리 등록(pre-register)된 변환 포맷의 결정을 런타임(runtime)(예, 주소 변환 시간)시에 가능하게 함에 의해 메모리 억세스를 용이하게 하는 기능이 제공된다. 일 예에서, 초기 주소(initial address)는 어댑터의 펑션(여기서는 입력/출력(I/O) 주소로 일컬어짐)에 의해 제공되며, 펑션에 대해 등록된 변환 포맷은, 초기에 제공된 주소에 기초하여, 시스템 메모리에 억세스함에 있어서 사용가능한 주소를 제공하는데에 사용된다. 변환 포맷은, 사용될 변환 테이블(들)의 유형, 예를 들어, 어떠한 변환 테이블들도 페치되지 않을 것이라는 것, 또는 변환이 바이패스될 수 있다는 것을 표시할 수 있다.
본 발명의 하나 또는 그 이상의 측면들을 편입시키고 사용하기 위한 컴퓨팅 환경의 일 실시예가 도 1을 참조하여 설명된다. 일 예에서, 컴퓨팅 환경(100)은 IBM사에서 제공하는 System z®서버이다. 시스템 z®는 IBM사에서 제공하는 z/Architecture®에 기초한다. z/Architecture®에 관한 상세내용은 "z/Architecture Principles of Operation"(IBM 발행물 번호 SA22-7832-07, 2009년 2월)이라는 IBM® 발행물에 기술되어 있다. IBM®, System z® 및 z/Architecture®는 뉴욕, 아몽크, IBM사의 등록상표들이다. 본 명세서에 사용되는 다른 명칭들은 IBM사 또는 다른 회사들의 등록상표들, 상표들 또는 제품명일 수 있다.
일 예에서, 컴퓨팅 환경(100)은 하나 또는 그 이상의 중앙처리장치(CPUs)(102)를 포함할 수 있다. 중앙처리장치(102)는 메모리 컨트롤러(106)를 통해 시스템 메모리(104)(또 다르게는, 메인 메모리로도 일컬어짐)에 결합되어 있다. 시스템 메모리(104)에 억세스하기 위해, 중앙처리장치(102)는 시스템 메모리에 억세스하기 위해 사용되는 주소를 포함하는 읽기 또는 쓰기 요청을 송출(issue)한다. 요청에 포함되는 주소는 일반적으로 시스템 메모리에 억세스하기에는 직접적으로 사용가능하지 않다. 따라서, 그것은 시스템 메모리에 억세스함에 있어서 직접적으로 사용가능한 주소로 변환(translate)된다. 주소는 변환 메커니즘(XLATE)(108)을 통해 변환된다. 예를 들어, 주소는 동적 주소 변환(dynamic address translation, DAT)을 사용하여, 가상 주소에서 실제 또는 절대 주소로 변환된다.
변환된 주소를 포함하는 요청은 메모리 컨트롤러(106)에 의해 수신된다. 일 예에서, 메모리 컨트롤러(106)는 하드웨어를 포함하며, 시스템 메모리로의 억세스를 중재하고 또한 메모리의 일관성(consistency)을 유지하는데에 사용된다. 이러한 중재(arbitration)는 하나 또는 그 이상의 어댑터들(110)로부터 수신되는 요청들에 대한 것뿐만 아니라, CPU들(102)로부터 수신된 요청들에 대해 수행된다. 중앙처리장치와 마찬가지로, 어댑터들은 시스템 메모리로의 억세스 권한을 얻기 위해 시스템 메모리(104)로 요청들 송출한다.
일 예에서, 어댑터(110)는 주변 컴포넌트 인터커넥트(Peripheral Component Interconnect, PCI) 또는 PCI 익스프레스(PCIe) 어댑터이며, 이는 하나 또는 그 이상의 PCI 펑션들을 포함한다. PCI 펑션은 시스템 메모리로의 억세스를 요구하는 요청을 송출한다. 요청은 하나 또는 그 이상의 스위치들(예, PCIe 스위치들)(114)을 통해 입력/출력 허브(112)(예, PCI 허브)를 통해 전달된다. 일 예에서, 입력/출력 허브는 하나 또는 그 이상의 상태 머신들(state machines)을 포함하는 하드웨어로 이루어진다.
여기에 사용되는 바와 같이, 어댑터라는 용어는 어떤 유형의 어댑터(예를 들어, 스토리지 어댑터, 네트워크 어댑터, 처리 어댑터, PCI 어댑터, 크립토그래픽(cryptographic) 어댑터, 기타 유형의 입력/출력 어댑터들 등)든지 포함할 수 있다. 일 실시예에서, 어댑터는 하나의 어댑터 펑션을 포함한다. 그러나, 다른 실시예들에서, 어댑터는 복수의 어댑터 펑션들을 포함할 수 있다. 본 발명의 하나 또는 그 이상의 측면들은 어댑터가 하나의 어댑터 펑션을 포함하든지 복수의 어댑터 펑션들을 포함하든지 간에 적용가능하다. 더욱이, 일 예에서, 여기에 제시되는 예들에서, 어댑터는, 만약 그렇지 않은 것으로 언급되지 않는다면, 어댑터 펑션(예, PCI 펑션)과 서로 바꿔가며 사용된다.
입력/출력 허브는, 예를 들어, 스위치로부터 요청을 수신하는 루트 콤플렉스(root complex)(116)를 포함한다. 요청은 변환될 필요가 있을 수 있는 입력/출력 주소를 포함하고, 따라서, 루트 콤플렉스는 주소 변환 & 보호 유닛(118)으로 그 주소를 제공한다. 예를 들어, 이 유닛은, 이하에서 더 상세히 설명되는 바와 같이, 만약 필요하다면, I/O 주소를 시스템 메모리(104)에 억세스하는 데에 직접적으로 사용가능한 주소로 변환하기 위해 사용되는 하드웨어 유닛이다.
어댑터로부터 개시되는 요청 - 이 요청은 주소(변환된 주소, 또는 만약 변환이 필요하지 않다면 개시 어댑터로부터 개시 주소)를 포함함 - 은, 예를 들어, I/O-대-메모리 버스(120)를 통해 메모리 컨트롤러(106)로 제공된다. 메모리 컨트롤러는 중재(arbitration)를 수행하고, 적절한 시점에 시스템 메모리로 주소를 갖는 요청을 전달한다.
시스템 메모리 및 입력/출력 허브에 관한 추가 세부 내용들이 도 2를 참조하여 설명된다. 이 실시예에서, 메모리 컨트롤러는 도시되지 않는다. 그러나, I/O 허브는 직접적으로 또는 메모리 컨트롤러를 통해 시스템 메모리에 결합될 수 있다. 일 예에서, 시스템 메모리(104)는 하나 또는 그 이상의 주소 공간들(200)을 포함한다. 주소 공간은 컴퓨팅 환경의 특정 컴포넌트(예, 특정 어댑터)로 배정된 시스템 메모리의 특정 부분이다. 일 예에서, 주소 공간은 어댑터에 의해 개시된 직접 메모리 억세스(DMA)에 의해 접근가능하며, 따라서, 주소 공간은 여기서의 예들에서 DMA 주소 공간으로 언급된다. 그러나, 다른 예들에서, 직접 메모리 억세스는 주소 공간에 억세스하는 것에 사용되지 않는다.
나아가, 일 예에서, 시스템 메모리(104)는 주소 변환 테이블들(202)을 포함한다. 이 주소 변환 테이블들(202)은 시스템 메모리에 억세스하는 것에 직접적으로 사용가능하지 않은 하나의 주소로부터 직접적으로 사용가능한 하나의 주소로 변환하는 것에 사용된다. 일 실시예에서, DMA 주소 공간에 배정된 하나 또는 그 이상의 주소 변환 테이블들이 있고, 이들 하나 또는 그 이상의 주소 변환 테이블들은, 예를 들어, 그것이 배정된 주소 공간의 사이즈, 주소 변환 테이블들 자신들의 사이즈, 및/또는 억세스될 페이지(또는 메모리의 다른 유닛)의 사이즈에 기초하여 구성(configure)된다.
일 예에서, 주소 변환 테이블들의 계층(hierarchy)이 있다. 예를 들어, 도 2에 도시된 바와 같이, IOAT 포인터(218)(이하에서 설명됨)에 의해 지시되는 제1-레벨 테이블(202a)(예, 세그먼트 테이블), 및 제1-레벨 테이블의 엔트리(206a)에 의해 지시되는 제2의, 저(lower) 레벨 테이블(202b)(예, 페이지 테이블)이 있다. 수신된 주소(204)의 하나 또는 그 이상의 비트들은 특정 엔트리(206a)의 위치를 찾아내도록 테이블(202a) 내에서 인덱싱하는 것에 사용되며, 이 특정 엔트리(206a)는 특정 저 레벨 테이블(202b)을 표시한다. 그런 다음, 주소(204)의 하나 또는 그 이상의 다른 비트들은 그 테이블에서 특정 엔트리(206b)의 위치를 찾아내기 위해 사용된다. 이 예에서, 그 엔트리는 올바른(correct) 페이지의 위치를 찾아내기 위해 사용되는 주소를 제공하고, 주소(204)에서의 추가 비트들은 데이터 전송을 수행하기 위해 페이지에서 특정 위치(208)를 찾아내는 것에 사용된다. 즉, 엔트리(206b)에서의 주소 및 수신된 PCI 주소(204)의 선택된 비트들은 시스템 메모리에 억세스하기 위해 직접적으로 사용가능한 주소를 제공하는 것에 사용된다. 예를 들어, 이러한 직접적으로 사용가능한 주소는 엔트리(206b)에서 주소의 고차 비트들(high order bits)(예, 4K 페이지에서 비트들 63:12) 및 수신된 PCI 주소(예, 4k 페이지에 대해, 비트들 11:0)로부터 선택된 저차 비트들(low order bits)의 연결(concatenation)로부터 형성된다.
일 예에서, 특정 어댑터에 DMA 주소 공간을 배정하는 것은 운영체제이다. 이 배정은 등록 프로세스를 통해 수행되며, 이는 그 어댑터에 대한 디바이스 테이블 엔트리(210)의 초기화(예를 들어, 신뢰할 수 있는 소프트웨어를 통해)를 초래한다. 디바이스 테이블 엔트리는 I/O 허브(112)에 위치한 디바이스 테이블(211)에 위치한다. 예를 들어, 디바이스 테이블(211)은 I/O 허브의 주소 변환 및 보호 유닛 내에 위치한다.
일 예에서, 디바이스 테이블 엔트리(DTE)(210)는 다음과 같이 필드들의 번호를 포함한다.
포맷 212: 이 필드는 여러 가지 정보를 표시하는 복수의 비트들을 포함한다. 여러 가지 정보에는, 예를 들어, 주소 변환 테이블들의 고 레벨 테이블의 주소 변환 포맷을 포함한다. 주소 변환 포맷은 테이블의 레벨을 표시하고(예를 들어, 위의 예에서, 제1-레벨 테이블), 뿐만 아니라 시스템 메모리에 억세스함에 있어서 직접적으로 사용가능한 주소(예, CPU DAT 호환가능, I/O 확장 주소, 바이패스, 노 페치(no fetch) 등)를 제공하는 것에 사용될 선택된 주소 변환 포맷(변환 포맷으로도 일컬어짐)을 표시한다.
페이지 사이즈 213: 이 필드는 억세스될 페이지(또는 메모리의 다른 유닛)의 사이즈를 표시한다.
PCI 베이스 주소 214 및 PCI 한계 216: 이들 값들은 DMA 주소 공간을 정의하기 위해 사용되는 범위를 제공하며, 수신된 주소(예, PCI 주소)가 유효함을 검증한다.
IOAT(입력/출력 주소 변환) 포인터 218: 이 필드는 DMA 주소 공간을 위해 사용되는 주소 변환 테이블의 가장 높은 레벨에 대한 포인터를 포함한다.
다른 실시예들에서, DTE는 더 많거나, 더 적거나 다른 정보를 포함할 수 있다.
일 실시예에서, 특정 변환에 사용될 디바이스 테이블 엔트리는, 어댑터와 연관된 PCI 펑션(220)에 의해(및/또는 주소의 일부분에 의해) 송출된 요청에 위치한 요청자 식별자(requestor identifier, RID)를 사용하여, 그 위치가 찾아진다. 시스템 메모리에 억세스하기 위해 사용될 I/O 주소(예, 64 비트 PCIe 주소) 뿐만이 아니라, 요청자 ID(예, 예를 들어, 버스 넘버, 디바이스 넘버 및 펑션 넘버를 특정하는 16-비트 값)가 그 요청에 포함된다. RID 및 I/O 주소를 포함하는 요청은, 예를 들어, 스위치(114)를 통해, 예를 들어, CAM(contents addressable memory)(230)에 제공되는데, 이 CAM(230)은 인덱스 값을 제공하는데에 사용된다. 예를 들어, CAM은 다수의 엔트리들을 포함한다. 다수의 엔트리들 각각의 엔트리는 디바이스 테이블 내에서 인덱스에 대응한다. 각각의 CAM 엔트리는 RID의 값을 포함한다. 만약, 예를 들어, 수신된 RID가 CAM 내 엔트리에 포함된 값과 매치된다면, 대응하는 디바이스 테이블 인덱스는 그 디바이스 테이블 엔트리의 위치를 찾아내는 것에 사용된다. 즉, 디바이스 테이블 엔트리(210)의 위치를 찾아내기 위해 CAM의 출력은 디바이스 테이블(211) 내에서 인덱싱하는데에 사용된다. 만약 매치되지 않으면, 수신된 패킷은 수행되고 있는 시스템 메모리에 대한 아무런 억세스 권한을 갖지 않으므로 폐기된다. (다른 실시예들에서, CAM 또는 다른 룩업이 요구되지 않으며 RID가 인덱스로서 사용된다.)
계속해서, 디바이스 테이블 엔트리 내 필드들은 주소 변환 테이블들의 구성 및 주소의 유효성(validity)을 보장하는 것에 사용된다. 예를 들어, 요청 내 인바운드 주소(inbound address)는, 주소를 제공한 요청의 RID를 사용하여 위치가 찾아진 디바이스 테이블 엔트리에 저장된 PCI 한계(216) 및 PCI 베이스 주소(214)에 의해 정의된 바운드들(bounds) 내에 있다는 것을 보장하기 위해, I/O 허브의 하드웨어(예, 주소 변환 및 보호 유닛)에 의해 체크된다. 이는 주소가 앞서 등록된 범위 내에 있고 주소에 대한 주소 변환 테이블들이 유효하게 구성되는 것을 보장한다.
일 실시예에서, 초기에, 시스템 메모리 주소(즉, 시스템 메모리에 억세스하기 위해 직접적으로 사용가능한 주소)를 획득하기 위해, 등록 프로세스가 수행된다. 이 등록 프로세스는 특정 주소 공간을 등록하고, 따라서 특정 어댑터 펑션과 같은 특정 요청자와 함께 연관된 주소 변환 테이블들을 등록한다. 이 등록 프로세스의 개요의 일 예는 도 3a를 참조하여 기술된다.
도 3a를 참조하면, 처음에, 시스템 메모리에 결합된 중앙처리장치들 중 하나 내에서 실행 중인 운영체제는 어댑터가 억세스할 주소 공간의 위치 및 사이즈를 결정한다(단계 300). 일 예에서, 주소 공간의 사이즈는 운영체제에 의해 세트된 PCI 베이스 주소 및 PCI 한계에 의해 결정된다. 운영체제는 하나 또는 그 이상의 기준을 사용하여 그 베이스(base) 및 한계(limit)를 결정한다. 예를 들어, 만약 운영체제가 CPU 가상 주소들에 대한 직접적인 PCI 주소 맵(addresses map)을 갖기를 원한다면, 그 베이스 및 한계는 그와 같이 세트된다. 추가 예에서, 만약 어댑터들 및/또는 운영체제 이미지들 사이의 추가 아이솔레이션이 요구된다면, 사용되고 있는 주소들은 겹치지 않고(non-overlapping) 분리된 주소 공간들을 제공하도록 선택된다. 위치는 또한 운영체제에 의해 특정되며, 예를 들어, 어댑터의 특징들에 기초한다.
나아가, 등록 프로세스의 일부로서, 어댑터 펑션에 대해 어떤 주소 변환 포맷이 등록될 것인지에 관한 결정이 이뤄진다(단계 302). 즉, 시스템 메모리에 억세스함에 있어서 직접적으로 사용가능한 어댑터 펑션에게 주소들을 제공하기 위해 어느 포맷이 사용될 것인지에 관한 결정이 이뤄진다.
본 발명의 일 측면에 따라, 복수의 주소 변환 포맷들이 이용가능하고, 그 복수의 포맷들로부터, 운영체제는 어댑터 펑션에 대해 하나의 포맷을 선택한다. 이 선택은, 예를 들어, 주소 공간들의 구성, 어댑터 유형 등에 기초한다. 여러 가지 가능한 포맷들은 다음을 포함한다.
a) 주소 변환이 바이패스되는 바이패스 포맷(bypass format). 이 포맷은 등록이 수행 중인 어댑터가 신뢰 어댑터(trusted adapter)일 때 사용될 수 있다. 예를 들어, 만약 어댑터의 하드웨어 디자인이 충분히 강건(robust)하고 주소들이 손상될 수 없도록 보호된다면, 어댑터는 신뢰 어댑터로 간주된다. 예를 들어, 자체적으로 변환 및 보호 메커니즘들을 제공하는 내부적으로 개발된 어댑터, 또는 신뢰 펌웨어(trusted firmware)에 의해 관리되는 어댑터는 신뢰 어댑터로 간주될 수 있다.
여기에 사용되는 바와 같이, 펌웨어는, 예를 들어, 프로세서의 마이크로코드, 밀리코드 및/또는 매크로코드를 포함한다. 그것은, 예를 들어, 고 레벨 머신 코드의 구현에 사용되는 데이터 구조들 및/또는 하드웨어-레벨 명령들을 포함한다. 일 실시예에서, 그것은, 예를 들어, 일반적으로 마이크로코드 - 이는 기초 하드웨어에 대해 특정되는 마이크로코드 또는 신뢰 소프트웨어를 포함하고 또한 시스템 하드웨어로의 운영체제 억세스를 컨트롤함 - 로서 전달되는 사유 코드(proprietary code)를 포함한다.
예를 들어, System Z® 상에 I/O 어댑터들을 원래부터 부착함(native attachment)으로써, I/O 주소 변환(IOAT)은 어댑터에 의해 시스템 메모리의 DMA 억세스의 보호 및 아이솔레이션을 제공하도록 채용된다. 그러나, 위에서 설명된 것들을 포함하여, 이러한 추가 레벨의 보호를 필요로 하지 않는 어댑터들의 클래스들이 있다. 따라서, 그러한 어댑터들에 대해, 바이패스 포맷이 선택될 수 있다.
b) 어댑터로부터의 초기 요청에 포함되는 주소가 어떠한 변환 테이블들도 페치하지 않고서도 사용가능한 노 페치 포맷(no fetch format). 메모리가 인접하고, 페이지 사이즈가 알려지고, 또한 시스템 메모리로부터의 어떤 변환 테이블들의 노 페치(no fetch)가 필요한 제한된 영역(예, 4k 또는 1M 페이지)에 대해 주소가 필요할 때, 이러한 노 페치 포맷이 선택될 수 있다. 시스템 메모리에 억세스하기 위해 사용가능한 주소(즉, 노 페치 포맷이 선택될 때의 결과 주소)는 IOAT 포인터의 주소로부터 유도된다. 예를 들어, 4k 페이지 사이즈에 대해, PCI 주소의 저 차 비트(예, 비트들 11:0)은 시스템 메모리에 억세스하는 것에 사용가능한 결과 주소를 획득하기 위해 IOAT 포인터의 상위(upper) 52 비트들과 연결된다.
c) I/O 주소들을 변환하기 위해 사용되는 변환 테이블들이 CPU DAT 변환들을 위해 사용되는 변환 테이블들과 호환가능한, CPU DAT 호환가능 포맷. 즉, CPU 동적 주소 변환을 위해 이미 사용되고 있는 것과 유사하고 호환가능한, 주소 변환 테이블들이 사용될 것이다. 이는 이들 유형들의 테이블들을 사용하는 것과 친밀한 그들 운영체제들에 대한 사용 편의를 제공하며, CPU와 I/O 어댑터 사이에서 테이블들의 공유를 가능하게 하며, 그것의 페이지가능 게스트들의 DMA 공간들을 관리함에 있어서 일정 운영체제(예, z/VM®) 효율성을 제공한다. 이용가능한 여러 가지 CPU DAT 호환가능 포맷들이 있으며, 이는 이하에서 도 5c를 참조하여 더 상세히 설명된다.
d) 확장된 주소 변환 테이블들이 I/O 주소 변환들을 위해 사용되는, I/O 확장된 주소 변환 포맷(I/O extended address translation format). 이 포맷으로, 주소 변환 테이블들은 I/O 동작들에 전용되고, 그 사이즈가 CPU 주소 변환에 일반적으로 사용되는 것보다 더 클 수 있다. 예를 들어, 1M 또는 훨씬 더 큰 페이지 테이블들 및/또는 다른 변환 테이블들이 있을 수 있다. 나아가, 페이지 테이블들을 포함하여, 서로 다른 레벨의 변환 테이블들의 사이즈들은 서로 간에 다를 수 있고, 그것들은 페이지들 자신들과 다를 수 있다. 전통적인 사이즈들을 증가시키는 것은 버스 트랜잭션들을 감소시키며 I/O 변환 캐싱 향상을 돕는다. 페이지의 사이즈 뿐만이 아니라 페이지 테이블 및 다른 변환 테이블들의 사이즈는 얼마나 많은 레벨들의 변환이 필요한지를 결정할 것이다. 다른 I/O 확장된 주소 변환 포맷들의 예들은 도 5d를 참조하여 이하에서 더 상세히 설명된다.
등록이 수행되고 있는 어댑터 펑션에 대해 사용될 복수의 이용가능한 주소 변환 포맷들로부터 하나의 주소 변환 포맷을 선택하기 위해 운영체제에 의해 수행되는 프로세스의 일 실시예는, 도 3b를 참조하여 설명된다. 일 예에서, 이러한 선택을 행하기 위해, 운영체제는 자신의 내부 구조들(internal structures), 어떻게 그것이 어드레싱된(addressed) 메모리를 원하는지, 어댑터의 유형 등을 고려한다.
도 3b를 참조하면, 처음에, 이 예에서, 등록이 수행되고 있는 어댑터가 신뢰 어댑터인지에 관한 결정이 이뤄진다(조사 310). 이 결정은, 예를 들어, 데이터 구조(예, 메모리에 저장된)에서 표시(indication)를 체크함으로써 이뤄진다. 만약 운영체제가 그 어댑터가 신뢰 어댑터라고 결정하면, 변환이 바이패스될 것인지에 관한 추가 결정이 이뤄진다(단계 312). 예를 들어, 운영체제는, 예를 들어, 저장된 인디케이터에 기초하여, 바이패스가 받아들여질 수 있는지를 결정한다. 만약 운영체제가 변환이 바이패스될 것이라고 결정하면, 바이패스 포맷이 선택되고(단계 313), 요청자에 의해 제공되는 주소는 시스템 메모리에 억세스하기 위해 직접적으로 사용가능하다.
조사 310으로 돌아가서, 그러나, 만약 어댑터가 신뢰 어댑터가 아니거나, 만약 바이패스가 선택되지 않을 것이라면(조회 312), 노 페치 포맷이 선택될 것인지에 관한 추가 결정이 이뤄진다(조사 314). 이 선택을 위해, 운영체제는, 예를 들어, 메모리가 인접한지, 그리고 페이지(또는 메모리의 다른 유닛)의 사이즈를 고려한다. 만약 구성이 노 페치 포맷을 허용하면, 어떤 유효성(validity) 체크들이 패스되는 것을 가정할 때, 노 페치 포맷이 선택된다(단계 316). 그러므로, PCI 요청의 결과 주소는 IOAT 포인터의 주소로부터 직접적으로 유도된다.
조사 314로 돌아가서, 만약 노 페치 포맷이 선택되지 않으면, 요청이 CPU DAT 호환성(compatibility) 주소 변환 테이블들을 사용할 것인지에 관한 추가 결정이 이뤄진다(조사 318). 다시, 운영체제는 그것이 CPU DAT 호환가능 포맷을 원하는지를 결정함에 있어서 어드레싱가능성(addressibility) 및 그것의 구조들을 고려한다. 만약 이것이 원하는 포맷이라면, 어떤 유효성 체크들이 패스되는 것을 가정할 때, CPU DAT 호환가능 포맷이 선택된다(단계 320). 특히, 이 예에서, 하나의 CPU DAT 호환가능 포맷은 하나 또는 그 이상의 가용(available) 포맷들로부터 선택되며, 이는 이하에서 설명된다.
그러나, 만약 CPU DAT 호환성이 선택되지 않으면, I/O 확장된 주소 변환 포맷이 요구되는지에 관한 추가 결정이 이뤄진다(조사 322). 예를 들어, 이는, 다시 한번, 사용될 구조들 및 메모리 어드레싱에 기초하여 결정된다. 만약 I/O 확장된 주소 변환 포맷이 요구되면, 어떤 유효성 체크들이 패스된다고 가정할 때, I/O 확장된 주소 변환 포맷이 선택된다(단계 324). 구체적으로는, 이 예에서, 하나의 I/O 확장된 주소 변환 포맷은, 이하에 설명되는 바와 같이, 하나 또는 그 이상의 가용 포맷으로부터 선택된다.
그러나, 만약 모든 조사들에 대해 아니오(no)로 응답되면, 요청자를 대신하여 운영체제에 의해 특정 포맷이 선택된다(단계 326). 예를 들어, 디폴트 포맷이 선택될 수 있다. 이 디폴트 포맷은 CPU DAT 호환가능 포맷, I/O 확장된 주소 변환 포맷 또는 또 다른 포맷 - 예를 들어, 단지 I/O를 위해서 셋업되지만 CPU DAT 포맷 테이블들에 더 밀접하게 관련되는 주소 변환 테이블들 - 일 수 있다. 많은 가능성들이 존재한다. 나아가, 비록 이 예에서는 도 3b의 조사들이 특정 순서로 되어 있지만, 다른 예들에서, 그것들은 다른 순서들로 되어 있을 수 있다.
도 3a로 돌아가서, 계속해서, 주소 변환 테이블들이 요구되는 것을 가정할 때, 그 DMA 주소 공간을 커버하기 위해 하나 또는 그 이상의 주소 변환 테이블들이 생성된다(단계 304). 일 예에서, 그러한 생성은 테이블들을 빌드(build)하고, 그 테이블 엔트리들 내에 적절한 주소들을 배치하는 것을 포함한다. 일 예로서, 변환 테이블들 중 하나는 512개의 64-비트 엔트리들을 갖는 4k 페이지 테이블이며, 여기서 각각의 엔트리는 배정된 주소 공간과 호환가능한 4k 페이지 주소를 포함한다.
그런 다음, 어댑터에 대해 DMA 주소 공간이 등록된다(단계 306). 이는 도 3c를 참조하여 더 상세히 설졍된다. 이 예에서, 어댑터별로 하나의 PCI 펑션이 있고, 따라서 어댑터별로 하나의 요청자 ID가 있는 것으로 가정된다. 이 로직은, 예를 들어, 운영체제 요청에 응답하여, 시스템 메모리에 결합된 중앙처리장치에 의해 수행된다.
도 3c를 참조하면, 처음에, 일 실시예에서, 어댑터의 요청자 ID에 대응할 가용 디바이스 테이블 엔트리가 선택된다(단계 350). 즉, 요청자 ID는 디바이스 테이블 엔트리의 위치를 찾아내기 위해 사용될 것이다.
또한, PCI 베이스 주소 및 PCI 한계는 디바이스 테이블 엔트리에 저장된다(단계 352). 나아가, 가장 높은 레벨의 주소 변환 테이블의 포맷은 디바이스 테이블 엔트리의 포맷 필드에 저장된다(단계 354). 예를 들어, 포맷 필드는 복수의 비트들을 포함하고, 그들 비트들 중 하나 또는 그 이상은 가장 높은 레벨의 테이블의 포맷 및 그 선택된 주소 변환 포맷(예, 세그먼트 레벨, CPU DAT 호환가능)을 표시한다. 다른 실시예에서, 하나 또는 그 이상의 비트들은 가장 높은 레벨을 표시하고, 하나 또는 그 이상의 다른 비트들은 결정된 변환 포맷(예, 바이패스, 노 페치, 특정 CPU DAT 호환가능 포맷), 특정 I/O 확장된 주소 변환 포맷 등)을 표시한다.
또한, 만약 있다면, 디바이스 테이블 엔트리에, 가장 높은 레벨의 주소 변환 테이블(또는 노 페치의 경우, 페이지)을 가리키는 것에 사용되는 입력/출력 주소 변환(IOAT) 포인터가 저장된다(단계 356). 이는 등록 프로세스를 완료시킨다.
등록을 수행하는 것에 응답하여, 디바이스 테이블 엔트리뿐만이 아니라, 만약 있다면, DMA 주소 공간 및 대응하는 주소 변환 테이블들이 사용을 위해 준비된다. 시스템 메모리에 억세스하기 위해, 어댑터 펑션과 같이 요청자에 의해 송출된 요청을 처리하는 것에 관한 세부 내용은 도 4를 참조하여 설명된다. 이하에서 설명되는 처리는 I/O 허브에 의해 수행된다. 일 예에서, 그것은 로직을 수행하는 I/O 허브의 주소 변환 및 보호 유닛이다.
일 실시예에서, 처음에, DMA 요청이 입력/출력 허브에서 수신된다(단계 400). 예를 들어, PCI 펑션은, 예컨대, PCI 스위치를 통해 PCI 허브로 전달되는 요청을 송출한다. 요청 내 요청자 ID를 사용하여, 적절한 디바이스 테이블 엔트리의 위치가 찾아진다(단계 402). 그런 다음, 디바이스 테이블 엔트리가 유효한지에 관한 결정이 이뤄진다(조사 404). 일 예에서, 유효성은 엔트리 자체에서 유효성 비트를 체크함으로써 결정된다. 예를 들어, 이 비트는, 운영체제에 의한 인에이블 펑션 요청의 실행에 응답하여, 세트된다. 만약 인에이블되면, 그 비트는, 예를 들어 1(즉 유효)로 세트되고, 그렇지 않으면, 그것은 0(예, 무효)으로 남는다. 다른 예에서, 그 비트는, 등록 프로세스가 완료될 때 세트될 수 있다.
만약 디바이스 테이블 엔트리가 무효이면, 에러가 제공된다(단계 405). 만약 그렇지 않으면, 요청에서 제공되는 PCI 주소가 디바이스 테이블 엔트리에 저장된 PCI 베이스 주소보다 작은지에 관한 추가 결정이 이뤄진다(조사 406). 만약 예라면, 주소는 유효한 범위 바깥에 있고 에러가 제공된다(단계 407). 그러나, 만약 PCI 주소가 베이스 주소와 같거나 더 크다면, PCI 주소가 디바이스 테이블 엔트리에서 PCI 한계보다 더 큰지에 관한 또 다른 결정이 이뤄진다(조사 408). 만약 PCI 주소가 한계보다 더 크면, 다시 한번, 에러가 제공된다(단계 409). 왜냐하면 그 주소는 유효한 범위 밖에 있기 때문이다. 그러나, 만약 주소가 유효한 범위 내에 있다면, 처리는 계속된다.
일 예에서, 디바이스 테이블 엔트리에 특정된 주소 변환 포맷이 바이패스 변환을 표시하는지에 관한 결정이 이뤄진다(조사 410). 만약 그렇다면, 주소는 변환 엔트리들의 어떠한 페치도 없이 메모리에 억세스하기 위해 I/O 버스를 통해 메모리 컨트롤러로 직접적으로 패스된다. I/O 허브는 주소에서 데이터의 페치/저장을 가능하게 하기 위해 처리를 계속한다(단계 426).
조사 410으로 돌아가서, 만약 포맷이 바이패스를 표시하지 않으면, 주소 변환 테이블들의 어떤 페치들을 요구함이 없이 IOAT 포인터에 기초하여 메모리에 직접적으로 억세스할 수 있다는 것을 그 포맷이 표시하는지에 관한 추가 결정이 이뤄진다(조사 412). 만약 노 페치가 표시되면, 그 결과 주소는 IOAT 포인터로부터 유도되고, 시스템 메모리로부터 주소 변환 테이블들의 어떠한 페칭도 요구되지 않는다(단계 414). 그 결과 주소는 메모리 컨트롤러로 보내지고, 페이지 및 페이지 내 특정 엔트리의 위치를 찾아내는데에 사용된다. 예를 들어, 만약 페이지 사이즈가 4k이면, 비트들 11:0은 IOAT 포인터로부터의 오프셋으로서 사용된다. 그 페이지 엔트리에서 데이터의 페치/저장을 가능하게 하기 위해 I/O 허브는 처리를 계속된다(단계 426).
조사 412로 돌아가서, 한편, 만약 변환 테이블들의 사용이 요구되면, 변환 테이블의 유형(예, CPU DAT 호환가능 또는 I/O 확장된 주소 변환)을 결정하기 위해 그리고 주소 변환을 위해 사용될 주소에서 PCI 주소 비트들을 결정하기 위해, 디바이스 테이블 엔트리에 제공되는 포맷이 사용된다(단계 416). 예를 들어, 만약 포맷이 4k 페이지들 및 4k 주소 변환 테이블들 - 이것들은 이하에 설명됨 - 을 갖는 I/O 확장된 주소 변환 포맷을 표시하고, 상위 레벨 테이블이 4k 페이지들을 갖는 제1-레벨 테이블이라면, 주소의 비트들 29:21은 제1-레벨 테이블 내에서 인덱싱하기 위해 사용되며, 비트들 20:12은 페이지 테이블 내에서 인덱싱하기 위해 사용되며, 비트들 11:0은 페이지 내에서 인덱싱하기 위해 사용된다. 사용되는 비트들은, 주어진 사이즈 페이지 또는 테이블 내에서 인덱싱하는 데에 얼마나 많은 비트들이 필요한가에 달려 있다. 예를 들어, 바이트 레벨 어드레싱을 갖는 4k 페이지에 대해서는, 12 비트들은 4096 바이트들을 어드레싱하는 데에 사용되고, 512 엔트리들(각각은 8 바이트임)을 갖는 4k 페이지 테이블에 대해서는, 512 엔트리들에 어드레싱하기 위해 9 비트들이 사용된다.
다음으로, PCI 허브는 적절한 주소 변환 테이블 엔트리를 페치한다(단계 418). 예를 들어, 처음에, 가장 높은 변환 테이블은 디바이스 테이블 엔트리의 IOAT 포인터를 사용하여 위치가 찾아진다. 그런 다음, 주소의 비트들(유효성을 위해 사용되고 비변환(not translation)되는 고차 비트들 이후의 것들, 예를 들어, 위의 예에서 비트들 29:21임)은 그 테이블 내에서 특정 엔트리의 위치를 찾아내는데에 사용된다.
그런 다음, 예를 들어, 디바이스 테이블에서 제공되는 포맷에 기초하여, 그 위치가 찾아진 주소 변환 엔트리가 올바른 포맷을 갖는지에 관한 결정이 이뤄진다(조사 420). 예를 들어, 디바이스 테이블 엔트리 내 포맷은 주소 변환 엔트리에 표시된 포맷과 비교된다. 만약 같으면, 디바이스 테이블 엔트리 내 포맷은 유효하다. 만약 아니라면, 에러가 표시되고(단계 422), 그렇지 않으면, 이것이 처리될 마지막 테이블인지에 관한 결정으로 처리는 계속된다(조사 424). 즉, 실제 또는 절대 주소를 획득할 필요가 있는 다른 주소 변환 테이블들이 있는지 또는 가장 낮은 레벨의 테이블 엔트리의 위치가 찾아졌는지에 관한 결정이 이뤄진다. 이 결정은 제공된 포맷 및 이미 처리된 테이블들의 사이즈에 기초하여 이뤄진다. 만약 그것이 마지막 테이블이 아니라면, 처리는 단계 418로 계속된다. 그렇지 않으면, 변환된 주소에서 데이터의 페치 또는 저장을 가능하게 하도록 I/O 허브는 처리를 계속한다(단계 426). 예를 들어, I/O 허브는 결정된 주소 - 이는 초기 주소 및 선택된 변환 포맷에 기초하여 결정됨 - 를 메모리 컨트롤러로(또는 직접적으로 메모리로) 전달하는데, 메모리 컨트롤러는 그것을 DMA 메모리로부터/DMA 메모리로 데이터를 페치 및/또는 저장하기 위해 사용한다.
변환 테이블들 및 다른 변환 포맷들의 사용에 관한 추가 세부내용은 도 5a-5d를 참조하여 설명된다. 일 예에서, 도 5a-5b를 참조하여 보여지는 바와 같이, 변환의 레벨들의 수, 그에 따라, 변환을 수행하는데에 요구되는 페치들의 수는, 예를 들어, 변환동안 주소의 고차 비트들을 무시하고 또한 변환 테이블들을 횡단할 저차 비트들만을 단지 사용함으로써, 감소된다. 고차 비트들 및 저차 비트들의 지정은, 예를 들어, 어댑터에 배정된 DMA 주소 공간의 사이즈에 기초한다. 부분 주소 대(versus) 전체 주소의 사용은 다음의 예들에서 더 보여진다.
먼저, 도 5a를 참조하면, 주소 변환/메모리 억세스에 전체 주소가 사용되는 일 예가 도시되어 있다. 이러한 종래의 기술에서, 페이지 테이블을 포함하여, 6 레벨의 변환 테이블들이 필요하다. 가장 높은 레벨의 테이블(예, 이 예에서 제5-레벨의 테이블)의 시작은 IOAT 포인터에 의해 지시되고, 그런 다음 PCI 주소의 비트들은 테이블에서 엔트리의 위치를 찾아내는 데에 사용된다. 각각의 변환 테이블 엔트리는 저(lower) 레벨 변환 테이블의 시작을 가리키거나 페이지를 가리킨다(예, 제5-레벨 테이블에서 엔트리는 제4-레벨 테이블의 시작을 가리킨다.).
이 예에서, DMA 주소 공간(DMAAS)은 사이즈가 6M이고, 각각의 테이블은 512개의 8-바이트 엔트리들의 최대값을 갖는 4k 바이트들이다(주소의 사이즈에 기초하여 128 엔트리들을 단지 지원하는 제5-레벨 테이블을 제외함). 주소는, 예를 들어, 64 비트들, 즉, FFFF C000 0009 C600이다. 제5-레벨 테이블의 시작은 IOAT 포인터에 의해 지시되고 PCI 주소의 비트들 63:57은 제4-레벨 테이블의 시작의 위치를 찾아내기 위해 제5-레벨의 테이블 내에서 인덱싱하는 데에 사용되며, PCI 주소의 비트들 56:48은 제3-레벨 테이블의 시작의 위치를 찾아내기 위해 제4-레벨 테이블 내에서 인덱싱하는 데에 사용되며, 비트들 47:39는 제2-레벨 테이블의 시작의 위치를 찾아내기 위해 제3-레벨 테이블 내에서 인덱싱하는 데에 사용되고, 비트들 38:30은 제1-레벨 테이블의 시작의 위치를 찾아내기 위해 제2-레벨 테이블 내에서 인덱싱하는 데에 사용되며, 비트들 29:21은 페이지 테이블의 시작의 위치를 찾아내기 위해 제1-레벨 테이블 내에서 인덱싱하는 데에 사용되며, 비트들 20:12는 페이지의 시작의 위치를 찾아내기 위해 페이지 테이블을 인덱싱하는 데에 사용되며, 비트들 11:0은 4k 페이지에서 엔트리의 위치를 찾아내는 데에 사용된다. 따라서, 이 예에서, 주소 비트들 모두가 변환/억세스를 위해 사용된다.
이는 도 5b의 예와는 대조적이다. 도 5b에서 주소 공간은 동일한 사이즈(예, 6M)이고 주소가 동일하지만, 변환 기술은 변환동안 주소 비트들의 일부를 무시한다. 이 예에서는, 주소의 비트들 63:30은 변환에 대해서는 무시된다. IOAT 포인터는 제1-레벨 테이블의 시작을 가리키고, PCI 주소의 비트들 29:21은 페이지 테이블의 시작의 위치를 찾아내기 위해 제1-레벨 테이블 내에서 인덱싱하는 데에 사용되며, 비트들 20:12는 페이지의 시작의 위치를 찾아내기 위해 적절한 페이지 테이블 내에서 인덱싱하는 데에 사용되며, 비트들 11:0은 4k 페이지 내에서 인덱싱하는 데에 사용된다.
도시된 바와 같이, 제1-레벨 테이블(500)은 세 개의 엔트리들(502)을 포함하며, 이 엔트리들 각각은 세 개의 페이지 테이블들(504) 중 하나로 주소를 제공한다. 페이지 테이블들의 수, 그에 따라, 다른 레벨 테이블들의 수는, 예를 들어, DMA 주소 공간의 사이즈, 변환 테이블들의 사이즈, 및/또는 페이지들의 사이즈에 의존한다. 이 예에서, DMA 주소 공간은 6M이고, 각각의 페이지 테이블은 4k이며, 512 엔트리들까지 갖는다. 그러므로, 각각의 페이지 테이블은 2M의 메모리(4k X 512 엔트리들)까지 매핑할 수 있다. 따라서, 6M 주소 공간을 위해 세 개의 페이지 테이블들이 요구된다. 제1-레벨 테이블은 각각의 페이지 테이블에 대해 하나씩인 세 개의 엔트리들을 보유할 수 있으며, 따라서, 주소 변환 테이블들의 더 이상의 레벨들은, 이 예에서는 필요하지 않다.
또한, 위에서 설명된 바와 같이, 주소 변환 테이블들의 서로 다른 포맷들이 주소 변환을 위해 사용될 수 있고, 포맷들 내에는 변경들이 있을 수 있다. 예를 들어, 여러 가지 CPU DAT 호환가능 포맷들이 있을 수 있는데, 그것의 예들은 도 5c를 참조하여 설명된다. 도시된 바와 같이, 예를 들어, 하나의 CPU DAT 호환가능 포맷은 4k 페이지 CPU DAT 호환가능 포맷(550)이고, 또 하나는 1M 페이지 CPU DAT 호환가능 포맷(552)이다. 도시된 비트들의 수는 그 페이지 또는 테이블 내에서 인덱싱하기 위해(또는 그렇지 않으면, 그 페이지 또는 테이블 내에서 엔트리의 위치를 찾아내기 위해) 사용되는 주소 비트들의 수이다. 예를 들어, PCI 주소의 12 비트들(554)은 4k 페이지(556) 내에서 바이트 오프셋으로서 사용되고, 8 비트들(558)은 페이지 테이블(560) 내에서 인덱스로서 사용되며, 11 비트들(562)은 세그먼트 테이블(564) 내에서 인덱스로서 사용된다. 그 주소 변환 테이블에 의해 지원되는 주소 공간의 최대 크기는 지정된 주소 변환 테이블 아래에 위치한다. 예를 들어, 페이지 테이블(560)는 1M DMA 주소 공간을 지원하며, 세그먼트 테이블(564)는 2G DMA 주소 공간을 지원한다. 도 5d에서 뿐만이 아니라 이 도면에서, K는 킬로바이트(kilobytes)이고, M은 메가바이트(megabytes)이며, G는 기가바이트(gigabytes)이고, T는 테라바이트(terabytes)이며, P는 페타바이트(petabytes)이고, E는 엑사바이트(exabytes)이다.
도시된 바와 같이, 페이지의 사이즈가 증가함에 따라, 변환 테이블들의 레벨들의 수는 감소한다. 예를 들어, 4k 페이지(556)에 대해, 페이지 테이블이 필요하지만, 그것은 1M 페이지에 대해서는 필요하지 않다. 다른 예들 및 변경들이 가능하다.
I/O 확장된 주소 변환 포맷들의 여러 가지 예들은 도 5d에 도시되어 있다. 예를 들어, 다음의 포맷들이 보여진다. 4k 페이지들을 갖는 4k 주소 변환 테이블(570), 4k 페이지들을 갖는 1M 주소 변환 테이블들(572), 및 1M 페이지들(574)을 갖는 1M 주소 변환 테이블들. CPU DAT 호환가능 포맷들에서와 같이, 열거된 비트들의 수는 특정 테이블에서 엔트리의 위치를 찾아내는 데에 사용되는 그러한 비트들이다. 예를 들어, 참조 번호 576에서, 12 비트들은 4k 페이지 내에서 오프셋이다. 이와 유사하게, 참조 번호 578에서, 9 비트들은 I/O 페이지 테이블 내에서 인덱싱하는데에 사용된다. 이 I/O 페이지 테이블은 2M의 사이즈를 갖는 DMA 주소 공간을 감안한다. 많은 다른 예들이 존재한다.
하나의 구체적인 실시예에서, 어댑터에 대한 DMA 주소 공간의 등록을 수행하기 위해, 변경 PCI 펑션 컨트롤들(MPFC) 명령으로 일컬어지는 명령이 사용된다. 예를 들어, 운영체제는 그것이 사용하기를 원하는 주소 변환 포맷이 어느 것인지를 결정하고, 그 포맷을 위해 주소 변환 테이블들을 빌드하고, 그런 다음 명령의 오퍼랜드(operand)로서 포함된 그 포맷으로 MPFC 명령을 송출한다. 일 예에서, 명령의 포맷 및 다른 오퍼랜드들은 펑션 정보 블록(이하에서 설명됨)에 포함되는데, 이 펑션 정보 블록은 명령의 오퍼랜드이다. 그런 다음, 펑션 정보 블록은 DTE를, 그리고, 일 실시예에서, 선택적으로 어댑터의 동작 파라미터들을 포함하는 펑션 테이블 엔트리(FTE)를, 업데이트하기 위해 사용된다.
이 명령과 관련된 세부내용들의 일 실시예, 구체적으로는 등록 프로세서는 도 6a-9를 참조하여 설명된다. 도 6a를 참조하면, 변경 PCI 펑션 컨트롤 명령(600)은, 예를 들어, 변경 PCI 펑션 컨트롤 명령을 표시하는 op code(602), 동작 파라미터들이 설정되고 있는 어댑터 펑션에 관한 여러 가지 정보가 포함되는 위치를 특정하는 제1 필드(604), 및 PCI 펑션 정보 블록(FIB)이 페치되는 위치를 특정하는 제2 필드(606)를 포함한다. 필드 1 및 2에 의해 지정된 위치들의 내용들은 이하에서 더 설명된다.
일 실시예에서, 필드 1은 여러 가지 정보를 포함하는 범용 레지스터(general register)를 지정한다. 도 6b에 도시된 바와 같이, 레지스터의 내용은, 예를 들어, 수행되고 있는 변경 명령을 대신하여 어댑터 펑션의 핸들을 식별하는 펑션 핸들(610), 그 펑션 핸들에 의해 지정된 어댑터 펑션과 연관된 시스템 메모리 내 주소 공간을 지정하는 주소 공간(612); 그 어댑터 펑션에 대해 수행될 동작을 특정하는 동작 컨트롤(614); 및 그 명령이 미리 정의된 코드로 완료될 때 그 명령에 관한 상태를 제공하는 상태(status)(616)를 포함한다.
일 실시예에서, 펑션 핸들은, 예를 들어, 그 핸들이 인에이블되는지를 나타내는 인에이블 인디케이터(enable indicator), 어댑터 펑션을 식별하는 펑션 넘버(function number)(이는 정적 식별자(static identifier)이고 펑션 테이블 내에서 인덱싱하기 위해 사용될 수 있음); 및 이 펑션 핸들의 특정 인스턴스를 특정하는 인스턴스 넘버(instance number)를 포함한다. 각각의 어댑터 펑션에 대해 하나의 펑션 핸들이 있으며, 이는 펑션 테이블 내에서 펑션 테이블 엔트리(function table entry, FTE)의 위치를 찾아내는데에 사용된다. 각각의 펑션 테이블 엔트리는 동작 파라미터들 및/또는 그것의 어댑터 펑션과 연관된 기타 정보를 포함한다. 일 예로서, 펑션 테이블 엔트리는 다음과 같은 것들을 포함한다.
인스턴스 넘버 : 이 필드는 펑션 테이블 엔트리와 연관된 어댑터 펑션 핸들의 특정 인스턴스를 표시한다.
디바이스 테이블 엔트리(Device Table Entry, DTE) 인덱스 1...n : 하나 또는 그 이상의 디바이스 테이블 인덱스들이 있을 수 있으며, 각각의 인덱스는 디바이스 테이블 엔트리(DTE)의 위치를 찾아내기 위한 테이블 내의 인덱스이다. 어댑터 펑션별로 하나 또는 그 이상의 디바이스 테이블 엔트리들이 있으며, 각각의 엔트리는 어댑터 펑션의 요청들을 처리하기 위해 사용되는 정보(예, DMA 요청들, MSI 요청들) 및 어댑터 펑션과 연관된 요청들과 관련된 정보(예, PCI 명령들)를 포함하는 그것의 어댑터 펑션과 연관된 정보를 포함한다. 각각의 디바이스 테이블 엔트리는 어댑터 펑션에 배정된 시스템 메모리 내에서 하나의 주소 공간과 연관된다. 어댑터 펑션은 그 어댑터 펑션에 배정된 시스템 메모리 내에서 하나 또는 그 이상의 주소 공간들을 가질 수 있다.
비지 인디케이터(Busy Indicator) : 이 필드는 어댑터 펑션이 비지(busy)인지를 나타낸다.
영구 에러 상태 인디케이터 : 이 필드는 어댑터 펑션이 영구적인 에러 상태인지를 나타낸다.
복구 개시 인디케이터(Recovery Initiated Indicator) : 이 필드는 어댑터 펑션에 대해 복구(recovery)가 개시되었는지를 나타낸다.
허가 인디케이터(Permission Indicator) : 이 필드는 어댑터 펑션을 컨트롤하려고 하는 운영체제가 그렇게 할 권한을 갖는지를 나타낸다.
인에이블 인디케이터 : 이 필드는 어댑터 펑션이 인에이블되는지를 나타낸다(예, 1=인에이블, 0=디스에이블).
요청자 식별자(Requestor Identifier, RID) : 이는 어댑터 펑션의 식별자이며, 예를 들어, 버스 넘버, 디바이스 넘버 및 펑션 넘버를 포함한다.
일 예에서, 이 필드는 어댑터 펑션의 구성 공간(configuration space)의 억세스들을 위해 사용된다. (어댑터의 메모리는, 예를 들어, 구성 공간, I/O 공간, 및/또는 하나 또는 그 이상의 메모리 공간들을 포함하는 주소 공간들로 정의될 수 있다.) 일 예에서, 상기 구성 공간은 운영체제(또는 다른 구성)에 의해 어댑터 펑션으로 송출되는 명령에서 구성 공간을 특정함으로써 억세스될 수 있다. RID를 포함하는 적절한 펑션 테이블 엔트리의 위치를 찾아내기 위해 사용되는 펑션 핸들 및 구성 공간 내의 오프셋은 그 명령에 특정된다. 펌웨어는 명령을 수신하고 그것이 구성 공간에 대한 것이라고 결정한다. 그러므로, 그것은 I/O 허브에 대한 요청을 발생시키기 위해 RID를 사용하고, I/O 허브는 어댑터에 억세스하기 위해 요청을 생성한다. 어댑터 펑션의 위치는 RID에 기초하며, 오프셋은 어댑터 펑션의 구성 공간 내에 오프셋을 특정한다.
베이스 주소 레지스터(Base Address Register, BAR)(1에서 n) : 이 필드는 복수의 무부호(unsigned) 정수들 - 즉 BAR0 ~ BARn으로 지정됨 - 을 포함하며, 이것들은 본래 특정된 어댑터 펑션과 연관되며, 그 값들은 또한 어댑터 펑션과 연관된 베이스 주소 레지스터들에 저장된다. 각각의 BAR는 어댑터 펑션 내의 I/O 공간 또는 메모리 공간의 시작 주소를 특정하며, 또한 주소 공간의 유형, 즉, 예를 들어, 그것이 64 비트 메모리 공간 또는 32 비트 메모리 공간인지, 또는 32 비트 I/O 공간인지를 나타낸다.
일 예에서, 그것은 어댑터 펑션의 I/O 공간 및/또는 메모리 공간에 대한 억세스들에 사용된다. 예를 들어, 어댑터 펑션에 억세스할 명령에 제공되는 오프셋은, 그 어댑터 펑션에 억세스하기 위해 사용될 주소를 획득하기 위해, 그 명령에 지정된 주소 공간과 연관된 베이스 주소 레지스터 내의 값에 더해진다. 그 명령에 제공되는 주소 공간 식별자는 억세스될 어댑터 펑션 내의 주소 공간 및 사용될 해당 BAR를 식별한다.
사이즈 1...n : 이 필드는 복수의 무부호 정수들 - 이것들은 SIZE0 ~ SIZEn으로 지정됨 - 을 포함한다. 사이즈 필드의 값은, 논제로(non-zero)인 경우, 앞서 기술된 BAR에 대응하는 각각의 엔트리로써 각각의 주소 공간의 사이즈를 나타낸다.
BAR 및 사이즈에 관한 추가 세부사항은 이하에 기술된다.
1. 어댑터 펑션에 대해 BAR가 구현되지 않을 때, BAR 필드 및 자신의 해당 사이즈 필드는 둘 모두 0(zero)으로 저장된다.
2. BAR 필드가 I/O 주소 공간 또는 32-비트 메모리 주소 공간을 나타낼 때, 해당 사이즈 필드는 논제로이고 그 주소 공간의 사이즈를 나타낸다.
3. BAR 필드는 64-비트 메모리 주소 공간을 나타낼 때,
a. BARn 필드는 최하위 주소 비트(least significant address bits)를 나타낸다.
b. 그 다음으로 연속되는 BARn +1 필드는 최상위 주소 비트들(most significant address bits)를 나타낸다.
c. 대응하는 SIZEn 필드는 논제로이고 주소 공간의 사이즈를 나타낸다.
d. 대응하는 SIZEn +1 필드는 중요하지 않고 0으로 저장된다.
내부 라우팅 정보(Internal Routing Information) : 이 정보는 어댑터에 대한 특정 라우팅을 수행하기 위해 사용된다. 예를 들어, 그것은 노드, 프로세서 칩, 허브 어드레싱 정보를 포함한다.
상태 표시(Status Indication) : 이는, 예를 들어, 로드/저장 동작들이 차단(block)되었는지 또는 어댑터가 에러 상태에 있는지에 관한 표시뿐만 아니라 다른 표시들을 제공한다.
일 예에서, 비지 인디케이터, 영구 에러 상태 인디케이터, 및 복구 개시 인디케이터는 펌웨어에 의해 수행되는 모니터링에 기초하여 세트된다. 나아가, 허가 인디케이터는, 예를 들어, 폴리시에 기초하여 세팅되며, BAR 정보는 프로세서(예를 들어, 프로세서의 펌웨어)에 의해 버스 워크(bus walk) 동안 발견되는 구성 정보에 기초한다. 다른 필드들은 구성, 초기화, 및/또는 이벤트들에 기초하여 세트될 수 있다. 다른 실시예들에서, 펑션 테이블 엔트리는 더 많거나, 더 적거나 또는 다른 정보를 포함할 수 있다. 포함되는 정보는 어댑터 펑션에 대해 인에이블되거나 어댑터 펑션에 의해 지원되는 동작들에 의존할 수 있다.
도 6c를 참조하면, 일 예에서, 필드 2는 PCI 펑션 정보 블록(FIB)의 논리 주소(620)를 지정하는데, 이는 연관된 어댑터 펑션에 관한 정보를 포함한다. 펑션 정보 블록은 어댑터 펑션과 연관된 디바이스 테이블 엔트리 및/또는 펑션 테이블 엔트리(또는 다른 위치)를 업데이트하기 위해 사용된다. 이 정보는 어댑터의 초기화(initialization) 및/또는 구성 동안, 및/또는 특정 이벤트들에 응답하여, FIB에 저장된다.
펑션 정보 블록(FIB)에 관한 추가 세부내용은 도 6d를 참조하여 기술된다. 일 실시예에서, 펑션 정보 블록(650)은 다음의 필드들을 포함한다.
포맷(651) : 이 필드는 FIB의 포맷을 특정한다.
인터셉션 컨트롤(652) : 이 필드는 페이지가능 모드(pageable mode) 게스트에 의한 특정 명령들의 게스트 실행이 명령 인터셉션을 초래하는지를 나타내기 위해 사용된다.
에러 표시(654) : 이 필드는 직접 메모리 억세스 및 어댑터 인터럽션들을 위한 에러 상태 표시를 포함한다. 비트가 세트될 때(예, 1), 하나 또는 그 이상의 에러들이 검출되는 한편, 어댑터 펑션을 위한 직접적인 메모리 억세스 또는 어댑터 인터럽션을 수행한다.
로드/저장 차단(656) : 이 필드는 로드/저장 동작들이 차단되는지를 나타낸다.
PCI 펑션 유효(658) : 이 필드는 어댑터 펑션을 위한 인에이블먼트 컨트롤(enablement control)을 포함한다. 그 비트가 세트될 때(예, 1), 어댑터 펑션은 I/O 동작들에 대해 인에이블되는 것으로 고려된다.
주소 공간 등록(660) : 이 필드는 어댑터 펑션을 위한 직접적인 메모리 억세스 인에이블먼트 컨트롤(enablement control)을 포함한다. 필드가 세트될 때(예, 1), 직접적인 메모리 억세스는 인에이블된다.
페이지 사이즈(661) : 이 필드는 페이지의 사이즈 또는 DMA 메모리 억세스에 의해 억세스될 메모리의 다른 유닛을 나타낸다.
PCI 베이스 주소(PCI Base Address, PBA)(662) : 이 필드는 어댑터 펑션에 배정된 시스템 메모리에서 주소 공간을 위한 베이스 주소이다. 그것은 어댑터 펑션이 그 특정된 DMA 주소 공간에 대한 직접적인 메모리 억세스를 위해 사용하는 것을 가능하게 하는 가장 낮은 가상 주소를 나타낸다.
PCI 주소 한계(PCI Address Limit, PAL)(664) : 이 필드는 어댑터 펑션이 그 특정된 DMA 주소 공간 내에 억세스가 가능하도록 하는 가장 높은 가상 주소를 나타낸다.
입력/출력 주소 변환 포인터(IOAT)(666) : 입력/출력 주소 변환 포인터는 PCI 가상 주소 변환에 의해 사용되는 어떤 변환 테이블들의 첫 번째를 지정하고, 또는 그것은 변환의 결과인 스토리지의 프레임의 절대 주소를 직접적으로 지정할 수 있다.
인터럽션 서브클래스(Interruption Subclass, ISC)(668) : 이 필드는 어댑터 펑션에게 어댑터 인터럽션들을 제공하기 위해 사용되는 인터럽션 서브클래스를 포함한다.
인터럽션들의 수(NOI)(670) : 이 필드는 어댑터 펑션에 대해 받아들여진 별개의 언터럽션 코드들의 수를 지정한다. 이 필드는 또한 비트에서, 어댑터 인터럽션 비트 벡터 주소 및 어댑터 인터럽션 비트 벡터 오프셋 필드들에 의해 지정된 어댑터 인터럽션 비트 벡터의 사이즈를 정의한다.
어댑터 인터럽션 비트 벡터 주소(AIBV)(672) : 이 필드는 어댑터 펑션에 대해 어댑터 인터럽션 비트 벡터의 주소를 특정한다. 이 벡터는 인터럽트 처리에 사용된다.
어댑터 인터럽션 비트 벡터 오프셋(674) : 이 필드는 어댑터 펑션에 대해 제1 어댑터 인터럽션 비트 벡터 비트의 오프셋을 특정한다.
어댑터 인터럽션 써머리 비트 주소(AISB)(676) : 이 필드는 어댑터 인터럽션 써머리 비트를 지정하는 주소를 제공하는데, 이 어댑터 인터럽션 써머리 비트는 인터럽트 처리에 선택적으로 사용된다.
어댑터 인터럽션 써머리 비트 오프셋(678) : 이 필드는 어댑터 인터럽션 써머리 비트 벡터 내에 오프셋을 제공한다.
펑션 측정 블록(FMB) 주소(680) : 이 필드는 어댑터 펑션에 관한 측정들을 수집하는데에 사용되는 펑션 측정 블록의 주소를 제공한다.
펑션 측정 블록 키(682) : 이 필드는 펑션 측정 블록에 억세스하기 위한 억세스 키를 포함한다.
써머리 비트 통지 컨트롤(684) : 이 필드는 사용되고 있는 써머리 비트 벡터가 있는지를 나타낸다.
명령 승인 토큰(Instruction Authorization Token)(686) : 이 필드는 페이지가능 저장 모드(pageable storage mode) 게스트가 호스트 개입(host intervention)없이 PCI 명령들을 실행하도록 승인되는지를 결정하기 위해 사용된다.
일 예에서, z/Architecture®에서, 페이지가능 게스트(pageable guest)는, 레벨 2의 해석(interpretation)에서, 시작 해석적 실행(Start Interpretive Execution, SIE) 명령을 통해 해석적으로(interpretively) 실행된다. 예를 들어, 논리적 파티션(logical partition, LPAR) 하이퍼바이저는 물리적, 픽스된 메모리에서 논리적 파티션을 시작하기 위해 SIE 명령을 실행한다. 만약 z/VM®이 그 논리적 파티션 내 운영체제라면, 그것은 자신의 V=V(가상) 스토리지 내에서 자신의 게스트들 (가상) 머신들을 실행하기 위해 SIE 명령을 송출한다. 그러므로, LPAR 하이퍼바이저는 레벨-1 SIE를 사용하고, z/VM® 하이퍼바이저는 레벨-2 SIE를 사용한다.
주소 변환 포맷(687) : 이 필드는, 변환(예를 들어, 가장 높은 수준의 테이블(예, 세그먼트 테이블, 영역 3 등)의 표시 및 선택된 포맷(예, 호환가능한 CPU DAT, I/O 확장된 주소 변환 포맷, 바이패스 포맷, 노 페치 포맷(no fetch format))에 사용될 가장 높은 수준의 변환 테이블의 주소 변환을 위해 선택된 포맷을 나타낸다. 그것은 또한 포맷을 나타낼 수 있다.
변경 PCI 펑션 컨트롤 명령에서 지정된 펑션 정보 블록은 선택된 디바이스 테이블 엔트리, 펑션 테이블 엔트리 및/또는 명령에서 지정된 어댑터 펑션과 연관된 다른 펌웨어 컨트롤들을 변경하기 위해 사용된다. 디바이스 테이블 엔트리를 변경함으로써, 펑션 테이블 엔트리 및/또는 다른 펌웨어 컨트롤들, 특정 서비스들이 그 어댑터에게 제공된다. 이들 서비스들은, 예를 들어, 어댑터 인터럽션들, 주소 변환들, 리셋 에러 상태, 리셋 로드/저장 차단, 세트 펑션 측정 파라미터들, 및 세트 인터셉션 컨트롤을 포함한다.
도 7을 참조하여 변경 PCI 펑션 컨트롤들 명령과 연관된 로직의 일 실시예가 설명된다. 일 예에서, 명령은 운영체제(또는 다른 구성)에 의해 송출되고 그 운영체제를 실행하는 프로세서(예, 펌웨어)에 의해 실행된다. 여기서의 예들에 있어서, 명령 및 어댑터 펑션들은 PCI 기반이다. 그러나, 다른 예들에서는, 다른 어댑터 아키텍쳐 및 해당 명령들이 사용될 수 있다.
일 예에서, 운영체제는 명령에 다음과 같은 오퍼랜드들(operands), 즉, PCI 펑션 핸들, DMA 주소 공간 식별자, 동작 컨트롤, 및 펑션 정보 블록의 주소를 제공한다(예를 들어, 그 명령에 의해 지정된 하나 또는 그 이상의 레지스터들 내에서).
도 7을 참조하면, 처음에 변경 PCI 펑션 컨트롤 명령을 감안하는 장치가 인스톨되는지에 관한 결정이 이뤄진다(조사 700). 이 결정은, 예를 들어, 컨트롤 블록에 저장된 인디케이터를 체크함으로써 이뤄진다. 만약 장치가 인스톨되지 않는다면, 예외 조건이 제공된다(단계 702). 그렇지 않으면, 명령이 페이지가능 저장 모드(pageable storage mode) 게스트(또는 다른 게스트)에 의해 송출되었는지에 관한 결정이 이뤄진다(조사 704). 만약 예(yes)이면, 호스트 운영체제는 그 게스트를 위한 동작을 에뮬레이트할 것이다(단계 706).
그렇지 않다면, 하나 또는 그 이상의 오퍼랜드들이 정렬(align)되는지에 관한 결정이 이뤄진다(조사 708). 예를 들어, 펑션 정보 블록의 주소들이 더블 워드 바운더리(double word boundary) 상에 있는지에 관한 결정이 이뤄진다. 일 예에서, 이것은 선택적(optional)이다. 만약 오퍼랜드가 정렬되지 않으면, 예외 조건이 제공된다(조사 710). 그렇지 않으면, 펑션 정보 블록이 억세스가능한지에 관한 결정이 이뤄진다(조사 712). 만약 아니라면, 예외 조건이 제공된다(단계 714). 그렇지 않으면, 변경 PCI 펑션 컨트롤들 명령의 오퍼랜드들에 제공되는 핸들이 인에이블되는지에 관한 결정이 이뤄진다(조사 716). 일 예에서, 이 결정은 핸들 내에서 인에이블 인디케이터를 체크함으로써 이뤄진다. 만약 핸들이 인에이블되지 않으면, 예외 조건이 제공된다(단계 718).
만약 핸들이 인에이블되면, 펑션 테이블 엔트리의 위치를 찾아내기 위해 핸들이 사용된다(단계 720). 즉, 핸들의 적어도 일부는 동작 파라미터들이 설정될 어댑터 펑션에 대응하는 펑션 테이블 엔트리의 위치를 찾아내기 위해 펑션 테이블 내에서 인덱스로서 사용된다.
조사 722에서, 펑션 테이블 엔트리가 발견되었는지에 관한 결정이 이뤄진다. 만약 발견되지 않았다면, 예외 조건이 제공된다(단계 724). 그렇지 않고, 만약 명령을 송출하는 구성이 게스트라면, 펑션이 게스트에 의해 사용하기 위해 구성되는지에 관한 결정이 이뤄진다(조사 726). 만약 그것이 그러한 사용을 위해 승인된 것이 아니라면, 예외 조건이 제공된다(단계 728). 만약 구성이 게스트가 아니라면 이 조사는 무시될 수 있고, 또는 만약 지정된다면 다른 승인들이 체크될 수 있다.
그런 다음, 펑션이 인에이블되는지에 관한 결정이 이뤄진다(조사 730). 일 예에서, 이 결정은 펑션 테이블 엔트리에서 인에이블 인디케이터를 체크함으로써 이뤄진다. 만약 그것이 인에이블되지 않는다면, 예외 조건이 제공된다(단계 732).
만약 펑션이 인에이블된다면, 복구가 액티브인지에 관한 결정이 이뤄진다(조사 734). 만약 펑션 테이블 엔트리에서 복구 인디케이터에 의해 결정됨에 따라 복구가 액티브이면, 예외 조건이 제공된다(단계 736). 그러나, 만약 복구가 액티브가 아니라면, 펑션이 비지(busy)인지에 관한 추가 결정이 이뤄진다(조사 738). 이 결정은 펑션 테이블 엔트리에서 비지 인디케이터를 체크함으로써 이뤄진다. 만약 펑션이 비지라면, 비지 조건이 제공된다(단계 740). 비지 조건에 따라, 명령은 누락(drop)되는 대신에, 재시도(retry)될 수 있다.
만약 펑션이 비지가 아니라면, 펑션 정보 블록 포맷(FIB FMT.)이 유효한지에 관한 추가 결정이 이뤄진다(조사 742). 예를 들어, 이 포맷이 시스템에 의해 지원되는지를 결정하기 위해 FIB의 포맷 필드가 체크된다. 만약 그것이 무효라면, 예외 조건이 제공된다(단계 744). 만약 펑션 정보 블록 포맷이 유효하다면, 명령의 오퍼랜드들에 특정된 동작 컨트롤(operation control, OC.)이 유효한지에 관한 추가 결정이 이뤄진다(조사 746). 즉, 동작 컨트롤은 이 명령을 위해 특정된 동작 컨트롤들 중 하나이다. 만약 그것이 무효라면, 예외 조건이 제공된다(단계 748). 그러나, 만약 동작 컨트롤이 유효하다면, 처리는 특정되고 있는 특정 동작 컨트롤로 계속된다.
특정될 수 있는 하나의 동작 컨트롤은 어댑터에 대해 주소 변환들을 컨트롤함에 있어서 사용되는 레지스터 I/O 주소 변환 파라미터 동작이다. 이 동작으로, I/O 주소 변환과 관련되는 PCI 펑션 파라미터들은 DTE, FTE 및/또는 FIB의 적절한 파라미터들로부터의 다른 위치 - 이는 명령에 대한 오퍼랜드임 - 에 세트된다. 이들 파라미터들은, 예를 들어, PCI 베이스 주소; PCI 주소 한계(PCI 한계 또는 한계로도 알려짐); 주소 변환 포맷; 페이지 사이즈; 및 I/O 주소 변환 포인터 - 이것들은 이 동작에 대한 오퍼랜드들임 - 를 포함한다. 또한 시작 DMA 주소(SDMA) 및 종료 DMA 주소(EDMA)를 포함하는 암시된(implied) 오퍼랜드들이 있을 수 있는데, 이것들은 명령을 실행 중인 프로세서가 접근가능한 위치에 저장된다.
I/O 주소 변환을 위한 동작 파라미터들을 설정하는 로직의 일 실시예는 도 8을 참조하여 설명된다. 처음에, FIB에서 PCI 베이스 주소가 FIB에서 PCI 한계보다 더 큰지에 관한 결정이 이뤄진다(조사 800). 만약 베이스 주소와 한계의 비교가 그 베이스 주소가 한계보다 더 큰 것으로 표시되면, 예외 조건이 인정된다(단계 802). 그러나, 만약 베이스 주소가 한계와 같거나 더 작으면, 주소 변환 포맷 및 페이지 사이즈가 유효한지에 관한 추가 결정이 이뤄진다(조사 804). 만약 그것들이 무효라면, 예외 조건이 제공된다(단계 806). 그러나, 만약 그것들이 유효라면, 주소 공간의 사이즈(베이스 주소 및 한계에 기초하여)가 변환 용량(translation capacity)을 초과하는지에 관한 추가 결정이 이뤄진다(조사 808). 일 예에서, 주소 공간의 사이즈는 상위 레벨(upper level) 테이블의 포맷에 기초하여 가능한 최대 주소 변환 용량에 비교된다. 예를 들어, 만약 상위 레벨 테이블이 DAT 호환가능 세그먼트 테이블이면, 최대 변환 용량은 2기가바이트이다.
만약 주소 공간의 사이즈가 변환 용량을 초과하면 예외 조건이 제공된다(단계 810). 그렇지 않다면, 베이스 주소가 시작 DMA 주소보다 작은지에 관한 추가 결정이 이뤄진다(조사 812). 만약 그렇다면, 예외 조건이 제공된다(단계 814). 그렇지 않다면, 주소 한계가 종료 DMA 주소보다 더 큰지에 관한 또 다른 결정이 이뤄진다(조사 816). 만약 그렇다면, 예외 조건이 제공된다(단계 818). 일 예에서, 시작 DMA 주소 및 종료 DMA 주소는 시스템-와이드 폴리시(system-wide policy)에 기초한다.
그런 다음, 만약 어떤 것이 필요하다면, I/O 주소 변환을 수행하기 위해 충분한 리소스가 이용가능한지에 관한 결정이 이뤄진다(조사 820). 만약 아니라면, 예외 조건이 제공된다(단계 822). 그렇지 않으면, I/O 주소 변환 파라미터들이 FTE 및 DTE에 이미 등록되었는지에 관한 추가 결정이 이뤄진다(조사 824). 이는 FET/DTE 내 파라미터들의 값들을 체크함으로써 결정된다. 예를 들어, 만약 FTE/DTE 내 값들이 0이거나 또 다른 정의된 값이라면, 등록은 수행되지 않았다. FET의 위치를 찾아내기 위해, 명령에 제공되는 핸들이 사용되고, DTE의 위치를 찾아내기 위해 FTE 내 디바이스 인덱스가 사용된다.
만약 어댑터 펑션이 주소 변환을 위해 이미 등록되었다면, 예외 조건이 제공된다(단계 826). 만약 아니라면, 특정되는 DMA 주소 공간이 유효한지(즉, 그것이 DTE가 인에이블된 주소 공간인지)에 관한 결정이 이뤄진다(조하, 828). 만약 아니라면, 예외 조건이 제공된다(단계 830). 만약 모든 체크들이 성공적이면, 디바이스 테이블 엔트리에 그리고 선택적으로는, 대응하는 펑션 테이블 엔트리에(또는 다른 지정된 위치에), 변환 파라미터들이 배치된다(단계 832). 예를 들어, I/O 주소 변환과 관련된 PCI 펑션 파라미터들은 펑션 정보 블록으로부터 복사되고 DTE/FTE에 놓인다. 이들 파라미터들은, 예를 들어, PCI 베이스 주소, PCI 주소 한계, 변환 포맷, 페이지 사이즈, 및 I/O 주소 변환 포인터를 포함한다. 이 동작은 특정된 DMA 주소 공간으로의 DMA 억세스들을 가능하게 한다. 그것은 어댑터 펑션을 위한 I/O 주소 변환을 가능하게 한다.
변경 PCI 펑션 컨트롤 명령에 의해 특정될 수 있는 또 다른 동작 컨트롤은 미등록(unregister) I/O 주소 변환 파라미터 동작인데, 이것의 일 예는 도 9에 도시되어 있다. 이 동작으로, I/O 주소 변환과 관련된 펑션 파라미터들은 0들로 리셋된다. 이 동작은 특정된 DMA 주소 공간으로의 DMA 억세스들을 할 수 없도록 하며, 그 DMA 주소 공간에 대한 I/O 변환 룩어사이드(looaside) 버퍼 엔트리들의 제거(purge)를 초래한다. 그것은 주소 변환을 할 수 없도록 한다.
도 9를 참조하면, 일 실시예에서, I/O 주소 변환 파라미터들이 등록되지 않는지에 관한 결정이 이뤄진다(조사 900). 일 예에서, 이 결정은 FTE 또는 DTE에서 적절한 파라미터들의 값들을 체크함으로써 이뤄진다. 만약 그들 필드들이 0이거나 어떤 특정된 값이라면, 그것들은 등록되지 않는다. 따라서, 예외 조건이 제공된다(단계 902). 만약 그것들이 등록되면, DMA 주소 공간이 유효인지에 관한 결정이 이뤄진다(조사 904). 만약 그것이 무효이면, 예외 조건이 제공된다(단계 906). 만약 DMA 주소 공간이 유효이면, 디바이스 테이블 엔트리에서 그리고 선택적으로는, 대응하는 펑션 테이블 엔트리에서, 변환 파라미터들이 클리어된다(단계 908).
이용가능한 여러 가지 변환 포맷들을 갖기 위한 기능 그리고 여러 가지 변환 포맷들로부터의 어느 변환 포맷이 특정 펑션(예, PCI 펑션)을 위해 사용될 것인지를 런타임시에 결정할 수 있는 기능이 위에서 상세히 설명되었다. 결정된 변환 포맷은 그 펑션을 위해 디바이스 테이블 엔트리에서 펑션에 대해 미리 등록된다. 그런 다음, 요청의 처리동안, 만약 필요하다면, 주소 변환 유닛에 의해, 미리 등록된 변환 포맷에 기초하여, 요청에서 제공되는 주소는 변환된다.
여기에 기술되는 실시예들에서, 어댑터들은 PCI 어댑터들이다. 여기에 사용되는 바와 같이, PCI는 PCI-SIG(Peripheral Component Interconnect Special Interest Group)(www.pcisig.com/home) - 이는 PCI 또는 PCIe 포함하나 이러한 것들로 한정되는 것은 아님 - 로 정의되는 바와 같이 PCI 기반의 사양에 따라 구현되는 어댑터들을 일컫는다. 하나의 구체적인 예에서, PCIe(Peripheral Component Interconnect Express)는 I/O 어댑터들과 호스트 시스템들 사이의 트랜잭션들(transactions)에 대해 양방향 통신 프로토콜을 정의하는 컴포넌트 레벨 인터커넥트 표준이다. PCIe 통신들은 PCIe 버스 상의 전송을 위해 PCIe 표준에 따라 패킷들에 캡슐화(encapsulate)된다. I/O 어댑터들에서 시작하고 호스트 시스템들에서 끝나는 트랜잭션들은 업바운드 트랜잭션들(upbound transactions)로 일컬어진다. 호스트 시스템들에서 시작하고 I/O 어댑터들에서 종료하는 트랜잭션들은 다운바운드 트랜잭션들(downbound transactions)로 일컬어진다. PCIe 토폴로지는 PCIe 버스를 형성하기 위해 짝지어지는(예를 들어, 하나의 업바운드 링크, 하나의 다운바운드 링크) 점대점 단방향 링크들에 기초한다. PCIe 표준은 PCI-SIG에 의해 유지되고 공개된다.
당해 기술 분야에서 숙련된 자라면 알 수 있는 바와 같이, 본 발명의 측면들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 따라서, 본 발명의 측면들은 전적으로 하드웨어 실시예의 형태를 취할 수도 있고, 전적으로 소프트웨어 실시예(펌웨어, 상주 소프트웨어, 마이크로코드 등을 포함함) 또는 소프트웨어 및 하드웨어 측면들 - 이것들 모두는 여기서는 일반적으로 "회로", "모듈" 또는 "시스템"으로 일컬어질 수 있음 - 을 결합하는 실시예의 형태를 취할 수도 있다. 더 나아가, 본 발명의 측면들은 하나 또는 그 이상의 컴퓨터 판독가능 매체(들) - 이것들은 그 상에 구현되는 컴퓨터 판독가능 프로그램 코드를 가짐 - 에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수도 있다.
하나 또는 그 이상의 컴퓨터 판독가능 매체(들)의 어떤 조합이든지 이용될 수 있다. 컴퓨터 판독가능 매체는, 예를 들어, 전자, 자기, 광학, 전자기, 적외선 또는 반도체 시스템, 장치, 또는 디바이스, 또는 이것들의 적절한 조합일 수 있다. 컴퓨터 판독가능 저장 매체의 더 구체적인 예들(그러나, 모든 예들을 총 망라한 것은 아님)은, 하나 또는 그 이상의 와이어들을 갖는 전기적 연결, 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 억세스 메모리(RAM), 읽기 전용 메모리(ROM), 소거형 프로그램가능 읽기 전용 메모리(EPROM 또는 플래시 메모리), 광섬유, 휴대용 컴팩트 디스크 읽기 전용 메모리(휴대용 CD-ROM), 광 스토리지 디바이스, 자기 스토리지 디바이스, 또는 이것들의 적절한 조합을 포함한다. 본 문서의 맥락에서, 컴퓨터 판독가능 저장 매체는 명령 실행 시스템, 장치, 또는 디바이스에서 사용하기 위한 또는 명령 실행 시스템, 장치, 또는 디바이스와 함께 사용하기 위한 프로그램을 포함 또는 저장할 수 있는 어떤 실체적 매체일 수 있다.
이제 도 10을 참조하면, 일 예에서, 컴퓨터 프로그램 제품(1000)은, 예를 들어, 하나 또는 그 이상의 컴퓨터 판독가능 스토리지 매체(1002)를 포함한다. 이 컴퓨터 판독가능 스토리지 매체(1002)는 그 내부에 컴퓨터 판독가능 프로그램 코드 수단 또는 로직(1004)을 저장하여 본 발명의 하나 또는 그 이상의 측면들을 제공하고 용이하도록 한다.
컴퓨터 판독가능 매체 상에 구현되는 프로그램 코드는, 무선, 유선, 광섬유 케이블, RF 등 또는 이것들의 적절한 조합을 포함하는 적절한 매체를 사용하여 전송될 수 있으나, 이러한 예들로 한정되는 것은 아니다.
본 발명의 측면들을 위한 동작들을 수행하기 위한 컴퓨터 프로그램 코드는 하나 또는 그 이상의 프로그래밍 언어들의 어떤 조합으로든 작성될 수 있는데, 이러한 프로그래밍 언어들에는, 자바, 스몰토크, C++ 등과 같은 객체 지향형 프로그래밍 언어, 및 "C" 프로그래밍 언어, 어셈블러 또는 유사 프로그래밍 언어들과 같은 전통적인 절차형 프로그래밍 언어들이 포함된다. 프로그램 코드는 독립형 소프트웨어 패키지로서, 전적으로 사용자의 컴퓨터 상에서, 부분적으로는 사용자의 컴퓨터 상에서, 사용자의 컴퓨터 상에서 부분적으로 그리고 원격 컴퓨터 상에서 부분적으로 또는 원격 컴퓨터 또는 서버 상에서 전적으로 실행될 수 있다. 후자의 경우, 원격 컴퓨터는 근거리 통신망(LAN) 또는 광역 통신망(WAN)을 포함하여 어떤 네트워크의 유형을 통해서든지 사용자의 컴퓨터 상에 연결될 수 있으며, 또는 그 연결은 외부 컴퓨터(예를 들어, 인터넷 서비스 제공자를 사용하여 인터넷을 통해)에 대해 이뤄질 수 있다.
본 발명의 측면들은 여기서는 본 발명의 실시예들에 따른 방법들, 장치들(시스템들) 및 컴퓨터 프로그램 제품들의 흐름도들 및/또는 블록도들을 참조하여 기술된다. 흐름도들 및/또는 블록도들의 각각의 블록, 흐름도들 및/또는 블록도들 내 블록들의 조합들은 컴퓨터 프로그램 명령들에 의해 구현될 수 있다는 것이 이해될 것이다. 이들 컴퓨터 프로그램 명령들은 범용 컴퓨터, 전용 컴퓨터, 또는 기타 프로그램가능 데이터 처리 장치의 프로세서에 제공되어, 머신을 만들어 내도록 하여, 컴퓨터 또는 기타 프로그램가능 데이터 처리 장치의 프로세서를 통해 실행되는 경우 그 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/작용들을 구현하기 위한 수단을 생성해내도록 할 수 있다.
이들 컴퓨터 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 기타 디바이스들이 특정 방식으로 기능하도록 명령할 수 있는 컴퓨터 판독가능 매체에 저장되어, 그 컴퓨터 판독가능 매체에 저장된 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능/작용을 구현하는 명령들을 포함하는 제조물품을 만들어내도록 할 수 있다.
컴퓨터 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 기타 디바이스들 상으로 로드되어, 일련의 동작 단계들이, 컴퓨터, 기타 프로그램가능 장치 또는 다른 디바이스들 상에서 수행되도록 하여, 컴퓨터로 구현된 프로세서를 만들어내도록 할 수 있다. 그리하여 컴퓨터 또는 기타 프로그램가능 장치 상에서 실행되는 명령들은 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/작용들을 구현하기 위해 프로세스들을 제공하도록 할 수 있다.
도면들 내의 흐름도 및 블록도들은 본 발명의 여러 가지 실시예들에 따라 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍쳐, 기능, 및 동작을 도시한다. 여기서, 흐름도 또는 블록도들 내의 각각의 블록은 모듈, 세그먼트, 또는 코드부 - 이는 특정된 논리 펑션(들)을 구현하기 위한 하나 또는 그 이상의 실행가능 명령들을 포함함 - 를 나타낼 수 있다. 몇몇 다른 구현 예들에 있어서는, 블록에 표시된 두 개의 블록들은 도면들에 표시된 순서와 다르게 발생할 수도 있음에 또한 유의해야 할 것이다. 예를 들어, 연속하여 보여지는 두 개의 블록들은, 사실, 관련된 기능에 따라서, 실질적으로 동시에 발생될 수도 있고, 또는 그 블록들은 때로는 역순으로 실행될 수도 있다. 또한, 블록도들 및/또는 흐름도 내의 각각의 블록, 및 블록도들 및/또는 흐름도 내의 블록들의 조합들은 특정 기능들 또는 작용들을 수행하는 전용 하드웨어 기반의 시스템, 또는 전용 하드웨어 및 컴퓨터 명령들의 조합들에 의해 구현될 수도 있음에 유의해야 할 것이다.
위의 설명에 추가하여, 본 발명의 하나 또는 그 이상의 측면들은 고객 환경의 관리를 제공하는 서비스 공급자에 의해, 제공되고, 제안되고, 운용되고, 관리되고, 서비스될 수 있다. 예를 들어, 서비스 제공자는 하나 또는 그 이상의 고객들을 위해 본 발명의 하나 또는 그 이상의 측면들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라스트럭쳐를 생성, 유지, 지원할 수 있다. 대신에, 서비스 제공자는 예를 들어 구독 및/또는 요금 승인하에 고객으로부터 요금을 받을 수 있다. 이에 추가하여 또는 이것과는 다르게, 서비스 제공자는 하나 또는 그 이상의 제3자들(third parties)에게 광고 내용의 판매로부터 요금을 받을 수 있다.
본 발명의 일 측면에서, 본 발명의 하나 또는 그 이상의 측면들을 수행하기 위해, 어플리케이션들이 운용될 수 있다. 일 예로서, 어플리케이션을 운용하는 것은 본 발명의 하나 또는 그 이상의 측면들을 수행하기 위해 동작가능한 컴퓨터 인프라스트럭쳐를 제공하는 것을 포함한다.
본 발명의 추가 측면으로서, 컴퓨팅 인프라스트럭쳐(computing infrastructure)가 운용될 수 있는데, 이는 컴퓨팅 시스템 내에 컴퓨터 판독가능 코드를 통합하는 것을 포함하며, 여기서 컴퓨팅 시스템과 결합되는 코드는 본 발명의 하나 또는 그 이상의 측면들을 수행할 수 있다.
본 발명의 또 다른 측면으로서, 컴퓨터 시스템 내에 컴퓨터 판독가능 코드를 통합하는 것을 포함하는 컴퓨팅 인프라스트럭쳐를 통합하기 위한 프로세스가 제공될 수 있다. 컴퓨터 시스템은 컴퓨터 판독가능 매체를 포함하며, 여기서 컴퓨터 매체는 본 발명의 하나 또는 그 이상의 측면들을 포함한다. 컴퓨터 시스템과 결합되는 코드는 본 발명의 하나 또는 그 이상의 측면들을 수행할 수 있다.
비록 여기서는 여러가지 실시예들이 기술되지만, 이것들은 단지 예들일 뿐이다. 예를 들어, 다른 아키텍쳐들의 컴퓨팅 환경들은 본 발명의 하나 또는 그 이상의 측면들을 편입 및 사용할 수 있다. 예들로서, IBM사에서 제공되는 파워 시스템 서버들(Power Systems servers) 또는 기타 서버들과 같은 System z®이외의 서버들, 또는 기타 회사들의 서버들은 본 발명의 하나 또는 그 이상의 측면들을 포함, 사용할 수 있고, 및/또는 그러한 측면들의 혜택을 누릴 수 있다. 나아가, 비록 여기서의 예들에서, 어댑터들 및 PCI 허브는 서버의 일부로서 고려되지만, 다른 실시예들에서 그것들은 반드시 서브의 일부로서 고려될 필요는 없으며, 단순히 시스템 메모리 및/또는 컴퓨팅 환경의 다른 컴포넌트들에 결합되는 것으로 고려될 수 있다. 컴퓨팅 환경은 서브일 필요는 없다. 나아가, 비록 변환 테이블들이 설명되지만, 어떠한 데이터 구조든지 사용될 수 있고, 또한 테이블이라는 용어는 그러한 모든 데이터 구조들을 포함할 것이다. 더 나아가, 비록 어댑터들이 PCI 기반이지만, 본 발명의 하나 또는 그 이상의 측면들은 다른 어댑터들 또는 다른 I/O 컴포넌트들과 함께 사용가능하다. 어댑터 및 PCI 어댑터는 단지 예들일 뿐이다. 더욱이, 본 발명의 사상을 벗어남이 없이 다른 사이즈의 주소 공간들 및 주소 테이블들이 사용될 수 있다. 더 나아가, 본 발명의 하나 또는 그 이상의 측면들을 사용하여 다른 유형들의 주소들이 변환될 수 있다. 더 나아가, 다른 유형들의 변환 포맷들이 사용될 수 있다. 더욱이, DTE는 더 많거나, 더 적거나, 다른 정보를 가질 수 있다. 많은 변형 예들이 가능하다.
나아가, 컴퓨팅 환경들의 다른 유형들은 본 발명의 하나 또는 그 이상의 측면들로부터 혜택을 받을 수 있다. 일 예로서, 프로그램 코드를 저장 및/또는 실행하기에 적합한 데이터 처리 시스템이 사용가능한데, 이 데이터 처리 시스템은 메모리 엘리먼트들에 대해 직접적으로 또는 시스템 버스를 통해 간접적으로 결합된 적어도 두 개의 프로세서들을 포함한다. 이 메모리 엘리먼트들은, 예를 들어, 프로그램 코드의 실제 실행 동안 채용되는 로컬 메모리, 벌크 스토리지, 및 캐시 메모리 - 이것들은 실행 동안 벌크 스토리지로부터 코드가 리트리브되어야만 하는 횟수를 감소시키기 위해 적어도 몇몇 프로그램 코드의 임시 스토리지를 제공함 - 를 포함한다.
입력/출력 또는 I/O 디바이스들(예를 들어, 키보드들, 디스플레이들, 포인팅 디바이스들, DASD, 테이프, CDs, DVDs, 썸(thumb) 드라이브들 및 기타 메모리 매체를 포함하나, 이러한 것들로 한정되는 것은 아님)은 시스템에 직접적으로 결합되거나 I/O 컨트롤러들을 개재하는 것을 통하여 간접적으로 결합될 수 있다. 네트워크 어댑터들은 또한 시스템에 결합되어 사설망 또는 공중망을 개재하는 것을 통해 데이터 처리 시스템이 다른 데이터 처리 시스템들 또는 원격 프린터들 또는 저장 디바이스들에 결합될 수 있도록 한다. 모뎀들, 케이블 모뎀들, 및 이더넷 카드들은 단지 네트워크 어댑터들의 이용가능한 유형들의 몇몇 예들이다.
도 11을 참조하면, 본 발명의 하나 또는 그 이상의 측면들을 구현하기 위해 호스트 컴퓨터 시스템(5000)의 대표적인 컴포넌트들이 도시되어 있다. 대표적인 호스트 컴퓨터(5000)는 컴퓨터 메모리(즉, 중앙 스토리지)(5002)와 통신하는 하나 또는 그 이상의 CPUs(5001) 뿐만 아니라 SANs 또는 다른 컴퓨터들 등과 통신하기 위한 네트워크들(5010) 및 저장 매체 디바이스들(5011)에 대한 I/O 인터페이스들을 포함한다. CPU(5001)는 구성된(architected) 명령 세트 및 구성된 기능을 갖는 아키텍쳐를 따른다. CPU(5001)는 프로그램 주소들(가상 주소들)을 메모리의 실제 주소들로 변환하기 위한 동적 주소 변환부(DAT)(5003)를 가질 수 있다. DAT는 일반적으로 변환들을 캐시(cach)하기 위해 변환 룩어사이드 버퍼(translation lookaside buffer, TLB)(5007)를 포함한다. 그래서 컴퓨터 메모리(5002)의 블록에 대한 이후의 억세스들에 있어서 주소 변환의 지연이 생기지 않도록 한다. 일반적으로, 캐시(5009)는 컴퓨터 메모리(5002)와 프로세서(5001) 사이에 채용된다. 캐시(5009)는 하나 이상의 CPU가 이용가능한 큰 캐시와, 큰 캐시와 각각의 CPU 사이에서 더 작고, 더 빠른(더 낮은 레벨의) 캐시들을 갖도록 계층적(hierarchical)일 수 있다. 어떤 구현 예들에서, 명령 페치 및 데이터 억세스들을 위해 분리된 낮은 레벨의 캐시들을 제공하기 위해, 더 낮은 레벨의 캐시들은 나눠질(split) 수 있다. 일 실시예에서, 명령은 캐시(5009)를 통해 명령 페치 유닛(5004)에 의해 메모리(5002)로부터 페치된다. 명령은 명령 디코드 유닛(5006)에서 디코딩되고 명령 실행 유닛 또는 유닛들(5008)로 (어떤 실시예들에서는 다른 명령들과 함께) 디스페치된다. 일반적으로, 몇몇 실행 유닛들(5008), 예를 들어 산술 실행 유닛(arithmetic execution unit), 플로팅 포인트 실행 유닛(floating point execution unit) 및 분기 명령 실행 유닛(branch instruction execution unit)과 같은 것들이 채용된다. 명령은 실행 유닛에 의해 실행되어, 필요에 따라 명령 특정 레지스터들 또는 메모리로부터 오퍼랜드들에 억세스한다. 만약 메모리(5002)로부터 오퍼랜드가 억세스(로드 또는 저장)될 것이라면, 일반적으로 로드/저장 유닛(5005)은 실행되고 있는 명령의 컨트롤 하에서 그 억세스를 처리한다. 명령들은 하드웨어 회로들 또는 내부 마이크로코드(펌웨어) 또는 이것들의 조합에 의해 실행될 수 있다.
언급된 바와 같이, 컴퓨터 시스템은 어드레싱, 보호, 및 레퍼런스 및 변경 레코딩 뿐만이 아니라 로컬(또는 메인) 스토리지에 정보를 포함시킨다. 어드레싱의 몇몇 측면들은 주소들의 포맷, 주소 공간들의 개념, 주소들의 여러 가지 유형들, 및 한 유형의 주소가 또 다른 유형의 주소로 변환되는 방식을 포함한다. 메인 스토리지의 몇몇은 영구적으로 배정된 스토리지 위치들을 포함한다. 메인 스토리지는 시스템에게 데이터의 직접적으로 어드레싱가능한(addressable) 가장 빠른 억세스 스토리지를 제공한다. 데이터 및 프로그램들은 둘 다 그것들이 처리될 수 있기 전에 (입력 디바이스들로부터) 메인 스토리지들로 로드될 것이다.
메인 스토리지는 하나 또는 그 이상의 더 작고, 더 빠른 억세스 버퍼 스토리지들, 때로는 캐시들로 불리는 것들을 포함할 수 있다. 일반적으로 캐시는 CPU 또는 I/O 프로세서와 물리적으로 연관된다. 물리적 구성의 효과들(성능을 제외하고) 및 구별되는 스토리지 매체의 사용은 일반적으로 프로그램에 의해 관찰가능하지 않다.
분리된 캐시들은 명령들을 위해 그리고 데이터 오퍼랜드들을 위해 유지될 수 있다. 캐시 내 정보는 캐시 블록 또는 캐시 라인(또는 간단히 라인)으로 일컬어지는 인테그럴 바운더리(integral boundary) 상에서 인접한 바이트들에 유지된다. 모델은 추출 캐시 속성(EXTRACT CACHE ATTRIBUTE) 명령을 제공할 수 있다. 이 명령은 바이트들에서 캐시 라인의 사이즈를 리턴한다. 모델은 또한 프리페치 데이터(PREFETCH DATA) 및 프리페치 데이터 렐러티브 롱(PREFETCH DATA RELATIVE LONG) 명령들을 제공할 수 있다. 이 명령들은 데이터 또는 명령 캐시 내로 스토리지의 프리페치 효과 또는 캐시로부터 데이터의 릴리스 효과를 가져온다.
스토리지는 비트들의 긴 수평 스트링으로 보여진다. 대부분의 동작들을 위해, 스토리지에 대한 억세스들은 좌에서 우 시퀀스(left-to-right sequence)로 진행된다. 비트들의 스트링은 8 비트의 단위로 다시 나눠진다. 8비트 유닛은 바이트로 일컬어지는데, 바이트는 모든 정보 포맷들의 기본적인 빌딩 블록이다. 스토리지에서 각각의 바이트 위치는 고유의 음수가 아닌 정수에 의해 식별되는데, 이는 그 바이트 위치의 주소 또는 간단히, 바이트 주소이다. 인접한 바이트 위치들은 좌측에서 0으로 시작하고 좌측에서 우측 순서로 진행되는 연속된 주소들을 갖는다. 주소들은 무부호 이진 정수들이며 24, 31, 또는 64 비트이다.
정보는, 한번에 한 바이트 또는 한 그룹의 바이트로 스토리지와 CPU 또는 채널 서브시스템 사이에 전송된다. 이와는 다르게 만약 명시되지 않는다면, 예를 들어, z/Architecture®에서, 스토리지 내 한 그룹의 바이트는 그 그룹의 최좌측 바이트에 의해 어드레싱된다. 그 그룹 내 바이트의 수는 수행될 동작에 의해 암시(imply)되거나 분명하게 명시된다. CPU 동작에 사용될 때, 한 그룹의 바이트는 필드로 일컬어진다. 예를 들어, z/Architecture®에서 각각의 그룹의 바이트 내에서, 비트들은 좌측에서 우측 순서로 번호가 매겨진다. z/Architecture®에서, 최좌측 비트들은 때로는 "고차(high-order)" 비트들로 일컬어지며 최우측 비트들은 "저차(low-order)" 비트들로 일컬어진다. 그러나, 비트 번호들은 스토리지 주소들이 아니다. 단지 바이트들만이 어드레싱될 수 있다. 스토리지에서 바이트의 개별 비트들에 관해 연산하기 위해, 전체 바이트가 억세스된다. 바이트 내 비트들은 좌측에서 우측으로 0에서부터 7까지 번호가 매겨진다(예를 들어, z/Architecture®에서). 주소에서 비트들은 24 비트 주소들에 대해 8-31 또는 40-63, 또는 31 비트 주소들에 대해 1-31 또는 33-63으로 번호가 매겨질 수 있으며, 그것들은 64 비트 주소들에 대해 0-63으로 번호가 매겨질 수 있다. 다수의 바이트들의 어떤 다른 픽스된 길이 포맷 내에서, 그 포맷을 구성하는 비트들은 0에서부터 시작하여 연속적으로 번호가 매겨진다. 에러 검출 목적으로, 그리고 정정을 위해서 바람직하게, 하나 또는 그 이상의 체크 비트들은 한 그룹의 바이트들로 또는 각각의 바이트들로 전송될 수 있다. 이러한 체크 비트들은 머신에 의해 자동으로 생성되고 프로그램에 의해 직접적으로 컨트롤될 수 없다. 스토리지 용량들은 바이트의 수로 표현된다. 스토리지-오퍼랜드 필드의 길이가 명령의 연산 코드(operation code)에 의해 암시될 때, 그 필드는 픽스된 길이를 갖는 것으로 일컬어지는데, 이는 1, 2, 4, 8, 또는 16 바이트일 수 있다. 어떤 명령들을 위해서는 더 큰 필드들이 암시될 수 있다. 스토리지-오퍼랜드 필드의 길이가 암시되는 것이 아니라 분명하게 명시될 때, 그 필드는 가변 길이를 갖는 것으로 일컬어진다. 가변 길이의 오퍼랜드들은 한 바이트의 증분들(increments)로(또는 몇몇 명령들과 함께, 두 바이트의 배수로 또는 다른 배수들로) 그 길이가 가변될 수 있다. 정보가 스토리지에 놓여질 때, 비록 스토리지에 대한 물리적 경로의 폭이 저장되고 있는 필드의 길이보다 더 클 수 있더라도, 단지 그 지정된 필드에 포함되는 그들 바이트 위치들의 내용은 대체된다.
정보의 일정 유닛들은 스토리지에서 인테그럴 바운더리(integral boundary)상에 있을 것이다. 바운더리는 그것의 스토리지 주소가 바이트들에서 유닛의 길이의 배수일 때 정보의 유닛에 대해 인테그럴(integral)한 것으로 일컬어진다. 인테그럴 바운더리상의 2, 4, 8, 및 16 바이트의 필드들에는 특별한 명칭들이 주어진다. 하프워드(halfword)는 두 바이트 바운더리상의 두 개의 연속된 바이트들의 그룹이며 명령들의 기본 빌딩 블록이다. 워드는 4 바이트 바운더리상에서 8개의 연속된 바이트들의 그룹이다. 더블워드(doubleword)는 8 바이트 바운더리상에서 8 개의 연속된 바이트들의 그룹이다. 쿼드워드(quadword)는 16바이트 바운더리 상에서 16개의 연속된 바이트들의 그룹이다. 스토리지 주소들이 하프워드들, 워드들, 더블워드들, 및 쿼드워드들을 지정할 때, 그 주소의 이진 표현은 1, 2, 3, 또는 4 개의 최우측 0 비트를 각각 포함한다. 명령들은 2 바이트 인테그럴 바운더리들상에 있을 것이다. 대부분의 명령들의 스토리지 오퍼랜드들은 바운더리-정렬 요건들을 갖지 않는다.
명령들 및 데이터 오퍼랜드들을 위한 분리된 캐시들을 구현하는 디바이스들 상에서, 그 저장이 연속적으로 페치되는 명령들을 변경하는지 여부에 상관없이, 만약 프로그램이 명령들이 연속적으로 페치되는 캐시 라인 내에 저장한다면 상당한 딜레이를 겪게 될 수 있다.
일 실시예에서, 발명은 소프트웨어로 실시될 수 있다. (이 소프트웨어는 때로는 라이센스된 내부 코드, 펌웨어, 마이크로코드, 밀리코드, 피코코드 등으로 일컬어지고, 이것들 중 어떤 것이든지 간에 본 발명에 부합할 것이다.) 도 11을 참조하면, 본 발명을 구현하는 소프트웨어 프로그램 코드는 일반적으로 CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브와 같은 롱-텀 스토리지 매체 디바이스들(5011)로부터 호스트 시스템(5000)의 프로세서(5001)에 의해 억세스된다. 소프트웨어 프로그램 코드는, 예를 들어, 디스켓, 하드 드라이브, 또는 CD-ROM 등과 같은 데이터 처리 시스템에서 사용하기 위한 알려진 여러 가지 매체 중 어느 것에서나 구현될 수 있다. 코드는 그러한 매체 상에 배포되거나, 그러한 다른 시스템들의 사용자들에서 사용하기 위해, 네트워크(5010)를 통해 하나의 컴퓨터 시스템의 스토리지 또는 컴퓨터 메모리(5002)로부터 다른 컴퓨터 시스템들로 사용자들에게 배포될 수 있다.
소프트웨어 프로그램 코드는 여러 가지 컴퓨터 컴포넌트들의 기능 및 인터랙션 및 하나 또는 그 이상의 응용 프로그램들을 컨트롤하는 운영체제를 포함한다. 프로그램 코드는 스토리지 매체 디바이스(5011)로부터 상대적으로 고속 컴퓨터 스토리지(5002) - 이는 프로세서(5001)에 의한 처리를 위해 이용가능함 - 로 노멀하게 페이지(page) 된다. 메모리 내에, 물리적 매체 상에 소프트웨어 프로그램 코드를 구현하는 기술 및 방법, 및/또는 네트워크들을 통해 소프트웨어 코드를 배포하는 기술 및 방법은 잘 알려져 있으며 여기서는 더 언급되지 않을 것이다. 실체적 매체(예를 들어, 전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크들(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 것들로 한정되지는 않음) 상에 생성되고 저장될 때, 컴퓨터 프로그램 코드는 흔히 "컴퓨터 프로그램 제품"으로 언급된다. 컴퓨터 프로그램 제품 매체는 처리 회로에서 실행하기 위해 바람직하게는 컴퓨팅 시스템에서 처리 회로에 의해 일반적으로 판독가능하다.
도 12는 본 발명이 실시될 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 도시한다. 도 12의 시스템(5020)은, 주변 디바이스들을 포함하여, 개인용 컴퓨터, 워크스테이션 또는 서버와 같은 대표적인 베이스 컴퓨터 시스템(5021)를 포함한다. 베이스 컴퓨터 시스템(5021)은 하나 또는 그 이상의 프로세서들(5026) 및 버스를 포함한다. 버스는 알려진 기술들에 따라 프로세서(들)(5026)과 시스템(5021)의 다른 컴포넌트들 사이를 연결하여 통신을 가능하게 하기 위해 채용되는 것이다. 버스는 메모리(5025)와 롱텀(long-term) 스토리지(5027)에 프로세서(5026)를 연결한다. 롱텀 스토리지(5027)는, 예를 들어, 하드 드라이브(예를 들어, 자기 매체, CD, DVD 및 플래시 메모리를 포함함) 또는 테이프 드라이브를 포함할 수 있다. 또한 시스템(5021)은 사용자 인터페이스 어댑터를 포함할 수 있으며, 이 사용자 인터페이스 어댑터는 버스를 통해 마이크로프로세서(5026)를, 키보드(5024), 마우스(5023), 프린터/스캐너(5030) 및/또는 기타 인터페이스 디바이스들과 같은 하나 또는 그 이상의 인터페이스 디바이스들에 연결한다. 상기 기타 인터페이스 디바이스들에는, 예를 들어, 터치 센서티브 스크린, 디지타이즈드 엔트리 패드 등과 같은 사용자 인터페이스 디바이스일 수 있다. 또한, 버스는 디스플레이 어댑터를 통해 LCD 스크린 또는 모니터와 같은 디스플레이 디바이스(5022)를 마이크로프로세서(5026)에 연결한다.
시스템(5021)은 네트워크(5029)와 통신(5028)할 수 있는 네트워크 어댑터와 같은 방법으로 다른 컴퓨터들 또는 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터들의 예는 통신 채널(communications channels), 토큰 링(token ring), 이더넷(Ethernet) 또는 모뎀(Modems)이다. 이와는 다르게, 시스템(5021)은 CDPD(셀룰러 디지털 패킷 데이터) 카드와 같은 무선 인터페이스를 사용하여 통신할 수 있다. 시스템(5021)은 근거리 통신망(LAN) 또는 광역통신망(WAN)에서 그와 같은 다른 컴퓨터들과 연관될 수 있고, 또는 시스템(5021)은 또 다른 컴퓨터 등으로의 클라이언트/서버 배치방식(arrangement)에서 클라이언트일 수 있다. 적절한 통신 하드웨어 및 소프트웨어뿐만 아니라 이들 구성들 모두는 당해 기술 분야에서는 알려져 있다.
도 13은 본 발명이 실시될 수 있는 데이터 처리 네트워크(5040)를 도시한다. 데이터 처리 네트워크(5040)는 무선 네트워크 및 유선 네트워크와 같은 복수의 개별 네트워크들을 포함할 수 있으며, 개별 네트워크들 각각은 복수의 개별 워크스테이션들(5041, 5042, 5043, 5044)을 포함할 수 있다. 또한, 당해 기술 분야에서 통상의 기술을 가진 자라면 알 수 있는 바와 같이. 하나 또는 그 이상의 LANs이 포함될 수 있다. LAN은 호스트 프로세서에 결합된 복수의 인텔리전트 워크스테이션들을 포함할 수 있다.
계속해서 도 13을 참조하면, 네트워크들은 또한 게이트웨이 컴퓨터(클라이언트 서버(5046) 또는 어플리케이션 서버(원격 서버(5048) - 이것들은 데이터 저장소에 억세스할 수 있고 또한 워크스테이션(5045)으로부터 직접적으로 억세스될 수 있음)와 같은 메인프레임 컴퓨터들 또는 서버들을 포함할 수 있다. 게이트웨이 컴퓨터(5046)는 각각의 개별 네트워크 내에서 엔트리의 포인트로서의 역할을 한다. 게이트웨이는 하나의 네트워킹 프로토콜을 다른 네트워킹 프로토콜에 연결할 때 필요하다. 바람직하게는, 게이트웨이(5046)는 통신 링크를 사용하여 다른 네트워크(예를 들어, 인터넷(5047)에 결합될 수 있다. 게이트웨이(5046)는 또한 통신 링크를 사용하여 하나 또는 그 이상의 워크스테이션들(5041, 5042, 5043, 5044)에 직접적으로 결합될 수 있다. 게이트웨이 컴퓨터는 IBM사로부터 이용가능한 IBM eServerTM System z® 서버를 이용하여 구현될 수 있다.
도 12 및 도 13을 함께 참조하면, 본 발명을 구현할 수 있는 소프트웨어 프로그래밍 코드는 CD-ROM 드라이브 또는 하드 드라이브와 같은 롱텀 스토리지 매체(5027)로부터 시스템(5020)의 프로세서(5026)에 의해 억세스될 수 있다. 소프트웨어 프로그래밍 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템에서 사용하기 위한 알려진 여러 가지 매체 중 어느 것에서나 구현될 수 있다. 코드는 이러한 매체 상에 배포될 수 있고, 또는 그와 같은 다른 시스템들의 사용자들(5050, 5051)에 의해 사용되도록 하기 위해 다른 컴퓨터 시스템들에게 네트워크를 통해 하나의 컴퓨터 시스템의 메모리 또는 스토리지로부터 사용자들(5050, 5051)에게 배포될 수 있다.
이와는 다르게, 프로그래밍 코드는 메모리(5025)에 구현될 수 있고, 프로세서 버스를 사용하여 프로세서(5026)에 의해 억세스된다. 이러한 프로그래밍 코드는 여러 가지 컴퓨터 컴포넌트들 및 하나 또는 그 이상의 어플리케이션 프로그램들(5032)의 펑션 및 인터랙션을 컨트롤하는 운영체제를 포함한다. 프로그램 코드는 스토리지 매체(5027)로부터 고속 메모리(5025) - 이는 프로세서(5026)에 의한 처리를 위해 이용가능함 - 로 정상적으로(normally) 페이지된다. 물리적 매체 상에서, 메모리 내에 소프트웨어 프로그래밍 코드를 구현하는 기술 및 방법, 및/또는 네트워크들을 통해 소프트웨어 코드를 배포하는 기술 및 방법은 잘 알려져 있으며 여기서는 더 이상 언급되지 않을 것이다. 실체적 매체(예를 들어, 전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크들(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 예들로 한정되는 것은 아님) 상에서 생성되고 저장될 때, 프로그램 코드는 흔히 "컴퓨터 프로그램 제품"으로 언급된다. 바람직하게는 컴퓨터 프로그램 제품 매체는 처리 회로에서 실행하기 위해 컴퓨터 시스템에서 처리 회로에 의해 일반적으로 판독가능하다.
프로세서(프로세서의 다른 캐시들보다 노멀하게 더 빠르고 또한 더 작음)가 가장 쉽게 이용할 수 있는 캐시는 가장 낮은(L1 또는 레벨 1) 캐시이고 메인 저장소(메인 메모리)는 가장 높은 레벨의 캐시(만약 3 레벨이 있다면, L3)이다. 가장 낮은 레벨 캐시는 데이터 오퍼랜드들을 보유하는 데이터 캐시(D-캐시) 및 실행될 머신 명령들을 보유하는 명령 캐시(l-캐시)로 흔히 나눠진다.
도 14를 참조하면, 예시적인 프로세서 실시예가 프로세서(5026)에 대해 도시되어 있다. 일반적으로 하나 또는 그 이상 레벨들의 캐시(5053)는 프로세서 성능을 향상시키기 위해 버퍼 메모리 블록들에 채용된다. 캐시(5053)는 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 일반적인 캐시 라인들은 64, 128 또는 256 바이트의 메모리 데이터이다. 분리된 캐시들은 데이터를 캐싱하기 위해서라기보다 명령들을 캐싱하기 위해서 흔히 채용된다. 캐시 일관성(coherence)(메모리 및 캐시들에서의 라인들의 사본들의 일치화(synchronization))는 당해 기술 분야에서 잘 알려진 바와 같이 여러 가지 "스눕(snoop)" 알고리즘들에 의해 흔히 제공된다. 프로세서 시스템의 메인 메모리 스토리지(5025)는 흔히 캐시로 언급된다. 4 레벨들의 캐시(5053)를 갖는 프로세서 시스템에서, 메인 스토리지(5025)는 때로는 레벨 5(L5) 캐시로 언급된다. 왜냐하면 일반적으로 그것은 더 빠르고 컴퓨터 시스템가 이용가능한 비휘발성 스토리지(DASD, 테이프 등)의 일부분만을 보유하기 때문이다. 메인 스토리지(5025)는 운영체제에 의해 메인 스토리지(5025) 안으로 그리고 밖으로 페이지되는 데이터의 페이지들을 "캐시"한다.
프로그램 카운터(명령 카운터)(5061)는 실행될 현재의 명령의 주소를 추적한다. z/Architecture® 프로세서에서 프로그램 카운터는 64 비트이고 이전의 어드레싱 한계(addressing limits)를 지원하기 위해 31 또는 24 비트로 잘려질 수 있다. 프로그램 카운터는 일반적으로 컴퓨터의 PSW(프로그램 상태 워드)에 구현되어, 그것이 컨텍스트 전환(context switching) 동안 지속되도록 한다. 그리하여, 프로그램 카운터 값을 갖는 진행중인 프로그램은, 예를 들어, 운영체제에 의해 인터럽트될 수 있다(프로그램 환경으로부터 운영체제 환경으로의 컨텍스트 전환). 프로그램이 액티브가 아닐 때, 프로그램의 PSW는 프로그램 카운터 값을 유지하고, 운영체제가 실행중일 때 운영체제의 프로그램 카운터(PSW에서)가 사용된다. 일반적으로, 프로그램 카운터는 현재 명령의 바이트 수와 동일한 양으로 증가된다. 감소된 명령 세트 컴퓨팅(Reduced Instruction Set Computing, RISC) 명령들은 일반적으로 픽스된 길이이고, 한편 콤플렉스 명령 세트 컴퓨팅(Complex Instruction Set Computing, CISC) 명령들은 일반적으로 가변적인 길이이다. IBM z/Architecture®의 명령들은 2, 4 또는 6 바이트의 길이를 갖는 CISC 명령들이다. 프로그램 카운터(5061)는 예를 들어, 분기 명령의 분기 테이큰 동작(branch taken operation) 또는 컨텍스트 전환 동작에 의해 변경된다. 컨텍스트 전환 동작에서, 현재의 프로그램 카운터 값은 실행되고 있는 프로그램에 관한 상태 정보(예를 들어, 조건 코드들과 같은 것)과 함께 프로그램 상태 워드에 저장되고, 실행될 새로운 프로그램 모듈의 명령을 지시하는 새로운 프로그램 카운터 값이 로드된다. 프로그램 카운터(5061) 내에 분기 명령의 결과를 로딩함으로써 결정하거나 프로그램 내에서 루프를 돌도록 허용하기 위해, 분기 테이큰 동작(branch taken operation)이 수행된다.
일반적으로 명령 페치 유닛(5055)는 프로세서(5026)를 대신하여 명령들을 페치하기 위해 채용된다. 페치 유닛은 "다음의 순차적인 명령들", 분기 테이큰 명령들의 타겟 명령들, 또는 컨텍스트 전환에 후속하는 프로그램의 첫 번째 명령들을 페치한다. 현대의 명령 페치 유닛은 프리페치된 명령들이 사용될 수 있는 가능성에 기초하여 추적에 근거하여 명령들을 프리페치하는 프리페치 기술들을 흔히 채용한다. 예를 들어, 페치 유닛은 16 바이트의 명령 - 이는 그 다음의 순차적인 명령 및 그 이후의 순차적인 명령들의 추가 바이트들을 포함함 - 을 페치할 수 있다.
그런 다음, 페치된 명령들은 프로세서(5026)에 의해 실행된다. 일 실시예에서, 페치된 명령(들)은 페치 유닛의 디스패치 유닛(5056)으로 패스된다. 디스패치 유닛(5056)은 명령(들)을 디코딩하고, 적절한 유닛들(5057, 5058, 5060)로 디코딩된 명령(들)에 관한 정보를 전달한다. 실행 유닛(5057)은 일반적으로 명령 페치 유닛(5055)으로부터의 디코딩된 산술 명령들(arithmetic instructions)에 관한 정보를 수신할 것이고, 명령의 opcode에 따라 오퍼랜드들에 관해 산술 연산들(arithmetic operations)을 수행할 것이다. 오퍼랜드들은 바람직하게는, 메모리(5025), 구성된 레지스터들(5059)로부터 또는 실행되고 있는 명령의 직접 필드(immediate field)로부터 실행 유닛(5057)로 제공된다. 저장될 때, 실행의 결과들은 메모리(5025), 레지스터들(5059)에 또는 다른 머신 하드웨어(예를 들어, 컨트롤 레지스터들, PSW 레지스터들 등)에 저장된다.
일반적으로 프로세서(5026)는 명령의 펑션을 실행하기 위한 하나 또는 그 이상의 유닛들(5057, 5058, 5060)을 갖는다. 도 20a를 참조하면, 실행 유닛(5057)은 인터페이싱 로직(5071)을 통해 구성된 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 로드 저장 유닛(5060), 기타 프로세서 유닛들(5065)과 통신할 수 있다. 실행 유닛(5057)은, 연산 로직 유닛(arithmetic logic unit, ALU)(5066)이 연산할 정보를 보유하기 위해 몇몇의 레지스터 회로들(5067, 5068, 5069)을 채용할 수 있다. ALU는 논리곱(AND), 논리합(OR), 배타논리합(XOR), 로테이트(rotate) 및 시프트와 같은 논리 함수뿐만이 아니라 더하기, 빼기, 곱하기 및 나누기와 같은 산술 연산들을 수행한다. 바람직하게는, ALU는 설계에 의존하는 특수한 연산들을 지원한다. 다른 회로들은, 예를 들어, 조건 코드들 및 복구 지원 로직을 포함하는 다른 구성된 장치들(5072)을 제공할 수 있다. 일반적으로, ALU 연산의 결과는 출력 레지스터 회로(5070)에 보유(hold)되고, 이 출력 레지스터 회로(5070)는 여러 가지 다른 처리 펑션들로 그 결과를 전달할 수 있다. 많은 프로세서 유닛들의 배치방식(arrangement)이 있다. 이 도면은 본 발명의 일 실시예에 관한 이해를 제공하려는 의도일 뿐이다.
예를 들어, ADD 명령은 산술 및 논리 기능을 갖는 실행 유닛(5057)에서 실행될 것이고, 한편 예를 들어 플로팅 포인트 명령은 특수한 플로팅 포인트 기능을 갖는 플로팅 포인트 실행에서 실행될 것이다. 바람직하게는, 실행 유닛은 오퍼랜드들에 관해 opcode 정의 펑션을 수행함으로써 명령에 의해 식별된 오퍼랜드들에 관해 연산한다. 예를 들어, ADD 명령은 명령의 레지스터 필드들에 의해 식별되는 두 개의 레지스터들(5059)에서 발견되는 오퍼랜드들에 관해 실행 유닛(5057)에 의해 실행될 수 있다.
실행 유닛(5057)은 두 개의 오퍼랜드들에 관해 산술 덧셈(arithmetic addition)을 수행하며, 그 결과를 제3 오퍼랜드에 저장한다. 여기서, 제3 오퍼랜드는 두 개의 소스 레지스터들 중 하나 또는 제3 레지스터일 수 있다. 바람직하게는, 실행 유닛은 연산 로직 유닛(ALU)(5066)을 이용한다. 이 ALU(5066)는 더하기, 빼기, 곱하기, 나누기 중 어떤 것이든지 포함하는 여러 가지 대수 펑션들(algebraic functions) 뿐만이 아니라 시프트, 로테이트, 논리곱, 논리합 및 배타논리합과 같은 여러가지 논리 펑션을 수행할 수 있다. 일부 ALU들(5066)은 스칼라 연산들을 위해 설계되었고 일부는 플로팅 포인트를 위해 설계되었다. 데이터는 아키텍쳐에 따라 빅 엔디언(Big Endian)(여기서 최하위 바이트(least significant byte)는 가장 높은 바이트 주소임) 또는 리틀 엔디언(Little Endian)(여기서 최하위 바이트는 가장 낮은 바이트 주소임)일 수 있다. IBM z/Architecture®은 빅 엔디언이다. 부호 필드들(signed fields)은 아키텍쳐에 따라, 부호(sign) 및 크기, 1의 보수 또는 2의 보수일 수 있다. 2의 보수에서 음의 값 또는 양의 값이 단지 ALU 내에서 덧셈만을 필요로 하므로, ALU가 뺄셈을 설계할 필요가 없다는 점에서 2의 보수가 유리하다. 숫자들은 흔히 약칭되는데, 12 비트 필드는 예를 들어, 4,096 바이트 블록의 주소를 정의하고 흔히 4 Kbyte(Kilobyte) 블록으로 기술된다.
도 15b를 참조하면, 분기 명령을 실행하기 위한 분기 명령 정보는 일반적으로 분기 유닛(5058)으로 보내지는데, 이 분기 유닛(5058)은 다른 조건적 동작들이 완료되기 전에 그 분기의 결과를 예측하도록 분기 이력 테이블(5082)과 같은 분기 예측 알고리즘을 흔히 채용한다. 현재의 분기 명령의 타겟은, 그 조건적 동작들이 완료되기 전에 페치되고 추측에 기초하여 실행될 것이다. 조건적 동작들이 완료될 때, 추측에 기초하여 실행된 분기 명령들은 조건적 동작 및 추측된 결과의 조건들에 기초하여 완료되거나 폐기된다. 일반적인 분기 명령은, 만약 그 조건 코드가 분기 명령의 분기 요건을 충족한다면, 조건 코드들을 테스트하고 타겟 주소로 분기할 수 있고, 타겟 주소는, 예를 들어, 레지스터 필드들 또는 그 명령의 직접 필드에서 발견되는 것들을 포함하는 몇 개의 수들에 기초하여 계산될 수 있다. 분기 유닛(5058)은 복수의 레지스터 입력 회로들(5075, 5075, 5077) 및 출력 레지스터 회로(5080)를 갖는 ALU(5074)를 채용할 수 있다. 분기 유닛(5058)은, 예를 들어, 범용 레지스터들(5059), 디코드 디스페치 유닛(5056) 또는 기타 회로들(5073)과 통신할 수 있다.
명령들의 그룹의 실행은 여러 가지 이유들로 인터럽트될 수 있는데, 이러한 이유들에는, 예를 들어, 운영체제에 의해 개시되는 컨텍스트 전환, 컨텍스트 전환을 초래하는 프로그램 예외 또는 에러, 컨텍스트 전환 또는 복수의 프로그램들의 멀티-쓰레딩 액티비티(멀티-쓰레드 환경에서)을 초래하는 I/O 인터럽션 신호가 포함된다. 바람직하게는 컨텍스트 전환 액션은 현재 실행중인 프로그램에 관한 상태 정보를 저장하고, 그런 다음 호출되고 있는 또 다른 프로그램에 관한 상태 정보를 로드한다. 상태 정보는, 예를 들어, 하드웨어 레지스터들 또는 메모리에 저장될 수 있다. 바람직하게는, 상태 정보는 실행될 다음의 명령, 조건 코드들, 메모리 변환 정보 및 구성된 레지스터 내용을 지시하는 프로그램 카운터 값을 포함한다. 컨텍스트 전환 액티비티는, 하드웨어 회로들, 응용 프로그램들, 운영체제 프로그램들 또는 펌웨어 코드(마이크로코드, 피코코드 또는 라이센스된 내부 코드(LIC)) 각각으로 또는 이것들의 조합으로 실행될 수 있다.
프로세서는 명령 정의 방법들(instruction defined methods)에 따라 오퍼랜드들에 억세스한다. 명령은 명령의 일부의 값을 사용하는 직접 오퍼랜드(immediate operand)를 제공할 수 있고, 범용 레지스터들 또는 전용 레지스터들(예를 들어, 플로팅 포인트 레지스터들)을 분명하게 지시하는 하나 또는 그 이상의 레지스터 필드들을 제공할 수 있다. 명령은 오퍼랜드들로서 opcode 필드에 의해 식별되는 암시적 레지스터들(implied registers)을 이용할 수 있다. 명령은 오퍼랜드들을 위해 메모리 위치들을 이용할 수 있다. 오퍼랜드의 메모리 위치는 레지스터, 직접 필드(immediate field), 또는 레지스터들과 직접 필드의 조합에 의해 제공될 수 있고, 이는 z/Architecture® 장 변위(long displacement) 장치가 전형적인 예이며, 여기서 명령은 베이스 레지스터, 인덱스 레지스터 및 직접 필드(변위 필드) - 이것들은 예를 들어 메모리에서 오퍼랜드의 주소를 제공하기 위해 함께 더해짐 - 를 정의한다. 만약 다르게 표시되지 않는다면, 여기서의 위치는 일반적으로 메인 메모리(메인 스토리지) 내 위치를 암시한다.
도 15c를 참조하면, 프로세서는 로드/저장 유닛(5060)을 사용하여 스토리지에 억세스한다. 로드/저장 유닛(5060)은 메모리(5053)에서 타겟 오퍼랜드의 주소를 획득하고 레지스터(5059) 또는 또 다른 메모리 위치(5053)에 오퍼랜드를 로딩함으로써 로드 동작을 수행할 수 있고, 또는 메모리(5053)에서 타겟 오퍼랜드의 주소를 획득하고 레지스터(5059) 또는 메모리(5053) 내 타겟 오퍼랜드 위치에 또 다른 메모리 위치(5053)로부터 획득된 데이터를 저장함으로써 저장 동작을 수행할 수 있다. 로드/저장 유닛(5060)은 추측에 근거(speculative)할 수 있고, 명령 시퀀스에 비해 순서가 정렬되지 않은(out-of-order) 시퀀스로 메모리에 억세스할 수 있지만, 로드/저장 유닛(5060)은 명령들이 순서대로 실행된 것으로 프로그램들에 대한 외관(appearance)을 유지해야 한다. 로드/저장 유닛(5060)은 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 캐시/메모리 인터페이스(5053) 또는 기타 엘리먼트들(5083)과 통신할 수 있고, 여러 가지 레지스터 회로들, ALU들(5085) 및 컨트롤 로직(5090)을 포함하여, 스토리지 주소들을 계산하고 또한 파이프라인 시퀀싱을 제공하여 순서대로 동작들을 계속하도록 한다. 어떤 동작들은 순서가 바뀔 수 있으나, 당해 기술 분야에 잘 알려진 바와 같이, 로드/저장 유닛은, 순서대로 수행됨으로써 그 프로그램에 그 순서 바뀐 동작들이 나타나도록 하는 기능을 제공한다.
바람직하게는, 응용 프로그램 "시즈(sees)"는 흔히 가상 주소들로서 언급된다. 가상 주소들은 때로는 "논리적 주소들(logical addresses)" 및 "유효 주소들(effective addresses)"로 언급된다. 이들 가상 주소들은 여러 가지 동적 주소 변환(DAT) 기술들 중 하나에 의해 물리적 메모리 위치로 다시 보내진다는 점에서 가상이다. 여러 가지 동적 주소 변환(DAT) 기술들에는, 단순히 오프셋 값으로 가상 주소를 프리픽싱하는 것, 하나 또는 그 이상의 변환 테이블들을 통해 가상 주소를 변환하는 것이 포함될 수 있으나, 이러한 것들로 한정되는 것은 아니다. 바람직하게는, 변환 테이블들은 적어도 세그먼트 테이블 및 페이지 테이블 각각 또는 이것들의 조합을 포함하며, 바람직하게는, 세그먼트 테이블은 페이지 테이블을 지시하는 엔트리를 갖는다. z/Architecture®에서는, 변환의 계층이 제공되는데, 이 변환의 계층에는 영역 1 테이블, 영역 2 테이블, 영역 3 테이블, 세그먼트 테이블 및 선택적인 페이지 테이블이 포함된다. 주소 변환의 성능은 흔히 변환 룩어사이드 버퍼(TLB)를 이용하여 향상되는데, 이 변환 룩어사이드 버퍼는 연관된 물리적 메모리 위치에 가상 주소를 매핑하는 엔트리들을 포함한다. 엔트리들은, DAT가 변환 테이블들을 사용하여 가상 주소를 변환할 때, 생성된다. 그런 다음, 가상 주소의 연속적인 사용은 느린 연속적인 변환 테이블 억세스들보다 오히려 빠른 TLB의 엔트리를 이용할 수 있다. TLB 내용은 LRU(Least Recently used)를 포함하는 여러 가지 대체 알고리즘들에 의해 관리될 수 있다.
프로세서가 멀티-프로세서 시스템의 프로세서인 경우, 각각의 프로세서는 I/O, 캐시들, TLB들 및 메모리와 같은 공유된 리소스들이 일관성(coherency)을 위해 인터락을 유지하는 역할을 한다. 일반적으로, "스눕" 기술들은 캐시 일관성을 유지함에 있어서 이용될 것이다. 스눕 환경에서, 각각의 캐시 라인은 공유를 용이하게 하기 위해, 공유 상태(shared state), 독점 상태(exclusive state), 교환 상태(changed state), 무효 상태(invalid state) 중 하나에 있는 것으로 표시될 수 있다.
I/O 유닛들(5054, 도 14)은 프로세서에게, 예를 들어, 테이프, 디스크, 프린터들, 디스플레이들, 및 네트워크들을 포함하는 주변 디바이스들에 연결하기 위한 수단을 제공한다. I/O 유닛들은 소프트 드라이버들에 의해 컴퓨터 프로그램에 흔히 제공된다. IBM®의 System z®와 같은 메인프레임들에서, 채널 어댑터들 및 오픈 시스템 어댑터들은 운영체제와 주변 디바이스들 사이의 통신을 가능하게 하는 메인프레임의 I/O 유닛들이다.
나아가, 다른 유형들의 컴퓨팅 환경들은 본 발명의 하나 또는 그 이상의 측면들로부터 혜택을 받을 수 있다. 일 예로, 환경은 에뮬레이터(예, 소프트웨어 또는 다른 에뮬레이션 메커니즘들)을 포함할 수 있으며, 이 에뮬레이터에서 특정 아키텍쳐(예를 들어, 명령 실행, 주소 변환과 같은 구성된 펑션들, 및 구성된 레지스터들을 포함함) 또는 그것의 서브셋이 에뮬레이트된다(예를 들어, 프로세서 및 메모리를 갖는 네이티브 컴퓨터 시스템 상에서). 비록 그 에뮬레이터를 실행하는 컴퓨터가 에뮬레이트되고 있는 기능들과는 다른 아케텍쳐를 가질 수 있지만, 이러한 환경에서, 에뮬레이터의 하나 또는 그 이상의 에뮬레이션 펑션들은 본 발명의 하나 또는 그 이상의 측면들을 구현할 수 있다. 일 예로서, 에뮬레이션 모드에서, 에뮬레이트되고 있는 특정 명령 또는 동작은 디코딩되고, 적절한 에뮬레이션 펑션은 개별 명령 또는 동작을 구현하도록 만들어진다.
에뮬레이션 환경에서, 호스트 컴퓨터는, 예를 들어, 명령들 및 데이터를 저장하는 메모리, 메모리로부터 명령들을 페치하고 또한 선택적으로는 그 페치된 명령을 위한 로컬 버퍼링을 제공하는 명령 페치 유닛, 페치된 명령들을 수신하고 페치된 명령들의 유형을 결정하는 명령 디코드 유닛, 및 명령들을 실행하는 명령 실행 유닛을 포함한다. 디코드 유닛에 의해 결정됨에 따라, 실행은 메모리로부터 레지스터 내에 데이터를 로딩하는 것, 레지스터로부터 메모리로 다시 데이터를 저장하는 것, 또는 산술 또는 논리 연산의 몇몇 유형을 수행하는 것을 포함할 수 있다. 일 예에서, 각각의 유닛은 소프트웨어에서 구현된다. 예를 들어, 그 유닛들에 의해 수행되고 있는 동작들은 에뮬레이터 소프트웨어 내에서 하나 또는 그 이상의 서브루틴들로서 구현된다.
더 구체적으로는, 메인프레임에서, 구성된 머신 명령들은 프로그래머들, 통상적으로 오늘날 "C" 프로그래머들에 의해, 흔히 컴플라이어 어플리케이션(complier application)을 통해 사용되고 있다. 스토리지 매체에 저장되는 이들 명령들은 원래(natively) z/Architecture®IBM®서버에서 또는 이와는 다르게 다른 아키텍쳐들을 실행하는 머신들에서 실행될 수 있다. 그것들은 기존의 그리고 장래의 IBM® 메인프레임 서버들에서 그리고 IBM®의 다른 머신들(예, 파워 시스템 서버들 및 시스템 x® 서버들) 상에서 에뮬레이트될 수 있다. 그것들은 IBM®, Intel®, AMDTM 및 기타사에 의해 제조된 하드웨어를 사용하는 광범위한 머신들 상에서 리눅스를 실행하는 머신들에서 실행될 수 있다. 또한, z/Architecture® 하의 그 하드웨어 상에서의 실행 이외에, Hercules(www.hercules-390.org 참조) 또는 FSI(Fundamental Software, Inc)(www.funsoft.com 참조) - 여기서 일반적으로 실행은 에뮬레이션 모드임 - 에 의한 에뮬레이션을 사용하는 머신들 뿐만이 아니라 리눅스가 사용될 수 있다. 에뮬레이션 모드에서, 에뮬레이션 소프트웨어는 네이티브 프로세서에 의해 실행되어 에뮬레이트된 프로세서의 아키텍쳐를 에뮬레이트한다.
네이티브 프로세서(native processor)는 일반적으로 에뮬레이트된 프로세서의 에뮬레이션을 수행하기 위해 펌웨어(firmware) 또는 네이티브 운영체제를 포함하는 에뮬레이션 소프트웨어를 실행한다. 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍쳐의 명령들을 페치하고 실행하는 역할을 한다. 에뮬레이션 소프트웨어는 명령 바운더리들(instruction boundaries)을 추적하기 위해 에뮬레이트된 프로그램 카운터를 유지한다. 에뮬레이션 소프트웨어는 한 번에 하나 또는 그 이상의 에뮬레이트된 머신 명령들을 페치할 수 있고, 하나 또는 그 이상의 에뮬레이트된 머신 명령들을 네이티브 프로세서에 의해 실행하기 위한 네이티브 머신 명령들의 해당 그룹으로 변환시킬 수 있다. 이들 변환된 명령들은 캐시되어 더 빠른 변환이 수행될 수 있도록 할 수 있다. 그럼에도 불구하고, 운영체제들 및 에뮬레이트된 프로세서를 위해 작성된 어플리케이션들이 정확하게 동작하도록 보장하기 위해, 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍쳐의 아키텍쳐 규칙들을 유지해야 한다. 더 나아가, 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍쳐에 의해 식별된 리소스들을 제공해야 한다. 이 리소스들에는 컨트롤 레지스터들, 범용 레지스터들, 플로팅 포인트 레지스터들, 예를 들어, 세그먼트 테이블들 및 페이지 테이블들을 포함하는 동적 주소 변환 펑션, 인터럽트 메커니즘들, 컨텍스트 전환 메커니즘들, TOD(Time of Day) 클럭들 및 I/O 서브시스템들에 대한 구성된 인터페이스들이 포함된다. 그리하여 운영체제 또는 에뮬레이트된 프로세서 상에서 실행하도록 지정된 응용 프로그램이 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서 상에서 실행될 수 있도록 한다.
에뮬레이트되고 있는 특정 명령은 디코딩되고, 개별 명령의 펑션을 수행하기 위해 서브루틴이 호출(call)된다. 에뮬레이트된 프로세서의 펑션을 에뮬레이트하는 에뮬레이션 소프트웨어 펑션은, 예를 들어, "C" 서브루틴 또는 드라이버, 또는 특정 하드웨어를 위해 드라이브를 제공하는 몇몇 다른 방법들로 구현된다. 이는 바람직한 실시예의 설명을 이해한 후 당해 기술 분야에서 통상의 기술을 가진 자들이 도출해 낼 수 있을 것이다. 여러 가지 소프트웨어 및 하드웨어 에뮬레이션 특허들 - 예를 들어, Beausoleil 등의 미국 특허장(Letters Patent) 제5,551,013 "하드웨어 에뮬레이션을 위한 멀티프로세서(Multiprocessor for Hardware Emulation)", Scalzi 등의 미국 특허장 제6,009,261 "타겟 프로세서 상에서 호환가능하지 않은 명령들을 에뮬레이팅하기 위한 저장된 타겟 루틴들의 전처리(Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor)", Davidian 등의 미국 특허장 제5,574,873, "게스트 명령들을 에뮬레이트하는 직접 억세스 에뮬레이션 루틴들에 대한 게스트 명령을 디코딩하는 것(Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions)", Gorishek 등의 미국 특허장 제6,308,255, "시스템에서 논-네이티브 코드를 실행할 수 있도록 하는 코프로세서 지원에 사용되는 대칭형 멀티프로세싱 버스 및 칩셋(Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System)", Lethin 등의 미국 특허장 제6,463,582, "아키텍쳐 에뮬레이션을 위한 동적 최적화 객체 코드 변환 및 동적 최적화 객체 코드 변환 방법(Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method)", Eric Traut의 미국 특허장 제5,790,825, "호스트 명령들의 동적 리컴파일레이션을 통해 호스트 컴퓨터 상에서 게스트 명령들을 에뮬레이트하기 위한 방법(Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions)" 등, 그러나 이러한 것들로 한정되는 것은 아님 - 은, 당해 기술 분야에서 숙련된 자들이 이용할 수 있는 타겟 머신에 대한 다른 머신을 위해 구성된 명령 포맷의 에뮬레이션을 달성하는 알려진 여러 가지 방법들을 예시하고 있다.
도 16에는 에뮬레이트된 호스트 컴퓨터 시스템(5092)의 예가 제공되는데, 여기서는 호스트 아키텍쳐의 호스트 컴퓨터 시스템(5000')을 에뮬레이트한다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)에서, 호스트 프로세서(CPU)(5091)는 에뮬레이트된 호스트 프로세서(또는 가상 호스트 프로세서)이고 호스트 컴퓨터(5000')의 프로세서(5091)의 네이티브 명령 세트 아키텍쳐(native instruction set architecture)와는 다른 네이티브 명령 세트 아키텍쳐를 갖는 에뮬레이션 프로세서(5093)를 포함한다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)은 에뮬레이션 프로세서(5093)가 억세스가능한 메모리(5094)를 갖는다. 실시예에서, 메모리(5094)는 호스트 컴퓨터 메모리 부분(5096)과 에뮬레이션 루틴들 부분(5097)으로 파티션된다. 호스트 컴퓨터 메모리(5096)는 호스트 컴퓨터 아키텍쳐에 따라 에뮬레이트된 호스트 컴퓨터(5092)의 프로그램들이 이용할 수 있다. 에뮬레이션 프로세서(5093)는 에뮬레이트된 프로세서(5091)의 명령 이외의 아키텍쳐의 구성된 명령 세트의 네이티브 명령들, 에뮬레이션 루틴들 메모리(5097)로부터 획득된 네이티브 명령들을 실행하며, 시퀀스 & 억세스/디코드 루틴 - 이는 억세스되는 호스트 명령의 펑션을 에뮬레이트하기 위해 네이티브 명령 실행 루틴을 결정하도록 억세스되는 호스트 명령(들)을 디코딩할 수 있음 - 에서 획득되는 하나 또는 그 이상의 명령(들)을 채용함으로써 호스트 컴퓨터 메모리(5096) 내 프로그램으로부터 실행하기 위한 호스트 명령을 억세스할 수 있다. 호스트 컴퓨터 시스템(5000') 아키텍쳐를 위해 정의되는 다른 장치들은 구성된 장치 루틴들(Architected Facilities Routines)에 의해 에뮬레이트될 수 있는데, 이러한 것들에는 범용 레지스터들(General Purpose Registers), 컨트롤 레지스터들(Control Registers), 동적 주소 변환(Dynamic Address Translation) 및 I/O 서브시스템(Subsystem) 지원 및 프로세서 캐시 등과 같은 장치들이 포함된다. 에뮬레이션 루틴들(Emulation Routines)은 또한 에뮬레이션 프로세서(5093)(예를 들어, 범용 레지스터들 및 가상 주소들의 동적 변환)에서 이용가능한 펑션들을 이용하여 에뮬레이션 루틴들의 성능을 향상시킬 수 있다. 또한 전용 하드웨어(Special Hardware) 및 오프-로드 엔진들(Off-Load Engines)이 제공되어 호스트 컴퓨터(5000')의 펑션을 에뮬레이팅함에 있어서 프로세서(5093)를 지원할 수 있다.
본 명세서 내에 사용되는 용어는 단지 특정 실시예들을 기술할 목적으로 사용된 것이지 본 발명을 한정하려는 의도로 사용된 것은 아니다. 본 명세서에서 사용되는 바와 같이, 단수 형태인 "한", "일", 및 "하나" 등은 그 문맥에서 그렇지 않은 것으로 명시되어 있지 않으면, 복수 형태도 또한 포함하는 것으로 의도된다. 또한, "포함하다" 및/또는 "포함하는" 이라는 용어들은 본 명세서에서 사용될 때, 언급되는 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 특정하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들 및/또는 이것들의 그룹들의 존재 또는 부가를 배제하는 것은 아니라는 것이 이해되어야 할 것이다.
이하의 청구항들에서, 구조들, 재료들, 동작들, 및 단계 플러스 기능 구성요소들 또는 모든 수단의 등가물들은 구체적으로 청구되는 다른 청구된 구성요소들과 함께 그 기능을 수행하기 위한 구조, 재료, 또는 작용을 포함하는 것으로 의도된다. 본 발명의 설명 및 예시는 개시되는 형태로 본 발명의 모든 실시예들을 빠짐없이 총 망라한 것은 아니며, 또한 개시된 형태대로 본 발명을 한정하려는 의도는 아니다. 당해 기술 분야에서 통상의 기술을 가진 자라면 본 발명의 범위를 벗어나지 않고서 많은 변형 예들 및 개조 예들이 있을 수 있다는 것을 알 수 있다. 실시예는 본 발명의 원리들 및 실제 적용을 가장 잘 설명하기 위해 그리고 고려되는 구체적인 사용에 적합하게 여러 가지 변형 예들을 갖는 다양한 실시예들에 대해 당해 기술 분야에서 통상의 기술을 가진 자들이 발명을 이해할 수 있도록 하기 위해, 선택되고 기술되었다.

Claims (14)

  1. 메모리 억세스를 용이하게 하는 방법에 있어서,
    프로세서에 의해 MPFC(Modify PCI Function Controls: MPFC) 명령 - 상기 MPFC 명령은 어댑터의 위치를 찾아내기 위한 핸들(handle) 및 상기 어댑터에 의해 제공되는 I/O 주소들을 시스템 메모리에 억세스하는데 사용가능한 DMA(direct memory access) 주소들로 변환하기 위한 복수의 가용 변환 포맷들 중 하나의 선택된 변환 포맷을 명시적으로 표시하는 포맷 필드를 명시함(specify) - 을 실행하는 것에 기초하여, 상기 핸들을 통해(by way of the handle) 상기 어댑터와 연관된 변환 포맷을 상기 MPFC 명령의 상기 포맷 필드 내에 표시된 상기 선택된 변환 포맷으로 세팅하는 단계(setting) - 상기 선택된 변환 포맷은 상기 어댑터에 대해 미리 등록되고, 상기 복수의 가용 변환 포맷들은 선택된 중앙처리유닛 동적주소변환(CPU DAT) 호환가능 포맷, 하나 혹은 그 이상의 확장된 주소 변환 테이블들을 이용하는 선택된 I/O 확장 주소 변환 포맷, 주소변환이 바이패스(bypass) 되는 바이패스 포맷, 또는 어떠한 주소 변환 테이블들도 페치되지 않은 노 페치 포맷(no fetch format) 중 하나 혹은 그 이상을 포함함 -;
    상기 어댑터로부터 요청을 수신하는 것에 기초하여, 시스템 메모리에 억세스하는데 사용가능한 DMA 주소를 제공하는데 사용될 상기 선택된 변환 포맷의 표시(indication)를 런타임시에(at runtime) 획득하는 단계 - 상기 선택된 변환 포맷은 상기 MPFC 명령의 실행에 기초하여 세팅되고, 상기 요청은 시스템 메모리에 억세스하는데 사용가능한 DMA 주소를 제공하는데 사용될 초기 주소(initial address)를 가짐 -;
    상기 획득된 변환 포맷 및 상기 초기 주소 - 상기 초기 주소는 상기 어댑터에 의해 생성됨 - 에 기초하여 시스템 메모리에 억세스하는데 사용가능한 DMA 주소를 결정하는 단계; 및
    상기 DMA 주소에 어댑터 데이터를 저장하거나 상기 DMA 주소로부터 어댑터 데이터를 페치(fetch)하는 단계를 포함하는, 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 획득하는 단계는 상기 변환 포맷이 상기 바이패스 포맷이라는 표시를 획득하고, 상기 결정하는 단계는, 상기 변환 포맷이 상기 바이패스 포맷인 것에 기초하여 시스템 메모리에 억세스하는데 사용가능한 DMA 주소가 상기 초기 주소임을 결정하는, 방법.
  4. 제3항에 있어서,
    상기 바이패스 포맷은 신뢰 어댑터(trusted adapter)인 상기 어댑터에 기초하여 선택되는, 방법.
  5. 제1항에 있어서,
    상기 획득하는 단계는, 상기 변환 포맷이 상기 노 페치 포맷이라는 표시를 획득하고, 상기 결정하는 단계는, 상기 초기 주소 및 DMA 주소를 결정하는데 사용될 가장 높은 레벨의 주소 변환 테이블에 대한 포인터를 이용하여, 시스템 메모리에 억세스하는데 사용가능한 DMA 주소를 결정하는, 방법.
  6. 제1항에 있어서,
    상기 획득하는 단계는, 상기 변환 포맷이 상기 선택된 CPU DAT 호환가능 포맷이라는 표시를 획득하고, 상기 결정하는 단계는, 상기 초기 주소 및 하나 또는 그 이상의 CPU DAT 호환가능 변환 테이블들을 사용하여 DMA 주소를 결정하는, 방법.
  7. 제6항에 있어서, 상기 CPU DAT 호환가능 포맷은 4k CPU DAT 호환가능 포맷 또는 1M CPU DAT 호환가능 포맷 중 하나를 포함하는, 방법.
  8. 제1항에 있어서,
    상기 획득하는 단계는 상기 변환 포맷이 상기 선택된 I/O 확장된 주소 변환 포맷이라는 표시를 획득하며, 상기 결정하는 단계는 상기 초기 주소 및 하나 또는 그 이상의 I/O 변환 테이블들을 사용하여 DMA 주소를 결정하는, 방법.
  9. 제8항에 있어서, 상기 선택된 I/O 확장된 주소 변환 포맷은, 4k 페이지 포맷을 갖는 4k 주소 변환 테이블들, 4k 페이지 포맷을 갖는 1M 주소 변환 테이블들, 또는 1M 페이지 포맷을 갖는 1M 주소 변환 테이블들 중 하나를 포함하는, 방법.
  10. 제1항에 있어서, 상기 획득하는 단계는, 사용될 변환 포맷의 표시를 획득하기 위해 상기 어댑터와 연관된 디바이스 테이블 엔트리 내의 포맷 인디케이터(format indicator)를 체크하는 단계를 포함하는, 방법.
  11. 제1항에 있어서, 상기 세팅하는 단계는 상기 어댑터와 연관된 디바이스 테이블 엔트리에 상기 선택된 변환 포맷을 표시하는 단계를 포함하는, 방법.
  12. 제1항에 있어서, 상기 어댑터에 대해 등록된 변환 포맷은 또 다른(another) 어댑터에 대해 등록된 또 다른 변환 포맷과는 다른, 방법.
  13. 메모리 억세스를 용이하게 하기 위한 컴퓨터 시스템으로서, 상기 컴퓨터 시스템은:
    메모리; 및
    상기 메모리와 통신하는 프로세서;를 포함하고,
    상기 컴퓨터 시스템은, 청구항 제1항, 제3항 내지 제12항 중 어느 한 항에 기재된 방법의 모든 단계들을 수행하도록 구성된, 컴퓨터 시스템.
  14. 컴퓨터 판독가능 매체로서,
    상기 컴퓨터 판독가능 매체는 컴퓨터 프로그램 코드를 포함하고,
    상기 컴퓨터 프로그램 코드는, 데이터 처리 디바이스 상에서 로드되어 실행될 때, 청구항 제1항, 제3항 내지 제12항 중 어느 한 항에 기재된 방법의 모든 단계들을 수행하도록 특화된(specially adapted) 명령들을 포함하는,
    컴퓨터 판독가능 매체.
KR1020137000269A 2010-06-23 2010-11-08 어댑터 펑션들을 위한 변환 포맷들의 런타임 결정 KR101464897B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/821,171 US8650337B2 (en) 2010-06-23 2010-06-23 Runtime determination of translation formats for adapter functions
US12/821,171 2010-06-23
PCT/EP2010/067025 WO2011160709A1 (en) 2010-06-23 2010-11-08 Runtime determination of translation formats for adapter functions

Publications (2)

Publication Number Publication Date
KR20130032353A KR20130032353A (ko) 2013-04-01
KR101464897B1 true KR101464897B1 (ko) 2014-11-24

Family

ID=43782903

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137000269A KR101464897B1 (ko) 2010-06-23 2010-11-08 어댑터 펑션들을 위한 변환 포맷들의 런타임 결정

Country Status (13)

Country Link
US (1) US8650337B2 (ko)
EP (1) EP2585925B1 (ko)
JP (1) JP5731641B2 (ko)
KR (1) KR101464897B1 (ko)
CN (1) CN102947808B (ko)
AU (1) AU2010355800B2 (ko)
CA (1) CA2800630C (ko)
IL (1) IL223588B (ko)
PT (1) PT2585925E (ko)
RU (1) RU2556418C2 (ko)
SG (1) SG186104A1 (ko)
WO (1) WO2011160709A1 (ko)
ZA (1) ZA201209700B (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses
US8615645B2 (en) 2010-06-23 2013-12-24 International Business Machines Corporation Controlling the selectively setting of operational parameters for an adapter
US8510599B2 (en) * 2010-06-23 2013-08-13 International Business Machines Corporation Managing processing associated with hardware events
US8572635B2 (en) 2010-06-23 2013-10-29 International Business Machines Corporation Converting a message signaled interruption into an I/O adapter event notification
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
WO2012103253A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
US9348757B2 (en) 2012-10-08 2016-05-24 International Business Machines Corporation System supporting multiple partitions with differing translation formats
US9600419B2 (en) 2012-10-08 2017-03-21 International Business Machines Corporation Selectable address translation mechanisms
US9740624B2 (en) * 2012-10-08 2017-08-22 International Business Machines Corporation Selectable address translation mechanisms within a partition
US9355040B2 (en) 2012-10-08 2016-05-31 International Business Machines Corporation Adjunct component to provide full virtualization using paravirtualized hypervisors
US9355032B2 (en) 2012-10-08 2016-05-31 International Business Machines Corporation Supporting multiple types of guests by a hypervisor
US9280488B2 (en) 2012-10-08 2016-03-08 International Business Machines Corporation Asymmetric co-existent address translation structure formats
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
US20150261688A1 (en) * 2014-03-14 2015-09-17 International Business Machines Corporation Extended page table for i/o address translation
US9678892B2 (en) * 2015-09-01 2017-06-13 International Business Machines Corporation Flexible I/O DMA address allocation in virtualized systems
US10095620B2 (en) * 2016-06-29 2018-10-09 International Business Machines Corporation Computer system including synchronous input/output and hardware assisted purge of address translation cache entries of synchronous input/output transactions
US11442760B2 (en) * 2016-07-01 2022-09-13 Intel Corporation Aperture access processors, methods, systems, and instructions
US10140214B2 (en) 2016-08-29 2018-11-27 Red Hat Israel, Ltd. Hypervisor translation bypass by host IOMMU with virtual machine migration support
US10387325B2 (en) 2017-11-28 2019-08-20 International Business Machines Corporation Dynamic address translation for a virtual machine
CN114124688B (zh) * 2020-08-11 2024-02-20 中国电信股份有限公司 配置方法及系统、计算机可存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007257636A (ja) 2006-03-21 2007-10-04 Internatl Business Mach Corp <Ibm> Dmaアドレス空間を割当てるための方法、システム、およびコンピュータ・プログラム

Family Cites Families (190)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5242031A (en) * 1975-09-29 1977-04-01 Hitachi Ltd Information processing unit
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
AU7804381A (en) 1981-10-13 1983-05-05 International Business Machines Corp. 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
JPH0195347A (ja) * 1987-10-08 1989-04-13 Nec Corp アドレス変換方式
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
BR9508189A (pt) 1994-06-28 1997-08-12 Intel Corp Conversor de protocolo de interrupção de pci para isa e mecanismo de seleção
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
JPH08263424A (ja) 1995-03-20 1996-10-11 Fujitsu Ltd コンピュータ装置
EP0747872B1 (en) * 1995-06-07 1999-03-03 International Business Machines Corporation Video processor with addressing mode control
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
US5983332A (en) * 1996-07-01 1999-11-09 Sun Microsystems, Inc. Asynchronous transfer mode (ATM) segmentation and reassembly unit virtual address translation unit architecture
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
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
US6272257B1 (en) 1997-04-30 2001-08-07 Canon Kabushiki Kaisha Decoder of variable length codes
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
US6615305B1 (en) 1998-08-27 2003-09-02 Intel Corporation Interrupt pacing in data transfer unit
US20020147969A1 (en) 1998-10-21 2002-10-10 Richard A. Lethin 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
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
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
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
US7299266B2 (en) 2002-09-05 2007-11-20 International Business Machines Corporation Memory management offload for RDMA enabled network adapters
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
US20040139305A1 (en) * 2003-01-09 2004-07-15 International Business Machines Corporation Hardware-enabled instruction tracing
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
US7139892B2 (en) * 2003-05-02 2006-11-21 Microsoft Corporation Implementation of memory access control using optimizations
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
US7174550B2 (en) 2003-05-12 2007-02-06 International Business Machines Corporation Sharing communications adapters across a plurality of input/output subsystem images
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
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
US7290070B2 (en) 2003-05-12 2007-10-30 International Business Machines Corporation Multiple logical input/output subsystem facility
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
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
US7613109B2 (en) 2003-06-05 2009-11-03 Nvidia Corporation Processing data for a TCP connection using an offload unit
US7420931B2 (en) 2003-06-05 2008-09-02 Nvidia Corporation Using TCP/IP offload to accelerate packet filtering
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
US7146482B2 (en) 2003-11-25 2006-12-05 International Business Machines Corporation Memory mapped input/output emulation
US7552436B2 (en) 2003-11-25 2009-06-23 International Business Machines Memory mapped input/output virtualization
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
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
US7334107B2 (en) 2004-09-30 2008-02-19 Intel Corporation Caching support 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
US7340582B2 (en) 2004-09-30 2008-03-04 Intel Corporation Fault processing for direct memory access address translation
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
US7562366B2 (en) 2005-02-03 2009-07-14 Solarflare Communications, Inc. Transmit completion event batching
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
US7464191B2 (en) 2005-02-25 2008-12-09 International Business Machines Corporation System and method for host initialization for an 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
US7260664B2 (en) * 2005-02-25 2007-08-21 International Business Machines Corporation Interrupt mechanism on an IO 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
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
US7502872B2 (en) 2005-05-23 2009-03-10 International Bsuiness Machines Corporation Method for out of user space block mode I/O directly between an application instance and an I/O adapter
US7225287B2 (en) 2005-06-01 2007-05-29 Microsoft Corporation Scalable DMA remapping on a computer bus
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
US7475183B2 (en) 2005-12-12 2009-01-06 Microsoft Corporation Large page optimizations in a virtual machine environment
US20070136554A1 (en) 2005-12-12 2007-06-14 Giora Biran Memory operations in a virtualized system
US7398343B1 (en) 2006-01-03 2008-07-08 Emc Corporation Interrupt processing system
US7548999B2 (en) 2006-01-17 2009-06-16 Advanced Micro Devices, Inc. Chained hybrid input/output memory management unit
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
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
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)
US7487341B2 (en) * 2006-06-29 2009-02-03 Intel Corporation Handling address translations and exceptions of a heterogeneous resource of a processor using another processor resource
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
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
US7506084B2 (en) * 2006-10-17 2009-03-17 International Business Machines Corporation Method for communicating with an I/O adapter using cached address translations
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
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
US7617340B2 (en) 2007-01-09 2009-11-10 International Business Machines Corporation I/O adapter LPAR isolation with assigned memory space
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
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
US8635430B2 (en) 2010-06-23 2014-01-21 International Business Machines Corporation Translation of input/output addresses to memory addresses

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007257636A (ja) 2006-03-21 2007-10-04 Internatl Business Mach Corp <Ibm> Dmaアドレス空間を割当てるための方法、システム、およびコンピュータ・プログラム

Also Published As

Publication number Publication date
CA2800630A1 (en) 2011-12-29
IL223588B (en) 2018-02-28
WO2011160709A1 (en) 2011-12-29
KR20130032353A (ko) 2013-04-01
JP5731641B2 (ja) 2015-06-10
SG186104A1 (en) 2013-01-30
PT2585925E (pt) 2013-11-19
EP2585925B1 (en) 2013-10-16
EP2585925A1 (en) 2013-05-01
US20110320756A1 (en) 2011-12-29
CN102947808B (zh) 2015-12-02
ZA201209700B (en) 2014-05-28
RU2556418C2 (ru) 2015-07-10
RU2012150098A (ru) 2014-05-27
JP2013533544A (ja) 2013-08-22
CN102947808A (zh) 2013-02-27
US8650337B2 (en) 2014-02-11
CA2800630C (en) 2018-09-04
AU2010355800A1 (en) 2012-12-20
AU2010355800B2 (en) 2014-04-17

Similar Documents

Publication Publication Date Title
KR101464897B1 (ko) 어댑터 펑션들을 위한 변환 포맷들의 런타임 결정
CA2800636C (en) Translation of input/output addresses to memory addresses
EP2430552B1 (en) Multiple address spaces per adapter
EP2430557B1 (en) Resizing address spaces concurrent to accessing the address spaces
JP5736044B2 (ja) アダプタに関する操作パラメータの選択的設定の制御
KR101498351B1 (ko) 어댑터 펑션들용 측정 장치
WO2011160713A1 (en) Guest access to address spaces of adapter

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: 20171026

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20191029

Year of fee payment: 6