[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

KR101507665B1 - 통신 환경의 격리된 메모리 공간사이에서의 통신 개선 방법 - Google Patents

통신 환경의 격리된 메모리 공간사이에서의 통신 개선 방법 Download PDF

Info

Publication number
KR101507665B1
KR101507665B1 KR1020137010037A KR20137010037A KR101507665B1 KR 101507665 B1 KR101507665 B1 KR 101507665B1 KR 1020137010037 A KR1020137010037 A KR 1020137010037A KR 20137010037 A KR20137010037 A KR 20137010037A KR 101507665 B1 KR101507665 B1 KR 101507665B1
Authority
KR
South Korea
Prior art keywords
data
receiver
processor
transmitter
determining
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
KR1020137010037A
Other languages
English (en)
Other versions
KR20130114661A (ko
Inventor
안젤로 마키아노
리차드 타차
알렉산드라 빈터
구스타브 시트만 3세
제리 스티븐스
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20130114661A publication Critical patent/KR20130114661A/ko
Application granted granted Critical
Publication of KR101507665B1 publication Critical patent/KR101507665B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)
  • Debugging And Monitoring (AREA)

Abstract

동기식 데이터 전송으로부터 비동기식 데이터 전송으로 자동으로 변환. 송신기로부터 수신기로 전송되는 데이터는 동기식 데이터 전송 프로토콜을 사용하여 개시된다. 데이터가 비동기식으로 보내 질 것이라는 결정에 응답하여, 상기 데이터 전송은 동기식 데이터 전송으로부터 비동기식 데이터 전송으로 자동으로 변환된다.

Description

통신 환경의 격리된 메모리 공간사이에서의 통신 개선 방법{FACILITATING COMMUNICATION BETWEEN ISOLATED MEMORY SPACES OF A COMMUNICATION ENVIRONMENT}
본 발명의 한 실시예 (aspect)는, 일반적으로, 통신 환경내에서 통신과 관련되어 있으며, 특별히, 통신 환경의 격리된 메모리 공간사이에서 데이터의 전송 (transfer)을 용이하게 하는 것과 관련되어 있다.
격리된 메모리 공간사이에서 데이터를 전송하기 위하여, 네트워킹 기술 (networking technology) 및 프로토콜 (protocols)이 통상적으로 사용된다. 예를 들면, 이더넷 링크 (Ethernet link)상의 TCP/IP 프로토콜을 사용하여 하나의 격리된 메모리 공간으로부터 다른 격리된 메모리 공간으로 데이터가 보내질 수 있다. 현재의 네트워킹 기술은 데이터가 동기식으로 (synchronously) 또는 비동기식 (asynchronously)으로 보내질 수 있도록 해 준다. 이것은 전적으로 송신기의 입장에서의 선택이다.
데이터가 동기식으로 보내지면, 상기 송신기는 데이터 전송이 완료되기까지 일시 중단된다 (suspended). 다른 한편, 만약 데이터가 비동기식으로 보내지면, 그러면 (then) 상기 송신기는 동작들을 계속할 수 있다.
통신 환경에서 통신을 용이하게 하는 컴퓨터 프로그램 제품의 제공을 통하여 종래 기술의 단점이 극복되고 추가적인 장점이 제공된다. 상기 컴퓨터 프로그램 제품은 처리 회로 (processing circuit)에 의하여 판독 가능하고 방법을 수행하기 위해 상기 처리 회로에 의하여 실행될 명령들을 저장하는 저장 매체를 포함한다. 상기 방법은, 예를 들어, 동기식 데이터 전송으로부터 비동기식 데이터 전송으로 변환하기 위하여 사전-인가 (pre-authorization)를, 통신 환경의 송신기로부터 통신 환경의 프로세서에 의하여, 획득하는 단계; 통신 환경의 수신기로 데이터를 보내기 위한 요청 (a request)을, 상기 송신기로부터 상기 프로세서에 의하여, 획득하는 단계; 상기 수신기로 데이터를 보내는 단계를, 상기 프로세서에 의하여, 개시하는 단계 (initiating) - 상기 개시하는 단계는 동기식 데이터 전송을 채용함-; 상기 동기식 데이터 전송이 비동기식 데이터 전송으로 변환되도록 함을, 상기 프로세서에 의하여, 결정하는 단계; 및 상기 결정하는 단계에 응답하여, 상기 수신기로 데이터를 보내는 단계를 완료하기 위하여 상기 동기식 데이터 전송을 상기 비동기식 데이터 전송으로, 상기 프로세서에 의하여, 자동으로 변환하는 단계 - 상기 자동으로 변환하는 단계는 상기 사전-인가를 제외하고는 상기 송신기에 의한 조치들 (actions)과는 무관함 (independent) - 를 포함한다.
본 발명의 하나 또는 그 이상의 실시예들과 관련된 방법들 및 시스템들이 또한 설명되고 이하 청구된다. 나아가서, 본 발명의 하나 또는 그 이상의 실시예들과 관련된 서비스들이 또한 설명되고 이하 청구될 수 있다.
본 발명의 하나 또는 그 이상 실시예들의 기술을 통하여 추가적인 장점과 특징이 현실화된다. 본 발명의 다른 실시예들 및 특징들이 이하 자세히 설명되고 청구된 발명의 일부로서 고려된다.
본 발명의 하나 또는 그 이상의 실시예들이 예로서 본 명세서 결론 부분의 청구범위내에 구체적으로 명확하게 기재되어 있다. 본 발명의 전술한 기타 특징 및 장점들은 이하에 첨부된 도면들을 참조하여 기술된 상세한 설명에서 잘 알 수 있다.
도 1은 본 발명의 하나 또는 그 이상의 실시예들을 포함 (incorporate) 및/또는 사용하는 통신 환경의 한 예를 묘사한다;
도 2는 본 발명의 한 실시예에 따라서, 도 1의 논리적 파티션과 관련된 메모리 공간의 예를 묘사한다.
도 3은 본 발명의 한 실시예에 따라서, 사용된 동기식 아웃바운드 데이터 전송의 한 예를 묘사한다;
도 4는 본 발명의 한 실시예에 따라서, 동기식 데이터 전송으로부터 비동기식 데이터 전송으로 자동으로 변환하기 위하여 사용되는 컨트롤 구조의 예를 묘사한다;
도 5a는 본 발명의 한 실시예에 따라서, 동기식 데이터 전송으로부터 비동기식 데이터 전송으로 자동으로 변환하기 위한 로직의 한 실시예를 묘사한다;
도 5b는 본 발명의 한 실시예에 따라서, 비동기식 데이터 전송의 성공적 완료의 한 예를 회화적으로 (pictorially) 묘사한다;
도 6은 본 발명 하나 또는 그 이상의 실시예를 포함하는 컴퓨터 프로그램의 한 실시예를 묘사한다;
도 7은 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 호스트 컴퓨터 시스템의 한 실시예를 묘사한다;
도 8은 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 컴퓨터 시스템의 한 진보된 예를 묘사한다;
도 9는 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 다른 예를 묘사한다;
도 10은 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 컴퓨터 시스템의 다양한 요소들 (elements)의 한 실시예를 묘사한다;
도 11a는 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 도 10의 컴퓨터 시스템의 실행 (execution) 유닛의 한 실시예를 묘사한다;
도 11b는 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 도 10의 컴퓨터 시스템 브랜치 (branch) 유닛의 한 실시예를 묘사한다;
도 11c는 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 도 10의 컴퓨터 시스템 로드/스토어 (load/store) 유닛의 한 실시예를 묘사한다; 그리고
도 12는 본 발명 하나 또는 그 이상의 실시예를 포함 및 사용하기 위한 에뮬레이트된 (emulated) 호스트 컴퓨터 시스템의 한 실시예를 묘사한다.
본 발명의 한 실시예에 따라서, 동기식 데이터 전송으로부터 비동기식 데이터 전송으로 자동으로 변환하기 위한 능력 (capability)이 제공된다. 예를 들어, 동기식 데이터 전송은, 가령 데이터의 수신기가 전송의 시점에 데이터를 수신할 수 없는 것과 같은, 데이터 전송을 완료하는데 지연이 존재한다는 결정에 응답하여, 비동기식 데이터 전송으로 자동으로 변환된다. 동기식 데이터 전송으로부터 비동기식 데이터 전송으로의 상기 변환은 자동으로 수행되는데, 이는 그 변환이 송신기 (또는 수신기)의 요청에 의한 것이 아니라는 점과 송신기 (또는 수신기)가 데이터의 변환이 개시되는 시점에서 변환에 관해 알지 못한다는 점에서 그러하다. 더 나아가, 변환 시점에서, 송신기 (또는 수신기)는 변환에 어떠한 조치를 취하거나 관여할 필요가 없다.
본 발명의 하나 또는 그 이상의 실시예들을 포함 및/또는 사용하기 위한 통신 환경의 한 실시예가 도 1을 참조하여 기술된다. 한 예에서, 하나의 통신 환경 (100)은 중앙 프로세서 컴플렉스 (central processor complex (CPC)) (102)를 포함하는데, 이것은 인터내셔널 비지네스 머신즈 코포레이션 (International Business Machines Corporation (IBM®))이 제공한 z/Architecture®에 기반을 두고 있다. z/Architecture®의 특징들은 2010년 8월, IBM® 공보 번호 SA22-7832-08에서 발표된 “z/Architecture 동작 원리 (z/Architecture Principles of Operation)”라는 표제의 IBM® 간행물 (publication)에 기술되어 있는데, 그것의 전체가 참조 번호 (reference)로서 여기 포함된다. 중앙 프로세서 컴플렉스 (102)를 포함하는 한 시스템은 뉴욕주 아몬크에 소재하는 인터내셔널 비지네스 머신즈 코포레이션이 제공하는 zEnterprise 196 (zl96)이다. IBM® 및z/Architecture®는 등록 상표이고, zEnterprise 196 및 z196은 미국 뉴욕주 아몬크에 소재하는 인터내셔널 비지네스 머신즈 코포레이션의 상표이다. 여기에서 사용되는 다른 이름들도 인터내셔널 비지네스 머신즈 코포레이션 또는 다른 회사들의 등록 상표, 상표 또는 제품 이름들일 수 있다.
중앙 프로세서 컴플렉스 (102)는 가령, 하나 또는 그 이상의 파티션들 (104), 하이퍼바이저 (hypervisor) (106), 하나 또는 그 이상의 중앙 프로세서들 (108), 및 입출력 (input/output, I/O) 서브시스템 (110)의 하나 또는 그 이상의 컴포넌트들을 포함한다. 이 예에서, 하나 또는 그 이상의 파티션들 (104)는 논리적 파티션들 (LPARs이라고도 알려짐)로, 별도 시스템으로 가상화된 (virtualized) 한 세트의 시스템 하드웨어 자원을 포함한다.
각각의 논리적 파티션 (104)는 별도 시스템으로서 펑션이 가능하다. 다시 말하면, 각각의 논리적 파티션은 독립적으로 리셋될 수 있고, 원하면, 초기에 운영 체제 (OS) (120)가 로드될 수 있으며, 다른 프로그램들과도 동작이 가능하다. 논리적 파티션 내에서 실행되는 (running) 운영 체제, 또는 응용 프로그램은 시스템 전부를 완전히 (full and complete) 액세스할 수 있는 것으로 보이지만, 실제로는, 시스템의 일부분만이 이용가능할 뿐이다. 펌웨어 (firmware)라고 일컫는, 하드웨어 및 라이센스된 내부 코드 (licensed internal code (LIC))의 조합이 한 논리적 파티션내의 프로그램이 다른 논리적 파티션내의 프로그램과 간섭 (interfere)이 일어나지 않도록 한다. 이것은 여러 다른 논리적 파티션들이 시분할 방식으로 (in a time slice manner) 단일 또는 다수의 물리적 프로세서상에서 동작할 수 있도록 해 준다. 이 예에서, 많은 논리적 파티션들은 하나의 상주 (resident) 운영 체제 (120)을 갖는데, 이것은 하나 또는 그 이상의 논리적 파티션들을 위한 것과는 다를 수 있다. 한 실시예에서, 운영 체제 (120)은 뉴욕주 아몬크에 소재하는 인터내셔널 비지네스 머신즈 코포레이션에서 제공하는 z/OS® 운영 체제이다.
여기서 사용되는, 펌웨어는, 예를 들어, 프로세서의 마이크로코드, 밀리코드 및/또는 매크로코드 (macrocode)를 포함한다. 이것은, 예를 들어, 더 높은-수준의 머신 코드 (higher-level machine code)의 구현에 사용되는 하드웨어-수준의 명령들 및/또는 데이터 구조들을 포함한다. 한 실시예에서, 그것은, 예를 들어, 통상적으로 재산권이 있는 코드 (proprietary code)를 포함하며, 이것은 신탁된 소프트웨어를 포함하는 마이크로코드 또는 하부 하드웨어에 특정한 마이크로코드로서 통상적으로 배포되고, 시스템 하드웨어에 대한 운영 체제 액세스를 컨트롤한다.
논리적 파티션들 (104)는, 중앙 프로세서 (108)상에서 실행되는 펌웨어에 의해 구현되는, 하이퍼바이저 (106)에 의해서 관리된다. 하이퍼바이저 (106)의 한 예는 뉴욕주 아몬크에 소재하는 인터내셔널 비지네스 머신즈 코포레이션이 제공하는 프로세서 리소스/시스템 관리자 (Processor Resource/Systems Manager (PR/SM™))이다.
중앙 프로세서 (108)은 상기 논리적 파티션들에 할당되는 물리적 프로세서 리소스들이다. 예를 들어, 논리적 파티션 (104)는 하나 또는 그 이상의 논리적 프로세서들을 포함하는데, 이들 각각은 상기 파티션에 할당된 물리적 프로세서 리소스 (108)의 전체 (all) 또는 일부분 (a share)을 나타낸다. 특별한 파티션 (104)의 상기 논리적 프로세서들은 상기 파티션에 전속되어서 (be dedicated to) 상기 하부의 (underlying) 프로세서 리소스가 상기 파티션을 위해 유보되게 하거나 (reserved); 또는 다른 파티션과 공유되어서 상기 하부의 프로세서 리소스가 다른 파티션에도 잠재적으로 이용가능하게 될 수도 있다.
논리적 파티션들 (104) 및 하이퍼바이저 (106)은 각각 상기 중앙 프로세서들과 연관된 메인 메모리 (150)의 각 부분내에 상주하는 (residing in) 하나 또는 그 이상의 프로그램들을 포함한다. 한 예에서, 각각의 논리적 파티션은 메모리 공간으로 일컬어지는 메인 메모리의 일부에 할당되며, 이에 관해서는 도 2와 관련하여 더 상세히 기술된다.
도 2를 참조하면, 한 실시예에서, 메인 메모리 (150)은 복수의 메모리 공간들을 포함하는데, 각각은 메인 메모리내의 주소들의 범위 (a range )를 포함한다. 하나의 메모리 공간이 논리적 파티션 같은 엔티티(an entity) 또는 기타 엔티티에 할당될 수 있다. 도 2에서 도시한 예에서, 두 개의 메모리 공간이 두 개의 논리적 파티션에 각각 할당되어 있다. 한 메모리 공간은 여기서 송신기의 메모리 공간 (202)이라 하고, 다른 메모리 공간은 여기서 수신기의 메모리 공간 (204)이라 한다. 송신기와 수신기사이의 통신은 아래 더 상세히 기술한다. 송신기의 메모리 공간 (202)는 가령, 하나 또는 그 이상의 입력 큐들 (input queues) (210), 하나 또는 그 이상의 출력 큐들 (output queues) (212), 및 하나 또는 그 이상의 버퍼들 (buffers) (214)를 포함한다. 유사하게, 수신기의 메모리 공간 (204)도 하나 또는 그 이상의 입력 큐들 (220), 하나 또는 그 이상의 출력 큐들 (222), 및 하나 또는 그 이상의 버퍼들 (buffers) (224)를 포함한다. 상기 큐들 및 버퍼들의 사용에 대해서는 아래 더 자세히 기술된다.
상기 개별 메모리 공간들은 서로 격리되어 있어서, 펌웨어에 의한 컨트롤이 없이는 데이터가 한 메모리 공간에서 다른 메모리 공간으로 직접 라이트될 (written) 수 없다. 한 예에서, 이더넷 링크를 통해 TCP/IP 프로토콜을 사용하는 네트워킹 전송들이 한 메모리 공간으로부터 다른 메모리 공간으로 데이터를 전송하기 위하여 사용된다. 한 특정한 예에서, 인터내셔널 비지네스 머신즈 코포레이션이 제공하는 HiperSockets™이라 하는 기술이 상기 전송을 수행하기 위하여 사용된다.
HiperSockets™은 중앙 프로세서 컴플렉스내에서 고속의 TCP/IP 연결성 (connectivity)을 제공한다. 이것은 다른 논리적 파티션들내에서 실행중인 서버들사이에서 모든 물리적 케이블링 또는 외부 네트워킹 연결의 필요성을 제거해 준다. 대신, 통신은 프로세서의 상기 시스템 메모리를 통하여 이루어진다. 상기 HiperSockets™의 구현은 OSA-고속 큐 직접 입/출력 프로토콜 (OSA-Express Queued Direct I/O (QDIO) protocol)에 기반을 두고 있다. 상기 펌웨어는 OSA-Express QDIO 인터페이스의 링크 컨트롤층을 에뮬레이트한다.
네트워킹 기술을 사용하여 한 메모리 공간으로부터 다른 메모리 공간으로 데이터를 전송하는 것은, 예를 들면, 동기식으로 이루어지는데, 이 때문에 데이터 전송이 개시된 후, 송신기는 상기 전송이 완료될 때까지 일시 중단된다 (suspended). 한 메모리 공간으로부터 다른 메모리 공간으로의 동기식 데이터 전송의 한 예가 도 3을 참조하여 기술된다.
도 3을 참조하면, 송신기 (300), 예를 들어 송신기의 메모리 공간에서 실행되는 TCP/IP 스택 (stack) 또는 프로그램은 수신기 (310), 예를 들어 수신기의 메모리 공간의 다른 TCP/IP 스택 또는 프로그램으로 데이터를 보내도록 하는 요청을 개시한다. 상기 수신기의 메모리 공간은 상기 송신기의 메모리 공간과 격리되어 있으므로, 이 예에서는, 송신기로부터 수신기로 보내지는 데이터의 동기식 전송을 수행하기 위하여 네트워크 통신 프로토콜이 사용된다. 동기식 데이터 전송의 사용은 펌웨어의 컨트롤하에 한 장소 (location)에서 다른 곳으로 메모리 전송을 수행함에 의하여 상기 송/수신기 사이에 매우 빠르고 대기 시간이 낮은 (low latency) 직접 통신 패스 (path)를 제공한다. 한 예에서, 상기 메모리-투-메모리 데이터 전송은 HiperSockets™에 의하여 수행된다. 이 전송 메커니즘은 송신기가 데이터를 보내는 속도와 같거나 또는 그보다 더 빠르게 수신기가 데이터를 수신할 수 있는 경우 매우 효율적이다.
데이터를 전송하기 위하여, 상기 송신기는 선택된 데이터 버퍼 (320)내에 저장된 데이터를 취하여 상기 송신기의 출력 큐 (330)위에 올려 놓는다. 예를 들면, 상기 선택된 데이터 버퍼의 포인터 (332)가 상기 출력 큐위에 놓여진다. 그러면, 송신기 (300)은 프로세서에게 수신기 (310)으로 데이터 전송을 수행하도록 신호를 보낸다 (signals) (340). 한 예에서, 신호를 받아 상기 전송을 수행하는 것은 상기 프로세서의 펌웨어 (350)이지만; 다른 예에서, 그것은 펌웨어가 아니라, 상기 프로세서의 다른 코드 및/또는 하드웨어이다.
송신기로부터 수신기로 데이터 전송을 요청하는 신호를 수신하는 것에 응답하여, 상기 펌웨어는 송신기의 출력 큐로부터 데이터를 복사하여 그것을 수신기의 입력 큐 (360)위에 올려 놓는다. 예를 들면, 상기 데이터는 비어있는 (empty) 버퍼 (370)로 복사되고 상기 데이터에 대한 포인터 (372)는 입력 큐 (360)위에 놓여진다. 데이터 전송을 완료한 다음 (Subsequent to), 상기 펌웨어는 전송이 완료되었다는 신호를 다시 송신기로 보낸다. 상기 송신기가 이 완료 신호를 수신할 때까지, 송신기는 일시 중단되며 다른 어떠한 동작도 수행할 수 없다.
한 특정 예로서, 상기 프로세서에게 신호를 주기 위해, 송신기는 신호 어댑터 (Signal Adapter (SIGA)) 명령을 발행하는데, 이것은 하나 또는 그 이상의 출력 큐가 수신기로 전송될 데이터를 갖고 있음을 상기 프로세서에 알리는 라이트 펑션 (write function (SIGA-w))을 지정한다. 상기 라이트 펑션 (write function)은 명령에 의하여 사용되는 제1 범용 레지스터내에 제공된 펑션 코드로서 명시되고 상기 기록 펑션의 네트워크 접속 주소 (예를 들어, 서브시스템 식별 워드)는 명령에 의하여 사용되는 제2 범용 레지스터에 표시된다. 더 나아가서, 상기 출력 큐들은 명령에 의하여 사용되는 다른 제3 범용 레지스터에 명시된다.
이 특정한 예에서, 상기 큐는 직접 입/출력 큐들 (Queued Direct I/O (QDIO) queues)로서 구현되며, 각 큐는 다양한 컨트롤 정보와 함께, 이에 관련된 복수의 버퍼들을 갖는다. 한 실시예에서, QDIO큐는 데이터 전송용으로 사용되는 버퍼 스토리지 블록과 함께, 상기 큐를 기술하는 데이터 구조를 포함한다. 한 예로서, 큐 컴포넌트들이라고 불리는, 다수의 스토리지 데이터 구조들은 상기 큐의 특성을 집단으로 (collectively) 기술하고 데이터 교환을 허용하는 컨트롤을 제공하며, 이들에는, 예를 들어, 다음이 포함된다;
QDIO 입/출력 큐들의 컬렉션 (collection)에 관한 정보를 포함하는 큐 정보 블록 (QIB). 상기 QIB는 입력 큐들을 위한 스토리지 목록 정보 블록 (storage list information block (SLIB)) 주소 및 출력 큐들을 위한 SLIB 주소를 포함한다.
각 큐에는 하나의 SLIB가 있고 각 SLIB는 큐 및 그것의 각각의 큐 버퍼에 대한 정보를 제공한다. 각 SLIB는 하나의 헤더 (a header)와 하나 또는 그 이상의 엔트리를 가지며, 이 엔트리들은 스토리지 목록 정보 블록 엔트리들 (SLIBEs)이라 불리고 각각의 큐를 위한 버퍼들의 각각에 관한 정보를 포함한다. 한 예에서, 각각의 스토리지 목록 정보 블록은 다음 스토리지 목록 정보 블록의 주소, 스토리지 목록 (SL)의 주소 및 스토리지 목록 상태 블록 (storage list state block (SLSB))의 주소를 포함한다.
각 큐를 위해 정의된 하나의 스토리지 목록이 있고, 하나의 SL은, 예를 들어, 128개의 엔트리들을 포함하며, 하나의 엔트리는 상기 큐의 버퍼들의 각각을 위한 것이다. 상기 스토리지 목록은 메인 스토리지내 입출력 (I/O) 버퍼의 위치들 (locations)에 관한 정보를 제공한다. 각 엔트리는 스토리지 블록 주소 목록 (SBAL)의 절대적 주소를 포함한다. 각 스토리지 블록 주소 목록은 각 큐와 관련된 데이터 버퍼들 중의 하나를 집단적으로 구성하는 스토리지 블록들의 절대적 주소들의 목록을 포함한다.
하나의 스토리지 블록 목록 엔트리 (SBALE)가 각 SBAL의 일부로서 제공된다. 각 SBALE는 스토리지 블록의 절대적 스토리지 주소를 포함한다. 단일 SBAL의 모든 엔트리들에 의하여 어드레스된 스토리지 블록들은 QDIO 큐의 많은 가능한 QDIO 버퍼들중 하나를, 집단적으로, 구성한다 (constitute). 한 예에서. 하나의 QDIO 큐는 그것과 관련된 128개의 QDIO 버퍼들을 가질 수 있다.
상기 SLSB는 상기 큐를 구성하는 버퍼들에 관한 상태 정보를 제공하는 상태 표시기들 (state indicators)을 포함한다.
SIGA, QDIO 큐들, 및 관련 컨트롤 구조들에 대한 더 상세한 내용은 2001년 12월 18일, 바스키등 (Baskey et al)에 의하여 “큐가 있는 직접 입/출력 디바이스를 사용하는 인커밍/아웃고잉 데이터의 수신 및 전송을 위한 컨트롤 정보와 관련된 자립형 큐들 (Self-Contained Queues With Associated Control Information For Receipt And Transfer Of Incoming And Outgoing Data Using A Queued Direct Input-Output Device)”이라는 제목으로 등록된 미국 특허 번호 6,332,171 B1; 2002년 2월 5일, 브라이스등 (Brice et al)에 의하여 “큐가 있는 직접 입/출력 디바이스를 사용하는 가상 환경에서 데이터의 시뮬레이션을 위한 방법 및 장치 (Method And Apparatus For Simulation Of Data In a Virtual Environment Using A Queued Direct Input-Output Device)”라는 제목으로 등록된 미국 특허 번호 6,345,241 B1; 2003년 2월 11일, 마르코스등에 의하여 (Markos et al) “큐가 있는 직접 입/출력 디바이스를 사용하여 구성 정보를 제공하기 위한 위한 방법 및 장치 (Method And Apparatus For Providing Configuration Information Using A Queued Direct Input-Output Device)”이라는 제목으로 등록된 미국 특허 번호 6,519,645 B2; 및 2011년 5월 10일, 이스턴등에 의하여 (Easton et al) “호스트 개입없이 페이지 가능한 게스트로부터 입출력 동작 요청들의 해석 (Interpreting I/O Operation Requests From Pageable Guests Without Host Intervention)”이라는 제목으로 등록된 미국 특허 번호 7,941,799 B2등 문헌에 기술된다.
상기 처리에서, 송신기가 데이터를 송신하는 동일 속도로 수신기가 비어있는 버퍼를 제공할 수 없으면, 프로토콜의 동기적 성격으로 인하여 송신기 측에서 대기 시간과 CPU 오버헤드가 증가된다. 비어있는 버퍼가 수신기상에서 이용가능하지 않다면, 상기 송신기는 두가지 선택들 (options)을 갖는다. 이것은 동일 수신기로의 실패하는 전송 동작 (failing operation)과 후속의 데이터 재전송 (retransmission)을 대기하는 (queuing) 오버헤드를 견디거나 (go through), 또는 상기 데이터를 버리고, 동작을 재구동하기 위하여 (redrive), TCP/IP와 같은 상위 레벨 통신 프로토콜을 허용하게 하는 것이다. 상기 데이터를 대기하여 재전송하는 것의 위험 (pitfalls)은 복구하기 위한 추가적인 CPU 싸이클을 요구할 뿐만 아니라, 송신기가 인커밍 데이터를 받아들일 수 있는 다른 수신지들 (destinations)로 더 전송하는 것을 잠재적으로 차단하거나 또는 지연시킬 수 있다는 것이다.
다수의 서버들 (가령, 송신기들, 수신기들)이 CPU 자원들을 공유하도록 허용하는 가상 환경들은 하나의 수신기가 여러 송신기들이 자신에게 데이터를 전송하는 것을 따라갈 수 (keep up with) 없는 상황들을 일으킬 가능성이 더 많다. 이것은 통상적으로 PR/SM과 같은 하나의 하이퍼바이저가 여러 이용가능한 공유 프로세서들상에 서버들을 배치하는 것을 컨트롤할 때 발생하는 문제이다. 이 문제는 송신기와 공유된 CPU 자원 사이에 다수 레벨들의 하이퍼바이저들이 있을 때 악화될 수 있다 (compounded). 이것이, 예를 들면, 송신기가, 또한 하나의 논리적 파티션내에서 실행되는, z/VM®하에 하나의 가상 머신내에서 실행되는 경우이다. 여기서, 두 개의 하이퍼바이저들은 서버를 신속히 배치하여 비어있는 버퍼들을 적시에 (in a timely fashion) 채우도록 (replenish) 해 준다.
이용가능한 CPU 자원들이 충분할 때는 수신기를 적시에 신속히 배치하는 것은 문제가 되지 않는다. CPU 자원들이 단기 또는 장기간 제한을 받을 때 (constrained) 동기적 데이터 전송은 중단될 수 밖에 없다 (only breaks down). 그러므로, 본 발명의 한 실시예에 의하여, 송신기는 CPU 자원이 제한받지 않는 (non-constraint) 환경에서는 낮은 대기 시간을 갖는 동기식 데이터 전송을 할 수 있고, CPU 자원이 제한받는 때에는 관련 위험과 오버헤드를 제거할 수 있다. 이것은 수신기가 송신기를 따라가지 못할 때 통신 프로토콜을 동기식에서 비동기식으로 변환함으로써 성취된다. 한 실시예에서, 상기 동기식에서 비동기식으로 프로토콜 변환은 송신기에 대한 어떠한 푸시백 (pushback)도 없이 자동으로 수행된다 (가령, 송신기는 변환 시점에서 어떤 액션을 취할 필요가 없다). 이것은 CPU 자원들이 특정 수신기 때문에 제한을 받을 때 송신기가 어떠한 형태의 복구 처리를 수행하거나, 또는 다른 수신기들로 데이터 전송하는 것들을 차단 또는 지연할 필요가 없게 한다. 더 나아가서, 이것은 동기식 통신이 이전에 제한되었던 수신기로 자동으로 재개되도록 해 준다.
본 발명의 한 실시예에 의하여, 수신기가 데이터를 수신할 수 있는 비어있는 버퍼를 제공할 때까지 송신기에 대해서 자신의 메모리내에서 데이터를 대기시킬 수 있는 (queue) 능력이 제공된다. 이 처리를 달성하기 위하여, 도 4를 참조하여 기술된 바와 같이, 하나 또는 그 이상의 컨트롤 구조들이 사용된다. 예를 들면, 상기 송신기는 자신의 메모리내에서 각각의 미해결된 (pending) 비동기식 전송을 위해 메모리 (400)의 비어있는 블록을 할당한다 (allocates). 한 예에서, 어떤 한 시각에 이런 블록들이 X개 있을 수 있으며, X는 모델에 따라 달라지며 (model dependent) 변경 가능하다 (configurable). X는 송신기에 의하여 허용되는 동시 비동기식 요청의 수를 나타낸다. QDIO (Queued Direct Input/Output) 비동기식 동작 블록 (QDIO asynchronous operation block (QAOB))이라 하는 이 메모리 블록은 펌웨어가 동작을 완료할 때까지 비동기식 데이터 전송을 추적하기 위해 사용된다. 이 예에서, 상기 QAOB는 오직 컨트롤 정보만을 보유하며 데이터 자체는 보유하지 않는다. 상기 송신기는 선택적으로 데이터 전송을 비동기적으로 실행하는 것을 허용하는 요청들을 위해 데이터 전송을 개시할 때 이 블록을 제공한다; 그렇지 않으면, 송신기는 상기 컨트롤 블록을 제공할 필요가 없다. 이것은 송신기에게 미해결된 (outstanding) 비동기식 요청들의 최대 갯수를 컨트롤하는 능력을 제공한다. QAOB 그 자체는 데이터 전송이 비동기식으로 이루어질 것이라고 결정할 때, 펌웨어에 의하여 오직 사용되고 개시된다 (initialized). 데이터 전송이 비동기식으로 이루어질 경우, QAOB를 위해 메모리를 제공하는 것이외에 상기 송신기가 데이터 전송을 위하여 해야 할 일은 없다.
한 특정 예에서, QAOB는 상기 요청을 제공하는 SIGA 명령에 포함된다. 상기 송신기는 QAOB (SIGA-wq) 명령을 갖는 (SIGA) 라이트 (write)를 발행하는데, 이 SIGA 라이트는 QAOB 펑션을 갖는 상기 라이트를 표시하는 제1 범용 레지스터내에 선택된 펑션 코드를 명시한다. 상기 QAOB 주소는 상기 명령에 의해 사용되는 제4 범용 레지스터내에 명시된다. 이 범용 레지스터는 QAOB가 명시되지 않을 때 0을 갖거나 또는 QAOB의 절대 주소 (가령, 256 바이트의 QAOB)를 갖는다. 상기 펌웨어는, QAOB 펑션 코드를 갖는 상기 라이트가 세트되는 것에 응답하여, QAOB 가 비동기식 데이터 전송에서 사용될 수 있는 제4 범용 레지스터에 명시되는 지를 결정한다.
펌웨어가 데이터 전송을 비동기식 프로토콜로 바꿀 때, 그것은 상기 QAOB를 사용하여 데이터가 아웃바운드 데이터 전송과 관련된 송신기의 메모리내에서 상주하는 것을 추적한다. 전송을 위하여 HiperSockets™이 사용되는 상기 예에서, 상기 QAOB는 데이터 전송과 관련된 스토리지 블록 주소 목록 (SBAL)내에 송신기에 의하여 명시된 주소들 및 컨트롤들을 추적한다. 상기 SBAL에서 추출하여 상기 QAOB에 올려놓은 필드 (fields)의 예들은, 예를 들면, 다음을 포함한다;
상기 SBAL로부터의 모든 의미있는 SBALE들 (가령, 제1 SBALE에서 마지막 엔트리 비트 세트를 갖는 SBALE까지). 이것은 데이터의 절대 버퍼 주소 및 바이트 카운트 (byte count)를 포함한다;
상기 SBAL을 위한 출력 큐 번호;
요청을 개시하는 상기 SBAL의 버퍼 번호 (예를 들어, 1-27);
의미있는 SBALE 엔트리 번호; 및
각각의 의미있는 SBALE에 의해 지정된 스토리지 블록들에 액세스하는데 사용되는 스토리지 키.
상기 QAOB에 추가하여, 완료 큐 (completion queue) (CQ) (410)라고 불리는 다른 컨트롤 구조가 사용된다. 다시 말하면, 한 예에서, QAOB를 제공하는 것에 추가하여, 상기 송신기는 통신 큐를 설정할 때 그의 메모리내에 새로운 형태의 큐인 완료 큐를 또한 할당한다. HiperSockets™의 경우, 이것은 SBAL들을 갖지만, SBALE와 관련된 버퍼는 갖지 않는, 새로운 형태의 QDIO 입력 큐이다. 이 새로운 입력 큐는 데이터를 전송하기 위하여 사용되지는 않고; 오히려 송신기에게 비동기식 데이터 전송이 완료되었음을 알리는 완료 이벤트들 (completion events)을 게시 (post)할 목적으로 펌웨어에 의하여 사용된다. 하나의 큐 엔트리가 '인바운드 프라임드’(inbound primed)으로 되면, 완료 이벤트에 관한 정보는, 상기 완료 큐 상에 포함되는, 상기 SBALE들 그 자체 내에 위치하게 된다. 펌웨어는 상기 CQ내에 완료된 비동기식 데이터 전송과 관련된 QAOB의 주소를 게시하고 또한, 필요시, 상기 완료된 데이터 전송을 송신기에게 알리기 위해 인터럽션을 발생시킨다. 그 포인트에서 상기 송신기는 다른 목적들을 위해 상기 완료된 동작과 관련된 메모리를 재사용할 수 있다. (한 예에서, 예를 들면, 하나의 SBAL은 단일의 완료 이벤트를 게시하기 위해 사용된다. 하나의 SBAL은, 예를 들어, 16 SBALE들을 포함하므로, 펌웨어는 단일의 SBAL내에서 16개의 완료 이벤트들 (QAOB들)을 게시할 수 있다).
더 나아가서, 한 실시예에서, 상기 펌웨어는 다른 큐, 각각 의도된 수신기 (recipient)상의 TPQ (420)를 갖는데, 이것은 아직 미해결된 데이터 전송 요청이 있슴을 기억하기 위해 사용된다.
동기식 데이터 전송으로부터 비동기식 데이터 전송으로의 변환에 대한 더 상세한 설명이 도 5a-5B를 참조하여 기술된다. 도 5a는 변환을 수행하기 위하여 펌웨어에 의해 사용되는 로직의 한 실시예를 묘사하며, 도 5b는 상기 변환의 한 예를 회화적으로 묘사한다. 두 도면은 모두 아래 설명에서 참조된다.
도 5a-5b를 참조하면, 단계 (STEP) (500)에서, 초기에, 펌웨어 (350)은 QAOB의 표시 (indication) (가령, 비동기식 데이터 전송을 위해 사용된 스토리지 블록의 주소)를 수신한다. 그러므로, 그것은 필요시 (또는 원하면), 비동기식으로 요청받은 데이터 전송을 수행할 수 있다. 한 실시예에서, 상기 펌웨어는 복수의 QAOB들을 수신할 수 있으며, 이는 그것이 그 정도 횟수의 데이터 전송을 비동기식으로 수행할 수 있음을 나타낸다. 송신기에 의한 QAOB의 제공은, 펌웨어가 선택한다면, 펌웨어가 데이터 전송을 비동기식으로 수행할 수 있다는 것을 펌웨어에 대해 사전 인가하는 것이다.
한 특정한 예에서, QAOB는 펌웨어에 의하여 송신기 (300)으로부터, 단계 (502)에서, 수신되는 데이터 전송 요청의 일부로서 포함된다. 데이터 전송 요청을 수신하는 것에 응답하여, 단계 (504)에서, 펌웨어는 데이터를 수신기에 보내려고 시도한다 (attempts). 질의 단계 (INQUIRY) (506)에서, 만약 수신기가 데이터를 수신하는 것이 가능하다면 (가령, 수신기에 비어있는 버퍼가 있다면), 단계 (508)에서, 데이터는 동기식으로 전송되고, 그리고 데이터 전송은 완료된다. 그 후에, 송신기는 다른 데이터 전송을 수행할 수 있으며, 만일 송신기에 의하여 비동기식 전송이 허용된다면, 송신기는 새로운 요청에 QAOB를 포함할 수 있다.
하지만, 만약 수신기가 바로 (currently) 데이터를 수신할 수 없다면 (예를 들어, 버퍼 상태에 의하여 결정된 비어있는 버퍼가 수신기에 없어서, 수신기가 데이터를 수신하는데 지연이 발생한다면), 상기 데이터 전송은 펌웨어에 의하여 자동으로 동기식 요청으로부터 비동기식 요청으로 변환되는데, 이 때 QAOB는 상기 요청에서 제공되었다고 가정한다. 단계 (510)에서, 상기 요청은 QAOB내에 저장되며, 단계 (512)에서, 예를 들어, TPQ 상의 상기 QAOB로 포인터를 둠으로써, 상기 QAOB는 그의 의도된 목적지 (destination)상의 TPQ 420에 대기된다 (queued). 상기 QAOB는 이제 SBAL의 내용을 포함하며, 그리하여 상기 SBAL은 다른 처리를 위하여 사용될 수 있다.
한 실시예에서, 만일 QAOB가 명시되지 않으면, 상기 요청은 실패하거나 (fails) 또는 그것이 동기식으로 보내질 수 있을 때까지 대기한다.
한 예에서, QAOB가 대기중인라는 것 (being queued)에 응답하여, 송신 서버에 컨트롤이 주어져서 명시된 QAOB가 이 데이터 전송을 비동기식으로 수행하기 위하여 사용된다는 것이 표시된다. 그 다음 상기 송신 서버는 즉시 다음 데이터 전송을 셋업 (setup)하고, 후속 데이터 전송을 위하여 필요한 경우, 선택적으로 다른 QAOB를 할당할 수 있다.
다음, 질의 단계 (514)에서. 수신기가 데이터를 수신할 수 있는지에 대한 결정이 내려진다. 예들로서, 수신기가 이제 데이터를 받아들일 수 있다 (즉, 이용가능한 비어있는 버퍼가 있다)는 신호를 펌웨어가 수신기로부터 입수하였는지 또는 버퍼들의 상태를 점검함으로써 하나의 버퍼가 이용가능함을 펌웨어가 결정하였는지에 대한 결정이 내려진다. 한 특정한 예에서, 상기 수신기는 자신의 입력 큐들상에 비어있는 버퍼들을 배치하였음을 펌웨어에 알리기 위해 SIGA 명령을 사용한다. SIGA 리드 (SIGA-r) 펑션 코드는 제1 범용 레지스터내에 명시된다. 상기 SIGA 리드 펑션은 펌웨어로 하여금 수신기의 TPQ로부터 모든 미해결된 패킷들 (packets)을 타겟의 입력 버퍼들로 전송하도록 해 준다.
만약 수신기가 데이터를 받아들일 수 없다면, 펌웨어는 대기한다. 그렇지 않고, 만약 수신기가 데이터를 수신할 수 있으면 (가령, 적어도 하나의 비어있는 버퍼가 있다면), 질의 단계 (516)에서. 펌웨어는 수신기의 TPQ상의 QAOB에 대하여 포인터를 갖고 있는 지를 결정한다. 그렇지 않으면, 처리는 완료된다. 그렇지 않으면, 펌웨어는 데이터 전송을 수행하기 위하여 상기 QAOB를 사용한다(단계 518). 특별히, 그것은 상기 QAOB에 의하여 지시된 데이터를 수신기로 보내어 (forwards), 전술한 데이터를 비어있는 버퍼내에 채우고 그리고 방금 채워진 버퍼에 대한 포인터는 수신기의 입력 큐상에 올려놓는다.
그 후, 단계 (520)에서, 상기 펌웨어는 데이터 전송의 완료를 송신기에 표시한다. 한 예에서, 이러한 표시는 송신기의 완료 큐 (410) (도 5b)내 완료된 비동기식 데이터 전송과 관련된 QAOB의 주소를 게시하는 것과 그리고, 필요시, 상기 완료된 데이터 전송을 송신기에게 알리기 위해 인터럽션 (550)을 발생시키는 것을 포함한다. 어떤 포인트에서도, 상기 송신기는 다른 목적들을 위해 완료된 동작과 관련된 메모리를 재사용할 수 있다. CQ상에 게시된 상기 QAOB는 예를 들어, 상태 정보, 완료 코드들, 에러 코드등을 포함하는, 비동기식 처리에 관한 정보를 포함한다.
한 특정한 예에서, 상기 QAOB의 주소가 완료 큐 엔트리에 게시되면 (가령, 상기 QAOB의 주소가 완료 큐 엔트리내에 위치한 SBALE에 포함되면), 펌웨어는 다음의 정보를 상기 QAOB내의 프로그램으로 회신하는데 (returns), 그 예는 다음과 같다:
비동기식 입출력 동작의 결과를 반영하는 리전 코드 (a reasons code), 및
버퍼 상태: “큐 상태 (State of Queue) - 비동기식 데이터 전송을 위한 버퍼 N (SQBN)". 이것은 동기식 데이터 전송을 위해 SLSB내에 배치된 것과 동일값 (value)이다. 하나의 SQBN은 상기 QAOB의 현 상태를 나타내는 값을 가진다. 예를 들면, 상기 상태 값은 두 부분을 포함한다: 제1 부분은 버퍼가 상기 프로그램 펌웨어에 의하여 소유되는지를 나타내고; 제2 부분은 상기 QAOB의 현재 프로세스 상태를 나타낸다.
특정한 요청은 비동기식으로 수행되더라도, 상기 송신기로부터 다른 수신기들로의 다른 요청들은, 가령, 특정 수신기가 데이터를 수신하는데 지연되지 않는 한, 동기식으로 수행될 수 있다. 더 나아가서, 송신기로부터 수신기로의 다른 요청들은 수신기가 데이터를 수신하는데 있어서 지연된다고 다시 결정되지 않는 한 자동으로 동기식으로 되돌아간다 (revert). 예를 들면, 전술한 바와 같이, 펌웨어는 데이터를 수신기로 보내려고 시도하고, 만일 수신기가 데이터를 수신할 수 있다면, 데이터는 동기식으로 보내진다. 한 실시예에서, 동기식과 비동기식사이에 전송이 변환된다고 하더라도, 데이터는 전송될 때와 동일의 FIFO 순서를 유지한다. 펌웨어는 상기 수신기들 TPQ (420)상에 모든 대기된 QAOB들을 전송할 것인데, 이는 모든 미래의 동기식 요청들이 이 송신기 또는 기타 송신기로부터 수신되기 전에 그렇게 할 것이다. 만약 다른 동기식 데이터 전송이 TPQ (420)상에 이미 QAOB들을 가진 수신기에 발생한다면, 그것은 펌웨어에 의하여 자동으로 비동기식 요청으로 변환될 것이거나 (만일 상기 송신기에 의해 인가되었다면) 또는 이용가능한 버퍼들의 응답이 없다면 실패할 것이다. 상기 순서 (order)를 유지하는 것이 비용이 들어가는 순서를 다시 바꾸는 처리를 피하게 해주며, 그 결과 수신기의 TCP/IP 스택 성능 및 전체적인 CPU 활용을 향상시킨다.
프로세서 (예를 들어, 펌웨어)가 그러한 변환이 일어날 것임을 결정하는 것에 응답하여, 동기식 데이터 전송에서 비동기식 데이터 전송으로 자동 변환하는 능력은 위에 상세히 기술되어 있다. 예로서, 수신기가 데이터를 수신할 수 있을 때에 지연되는 것 (예를 들어, 이용가능한 버퍼가 없거나, 응답이 느린 것, 등)에 응답하여 상기 변환이 수행된다. 더 나아가서, 상기 능력은 동일 수신기에 대한 다른 전송들은 자동으로 비동기식으로 수행할 수 있도록 해 준다.
이러한 지원의 하나 또는 그 이상의 실시예들은 일시적 (transient) 또는 장기 데이터 전송에 적응할 수 있는 능력을 제공하는데, 네트워크내 다른 동작 중인 목적지들 (other functioning destinations)에 최소한 또는 어떤 영향도 없이 결합된 타겟 목적지에 비용이 들어가는 재전송없이 그렇게 한다. 한 실시예에서, 송신기 프로그램에 대한 푸시백없이, 동기식 데이터 전송과 비동기식 데이터 전송사이에서 스위치할 수 있는 능력이 제공된다. HiperSockets 완료 큐 (Completion Queue (CQ))를 사용하는 한 특정 예에서, 디바이스 드라이버는 입/출력 동작을 중단하지 않는다 (SIGA는 상기 프로세스를 차단하지 않는다). CQ로, 라이트 프로세스가 제거되고 (put aside) 이는 송신기에게 동일 타겟에 또는 다른 타겟들에 대해 추가의 라이트들 (SIGA(s))을 발행하는 것을 계속할 수 있게 하는데, 일부는 동기식으로 그리고 다른 일부는 비동기식으로 완료될 것이다. 이 비-차단식 (non-blocking) 실시예는 CQ를 비동기식으로 만든다.
본 발명의 한 실시예에 의하면, 상기 전송이 동기식이든 비동기식이든간에, 송신기로부터 수신기로 (내부 버퍼가 없슴) 데이터는 오직 한번만 복사된다.
당업자가 이해하는 바와 같이, 본 발명의 실시예들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 따라서, 본 발명의 실시예들은 전적으로 하드웨어 구현의 형태, 전적으로 소프트웨어 구현의 형태 (펌웨어, 상주 소프트웨어, 마이크로-코드 등) 또는 소프트웨어와 일반적으로 “회로”, “모듈” 또는 “시스템”으로 불리는 하드웨어의 조합 구현의 형태를 취할 수 있다. 더 나아가서, 본 발명의 실시예들은 하나 또는 그 이상의 컴퓨터 판독가능 매체(들)상에 컴퓨터 판독가능 프로그램 코드를 갖는 하나 또는 그 이상의 컴퓨터 판독가능 매체(들)에 구현되는 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
하나 또는 그 이상의 비일시적 (non-transitory) 컴퓨터 판독가능 매체(들)의 모든 조합이 사용될 수 있다. 컴퓨터 판독가능 매체는 컴퓨터 판독가능 저장 매체일 수 있다. 컴퓨터 판독가능 저장 매체는 예를 들면, 전자 (electronic), 자기 (magnetic), 광학 (optical), 전자기 (electromagnetic), 적외선 (infrared) 또는 반도체 (semiconductor) 시스템, 장치 또는 디바이스, 또는 전술한 것들의 어떠한 적절한 조합일 수 있고 이에 국한되지는 않는다. 컴퓨터 판독가능 저장 매체의 좀 더 구체적인 예 (비완전 목록 (non-exhaustive list))는 다음을 포함한다: 하나 또는 그 이상의 전선을 가진 배선 (electrical connection), 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리 (RAM), 판독-전용 메모리 (ROM), 소거 및 프로그램 가능 ROM (EPROM, 또는 플래시 메모리), 광섬유 (optical fiber), 자기 저장 디바이스, 또는 전술한 것들의 어떠한 적절한 조합. 본 명세서의 맥락 (context)에서, 컴퓨터 판독가능 저장 매체는 명령 실행 시스템, 장치 또는 디바이스들과 관련하여, 또는 이들에 의한 사용을 위해 그것들과 연관된 프로그램을 보유, 또는 저장할 수 있는 모든 유형적 (tangible) 매체일 수 있다.
이제 도 6을 참조하면, 한 예에서, 하나의 컴퓨터 프로그램 제품 (600)은 예를 들면, 하나 또는 그 이상의 비일시적 컴퓨터 판독가능 저장 매체 (602)를 포함하는데 이것은 본 발명의 하나 또는 그 이상의 실시예를 제공 및 사용가능하게 하기 위한 컴퓨터 판독가능 프로그램 코드 수단 (means) 또는 로직 (604)를 저장한다.
컴퓨터 판독가능 매체상에 구현된 프로그램 코드는 무선, 유선, 광케이블 (optical fiber cable), 무선 주파수 (RF) 등 또는 전술한 것들의 적절한 조합등을 포함하는 모든 매체 (이에 국한되지는 않지만)를 사용하여 전송될 수 있다.
본 발명 실시예들의 동작을 수행하기 위한 컴퓨터 프로그램 코드는 하나 또는 그 이상 프로그래밍 언어의 어떤 조합으로 기록될 수 있으며, 이 언어에는 자바 (Java), 스몰토크 (Smalltalk), C++등과 같은 객체 지향형 프로그래밍 언어 (object oriented programming language) 및 “C” 프로그래밍 언어, 어셈블러 또는 이와 유사한 프로그래밍 언어들과 같은 종래의 순차 프로그래밍 언어 (conventional procedural programming languages)를 포함한다. 프로그램 코드는, 독립 (stand-alone) 소프트웨어 패키지로서, 전적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터 및 원격 컴퓨터상에서 또는 전적으로 원격 컴퓨터 또는 서버상에서 실행될 수 있다. 후자의 시나리오에서, 원격 컴퓨터는 LAN 또는 WAN을 포함하는, 어떠한 형태의 네트워크를 통해서 사용자의 컴퓨터와 접속될 수 있으며, 또는 이러한 접속은 (가령 인터넷 서비스 공급자를 사용한 인터넷을 통하여) 외부 컴퓨터와도 접속될 수 있다.
본 발명의 여러 형태들이 본 발명의 실시예들에 따른, 방법의 흐름도 도시 (flowchart illustrations) 및/또는 블록 다이어그램 (block diagrams), 장치 (시스템) 그리고 컴퓨터 프로그램 제품을 참조하여 설명된다. 흐름도 도시 및/또는 블록 다이어그램의 각 블록 그리고 흐름도 도시 및/또는 블록 다이어그램의 조합은 컴퓨터 프로그램 명령들에 의하여 실행될 수 있슴을 이해할 수 있을 것이다. 이 컴퓨터 프로그램 명령들은 범용 컴퓨터의 프로세서, 특수 목적 컴퓨터, 또는 기계를 생성하는 기타 프로그램가능 데이터 처리 장치에 제공되어, 컴퓨터의 프로세서나 기타 프로그램가능 데이터 처리 장치를 통하여 실행될 때, 그러한 명령들이 흐름도 및/또는 블록 다이어그램이나 블록에 규정된 펑션/동작(acts)을 구현하는 수단을 생성하도록 한다.
컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 기타 디바이스에 특정한 방식으로 기능하도록 지시하는 이 컴퓨터 프로그램 명령들은 또한 컴퓨터 판독가능 매체에 저장되어, 이 컴퓨터 판독가능 매체에 저장된 명령들이 흐름도 및/또는 블록 다이어그램이나 블록에 규정된 펑션/작용을 구현하는 명령들을 포함하는 제품을 생성하도록 한다.
이 컴퓨터 프로그램 명령들은 컴퓨터, 기타 프로그램 가능한 데이터 처리 장치, 또는 기타 디바이스에 로드되어 (loaded) 일련의 동작 단계들이 컴퓨터 실행 프로세스를 생성하기 위하여 컴퓨터, 기타 프로그램가능 장치, 또는 기타 디바이스상에서 수행되도록 하고, 그렇게 하여 컴퓨터 또는 기타 프로그램가능 장치상에서 실행되는 상기 명령들이 흐름도 및/또는 블록 다이어그램이나 블록에 규정된 펑션/작용을 구현하는 프로세스를 제공하도록 한다.
상기 도면들에서 흐름도와 블록 다이어그램은 본 발명의 다양한 실시예들에 따른 시스템, 방법 및 컴퓨터 프로그램 제품의 가능한 구현들의 아키텍처, 펑션, 및 동작을 도시한다. 이와 관련하여, 흐름도와 블록 다이어그램내의 각 블록은 모듈, 세그먼트 (segment), 또는 코드의 부분을 나타내는데, 이는 지정된 논리적 펑션(들)을 구현하는 하나 또는 그 이상의 실행가능한 명령들을 포함한다. 어떤 다른 실시예들에서, 블록에서 표시된 펑션들은 도면에서 표시된 순서와 다르게 (out of the order) 발생할 (occur) 수도 있슴을 이해하여야 한다. 예를 들면, 연속으로 도시된 두 개의 블록들이, 실제로는, 동시에 실질적으로 실행될 수도 있고, 또는 블록들은 관련 펑션에 따라 때때로 역순으로 실행될 수도 있다. 블록 다이어그램의 각 블록 및/또는 흐름도 도시, 그리고 블록 다이어그램들에서 블록들 및/또는 흐름도 도시의 조합은 특수 목적 하드웨어와 컴퓨터 명령들의 조합의 지시된 펑션들 또는 동작들, 또는 조합들을 수행하는 특수 목적 하드웨어 기반 시스템에 의하여 구현될 수 있다.
전술한 것에 더하여, 본 발명의 하나 또는 그 이상의 실시예들은 고객 환경들의 관리를 제공하는 서비스 제공자에 의해서 제공, 배치, 관리, 서비스될 수 있다. 예를 들어, 상기 서비스 제공자는 하나 또는 그 이상의 고객들을 위해 본 발명의 하나 또는 그 이상의 실시예들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라 구조를 생성 유지, 지원할 수 있다. 그 대가로, 상기 서비스 제공자는, 예를 들어, 구독 및/또는 요금 계약하에서 고객으로부터 보수를 받을 수 있다. 추가적으로 또는 이와 달리, 상기 서비스 제공자는 하나 또는 그 이상의 제 3자들에게 광고 컨텐츠를 판매하여 보수를 받을 수도 있다.
본 발명의 한 실시예로서, 하나의 어플리케이션이 본 발명의 하나 또는 그 이상의 실시예들을 수행하기 위해 배치될 수 있다. 한 예로서, 어플리케이션의 배치는 본 발명의 하나 또는 그 이상의 실시예들을 수행하도록 동작하는 컴퓨터 인프라 구조를 제공하는 것을 포함한다.
본 발명의 다른 실시예로서, 컴퓨팅 인프라 구조가 배치될 수 있는데, 이는 컴퓨터 판독가능 코드를 컴퓨팅 시스템에 통합하는 것을 포함하며, 이 컴퓨팅 시스템에서 컴퓨팅 시스템과 조합하는 코드는 본 발명의 하나 또는 그 이상의 실시예를 수행할 수 있다.
본 발명의 또 다른 실시예로서, 컴퓨터 판독가능 코드를 통합하는 것을 포함하는 컴퓨팅 인프라 구조를 컴퓨터 시스템에 통합하는 프로세스가 제공될 수 있다. 상기 컴퓨터 시스템은 컴퓨터 판독가능 매체를 포함하고, 컴퓨터 판독가능 매체는 본 발명의 하나 또는 그 이상의 실시예를 포함한다. 컴퓨터 시스템과 조합하는 코드는 본 발명의 하나 또는 그 이상의 실시예들을 수행할 수 있다.
다양한 실시예들이 위에서 기술되었지만, 이들은 예들로서만 기술되었다. 예를 들어, 다른 아키텍처들의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 실시예들을 포함하고 사용할 수 있다. 예들로서, zEnterprise 서버들이 아닌 서버들도 본 발명의 하나 또는 그 이상의 실시예들을 포함하고, 사용 및/또는 이들로부터 혜택을 받을 수 있다. 더 나아가서, 동기식으로부터 비동기식으로의 변환은 버퍼의 이용가능 여부가 아닌 고려들 (considerations)에 응답하여 일어날 수가 있다. 더 나아가서, 본 발명의 하나 또는 그 이상의 실시예는 격리된 메모리 공간사이에 어떠한 메모리-투-메모리 전송을 위하여 사용될 수 있다. 기타 많은 변형들이 또한 가능하다.
더 나아가서, 기타 형태의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 실시예로부터 혜택을 받을 수 있다. 한 예로서, 시스템 버스를 통해서 메모리 요소들에 직접 또는 간접적으로 결합된 적어도 2개의 프로세서들을 포함하는 프로그램 코드를 저장 및/또는 실행하기 적합한 데이터 처리 시스템이 사용가능하다. 상기 메모리 요소들은, 예를 들어, 프로그램 코드의 실제 실행 동안 채용되는 로컬 메모리, 벌크 스토리지, 및 캐시 메모리를 포함하는데, 이 캐시 메모리는 실행동안 코드가 벌크 스토리지로부터 리트리브되어야 하는 (retrieved) 횟수를 감소시키기 위해서 적어도 일부 프로그램 코드의 일시적 스토리지를 제공한다.
입력/출력 또는 I/O 디바이스들 (키보드, 디스플레이, 포인팅 디바이스, DASD, 테이프, CD, DVD, thumb 드라이브 및 기타 메모리 매체등을 포함하나 이에 한정되지 않음)은 시스템에 직접 또는 중개하는 I/O 컨트롤러들을 통해서 결합될 수 있다. 네트워크 어댑터들은 또한 시스템에 결합되어 중개하는 사설 또는 공공 네트워크를 통해서 데이터 처리 시스템이 다른 데이터 처리 시스템들 또는 원격 프린터들 또는 스토리지 디바이스들과 결합되도록 인에이블 (enable)할 수 있다. 모뎀, 케이블 모뎀, 및 이더넷 카드는 단지 사용가능한 네트워크 어댑터들의 몇가지 형태들이다.
도 7을 참조하면, 본 발명 하나 또는 그 이상의 실시예를 구현하기 위한 호스트 컴퓨터 시스템 (5000)의 대표적인 컴포넌트들이 도시되어 있다 (portrayed). 대표적인 호스트 컴퓨터 (5000)은 하나 또는 그 이상의 CPU들 (5001)을 포함하는데, 이들은 스토리지 매체 디바이스 (5011) 및 다른 컴퓨터 또는 SAN 및 이와 유사한 것들과 통신하기 위한 네트워크 (5010)에 대한 I/O 인터페이스들뿐만 아니라, 컴퓨터 메모리 (즉, 중앙 스토리지) (5002)와 통신한다. CPU (5001)은 아키텍처된 명령 세트 (an architected instruction set) 및 아키텍처된 기능성 (architected functionality)을 갖는 아키텍처를 준수한다. CPU (5001)은 프로그램 주소들 (가상 주소들)을 실제 메모리 주소들로 변환시키기 위한 동적 주소 변환기 (DAT) (5003)을 가질 수 있다. DAT는 통상적으로 변환을 캐싱하기 위한 변환 룩어사이드 버퍼 (a translation lookaside buffer) (TLB) (5007)를 포함하여 변환을 캐싱함으로서 (caching) 컴퓨터 메모리 (5002)의 블록에 나중에 액세스하더라도 주소 변환의 지연이 일어나지 않게 한다. 통상적으로, 캐시 (5009)는 컴퓨터 메모리 (5002)와 프로세서 (5001) 사이에 채용된다. 캐시 (5009)는 계층적으로 되어 (hierarchical) 하나 이상의 CPU에 대해서는 큰 캐시가 사용가능할 수 있고 큰 캐시와 각 CPU 사이에는 더 작고 (smaller), 더 빠른 (faster) (하위 레벨) 캐시들이 사용가능할 수 있다. 일부 실시예들에서, 상기 하위 레벨 캐시들은 (the lower level caches) 명령 페칭 및 데이터 액세스를 위한 별도의 하위 레벨 캐시들 (separate low level caches)을 제공하기 위해 분리된다 (split). 한 실시예에서, 명령은 캐시 (5009)를 통해 명령 페치 유닛 (5004)에 의해서 메모리 (5002)로부터 페치된다 (fetched). 상기 명령은 명령 디코드 유닛 (5006)에서 디코드되어 명령 실행 유닛 또는 유닛들 (5008)로 전송된다 (dispatched) (일부 실시예들에서는 다른 명령들과 함께). 통상적으로 여러 실행 유닛들 (5008)이 채용되는데, 이들에는, 예를 들어, 산술 연산 실행 유닛 (arithmetic execution unit), 부동 소수점 연산 실행 유닛 (floating point execution unit), 및 브랜치 명령 실행 유닛 (branch instruction execution unit)이 있다. 상기 명령은 실행 유닛에 의해서 실행되는데, 필요에 따라 명령 지정 레지스터들 (instruction specified registers) 또는 메모리로부터 오퍼런드들 (operands)을 액세스함으로써 실행된다. 만일 오퍼런드가 메모리 (5002)로부터 액세스되어야 한다면 (로드되거나 저장되어야 한다면), 로드/스토어 유닛 (5005)가 실행될 명령의 컨트롤하에 그 액세스를 통상적으로 처리한다. 명령들은 하드웨어 회로들에서 또는 내부 마이크로코드 (펌웨어)에서 또는 이 둘의 조합에 의해서 실행될 수 있다.
이미 살펴보았듯이, 컴퓨터 시스템은 정보를 로컬 (또는 메인) 스토리지에 포함하는데, 어드레싱, 보호, 참조 및 변경 기록과 같은 정보를 포함한다. 어드레싱의 일부 실시예들 (some aspects)에는 주소들의 포맷, 주소 공간들의 개념, 주소들의 다양한 형태 및 한 형태의 주소가 다른 타입의 주소로 변환되는 방식이 포함된다. 메인 스토리지의 일부에는 영구적으로 할당된 스토리지 위치들이 포함된다. 메인 스토리지는 시스템에 데이터의 직접 어드레스가능 고속-액세스 스토리지 (directly addressable fast-access storage of data)를 제공한다. 데이터와 프로그램들 모두는 처리되기 전에 (입력 디바이스들로부터) 메인 스토리지에 로드된다.
메인 스토리지는, 때때로 캐시들이라 부르는, 하나 또는 그 이상의 더 작고, 더 빠른-액세스 버퍼 스토리지들 (one or more smaller, faster-access buffer storages)을 포함할 수 있다. 캐시는 통상적으로 CPU 또는 I/O 프로세서와 물리적으로 연관되어 있다. 성능상에서의 경우를 제외하고, 특별한 스토리지 매체의 물리적 구성 및 사용의 효과들은 프로그램에 의해서는 일반적으로 관찰가능하지 않다
별도의 캐시들이 명령들을 위해서 그리고 데이터 오퍼런드들을 위해서 유지될 수 있다. 캐시내의 정보는 캐시 블록 또는 캐시 라인 (또는, 간단히, 라인이라 함)으로 불리우는 인테그럴 경계 (integral boundary)상에 인접 바이트들로 (in contiguous bytes)로 유지된다. 한 모델에서 익스트랙트 캐시 속성 명령 (EXTRACT CACHE ATTRIBUTE instruction)을 제공할 수 있는데, 이는 캐시 라인의 사이즈를 바이트로 리턴한다. 한 모델에서, 또한 프리페치 데이터 및 프리페치 데이터 렐러티브 롱 명령들 (PREFETCH DATA and PREFETCH DATA RELATIVE LONG instructions)을 제공하는데, 이는 데이터 또는 명령 캐시로 스토리지의 프리페칭을 실행하거나 또는 캐시로부터 데이터의 릴리싱 (releasing)을 실행한다.
스토리지는 비트의 긴 수평적 스트링 (long horizontal string of bits)으로 생각할 수 있다. 대부분의 동작들에서, 스토리지에 대한 액세스는 왼쪽에서 오른쪽 순서로 진행된다. 비트의 스트링은 8 비트 단위로 나누어진다. 8비트 단위를 바이트라 하며, 이는 모든 정보 포맷들의 기본적 빌딩 블록이다. 스토리지내에서 각 바이트의 위치는 특별한 음수 아닌 정수 (unique nonnegative integer)에 의해서 식별되는데, 이 정수를 그 바이트 위치의 주소 또는, 그냥 바이트 주소라 한다. 인접 바이트 위치들은 연속 주소들을 갖는데, 이는 왼쪽에서 0으로 시작하여 왼쪽으로부터 오른쪽의 순서로 진행된다. 주소는 부호가 없는 2진 정수 (unsigned binary integers)이며, 24, 31, 또는 64비트이다.
정보는 스토리지와 CPU 또는 채널 서브시스템 사이에서, 한번에, 한 바이트, 또는 바이트들의 그룹으로 전송된다. 달리 명시하지 않는 한, 예를 들어, z/Architecture®에서는, 스토리지내 바이트들의 그룹이 상기 그룹의 가장 왼쪽 바이트 (the leftmost byte)에 의해서 어드레스된다. 그룹 내의 바이트들의 수는 수행될 연산에 의해서 암시되거나 또는 명시된다. CPU 동작에서 사용될 때, 바이트들의 그룹을 필드 (field)라 한다. 바이트들의 각 그룹 내에서, 예를 들어, z/Architecture®에서는, 비트들은 왼쪽에서 오른쪽의 순서로 번호가 매겨진다 (numbered). z/Architecture®에서는, 가장 왼쪽의 비트들은 때때로 하이-오더 비트들 ("high-order" bits)이라 하고, 가장 오른쪽의 비트들은 로우-오더 비트들 ("low-order" bits)이라 한다. 그러나, 비트 번호들 (bit numbers)이 스토리지 주소는 아니다. 오직 바이트들만이 어드레스될 수 있다. 스토리지내 바이트의 개별 비트들에 관해 연산하기 위해서는, 전체 바이트가 액세스된다. 바이트내의 비트들은, 왼쪽으로부터 오른쪽으로 (예를 들어, z/Architecture®에서), 0에서 7까지 번호가 매겨진다. 주소내의 비트들은 24 비트 주소를 위해서는 8-31 또는 40-63으로, 또는 31비트 주소를 위해서는 1-31 또는 33-63으로, 64비트 주소를 위해서는 0-63으로 번호가 매겨질 수 있다. 다수 바이트들의 어떠한 기타 고정-길이 포맷 (any other fixed-length format of multiple bytes)내에서, 상기 포맷을 구성하는 비트들은 0으로부터 시작하여 연속적으로 번호가 매겨진다. 에러 검출의 목적을 위해서, 더 바람직하게는 교정을 위해서, 하나 또는 그 이상의 체크 비트들 (check bits)이 각 바이트와 함께 또는 바이트들의 그룹과 함께 전송될 수 있다. 그러한 체크 비트들은 자동으로 머신에 의해서 생성되며, 프로그램에 의해서 직접적으로 컨트롤될 수 없다. 스토리지 용량 (storage capacities)은 바이트들의 수로 표시된다. 스토리지-오퍼런드 필드의 길이가 명령의 오퍼레이션 코드에 의해서 암시되는 경우, 그 필드는 고정 길이를 갖는다고 말하며, 이 때 필드의 길이는 한 바이트, 두 바이트, 4바이트, 8바이트 또는 16바이트가 될 수 있다. 일부 명령들을 위해 더 큰 필드들이 암시될 수 있다. 스토리지-오퍼런드 필드의 길이가 암시되지 않고, 명시적으로 언급될 때, 그 필드는 가변 길이를 갖는다고 말한다. 가변-길이 오퍼런드들은 한 바이트의 증가들에 의해서 (또는 일부 명령들에서, 두 바이트의 배수로 또는 기타 배수들로) 길이가 변화될 수 있다. 정보가 스토리지에 저장될 때, 비록 스토리지에 대한 물리적 경로의 폭 (width)이 저장되는 필드의 길이보다 더 클 수 있더라도, 오직 그 바이트 위치들의 컨텐츠만 교체되어 지정된 필드내에 포함된다.
정보의 특정 유닛들 (certain units)은 스토리지내의 인테그럴 경계상에 위치한다. 스토리지 주소가 바이트들의 단위 길이의 배수 (multiple)일 때, 경계 (boundary)를 정보의 유닛을 위한 인테그럴 (integral)이라 한다. 인테그럴 경계상에서 2, 4, 8, 및 16 바이트들의 필드들에는 특별한 이름이 주어진다. 하프워드 (halfword)는 2 바이트 경계상에서 2개의 연속 바이트들의 그룹이다. 워드 (a word)는 4 바이트 경계상에서 4개의 연속 바이트들의 그룹이다. 더블워드 (a doubleword)는 8 바이트 경계상에서 8개의 연속 바이트들의 그룹이다. 쿼드워드 (a quadword)는 16 바이트 경계상에서 16개의 연속 바이트들의 그룹이다. 스토리지 주소들이 하프워드, 워드, 더블워드, 및 쿼드워드들을 지정할 때, 상기 주소의 2진 표시는 하나, 둘, 셋, 또는 넷의 가장 오른쪽 (rightmost) 제로 (0) 비트들을, 각각, 포함한다. 명령들은 2바이트 인테그럴 경계상에 위치한다. 대부분의 명령들의 스토리지 오퍼런드들은 경계 정렬 요건들 (boundary-alignment requirements)을 갖지 않는다.
명령들 및 데이터 오퍼런드들을 위한 개별 캐시들을 구현하는 디바이스들상에서, 만일 프로그램이 캐시 라인내에 저장되고 그로부터 명령들이 후속으로 페치된다면, 그 저장된 값이 후속으로 페치되는 명령들을 변경하는지 여부에 상관없이, 심각한 지연이 일어날 수 있다.
한 실시예에서, 본 발명은 (때때로, 라이센스된 내부 코드, 펌웨어, 마이크로-코드, 밀리-코드, 피코-코드등 - 이들은 모두 본 발명과 양립한다-이라 일컬어지는) 소프트웨어에 의해서 실시될 수 있다. 도 7을 참조하면, 본 발명의 하나 또는 그 이상의 실시예를 구현하는 소프트웨어 프로그램 코드는 호스트 시스템 (5000)의 프로세서 (5001)에 의해서 액세스되는데, 이는 CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브와 같은, 롱-텀 스토리지 매체 디바이스들 (5011)로부터 액세스된다. 상기 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은, 데이터 처리 시스템과 함께 사용되는 다양한 공지의 매체중 어느 하나에 구현될 수 있다. 상기 코드는 그러한 매체상에서 배포될 수 있거나, 또는 네트워크 (5010)를 통해서 컴퓨터 메모리 (5002) 또는 한 컴퓨터 시스템의 스토리지로부터 다른 컴퓨터 시스템들로 그러한 다른 시스템들의 사용자들의 사용을 위해서 사용자들에게 배포될 수 있다.
상기 소프트웨어 프로그램 코드는 다양한 컴퓨터 컴포넌트들의 펑션과 상호 작용을 컨트롤하는 운영 체제와 하나 또는 그 이상의 응용 프로그램들을 포함한다. 프로그램 코드는 통상적으로 스토리지 매체 디바이스 (5011)로부터 상대적으로 더 고속인 컴퓨터 스토리지 (5002)로 페이지되어 거기서 프로세서 (5001)에 의한 처리를 위해 사용가능하게 된다. 소프트웨어 프로그램 코드를 메모리내에, 물리적 매체상에 구현하고, 그리고/또는 네트워크를 통해서 소프트웨어 코드를 배포하는 방법 및 기술들은 잘 알려져 있으므로 여기서 더 이상 설명하지 않는다. 프로그램 코드는, 유형의 매체 (전자 메모리 모듈들 (RAM), 플래시 메모리, 컴팩트 디스크 (CD), DVD들, 자기 테이프등을 포함하나 이에 한정되지 않음)상에서 생성되고 저장될 때, 종종 이를 “컴퓨터 프로그램 제품”이라 한다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해서 바람직하게는 컴퓨터내에서 상기 처리 회로에 의한 실행을 위하여 판독될 수 있다.
도 8은 본 발명이 실시될 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 도시한다. 도 8의 시스템 (5020)은 개인용 컴퓨터, 워크스테이션 또는 서버와 같은 대표적인 베이스 컴퓨터 시스템 (5021)를 포함하며, 이는 선택적 주변 디바이스들을 포함한다. 베이스 컴퓨터 시스템 (5021)은 하나 또는 그 이상의 프로세서 (5026)와 상기 프로세서사이를 연결하고 통신할 수 있게 하기 위해 채용된 버스 및 공지 기술들에 따른 시스템 (5021)의 기타 컴포넌트들을 포함한다. 상기 버스는 프로세서 (5026)을 메모리 (5025) 및 롱-텀 스토리지 (5027)에 연결하며, 스토리지 (5027)은 하드 드라이브 (예를 들어, 자기 매체, CD, DVD, 및 플래시 메모리중 어느 것을 포함한다) 또는 테이프 드라이브를 예로서 포함할 수 있다. 시스템 (5021)은 또한 유저 인터페이스 어댑터를 포함할 수 있는데, 이는 마이크로프로세서 (5026)을 버스를 통해서 하나 또는 그 이상의 인터페이스 디바이스들, 예를 들어, 키보드 (5024), 마우스 (5023), 프린터/스캐너 (5030) 및/또는 기타 인터페이스 디바이스들에 접속하고, 기타 인터페이스 디바이스들에는 터치 센시티브 스크린 (a touch sensitive screen), 디지타이즈된 엔트리 패드 (digitized entry pad)등과 같은 모든 유저 인터페이스 디바이스가 포함될 수 있다. 상기 버스는 또한 디스플레이 디바이스 (5022), 예를 들어 LCD 스크린 또는 모니터를, 디스플레이 어댑터를 통해서 마이크로프로세서 (5026)에 연결한다.
상기 시스템 (5021)은 다른 컴퓨터들 또는 네트워크 (5029)와 통신할 수 있는 (5028) 네트워크 어댑터를 통해서 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터들의 예로는 커뮤니케이션 채널, 토큰 링 (token ring), 이더넷 또는 모뎀이 있다.
이와 달리, 시스템 (5021)은 CDPD (cellular digital packet data) (셀룰러 디지털 패킷 데이터) 카드와 같은 무선 인터페이스를 사용하여 통신할 수도 있다. 상기 시스템 (5021)은 근거리 네트워크 (LAN), 또는 광역 네트워크 (WAN)으로 다른 컴퓨터들과 연관될 수 있거나, 또는 시스템 (5021)은 다른 컴퓨터등과의 클라이언트/서버 구성에서 클라이언트가 될 수 있다. 적절한 통신 하드웨어 및 소프트웨어뿐만 아니라 이 모든 구성들은 공지되어 있다.
도 9는 본 발명의 하나 또는 그 이상의 실시예가 실시될 수 있는 데이터 처리 네트워크 (5040)을 도시한다. 데이터 처리 네트워크 (5040)은 복수의 개별 네트워크들, 예를 들어 무선 네트워크 및 유선 네트워크를 포함할 수 있으며, 이들 각각은 복수의 개별 워크스테이션들 (5041, 5042, 5043, 5044)를 포함할 수 있다. 또한, 당업자들이 알 수 있듯이, 하나 또는 그 이상의 LAN들이 포함될 수 있고, 여기서 LAN은 호스트 프로세서에 결합된 복수의 지능 워크스테이션들을 포함할 수 있다.
다시 도 9로 돌아가서, 상기 네트워크들은 또한 메인프레임 컴퓨터들 또는 서버들, 예를 들어 게이트웨이 (gateway) 컴퓨터 (클라이언트 서버 5046) 또는 어플리케이션 서버 (데이터 저장소로 액세스할 수 있고 또한 워크스테이션 (5045)로부터 직접 액세스될 수도 있는 원격 서버 (5048))을 포함할 수 있다. 게이트웨이 컴퓨터 (5046)은 각 개별 네트워크의 엔트리 포인트로서 기능을 수행한다. 게이트웨이는 하나의 네트워킹 프로토콜을 다른 네트워크로 연결할 때 필요하다. 상기 게이트웨이 (5046)은 바람직하게도 통신 링크를 사용하여 다른 네트워크 (예를 들어 인터넷 (5047))에 결합될 수 있다. 상기 게이트웨이 (5046)은 또한 통신 링크를 사용하여 하나 또는 그 이상의 워크스테이션들 (5041, 5042, 5043, 5044)에 직접적으로 결합될 수 있다. 상기 게이트웨이 컴퓨터는 인터내셔널 비지네스 머신즈 코포레이션으로부터 구입가능한 IBM eServer™ System z® 서버를 사용하여 구현될 수 있다.
도 8 및 도 9를 동시에 참조하면, 본 발명을 구현하는 소프트웨어 프로그래밍 코드는 시스템 (5020)의 프로세서 (5026)에 의해서, CD-ROM 드라이브 또는 하드 드라이브와 같은, 롱-텀 스토리지 매체 (5027)로부터 액세스될 수 있다. 상기 소프트웨어 프로그래밍 코드는 디스켓, 하드 드라이브, 또는 CD-ROM같은 데이터 처리 시스템과 사용하기 위한 공지의 다양한 매체들중 어느 하나상에서 구현될 수 있다. 상기 코드는 그러한 매체상에서 배포될 수 있고, 또는 네트워크를 통해서 하나의 컴퓨터 시스템 메모리 또는 스토리지로부터 다른 컴퓨터 시스템들로 그러한 다른 시스템들의 사용자들에 의한 사용을 위해 사용자들 (5050, 5051)에게 배포될 수 있다.
이와 달리, 상기 프로그래밍 코드는 메모리 (5025)에 구현되어 프로세서 버스를 사용하여 상기 프로세서 (5026)에 의해서 액세스될 수 있다. 그러한 프로그래밍 코드는 다양한 컴퓨터 컴포넌트들의 펑션과 상호 작용을 컨트롤하는 운영 체제와 하나 또는 그 이상의 응용 프로그램들 (5032)를 포함한다. 프로그램 코드는 통상적으로 스토리지 매체 (5027)로부터 고속 메모리 (5025)로 페이지되어 거기서 프로세서 (5026)에 의한 처리를 위해 이용가능하게 된다. 소프트웨어 프로그래밍 코드를 메모리내에, 물리적 매체상에 구현하고, 그리고/또는 소프트웨어 코드를 네트워크들을 통해서 배포하는 방법 및 기술들은 잘 알려져 있으므로 여기서 더 이상 설명하지 않는다. 프로그램 코드는, 유형의 매체 (전자 메모리 모듈(RAM), 플래시 메모리, 컴팩트 디스크들 (CD), DVD, 자기 테이프등을 포함하나 이에 한정되지 않음)상에서 생성되고 저장될 때, 종종 이를 “컴퓨터 프로그램 제품”이라 한다. 상기 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해서 바람직하게는 컴퓨터내에서 상기 처리 회로에 의한 실행을 위하여 판독될 수 있다.
프로세서에 곧바로 (most readily) 사용가능한 캐시 (통상적으로 상기 프로세서의 다른 캐시보다 더 빠르고 더 적은)는 최하위 (the lowest) (L1또는 레벨 1) 캐시이고, 메인 스토어 (메인 메모리)는 최상위 (the highest) 레벨 캐시 (만일 3개의 레벨들이 있다면 L3)이다. 최하위 레벨 캐시는 실행될 머신 명령들을 보유하는 명령 캐시 (I-캐시)와 데이터 오퍼런드들을 보유하는 데이터 캐시 (D-캐시)로 종종 나누어진다.
도 10을 참조하면, 프로세서의 한 예시적 실시예로서 프로세서 (5026)이 도시되어 있다. 통상적으로 하나 또는 그 이상의 레벨들의 캐시 (5053)이 프로세서 성능 향상을 위해서 메모리 블록들을 버퍼하기 위해 채용된다. 캐시 (5053)은 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 통상적인 캐시 라인들은 64, 128 또는 256바이트의 메모리 데이터이다. 데이터 캐싱을 위해서보다 명령 캐싱을 위해서 별도의 (seprate) 캐시들이 종종 채용된다. 캐시 일관성 (cache coherence) (메모리 및 캐시내 라인 카피들의 동기화)이 공지 기술에서 잘 알려진 다양한 “스누프 (snoop)” 앨고리듬에 의해서 종종 제공된다. 프로세서 시스템의 메인 메모리 스토리지 (5025)를 종종 캐시라 한다. 캐시 (5053)의 4 레벨들을 보유하는 프로세서 시스템에서, 메인 스토리지 (5025)는 때때로 레벨 5 (L5) 캐시라 하는데, 이는 통상적으로 더 빠르고 그리고 컴퓨터 시스템에 사용가능한 비휘발성 스토리지 (DASD, 테이프등)의 부분을 오직 보유하기 때문이다. 메인 스토리지 (5025)는 운영 체제에 의해서 메인 스토리지 (5025)에 페이지 인되고 (paged in) 페이지 아웃된 (paged out) 데이터의 페이지들을 “캐시”한다.
프로그램 카운터 (명령 카운터) (5061)은 실행될 현재 명령의 주소를 추적한다. z/Architecture® 프로세서에서 프로그램 카운터는 64비트이고 이전의 어드레싱 한계치들을 지원하기 위해 31 또는 24비트로 다듬어질 수 있다 (truncated). 프로그램 카운터는 통상적으로 컨텍스트 스위칭 (context switching)동안 계속되도록 컴퓨터의 PSW (프로그램 스테이터스 워드)에 구현된다. 따라서, 프로그램 카운터값을 갖는 진행중인 프로그램은 예를 들어, 운영 체제에 의해서 중단될 수 있다 (interrupted) (프로그램 환경에서 운영 체제 환경으로 컨텍스트 스위치될 수 있다). 프로그램이 활성 (active)이 아닌 동안, 그 프로그램의 PSW는 프로그램 카운터값을 유지하며, 운영 체제가 실행되는 동안에는 운영 체제의 프로그램 카운터 (PSW내)가 사용된다. 통상적으로, 프로그램 카운터는 현재 명령 바이트의 수와 같은 양만큼 증가된다. RISC (Reduced Instruction Set Computing) (축소된 명령 세트 컴퓨팅) 명령들은 통상적으로 고정 길이이다. 반면 CISC (Complex Instruction Set Computing) (복합 명령 세트 컴퓨팅) 명령들은 통상적으로 가변 길이이다. IBM z/Architecture®의 명령들은 2, 4 또는 6 바이트들의 길이를 갖는 CISC 명령들이다. 프로그램 카운터 (5061)은 예를 들어 컨텍스트 스위치 동작 또는 브랜치 명령의 브랜치 테이큰 동작 (a branch taken operation)에 의해서 수정될 수 있다. 컨텍스트 스위치 동작에서, 현재 프로그램 카운터 값은 실행중인 프로그램에 관한 다른 상태 정보 (예를 들어 조건 코드들)와 함께 프로그램 상태 워드 (program status word)내 저장되고, 새로운 프로그램 카운터값이 로드되어 실행될 새로운 프로그램 모듈의 명령을 가리킨다. 브랜치 테이큰 동작이 수행되는데, 이는 브랜치 명령의 결과를 프로그램 카운터 (5061)에 로드함으로써 프로그램이 결정을 내리도록 허가하거나 또는 그 프로그램내에서 루프를 돌게 허가하기 위해서이다.
통상적으로 명령 페치 유닛 (5055)는 프로세서 (5026) 대신에 명령들을 페치하기 위해 채용된다. 상기 페치 유닛은 브랜치 테이큰 명령의 타겟 명령인, “다음 순서 명령들 ("next sequential instructions")”을 페치하거나 또는 컨텍스트 스위치 다음 프로그램의 제 1 명령들을 페치한다. 현대의 명령 페치 유닛은 종종 프리페치 (prefetch) 기술을 채용해서 프리페치된 명령이 사용될 가능성을 기초로 명령을 추측하여 (speculatively) 프리페치한다. 예를 들어, 페치 유닛은 16 바이트들의 명령을 페치할 수 있으며, 이들은 다음 순서의 명령 및 그 다음 명령들의 추가 바이트들을 포함한다.
페치된 명령들은 프로세서 (5026)에 의해서 실행된다. 한 실시예에서, 페치된 명령(들)은 상기 페치 유닛의 디스패치 유닛 (dispatch unit) (5056)으로 전송된다. 상기 디스패치 유닛은 상기 명령(들)을 디코드하여 디코드된 명령(들)에 관한 정보를 적절한 유닛들 (5057, 5058, 5060)으로 전송한다. 실행 유닛 (5057)은 통상적으로 명령 페치 유닛 (5055)로부터 디코드된 산술 연산 명령들을 수신하여 상기 명령의 오피코드 (opcode)에 따라 오퍼런드들에 관하여 산술 연산들을 수행한다. 오퍼런드들이 실행 유닛 (5057)에 제공되는데, 바람직하게는 메모리 (5025), 아키텍처된 레지스터들 (5059)로부터 또는 실행될 명령의 이미디어트 필드 (immediate field)로부터 제공된다. 실행 결과들이 저장될 때, 메모리 (5025), 레지스터들 (5059) 또는 다른 머신 하드웨어 (예를 들어, 컨트롤 레지스터, PSW 레지스터등)내에 저장된다.
프로세서 (5026)은 통상적으로 명령의 펑션을 실행하기 위해 하나 또는 그 이상의 유닛들 (5057,5058, 5060)을 갖는다. 도 11a를 참조하면, 실행 유닛 (5057)은 인터페이싱 로직 (5071)을 통해서 아키텍처된 범용 레지스터(5059), 디코드/디스페치 유닛 (5056), 로드 스토어 유닛 (5060), 및 기타 프로세서 유닛 (5065)와 통신할 수 있다. 실행 유닛 (5057)은 산술 연산 로직 유닛 (arithmetic logic unit) (ALU) (5066)이 연산할 정보를 저장하기 위해 여러 레지스터 회로들 (5067, 5068, 5069)를 채용할 수 있다. 상기 ALU는 “앤드 (and)”, “오어 (or)” 및 “익스클루시브-오어 (exclusive-or (XOR)), “로테이트 (rotate)” 및 “시프트 (shift)”와 같은 로직 펑션 뿐만 아니라, “더하기 (add)”, ”빼기 (subtract)”, “곱하기 (multiply)” 및 “나누기 (divide)”와 같은 산술 연산들을 수행한다. 바람직하게도, ALU는 디자인 의존적인 전문화된 연산 (specialized operations)을 지원한다. 다른 회로들은, 예를 들어, 조건 코드들 (condition codes) 및 복구 지원 로직 (recovery support logic)를 포함하는 기타 아키텍처된 퍼실리티들 (other architected facilities) (5072)을 제공할 수 있다. 통상적으로, ALU 동작의 결과는 출력 레지스터 회로 (5070)에 저장되는데, 이 회로는 그 결과를 다양한 다른 처리 펑션들에 전송할 수 있다. 프로세서 유닛의 구성은 다양하며, 여기서 제공하는 설명은 단지 한 실시예의 대표적인 이해를 제공하기로 계획된 것이다.
예를 들어 ADD 명령은 산술 연산 및 로직 기능성을 갖는 실행 유닛 (5057) 내에서 실행될 수 있지만, 예를 들어 부동 소수점 명령은 전문화된 부동 소수점 처리 능력을 갖는 부동 소수점 실행에서 실행될 수 있다. 바람직하게도, 실행 유닛은 오퍼런드에 관하여 오피코드 정의된 펑션 (opcode defined function)을 수행함으로써 명령에 의해 식별된 오퍼런드에 관하여 연산한다. 예를 들어, ADD 명령은 명령의 레지스터 필드에 의해서 식별된 두 개의 레지스터 (5059) 내에서 발견된 오퍼런드에 대하여 실행 유닛 (5057)에 의해서 실행될 수 있다.
상기 실행 유닛 (5057)은 두 개의 오퍼런드들에 대하여 산술 연산 덧셈을 수행하여 그 결과를 제 3의 오퍼런드에 저장하는데, 여기서 제 3의 오퍼런드는 제 3의 레지스터 또는 상기 두 레지스터들 중 하나가 될 수 있다. 상기 실행 유닛은 바람직하게도 산술 연산 로직 유닛 (ALU) (5066)을 사용할 수 있는데, 이 유닛은 더하기, 빼기, 곱하기, 나누기중 어느 것이든지 포함하는 다양한 대수적 펑션들 (algebraic functions)뿐만 아니라, 시프트, 로테이트, Or 및 XOR과 같은 다양한 로직 펑션들을 수행할 수 있다. 일부 ALU들 (5066)은 스칼라 연산 (scalar operations) 및 부동 소수점 연산용으로 설계된다. 데이터는 아키텍처에 따라서 빅 엔디안 (Big Endian) (여기서 최하위 바이트는 최상위 바이트 주소에 위치함) 또는 리틀 엔디안 (Little Endian) (여기서 최하위 바이트는 최하위 바이트 주소에 위치함)이 될 수 있다. IBM z/Architecture®은 빅 엔디안이다. 부호있는 필드 (signed fields)는 부호 및 크기, 아키텍처에 따라 1의 보수 (1 's complement) 또는 2의 보수 (2's complement)를 포함할 수 있다. 2의 보수가 유리한데, 이는 2의 보수에서는 부의 값 (negative value)이든지 정의 값 (positive value)이든지 ALU내에서 오직 더하기만 요구되므로 ALU는 빼기 능력을 설계할 필요가 없기 때문이다. 수들 (numbers)은 통상적으로 간단히 기술되는데, 예를 들어, 12비트 필드는 4,096 바이트 블록의 주소를 정의하고, 통상적으로 4Kbyte (Kilobyte)로 기술된다.
도 11b를 참조하면, 브랜치 명령을 실행하기 위한 브랜치 명령 정보는 통상적으로 브랜치 유닛 (5058)에 전송되며, 이 유닛은 종종 브랜치 이력 테이블 (5082)와 같은 예측 앨고리듬을 채용하는데, 이는 다른 조건 연산들이 완료되기 전에 브랜치의 결과를 예측하기 위해서이다. 현재 브랜치 명령의 타겟은 페치되어 조건 연산들이 완료되기 전에 추측으로 (speculatively) 실행된다. 조건 연산들이 완료되면, 추측으로 실행된 브랜치 명령들은 조건 연산의 조건들과 추측된 결과에 기초하여 완료되거나 또는 버려진다. 통상적인 브랜치 명령은 조건 코드를 시험하고 만일 조건 코드가 브랜치 명령의 브랜치 요건을 충족한다면 타겟 주소로 브랜치할 수 있다. 타겟 주소는 예를 들어 레지스터 필드에서 발견된 수들 또는 명령의 이미디어트 필드에서 발견된 수들을 포함하여 여러 수들에 기초하여 산출될 수 있다. 브랜치 유닛 (5058)은 복수의 입력 레지스터 회로 (5075, 5076, 5077) 및 하나의 출력 레지스터 회로 (5080)을 갖는 ALU (5074)를 채용할 수 있다. 브랜치 유닛 (5058)은, 예를 들어, 범용 레지스터 (5059), 디코드 디스패치 유닛 (5056) 또는 기타 회로 (5073)과 통신할 수 있다.
한 그룹 명령의 실행은 다양한 이유로 인터럽트될 수 있는데, 예를 들어, 운영 체제에 의해서 개시된 (initiated) 컨텍스트 스위치, 컨텍스트 스위치를 작동시키는 프로그램 예외 또는 에러, 컨텍스트 스위치를 작동시키는 I/O 인터럽션 신호 또는 복수 프로그램들의 멀티-쓰레딩 동작 (multi-threading activity) (멀티 쓰레드된 환경에서 (in a multi-threaded environment))이 그 이유에 포함될 수 있다. 바람직하게도, 컨텍스트 스위치 동작은 현재 실행되는 프로그램에 관한 정보를 저장하고, 그리고는 불려오는 (invoked) 다른 프로그램에 관한 상태 정보 (state information)를 로드한다. 상태 정보는 예를 들어 하드웨어 레지스터들에 또는 메모리에 저장될 수 있다. 상태 정보는 바람직하게도 실행될 다음 명령을 가리키는 프로그램 카운터값, 조건 코드, 메모리 변환 정보 및 아키텍처된 레지스터 컨텐트를 포함한다. 컨텍스트 스위치 동작은 하드웨어 회로, 응용 프로그램, 운영 체제 프로그램 또는 펌웨어 코드 (마이크로코드, 피코-코드, 또는 라이센스된 내부 코드 (LIC))의 단독 또는 조합에 의해서 실행될 수 있다.
프로세서는 메소드들을 정의하는 명령에 따라 오퍼런드에 액세스한다. 상기 명령은 명령의 일부분값을 사용하여 이미디어트 오퍼런드 (an immediate operand)를 제공할 수도 있고, 범용 레지스터 또는 특별 목적 레지스터 (예를 들어 부동 소수점 레지스터)를 명시적으로 가리키는 하나 또는 그 이상의 레지스터 필드를 제공할 수 있다. 상기 명령은 오피코드 필드에 의해서 오퍼런드로 식별된 암시 레지스터들 (implied registers)을 사용할 수 있다. 상기 명령은 오퍼런드들을 위한 메모리 위치들을 사용할 수 있다. 오퍼런드의 메모리 위치는 레지스터, 이미디어트 필드, 또는 레지스터와 이미디어트 필드의 조합에 의해서 제공될 수 있는데, z/Architecture® 롱 디스플레이스먼트 퍼실리티 (long displacement facility)가 그 예다. 여기서 명령은 베이스 레지스터, 인덱스 레지스터 및 이미디어트 필드 (디스플레이스먼트 필드)를 정의하는데, 이들은 예를 들어 메모리내 오퍼런드의 주소를 제공하기 위해 함께 추가된다. 여기서 말하는 위치는 통상적으로 달리 표시하지 않는 한 메인 메모리 (메인 스토리지)내의 위치를 의미한다
도 11c를 참조하면, 프로세서는 로드/스토어 유닛 (5060)을 사용하여 스토리지에 액세스한다. 상기 로드/스토어 유닛 (5060)은 메모리 (5053)내의 타겟 오퍼런드의 주소를 획득하고 상기 오퍼런드를 레지스터 (5059) 또는 다른 메모리 (5053)의 위치에 로드함으로써 로드 동작을 수행할 수 있으며, 또는 메모리 (5053)내의 타겟 오퍼런드의 주소를 획득하고 레지스터 (5059) 또는 다른 메모리 (5053)의 위치로부터 획득한 데이터를 메모리 (5053)내의 타겟 오프런드 위치에 저장함으로써 스토어 동작을 수행할 수 있다. 상기 로드/스토어 유닛 (5060)는 추측 기능을 가지고 명령 순서와 다른 순서로 메모리에 액세스할 수 있지만, 그러나 상기 로드/스토어 유닛 (5060)은 명령들이 순서대로 실행되었다는 외양 (appearance)을 프로그램들에 대하여 유지한다. 로드/스토어 유닛 (5060)은 범용 레지스터 (5059), 디코드/디스패치 유닛 (5056), 캐시/메모리 인터페이스 (5053) 또는 기타 요소들 (5083)과 통신할 수 있으며, 다양한 레지스터 회로, ALU (5085) 및 컨트롤 로직 (5090)를 포함하여 스토리지 주소를 계산하고 연산들의 순서를 유지하기 위한 파이프라인 시퀀싱 (pipeline sequencing)을 제공한다. 일부 연산들은 순서를 벗어나서 처리될 수 있지만 상기 로드/스토어 유닛은, 공지 기술에서 알려진 바와 같이, 상기 순서를 벗어난 연산들을 프로그램에 대하여 순서대로 수행되었던 것으로 보이게 하기 위한 기능을 제공한다.
바람직하게도, 응용 프로그램들이 “보는 (sees)” 주소들은 종종 가상 주소들이라 한다. 가상 주소들은 때때로 “로직 주소들” 및 “실효 (effective) 주소들”이라 한다. 이들 가상 주소들은 이들이 물리적 메모리 위치로 다시 지정된다는 측면에서 가상적인데 이러한 재지정은 다양한 동적 주소 변환 (DAT) 기술중 하나에 의해서 이루어지며, DAT 기술들에는 간단히 가상 주소에 오프셋값을 앞에 갖다 붙이는 것 (prefixing), 가상 주소를 하나 또는 그 이상의 변환 테이블을 통해서 변환하는 것이 포함되나 이에 한정되지는 않으며, 상기 변환 테이블들은 바람직하게도 적어도 하나의 세그먼트 테이블 및 페이지 테이블을 단독으로 또는 조합으로 포함하고, 바람직하게도 상기 세그먼트 테이블은 상기 페이지 테이블을 가리키는 엔트리를 갖는다. z/Architecture®에서, 변환의 계층적 구조 (hierarchy)가 제공되는데, 여기에는 리전 퍼스트 테이블 (a region first table), 리전 세컨드 테이블 (a region second table), 리전 써드 테이블 (a region third table), 세그먼트 테이블 및 선택적 페이지 테이블 (optional page table)이 포함된다. 상기 주소 변환의 성능은 종종 변환 룩어사이드 버퍼 (TLB)를 사용함으로써 개선되는데, 이 TLB는 가상 주소를 연관된 물리적 메모리 위치로 매핑하는 엔트리들을 포함한다. 상기 엔트리들은 상기 DAT가 변환 테이블을 사용하여 가상 주소를 변환할 때 생성된다. 그 다음 가상 주소를 후속으로 사용할 때 느린 순차적 변환 테이블 액세스 (the slow sequential translation table accesses)보다는 빠른 TLB의 엔트리를 사용할 수 있다. TLB 컨텐트는 LRU (Least Recently Used)를 포함하는 다양한 리플레이스먼트 앨고리듬 (replacement algorithms)에 의해서 관리될 수 있다.
상기 프로세서가 멀티-프로세서 시스템의 프로세서인 경우, 각 프로세서는, I/O, 캐시들, TLB들 및 메모리와 같은 공유된 리소스들이 일관성 (coherency)를 위해 인터록되게 (interlocked)할 책임을 갖는다. 통상적으로 “스누프 (snoop)” 기술이 캐시 일관성 유지에 사용될 수 있다. 스누프 환경에서, 각 캐시 라인은 공유 상태 (a shared state), 배타적 상태 (an exclusive state), 변경된 상태 (a changed state), 무효 상태 (an invalid state) 및 기타 상태 (and the like)중 어느 하나에 있다는 것을 공유를 용이하게 하기 위해서 마크될 수 있다 (marked).
I/O 유닛들 (5054) (도 10)은, 예를 들어, 테이프, 디스크, 프린터, 디스플레이, 및 네트워크를 포함하는 주변 디바이스들에 부착시키는 수단을 프로세서에 제공한다. I/O 유닛들은 종종 소프트웨어 드라이버들에 의해서 컴퓨터 프로그램에 제공된다. IBM®에서 제공하는 System z®와 같은 메인프레임에서, 채널 어댑터 및 오픈 시스템 어댑터 (open system adapters)가 메인프레임의 I/O 유닛들이며, 이들은 운영 체제와 주변 디바이스들사이에 통신을 제공한다.
더 나아가서, 기타 형태의 컴퓨팅 환경들도 본 발명의 하나 또는 그 이상의 실시예들로부터 혜택을 받을 수 있다. 한 예로서, 어떤 환경은 에뮬레이터 (가령, 소프트웨어 또는 다른 에뮬레이션 메커니즘들)를 포함할 수 있는데, 이 에뮬레이터에서 특정 아키텍처 (예를 들어, 명령 실행, 주소 변환과 같은 아키텍처된 펑션들, 및 아키텍처된 레지스터들을 포함하여) 또는 그들의 서브세트 (subset thereof)가 에뮬레이트된다 (emulated) (가령, 프로세서 및 메모리를 갖는 네이티브 (native) 컴퓨터 시스템상에서). 그러한 환경에서, 상기 에뮬레이터의 하나 또는 그 이상의 펑션들은, 비록 그 에뮬레이터를 실행하는 컴퓨터가 에뮬레이터되는 능력과는 다른 아키텍처를 가지고 있다고 하더라도, 본 발명의 하나 또는 그 이상의 실시예들을 구현할 수 있다. 한 예로서, 에뮬레이션 모드에서, 에뮬레이트되는 특정 명령 또는 동작 (the specific instruction or operation)은 디코드되어, 적절한 에뮬레이션 펑션이 상기 개별의 명령 또는 동작을 구현하도록 구축된다 (built).
에뮬레이션 환경에서, 호스트 컴퓨터는, 예를 들어, 명령들과 데이터를 저장하기 위한 메모리; 명령들을 메모리로부터 페치하고 페치된 명령들을 위해 선택적으로 로컬 버퍼링을 제공하기 위한 명령 페치 유닛; 페치된 명령들을 수신하여 페치된 명령들의 형태를 결정하기 위한 명령 디코드 유닛; 및 명령들을 실행하기 위한 실행 유닛을 포함한다. 실행은 데이터를 메모리로부터 레지스터에 로드하는 것; 데이터를 레지스터로부터 다시 메모리에 저장하는 것; 또는 디코드 유닛에 의해서 결정된 바에 따라, 산술 연산 또는 로직 연산의 어떤 타입을 수행하는 것을 포함할 수 있다. 한 예에서, 각 유닛은 소프트웨어로 구현된다. 예를 들어, 상기 유닛들에 의하여 수행되는 동작들은 에뮬레이터 소프트웨어 내 하나 또는 그 이상의 서브루틴들 (subroutines)로서 구현된다.
좀 더 특별히, 메인프레임에서, 아키텍처된 머신 명령들이, 컴파일러 응용 프로그램을 통해서 종종 프로그래머들에 의해서 사용되는데, 이 프로그래머들을 오늘날 보통 “C” 프로그래머들이라 한다. 스토리지 매체에 저장된 이 명령들은 z/Architecture® IBM® 서버에서 그대로 (natively) 실행되거나, 아니면 다른 아키텍처를 실행하는 머신들에서 실행될 수 있다. 그들은 기존 및 미래 IBM® 메인프레임 서버들에서 그리고 IBM®의 다른 머신들 (가령, Power Systems 서버 및 System x® 서버)상에서 에뮬레이트될 수 있다. 그들은 또한 IBM®, Intel®, AMD™, 및 기타 회사들이 제조한 하드웨어를 사용하는 여러 다양한 머신들상에서 Linux를 실행하는 머신들에서 실행될 수 있다. z/Architecture®하의 그러한 하드웨어상의 실행외에, Linux는 Hercules, UMX 또는 FSI (Fundamental Software, Inc)에 의한 에뮬레이션을 사용하는 머신들로서 또한 사용될 수 있으며, 여기서 실행은 일반적으로 에뮬레이션 모드로 한다. 에뮬레이션 모드에서, 에뮬레이션 소프트웨어는 에뮬레이트된 프로세서의 아키텍처를 에뮬레이트하기 위해 네이티브 (native) 프로세서에 의해서 실행된다.
네이티브 프로세서는 통상적으로 에뮬레이트되는 프로세서의 에뮬레이션을 수행하기 위해 펌웨어 또는 네이티브 운영 체제를 포함하는 에뮬레이션 소프트웨어를 실행한다. 에뮬레이션 소프트웨어는 에뮬레이트되는 프로세서 아키텍처의 명령을 페치하고 실행할 책임이 있다. 에뮬레이션 소프트웨어는 에뮬레이트되는 프로그램 카운터를 유지하여 명령 경계들을 추적한다. 에뮬레이션 소프트웨어는 한번에 하나 또는 그 이상의 에뮬레이트되는 머신 명령을 페치하여 상기 하나 또는 그 이상의 에뮬레이트되는 머신 명령을 네이티브 프로세서에 의한 실행을 위해 네이티브 머신 명령의 대응 그룹으로 변환할 수 있다 (convert). 이들 변환된 명령은 더 빠른 변환이 달성될 수 있도록 캐시될 수 있다 (cached). 그럼에도 불구하고, 상기 에뮬레이션 소프트웨어는 운영 체제들과 에뮬레이트되는 프로세서를 위해 작성된 응용 프로그램들이 정확하게 동작하도록 에뮬레이트되는 프로세서 아키텍처의 아키텍처 규칙을 유지한다. 더 나아가서, 상기 에뮬레이션 소프트웨어는 에뮬레이트되는 프로세서상에서 실행되도록 설계된 운영 체제 또는 응용 프로그램이 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서상에서 실행될 수 있도록 에뮬레이트되는 프로세서 아키텍처에 의해서 식별되는 리소스들을 제공하는데, 이들에는 컨트롤 레지스터, 범용 레지스터, 부동 소수점 레지스터, 예로서 세그먼트 테이블 및 페이지 테이블을 포함하는 동적 주소 변환 펑션, 인터럽트 메커니즘, 컨텍스트 스위치 메커니즘, 타임 오브 데이 (Time of Day (TOD)) 클럭 및 I/O 서브시스템에 대한 아키텍처된 인터페이스들이 포함되며, 이들에 한정되지는 않는다.
에뮬레이트되는 특정 명령 (specific instruction)이 디코드되면, 서브루틴이 콜되어 개별 명령의 펑션을 수행한다. 에뮬레이트되는 프로세서의 펑션을 에뮬레이트하는 에뮬레이션 소프트웨어 펑션은, 예를 들어, “C” 서브루틴 또는 드라이버, 또는 특정 하드웨어를 위해 드라이버를 제공하는 기타 다른 방법으로 구현되는데, 이는 본 발명의 바람직한 실시예에 관한 설명을 이해하고 나면 당업자들의 기술로 구현할 수 있는 것이다. 다양한 소프트웨어 및 하드웨어 에뮬레이션 특허에는 아래의 것들이 포함되지만 이에 한정되지는 않는다. 발명의 명칭이 "하드웨어 에뮬레이션을 위한 멀티프로세서 (Multiprocessor for Hardware Emulation)"이고 발명자는 Beausoleil외 공동 발명자들인 미국 특허 번호 5,551,013, 발명의 명칭이 "타겟 프로세서상에서 양립할 수 없는 명령들을 에뮬레이트하기 위한 저장된 타겟 루틴들의 사전 처리 (Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor)"이고 발명자는 Scalzi외 공동 발명자들인 미국 특허 번호 6,009,261, 발명의 명칭이 "게스트 명령들을 에뮬레이트하는 에뮬레이션 루틴들을 직접 액세스하기 위한 게스트 명령의 디코딩 (Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions)"이고 발명자는 Davidian외 공동 발명자들인 미국 특허 번호 5,574,873, 발명의 명칭이 "비-원시 코드가 시스템에서 실행되도록 허용하는 코프로세서 지원을 위해 사용되는 대칭 멀티처리 버스 및 칩세트 (Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System)"이고 발명자는 Gorishek외 공동 발명자들인 미국 특허 번호 6,308,255, 발명의 명칭이 "아키텍처 에뮬레이션을 위한 오브젝트 코드 변환기의 동적 최적화 및 오브젝트 코드 변환 방법의 동적 최적화 (Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method)"이고 발명자는 Lethin외 공동 발명자들인 미국 특허 번호 6,463,582, 발명의 명칭이 "호스트 명령들의 동적 리컴파일레이션을 통해서 호스트 컴퓨터상에 게스트 명령들을 에뮬레이트 하기 위한 방법 (Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions)"이고 발명자는 Eric Traut인 미국 특허 번호5,790,825, 그리고 다른 많은 문헌들이 당업자들에게 사용가능한 타겟 머신을 위해 다른 머신용으로 아키텍처된 명령 포맷의 에뮬레이션을 성취하는 다양한 공지의 방법들을 보여주고 있다.
도 12에서, 에뮬레이트되는 호스트 컴퓨터 시스템 (5092)의 예가 제공되는데, 이는 호스트 아키텍처의 호스트 컴퓨터 시스템 (5000’)을 에뮬레이트 한다. 에뮬레이트되는 호스트 컴퓨터 시스템 (5092)에서, 호스트 프로세서 (CPU) (5091)은 에뮬레이트되는 호스트 프로세서 (또는 가상의 호스트 프로세서)이며 에뮬레이션 프로세서 (5093)을 포함하는데, 이는 호스트 컴퓨터 시스템 (5000’)의 프로세서 (5091)의 아키텍처와 다른 네이티브 명령 세트 아키텍처를 갖는다. 에뮬레이트되는 호스트 컴퓨터 시스템 (5092)는 에뮬레이션 프로세서 (5093)에 액세스 가능한 메모리 (5094)를 갖는다. 예시적 실시예에서, 상기 메모리 (5094)는 호스트 컴퓨터 메모리 (5096) 부분과 에뮬레이션 루틴 (5097) 부분으로 파티션된다. 호스트 컴퓨터 메모리 (5096)은 호스트 컴퓨터 아키텍처에 따라 에뮬레이트되는 호스트 컴퓨터 (5092)의 프로그램들에 이용가능하다. 에뮬레이션 프로세서 (5093)은 에뮬레이트되는 프로세서 (5091)의 아키텍처와 다른 아키텍처의 아키텍처된 명령 세트의 네이티브 명령들 (native instructions)을 실행하고 - 상기 네이티브 명령들은 에뮬레이션 루틴 메모리 (5097)로부터 획득됨 -, 호스트 컴퓨터 메모리 (5096)내의 프로그램으로부터 실행을 위해 호스트 명령을 액세스할 수 있는데, 이는 시퀀스 및 액세스/디코드 루틴 (a sequence & access/decode routine)내에 획득된 하나 또는 그 이상의 명령(들)을 채용함으로써 하며, 이 루틴은 액세스된 호스트 명령의 펑션을 에뮬레이트하기 위한 네이티브 명령 실행 루틴을 결정하기 위해 액세스되는 호스트 명령(들)을 디코드할 수 있다. 호스트 컴퓨터 시스템 (5000’) 아키텍처를 위해 정의된 기타 퍼실리티들 (other facilities)은 아키텍처된 퍼실리티 루틴들 (architected facilities routines)에 의해서 에뮬레이트 될 수 있으며, 그러한 퍼실리티들에는, 예를 들어 범용 레지스터, 컨트롤 레지스터, 동적 주소 변환 및 I/O 서브시스템 지원과 프로세서 캐시가 포함된다. 상기 에뮬레이션 루틴들은 에뮬레이션 루틴들의 성능을 개선하기 위해 (범용 레지스터 및 가상 주소들의 동적 변환같은) 에뮬레이션 프로세서 (5093)에서 사용가능한 펑션들을 또한 사용할 수 있다. 특별 하드웨어 및 오프-로드 엔진들 (off-load engines) 또한 호스트 컴퓨터 (5000)의 펑션을 에뮬레이트하는데 있어서 프로세서 (5093)을 지원하기 위해서 제공될 수 있다.
여기서 사용된 용어는 특정 실시예들을 설명할 목적으로만 사용된 것이며, 본 발명의 범위를 제한하려는 의도는 없다. 여기서 사용된 단수 형태는 달리 다르게 명시하지 않은 한 복수의 형태도 포함한다. “포함한다” 및/또는 “포함하는”이라는 용어는, 이 명세서에서 사용되었을 때, 진술된 특징, 정수, 단계, 동작, 요소, 및/또는 컴포넌트들의 존재를 명시하지만, 하나 또는 그 이상의 다른 특징, 정수, 단계, 동작, 요소, 컴포넌트들 및/또는 그와 관련된 그룹들의 존재 또는 추가를 배제하는 것은 아니다.
아래 청구항들내에, 대응 구조, 재료, 동작, 및 모든 수단의 균등물 또는 단계 플러스 펑션 요소들이 있다면, 이들은 구체적으로 청구된 바와 같이 모든 구조, 재료, 또는 다른 청구된 요소들과 조합하여 펑션을 수행하기 위한 동작을 포함한다. 본 발명의 설명은 예시와 설명의 목적으로 제공된 것이며, 개시된 형태의 발명이 전부라거나 또는 이에 국한된다는 것을 의미하는 것은 아니다. 많은 수정들과 변경들이 본 발명의 범위를 벗어남이 없이 가능하다는 것이 당업자들에게 명백하다. 실시예는 본 발명의 원리와 실제 응용을 가장 잘 설명하기 위해서 그리고 이 분야에서 통상의 지식을 가진 자들이 고려하는 특정 사용에 적합하도록 다양한 수정들을 갖는 다양한 실시예를 위해 본 발명을 이해할 수 있도록 선택되고 설명된 것이다.

Claims (20)

  1. 통신 환경에서 통신을 용이하게 하는 (facilitating) 컴퓨터 프로그램을 포함하는 컴퓨터 판독가능 매체에 있어서,
    상기 컴퓨터 프로그램은:
    처리 회로 (processing circuit)에 의하여 판독 가능하고 방법을 수행하기 위해 상기 처리 회로에 의하여 실행될 명령들을 포함하고,
    상기 방법은:
    동기식 데이터 전송으로부터 비동기식 데이터 전송으로 변환하기 위하여 사전-인가 (pre-authorization)를, 통신 환경의 송신기로부터 통신 환경의 프로세서에 의하여, 획득하는 단계 - 상기 사전-인가는 상기 비동기식 데이터 전송을 추적하기 위한 메모리 블록의 표시(an indication of a memory block)를 획득하는 단계를 포함함 -;
    통신 환경의 수신기로 데이터를 보내기 위한 요청 (a request)을, 상기 송신기로부터, 상기 프로세서에 의하여, 획득하는 단계;
    상기 수신기로 데이터를 보내는 단계를, 상기 프로세서에 의하여, 개시하는 (initiating) 단계 - 상기 개시하는 단계는 상기 동기식 데이터 전송을 채용함-;
    상기 동기식 데이터 전송이 비동기식 데이터 전송으로 변환되도록 함을, 상기 프로세서에 의하여, 결정하는 단계; 및
    상기 결정하는 단계에 기초하여, 상기 수신기로 데이터를 보내는 단계를 완료하기 위하여 상기 동기식 데이터 전송을 상기 비동기식 데이터 전송으로, 상기 프로세서에 의하여, 자동으로 변환하는 단계 - 상기 자동으로 변환하는 단계는 상기 사전-인가를 제외하고는 상기 송신기에 의한 조치들 (actions)과는 무관함 (independent) - 를 포함하는
    컴퓨터 판독가능 매체.
  2. 제1항에 있어서, 상기 결정하는 단계는 데이터가 보내지는 시점에서 데이터를 수신함에 있어서 상기 수신기가 지연되는 것을 결정하는 단계와, 그것에 기초하여, 상기 수신기가 데이터를 수신할 수 있는 시점에 상기 데이터를 보내는 단계를 완료하기 위하여 동기식 데이터 전송을 비동기식 데이터 전송으로 자동으로 변환하는 단계를 포함하는
    컴퓨터 판독가능 매체.
  3. 삭제
  4. 제2항에 있어서, 상기 자동으로 변환하는 단계는:
    상기 메모리 블록내에 상기 요청을 저장하는 단계;
    상기 수신기의 큐에 상기 메모리 블록을 대기하는 단계;
    상기 수신기가 데이터를 수신할 수 있음을 결정하는 단계; 및
    상기 메모리 블록을 사용하여 상기 수신기에 데이터를 보내는 단계를 포함하는
    컴퓨터 판독가능 매체.
  5. 제4항에 있어서, 상기 수신기가 데이터를 수신할 수 있음을 결정하는 단계는 상기 수신기가 데이터를 수신할 비어있는 버퍼를 가졌음을 결정하는 단계를 포함하는
    컴퓨터 판독가능 매체.
  6. 제4항에 있어서, 상기 방법은 상기 송신기에게 상기 보내는 단계의 완료를 표시하는 단계를 더 포함하는
    컴퓨터 판독가능 매체.
  7. 제6항에 있어서, 상기 완료를 표시하는 단계는 상기 송신기가 접근가능한 메모리내의 완료 큐 (a completion queue)상에 상기 메모리 블록의 주소를 게시하는 (posting) 단계를 포함하는
    컴퓨터 판독가능 매체.
  8. 제7항에 있어서, 상기 방법은 상기 완료 큐상의 주소를 게시하는 단계에 기초하여, 상기 송신기에 대하여 인터럽션 (interruption)을 발생시키는 단계 (generating)를 더 포함하는
    컴퓨터 판독가능 매체.
  9. 제2항에 있어서, 상기 수신기가 지연되는 것을 결정하는 단계는 데이터를 수신하기 위하여 수신 버퍼가 사용가능하지 않음을 결정하는 단계를 포함하는
    컴퓨터 판독가능 매체.
  10. 제1항에 있어서, 상기 자동으로 변환하는 단계 이후에, 상기 수신기에게 데이터를 비동기식으로 보내는 단계;를 더 포함하고, 상기 수신기에게 데이터를 비동기식으로 보내는 단계를 완료하기 전에 다른 수신기에게 동기식으로 보내질 다른 요청을 상기 송신기로부터 획득가능한
    컴퓨터 판독가능 매체.
  11. 제1항에 있어서, 상기 자동으로 변환하는 단계 이후에, 상기 수신기에게 데이터를 비동기식으로 보내는 단계;를 더 포함하고, 상기 수신기에게 데이터를 비동기식으로 보내는 단계를 완료하기 전에 하나 또는 그 이상의 추가적인 요청들을 상기 송신기로부터 수신가능하고, 상기 하나 또는 그 이상의 추가적인 요청들의 데이터가 동기식 또는 비동기식으로 하나 또는 그 이상의 수신기들에게 보내질 수 있는
    컴퓨터 판독가능 매체.
  12. 제1항에 있어서, 상기 방법은, 동기식 데이터 전송으로부터 비동기식 데이터 전송으로의 변환하는 단계에 기초하여, 상기 수신기에 데이터의 도착 순서를 유지하는 단계 (maintaining)를 더 포함하는
    컴퓨터 판독가능 매체.
  13. 통신 환경에서 통신을 용이하게 하는 (facilitating) 컴퓨터 시스템에 있어서, 상기 컴퓨터 시스템은:
    메모리; 및
    상기 메모리와 통신하는 프로세서 - 상기 컴퓨터 시스템은 방법을 수행하도록 구성됨 - 를 포함하고, 상기 방법은:
    동기식 데이터 전송으로부터 비동기식 데이터 전송으로 변환하기 위하여 사전-인가 (pre-authorization)를, 통신 환경의 송신기로부터 통신 환경의 프로세서에 의하여, 획득하는 단계 - 상기 사전-인가는 상기 비동기식 데이터 전송을 추적하기 위한 메모리 블록의 표시를 획득하는 단계를 포함함 -;
    통신 환경의 수신기로 데이터를 보내기 위한 요청 (a request)을, 상기 송신기로부터 상기 프로세서에 의하여, 획득하는 단계;
    상기 수신기로 데이터를 보내는 단계를, 상기 프로세서에 의하여, 개시하는 (initiating) 단계 - 상기 개시하는 단계는 동기식 데이터 전송을 채용함-;
    상기 동기식 데이터 전송이 비동기식 데이터 전송으로 변환되도록 함을, 상기 프로세서에 의하여, 결정하는 단계; 및
    상기 결정하는 단계에 기초하여, 상기 수신기로 데이터를 보내는 단계를 완료하기 위하여 상기 동기식 데이터 전송을 상기 비동기식 데이터 전송으로, 상기 프로세서에 의하여, 자동으로 변환하는 단계 - 상기 자동으로 변환하는 단계는 상기 사전-인가를 제외하고는 상기 송신기에 의한 조치들 (actions)과는 무관함 (independent) - 를 포함하는
    컴퓨터 시스템.
  14. 제13항에 있어서, 상기 결정하는 단계는 데이터가 보내지는 시점에서 데이터를 수신함에 있어서 상기 수신기가 지연되는 것을 결정하는 단계와, 그것에 기초하여, 상기 수신기가 데이터를 수신할 수 있는 시점에 상기 데이터의 보내는 단계를 완료하기 위하여 동기식 데이터 전송을 비동기식 데이터 전송으로 자동으로 변환하는 단계를 포함하는
    컴퓨터 시스템.
  15. 삭제
  16. 제14항에 있어서, 상기 자동으로 변환하는 단계는:
    상기 메모리 블록내에 상기 요청을 저장하는 단계;
    상기 수신기의 큐에 상기 메모리 블록을 대기하는 단계;
    상기 수신기가 데이터를 수신할 수 있음을 결정하는 단계; 및
    상기 메모리 블록을 사용하여 상기 수신기에 데이터를 보내는 단계를 포함하는
    컴퓨터 시스템.
  17. 제16항에 있어서, 상기 수신기가 데이터를 수신할 수 있음을 결정하는 단계는 상기 수신기가 데이터를 수신할 비어있는 버퍼를 가졌음을 결정하는 단계를 포함하는
    컴퓨터 시스템.
  18. 제16항에 있어서, 상기 방법은 상기 송신기에게 상기 보내는 단계의 완료를 표시하는 단계를 더 포함하고, 상기 완료를 표시하는 단계는 상기 송신기가 접근가능한 메모리 내의 완료 큐 (a completion queue)상에 상기 메모리 블록의 주소를 게시하는 (posting) 단계를 포함하며, 그리고 상기 방법은 상기 완료 큐상의 주소를 게시하는 단계에 기초하여, 상기 송신기에 대하여 인터럽션 (interruption)을 발생시키는 단계 (generating)를 더 포함하고, 상기 수신기가 지연되는 것을 결정하는 단계는 데이터를 수신하기 위하여 수신 버퍼가 사용가능하지 않음을 결정하는 단계를 포함하는
    컴퓨터 시스템.
  19. 통신 환경에서 통신을 용이하게 하는 (facilitating) 방법에 있어서, 상기 방법은:
    동기식 데이터 전송으로부터 비동기식 데이터 전송으로 변환하기 위하여 사전-인가 (pre-authorization)를, 통신 환경의 송신기로부터 통신 환경의 프로세서에 의하여, 획득하는 단계 - 상기 사전-인가는 상기 비동기식 데이터 전송을 추적하기 위한 메모리 블록의 표시를 획득하는 단계를 포함함 -;
    통신 환경의 수신기로 데이터를 보내기 위한 요청 (a request)을, 상기 송신기로부터 상기 프로세서에 의하여, 획득하는 단계;
    상기 수신기로 데이터를 보내는 단계를, 상기 프로세서에 의하여, 개시하는 (initiating) 단계 - 상기 개시하는 단계는 동기식 데이터 전송을 채용함-;
    상기 동기식 데이터 전송이 비동기식 데이터 전송으로 변환되도록 함을, 상기 프로세서에 의하여, 결정하는 단계; 및
    상기 결정하는 단계에 기초하여, 상기 수신기로 데이터를 보내는 단계를 완료하기 위하여 상기 동기식 데이터 전송을 상기 비동기식 데이터 전송으로, 상기 프로세서에 의하여, 자동으로 변환하는 단계 - 상기 자동으로 변환하는 단계는 상기 사전-인가를 제외하고는 상기 송신기에 의한 조치들 (actions)과는 무관함 (independent) - 를 포함하는
    방법.
  20. 제19항에 있어서, 상기 결정하는 단계는 데이터가 보내지는 시점에서 데이터를 수신할 수 있는 상태에서 상기 수신기가 지연되는 것을 결정하는 단계와, 그것에 기초하여, 상기 수신기가 데이터를 수신할 수 있는 시점에 상기 데이터의 보내는 단계를 완료하기 위하여 동기식 데이터 전송을 비동기식 데이터 전송으로 자동으로 변환하는 단계를 포함하는
    방법.
KR1020137010037A 2011-06-30 2012-05-10 통신 환경의 격리된 메모리 공간사이에서의 통신 개선 방법 Active KR101507665B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/172,978 2011-06-30
US13/172,978 US8549094B2 (en) 2011-06-30 2011-06-30 Facilitating communication between isolated memory spaces of a communications environment
PCT/EP2012/058687 WO2013000616A2 (en) 2011-06-30 2012-05-10 Facilitating communication between isolated memory spaces of a communications environment

Publications (2)

Publication Number Publication Date
KR20130114661A KR20130114661A (ko) 2013-10-18
KR101507665B1 true KR101507665B1 (ko) 2015-03-31

Family

ID=46125425

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137010037A Active KR101507665B1 (ko) 2011-06-30 2012-05-10 통신 환경의 격리된 메모리 공간사이에서의 통신 개선 방법

Country Status (21)

Country Link
US (2) US8549094B2 (ko)
EP (1) EP2591417B1 (ko)
JP (1) JP6012725B2 (ko)
KR (1) KR101507665B1 (ko)
CN (1) CN103649921B (ko)
AU (1) AU2012278245B2 (ko)
BR (1) BR112013034068B8 (ko)
CA (1) CA2821243C (ko)
DK (1) DK2591417T3 (ko)
ES (1) ES2620667T3 (ko)
HR (1) HRP20170402T1 (ko)
HU (1) HUE033684T2 (ko)
IL (1) IL224383A (ko)
LT (1) LT2591417T (ko)
MX (1) MX2013011406A (ko)
PL (1) PL2591417T3 (ko)
PT (1) PT2591417T (ko)
SG (1) SG194208A1 (ko)
SI (1) SI2591417T1 (ko)
WO (1) WO2013000616A2 (ko)
ZA (1) ZA201301289B (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8549094B2 (en) 2011-06-30 2013-10-01 International Business Machines Corporation Facilitating communication between isolated memory spaces of a communications environment
US10360051B2 (en) * 2014-12-22 2019-07-23 International Business Machines Corporation Emulated device firmware testable by native operating system tools
FR3032537B1 (fr) * 2015-02-09 2018-03-16 Commissariat A L'energie Atomique Et Aux Energies Alternatives Procede d'execution d'une requete d'echange de donnees entre des premier et deuxieme espaces d'adressage physiques disjoints de circuits sur carte ou puce
CN114201486A (zh) * 2020-09-02 2022-03-18 成都鱼泡科技有限公司 一种基于海量数据的分布式数据分析方法
US11709607B2 (en) * 2021-09-15 2023-07-25 International Business Machines Corporation Storage block address list entry transform architecture

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6625637B1 (en) 1999-12-09 2003-09-23 Koninklijke Philips Electronics N.V. Method and apparatus for synthesizing communication support based on communication types of application
US20050234928A1 (en) 2004-03-23 2005-10-20 Grand Central Communications, Inc. Synchronous interface to asynchronous processes

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5444705A (en) 1991-02-22 1995-08-22 International Business Machines Corp. Dual priority switching apparatus for simplex networks
AU6629894A (en) 1993-05-07 1994-12-12 Apple Computer, Inc. Method for decoding guest instructions for a host computer
US5551013A (en) 1994-06-03 1996-08-27 International Business Machines Corporation Multiprocessor for hardware emulation
US5604742A (en) 1995-05-31 1997-02-18 International Business Machines Corporation Communications system and method for efficient management of bandwidth in a FDDI station
JPH0916417A (ja) * 1995-06-27 1997-01-17 Hitachi Ltd メッセージ通信方法およびメッセージ通信システム
JPH09101901A (ja) * 1995-10-06 1997-04-15 N T T Data Tsushin Kk マルチプロセスで動作するパーソナルコンピュータ上で行われるプロセス間のメッセージ通信方式及びメッセージ通信方法
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
US5709825A (en) 1996-04-19 1998-01-20 Eastman Chemical Company Method of determining a thermoforming process window of a thermoplastic material
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
US6026424A (en) * 1998-02-23 2000-02-15 Hewlett-Packard Company Method and apparatus for switching long duration tasks from synchronous to asynchronous execution and for reporting task results
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
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
US6332171B1 (en) 1999-02-19 2001-12-18 International Business Machines Corporation Self-contained queues with associated control information for receipt and transfer of incoming and outgoing data using a queued direct input-output device
US6345241B1 (en) 1999-02-19 2002-02-05 International Business Machines Corporation Method and apparatus for simulation of data in a virtual environment using a queued direct input-output device
US6519645B2 (en) 1999-02-19 2003-02-11 International Business Machine Corporation Method and apparatus for providing configuration information using a queued direct input-output device
US6715095B1 (en) 2000-10-02 2004-03-30 Iomeca Corporation Method and circuitry for switching from a synchronous mode of operation to an asynchronous mode of operation without any loss of data
US7103586B2 (en) 2001-03-16 2006-09-05 Gravic, Inc. Collision avoidance in database replication systems
US7099935B2 (en) * 2001-10-01 2006-08-29 International Business Machines Corporation Dynamically determining whether to process requests synchronously or asynchronously
US7035262B1 (en) 2001-12-19 2006-04-25 Cisco Systems, Inc. Software-based emulation of single SONET path layer
US7376948B2 (en) * 2003-04-24 2008-05-20 International Business Machines Corporation Selective generation of an asynchronous notification for a partition management operation in a logically-partitioned computer
EP2045744A1 (en) * 2003-08-06 2009-04-08 Panasonic Corporation Method, server, and client for reducing processing time in synchronous communication in a client-server distributed system
FR2862830B1 (fr) * 2003-11-26 2006-02-24 Inst Nat Rech Inf Automat Dispositif et procede asynchrones et automatiques de transmission de resultats entre objets communicants.
US7941799B2 (en) 2004-05-27 2011-05-10 International Business Machines Corporation Interpreting I/O operation requests from pageable guests without host intervention
KR100612694B1 (ko) 2004-06-08 2006-08-16 에스케이 텔레콤주식회사 비동기망과 동기망이 혼재된 이동통신 시스템에서의핸드오버 방법
US7560956B2 (en) 2005-08-03 2009-07-14 Micron Technology, Inc. Method and apparatus for selecting an operating mode based on a determination of the availability of internal clock signals
JP4899087B2 (ja) 2006-03-24 2012-03-21 富士通株式会社 伝送システム
KR100772175B1 (ko) * 2006-10-23 2007-11-01 한국전자통신연구원 네트워크 로봇 시스템 및 네트워크 로봇 시스템에서의 통신방법
CN101098217A (zh) 2007-06-21 2008-01-02 杭州华三通信技术有限公司 一种同异步串口备份的系统、装置及切换方法
US7921177B2 (en) * 2007-07-18 2011-04-05 International Business Machines Corporation Method and computer system for providing remote direct memory access
US8549094B2 (en) 2011-06-30 2013-10-01 International Business Machines Corporation Facilitating communication between isolated memory spaces of a communications environment

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6625637B1 (en) 1999-12-09 2003-09-23 Koninklijke Philips Electronics N.V. Method and apparatus for synthesizing communication support based on communication types of application
US20050234928A1 (en) 2004-03-23 2005-10-20 Grand Central Communications, Inc. Synchronous interface to asynchronous processes

Also Published As

Publication number Publication date
AU2012278245A1 (en) 2013-05-02
EP2591417A1 (en) 2013-05-15
AU2012278245B2 (en) 2015-08-13
PL2591417T3 (pl) 2017-08-31
CA2821243A1 (en) 2013-01-03
US20130138762A1 (en) 2013-05-30
CN103649921A (zh) 2014-03-19
BR112013034068B1 (pt) 2021-11-23
ES2620667T3 (es) 2017-06-29
WO2013000616A2 (en) 2013-01-03
JP2014527215A (ja) 2014-10-09
HUE033684T2 (en) 2017-12-28
HRP20170402T1 (hr) 2017-05-19
RU2012148579A (ru) 2014-05-20
PT2591417T (pt) 2017-04-03
MX2013011406A (es) 2013-12-09
SG194208A1 (en) 2013-12-30
JP6012725B2 (ja) 2016-10-26
LT2591417T (lt) 2017-03-27
KR20130114661A (ko) 2013-10-18
CA2821243C (en) 2020-06-02
IL224383A (en) 2016-11-30
CN103649921B (zh) 2017-04-12
BR112013034068A2 (pt) 2021-05-25
SI2591417T1 (sl) 2017-04-26
BR112013034068B8 (pt) 2021-12-07
US8793329B2 (en) 2014-07-29
DK2591417T3 (en) 2017-04-10
US20130007182A1 (en) 2013-01-03
ZA201301289B (en) 2014-07-30
US8549094B2 (en) 2013-10-01
EP2591417B1 (en) 2017-02-22

Similar Documents

Publication Publication Date Title
US20210255975A1 (en) Directed interrupt virtualization
EP2430523B1 (en) Load instruction for communicating with adapters
EP2718830B1 (en) Managing operator message buffers in a coupling facility
EP2430524B1 (en) Store/store block instructions for communicating with adapters
EP2718819B1 (en) Operator message commands for testing a coupling facility
US8752068B2 (en) Transmitting operator message commands to a coupling facility
EP2718812B1 (en) Executing a start operator message command
KR101507665B1 (ko) 통신 환경의 격리된 메모리 공간사이에서의 통신 개선 방법
EP2718818B1 (en) Processing operator message commands
HK1193890A (en) Method, apparatus and computer system for facilitating communication in a communication environment
HK1193890B (en) Method, apparatus and computer system for facilitating communication in a communication environment

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20130419

Patent event code: PA01051R01D

Comment text: International Patent Application

A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20130709

Comment text: Request for Examination of Application

PG1501 Laying open of application
E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20140813

Patent event code: PE09021S01D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20150217

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20150325

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20150325

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
FPAY Annual fee payment

Payment date: 20180227

Year of fee payment: 4

PR1001 Payment of annual fee

Payment date: 20180227

Start annual number: 4

End annual number: 4

FPAY Annual fee payment

Payment date: 20190227

Year of fee payment: 5

PR1001 Payment of annual fee

Payment date: 20190227

Start annual number: 5

End annual number: 5

FPAY Annual fee payment

Payment date: 20200227

Year of fee payment: 6

PR1001 Payment of annual fee

Payment date: 20200227

Start annual number: 6

End annual number: 6

PR1001 Payment of annual fee

Payment date: 20230302

Start annual number: 9

End annual number: 9

PR1001 Payment of annual fee

Payment date: 20250311

Start annual number: 11

End annual number: 11