KR100677538B1 - 입출력 종료 보고서를 결합하는 호스트 어댑터와 그의사용방법 - Google Patents
입출력 종료 보고서를 결합하는 호스트 어댑터와 그의사용방법 Download PDFInfo
- Publication number
- KR100677538B1 KR100677538B1 KR1020017012672A KR20017012672A KR100677538B1 KR 100677538 B1 KR100677538 B1 KR 100677538B1 KR 1020017012672 A KR1020017012672 A KR 1020017012672A KR 20017012672 A KR20017012672 A KR 20017012672A KR 100677538 B1 KR100677538 B1 KR 100677538B1
- Authority
- KR
- South Korea
- Prior art keywords
- host
- requests
- microprocessor
- input
- output
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
- Information Transfer Systems (AREA)
- Input From Keyboards Or The Like (AREA)
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
Abstract
입출력 시스템에서 입출력 제어기(40)는 호스트 컴퓨터(15)의 복수의 입출력장치(80 내지 86)에 대한 입출력요구를 처리한다. 입출력 제어기(40)는 호스트 컴퓨터(15)를 인터럽트하여, 입출력 시스템에서 적어도 하나의 조건이 만족되면, 입출력장치(80 내지 86)로부터 복수의 종료된 입출력요구를 보고한다. 입출력 시스템의 첫 번째 조건은 보고되지 않은 전체 입출력장치(80 내지 86)에 의한 입출력종료의 수와 호스트 컴퓨터(15)로부터의 전체 잔여 입출력요구의 수간의 소정의 비율을 포함한다. 두 번째 조건은 개개의 입출력장치(80 내지 86)에 대한 잔여 입출력요구의 수가 소정의 최소한도에 도달할 경우, 작동되는 타이머의 만료를 포함한다.
Description
본 발명은 컴퓨터 시스템에 관한 것이다. 좀 더 구체적으로, 본 발명은 호스트 어댑터로부터 호스트의 마이크로프로세서로 전송되는 입출력 종료 인터럽트를 감소시키는 호스트 어댑터에 관한 것이다.
컴퓨터 시스템에서 호스트의 마이크로프로세서(호스트 시스템) 또는 중앙처리장치(CPU)는 입출력 제어기에 입출력요구를 전송하여, 디스크 드라이브와 같은 복수의 주변 입출력장치로부터 정보를 수집한다. 입출력 제어기는 주변 입출력장치에 전송되어 온 입출력요구를 처리하는데, 대부분의 입출력 제어기는 호스트의 마이크로프로세서부터 전송되어 온 복수의 입출력요구를 동시에 처리할 수 있다. 입출력 제어기는 각각의 입출력요구에 관련된 여러 개의 저급명령을 처리한다. 예를 들어, SCSI(small computer system interface) 버스에 연결되어 있는 입출력장치에서, 하나의 입출력요구에는 SCSI 버스와 중재하는 명령, 목표 입출력장치를 선택하는 명령, 데이터전송을 요구하는 명령, SCSI 버스로부터 입출력장치의 연결을 해제하거나 재연결하는 명령 및 SCSI 버스의 상태를 변경시키는 명령들이 포함되어 있을 수가 있다.
종래의 컴퓨터 시스템에서는, 하나의 입출력장치가 하나의 입출력요구 또는 저급명령을 수행한 다음, 입출력 제어기가 하드웨어 인터럽트를 생성하여 호스트의 마이크로프로세서에 보고하는 방식을 사용하였다. 호스트의 마이크로프로세서는 인터럽트를 통하여 어떤 입출력요구가 종료되었고, 어떤 입출력요구가 정확히 수행되었는지를 알게된다. 호스트의 마이크로프로세서는 입출력 제어기로부터의 인터럽트에 대응하기 위하여, 다른 작동을 중단하여야 한다. 또한, 호스트의 마이크로프로세서가 각각의 인터럽트에 대응할 때 호스트의 마이크로프로세서에는 작업부담이 생기는데, 인터럽트가 호스트의 마이크로프로세서에 들어오거나 나갈 때에도 작업부담이 생기게된다.
호스트의 마이크로프로세서의 입출력작업이 많아서 다수의 입출력요구를 보내게 되면, 호스트의 마이크로프로세서는 그에 상응하는 다수의 인터럽트를 받게 되고, 결과적으로 과도한 작업부담을 받게된다. 복수 사용자 시스템이나 다중작업 컴퓨터 시스템에서는, 이 과부하에 의해서 다른 응용프로그램에 할당할 호스트의 마이크로프로세서의 시간과 자원이 감소하게 되고, 시스템의 처리속도가 느려지게된다. 현재, 호스트의 마이크로프로세서는 빠른 처리 속도위주로 제작되기 때문에, 인터럽트로 인한 호스트의 처리속도 저하는 한층 더 현저하게 느껴진다.
지난 수년간, 호스트의 마이크로프로세서의 속도는 빨라졌고, 입출력요구를 처리하는 주변 입출력장치의 속도 또한 빨라졌다. 입출력요구를 처리하는 주변 입 출력장치의 속도가 빨라졌기 때문에, 호스트의 마이크로프로세서에 전송되는 입출력종료 인터럽트의 주기 또한 빨라지게 된 것이다.
뿐만 아니라, 호스트의 마이크로프로세서에서 작동하는 응용프로그램은 더 많은 처리능력을 필요로 하고 있고, 입출력요구와 응답을 수행하는데 필요한 처리능력이 그만큼 더 많이 요구된다.
본 발명은 입출력요구 종료 보고서를 결합시켜, 호스트의 마이크로프로세서에 도달하는 인터럽트를 현저하게 감소시키는 적응적 방법(adaptive method)을 사용하는 호스트 어댑터에 관한 것이다. 좀 더 구체적으로, 본 발명은 단일 인터럽트의 초당입출력종료보고(IOPS)의 비율을 현저하게 증가시키는 호스트 어댑터에 관한 것이다.
성공적으로 수행된 입출력 종료보고를 결합하고, 인터럽트를 감소시킴으로써, 호스트 어댑터는 성공적으로 종료된 입출력요구의 인터럽트에 대응할 때 발생하는 작업부담을 감소시키는 바, 어댑터로부터의 인터럽트를 처리하는데 소모되는 호스트의 마이크로프로세서의 시간(입출력 처리시간)과 자원을 감소시킨다. 본 발명의 실시태양에 의하면, 인터럽트에 대응하는데 소모되는 호스트의 마이크로프로세서의 작업시간 및/또는 자원이 20% 감소되었다.
본 발명의 장점은 호스트의 마이크로프로세서에 생기는 입출력 작업부담에 적응한다는 것이다. 호스트의 마이크로프로세서의 작업량이 많아지면, 단일 인터 럽트에 더 많은 입출력 종료보고가 본 발명의 어댑터에 의하여 전송되어 온다. 좀더 자세하게는, 입출력요구가 많아질수록, 단일 인터럽트에 대한 초당입출력종료보고(IOPS)의 비율이 증가하게된다. 예를 들어, 본 발명의 실시태양에 의하면, 상대적으로 작업량이 적어 한번에 5 내지 10의 입출력 요구가 발생하면, 단일 인터럽트에 3 내지 5의 입출력 종료보고를 호스트의 마이크로프로세서에 전송한다. 그러나, 상대적으로 작업량이 많아 한번에 30 내지 60의 입출력요구가 발생하면, 단일 인터럽트에 30까지의 입출력 종료보고가 호스트마이크로프로세서에 전송되는데, 이것은 호스트의 마이크로프로세서의 작업 부하가 클수록 인터럽트와 인터럽트에 의한 작업부담에 대응할 시간과 자원이 감소하기 때문에 중요한 장점이 될 수 있다.
호스트에 전송하는 인터럽트를 줄이는 것 외에, 본 발명의 어댑터는 입출력장치에 처리할 입출력 요구가 더 이상 남아 있지 않으면, 타이머를 작동시킨다. 타이머가 만료되면, 보고되지 않은 모든 입출력장치의 성공적으로 종료된 모든 입출력요구는 인터럽트를 통하여 호스트의 마이크로프로세서로 보고된다. 어떤 종류의 호스트 응용프로그램은 기존에 보내어진 입출력요구의 종료보고가 호스트의 마이크로프로세서에 수신되기 전에는 더 이상의 입출력요구를 전송하지 않고, 모든 입출력요구의 종료보고가 수신되었을 때, 호스트의 마이크로프로세서는 입출력장치에 새로운 입출력요구를 전송한다. 따라서, 유휴상태의 입출력장치에 새로운 입출력요구가 전송될 가능성이 증가하여, 시스템의 전반적인 처리속도가 빨라지게된다.
본 발명의 적응적인 특성에 의하여, 입출력요구의 작업부담(대량 또는 소량의), 접근 타입(연속적 또는 임의), 시스템 구성의 타입, 입출력장치의 수 및 입출 력요구의 타입(대기열화 또는 비대기열화의)에 관계없이 시스템의 성능이 전반적으로 향상될 수 있다.
본 발명의 목적은, 호스트 컴퓨터의 호스트 마이크로프로세서가 입출력 제어기에 입출력요구를 전송하여, 호스트 컴퓨터와 복수의 주변 입출력장치 간의 데이터 전송을 개시하는 컴퓨터 시스템에서, 전송된 입출력요구를 처리하는 방법을 제공하는 것이다. 전송된 입출력요구의 처리는 ⒜ 주변 입출력장치와 호스트 컴퓨터의 기억장치 간에 데이터를 전송하는 단계; ⒝ 상기 ⒜ 단계와 동시에, 보고되지 않은 종료된 입출력요구의 수와 보류 중인 입출력요구의 수를 참조하여, 호스트의 마이크로프로세서를 인터럽트할 것을 결정하는 단계; ⒞ 상기 ⒝ 단계에서 호스트의 마이크로프로세서를 인터럽트하기로 결정한 경우, 호스트의 마이크로프로세서를 인터럽트하여 보고되지 않은 종료된 입출력요구를 보고하는 단계; 및 ⒟ 입출력 제어기의 작업부하에 따라, 상기 ⒞ 단계에서 호스트의 마이크로프로세서에 보고할, 상기 보고되지 않은 종료된 입출력요구의 수를 변화시키는 단계를 포함한다.
한 실시태양에 의하면, 상기 ⒝ 단계는 상기 보고되지 않은 종료된 입출력요구의 수와 상기 보류 중인 입출력요구의 수를 비교하는 단계를 포함하고, 한 구성에서 전송된 입출력요구를 처리하는 방법은 상기 보고되지 않은 종료된 입출력요구의 수가 상기 보류 중인 입출력요구의 수보다 많거나 같을 때, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함한다.
일 실시태양에 의하면, 호스트의 마이크로세서를 인터럽트할 것을 결정하는 상기 ⒝ 단계는, 각각의 주변 입출력 장치에 대한 상기 보류 중인 입출력요구의 수를 추가로 참조하는 단계를 포함하고, 한 구성에서 전송된 입출력요구를 처리하는 방법은 하나의 주변 입출력장치에 대해 상기 보류 중인 입출력요구의 수가 0이 되면, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함하며, 다른 구성에서 전송된 입출력요구를 처리하는 방법은 하나의 주변 입출력장치의 상기 보류 중인 입출력요구의 수가 사용자가 선택 가능한 소정의 수가 되면, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함하고, 한 구성에서 각각의 주변 입출력장치는 호스트의 마이크로프로세서에 인터럽트를 유발하는, 사용자가 선택 가능한 각각의 보류 중인 입출력요구의 수를 구비한다.
한 구성에서, 하나의 주변 입출력장치에 대한 상기 보류 중인 입출력요구의 수가 0이 되면, 호스트의 마이크로프로세서를 인터럽트하는 단계는, 호스트의 마이크로프로세서를 인터럽트하기 전에 소정의 시한을 대기하는 단계를 포함하고, 상기 소정의 시한은 호스트의 마이크로프로세서를 인터럽트하기 전에, 하나 또는 그 이상의 다른 주변 입출력장치가 각각의 보류 중인 입출력요구를 종료시킬 가능성을 실질적으로 증가시키기 위하여 선택되며, 한 구성에서 상기 소정의 시한은 약 5㎲ 내지 8㎲이고, 다른 구성에서 상기 소정의 시한은 약25㎲ 내지 1,000㎲이며, 다른 구성에서 각각의 소정의 시한은 각각의 주변 입출력장치에 대하여 선택되며, 한 구성에서 상기 소정의 시한은 사용자가 선택 가능하다.
본 발명의 다른 목적은, 호스트 컴퓨터의 호스트 마이크로프로세서가 입출력 제어기에 입출력요구를 전송하여, 호스트 컴퓨터와 복수의 주변 입출력장치 간의 데이터전송을 개시하는 컴퓨터 시스템 및 종료된 입출력요구를 보고하기 위하여, 입출력 제어기가 호스트의 마이크로프로세서를 인터럽트하는 컴퓨터 시스템의 입출력 제어기를 제공하는 것이다. 입출력 제어기는 호스트의 마이크프로세서로부터 전체 잔여 입출력요구의 수를 가산하도록 구성된 첫 번째 계수기 및 입출력장치에 의하여 종료된 보고되지 않은 전체 입출력요구의 수를 가산하도록 구성된 두 번째 계수기를 포함한다. 상기 입출력 제어기는 첫 번째 계수기의 수와 두 번째 계수기의 수를 비교하고, 두 번째 계수기의 수가 첫 번째 계수기의 수보다 크거나 같을 경우, 호스트의 마이크로프로세서를 인터럽트하여 입출력장치에 의하여 종료된 모든 보고되지 않은 입출력요구를 보고한다.
본 발명의 실시태양에 의하면, 입출력 제어기는 각각의 계수기가 하나의 입출력장치에 대한 잔여 입출력요구의 수를 가산하도록 구성된 복수의 입출력장치 계수기 및 소정의 시한을 구비한 타이머를 추가로 포함한다. 상기 타이머는 복수의 입출력장치 중의 하나가 마지막 입출력요구를 종료하면, 즉 입출력장치 계수기가 1에서 0으로 이행되면 작동을 시작하도록 구성된다. 상기 입출력 제어기는 타이머의 소정의 시한이 만료되면, 호스트의 마이크로프로세서를 인터럽트하여, 입출력장치에 의하여 종료된 모든 보고되지 않은 입출력요구를 보고한다. 한 구성에서 모든 계수기는 입출력 제어기와 관련된 임의접근기억장치에 저장되고, 갱신되는 변수이다.
본 발명의 또 다른 목적은, 컴퓨터 시스템에서, 종료된 입출력요구를 호스트의 마이크로프로세서에 보고하는 시기를 입출력 제어기에서 제어하는 방법을 제공하는 것이다. 호스트의 마이크로프로세서는 호스트 컴퓨터와 복수의 주변 입출력 장치 간의 데이터전송을 개시하기 위하여, 입출력 제어기에 입출력요구를 전송하고, 입출력 제어기는 호스트의 마이크로프로세서를 인터럽트하여 종료된 입출력요구를 보고한다. 상기 방법은 적어도 (ⅰ) 보고되지 않은 종료된 입출력요구의 수 및 (ⅱ) 보류 중인 입출력요구를 가진 복수의 주변 입출력장치의 수를 감시하는 단계; 상기 감시를 참조하여, 종료된 입출력요구를 보고하기 위하여, 호스트의 마이크로프로세서를 인터럽트할 것을 결정하는 단계; 호스트의 마이크로프로세서를 인터럽트하는 단계; 및 호스트의 마이크로프로세서에 인터럽트당 가변적인 수의 종료된 입출력요구를 보고하는 단계를 포함한다.
본 발명의 한 실시태양에 의하면, 호스트의 마이크로프로세서를 인터럽트하여, 종료된 입출력요구를 보고할 것을 결정하는 단계는, 보고되지 않은 종료된 입출력요구의 수와 보류 중인 입출력요구를 가진 복수의 주변 입출력장치의 수를 비교하는 단계를 포함한다. 한 구성에서 종료된 입출력 요구를 호스트의 마이크로프로세서에 보고하는 시기를 입출력 제어기에서 제어하는 방법은, 보고되지 않은 종료된 입출력요구의 수가 보류 중인 입출력요구를 가진 복수의 주변 입출력장치의 수보다 크거나 같을 때, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함한다.
도 1은 호스트 컴퓨팅 시스템, 여러 개의 입출력 주변장치 및 본 발명의 한 실시태양에 따라 구성된 호스트 어댑터로 구성된 컴퓨터 시스템을 도시한 그림이 고;
도 2A는 도 1의 호스트 시스템의 전체 요구 대기열의 한 구성을 도시한 그림이며;
도 2B는 도 1의 호스트 시스템의 비어 있는 요구 대기열의 한 구성을 도시한 그림이고;
도 3A는 도 1의 컴퓨터 시스템에서 사용되는 명령 엔트리 타입의 한 구성을 도시한 그림이며;
도 3B는 도 1의 컴퓨터 시스템에서 사용되는 확장명령 엔트리 타입의 한 구성을 도시한 그림이고;
도 3C는 도 1의 컴퓨터 시스템의 성공적/비성공적인 상태 엔트리 타입의 한 구성을 도시한 그림이며;
도 4는 도 1의 호스트 어댑터 보드에 저장되는 두 세트의 편지상자 레지스터와 변수의 한 구성을 도시한 그림이고;
도 5는 도 1의 호스트 어댑터 보드가 호스트 시스템에 전송되는 인터럽트를 줄이기 위하여 입출력요구의 종료보고를 결합시키는 방법의 한 실시태양을 도시한 그림이며;
도 6A는 도 1의 컴퓨터 시스템에서 사용되는 16-비트 핸들의 성공적인 상태 엔트리 타입의 한 구성을 도시한 그림이고;
도 6B는 도 1의 컴퓨터 시스템에서 사용되는 32-비트 핸들의 성공적인 상태 엔트리 타입의 한 구성을 도시한 그림이며;
도 7은 도 1의 호스트 어댑터 보드가 호스트 시스템에 전송되는 인터럽트를 줄이기 위하여 입출력 요구의 종료보고를 결합시키는 방법의 또 다른 실시태양을 도시한 그림이고;
도 8은 도 1의 호스트 어댑터 보드가 호스트 시스템에 전송되는 인터럽트를 줄이기 위하여 입출력 요구의 종료보고를 결합시키는 방법의 또 다른 실시태양을 도시한 그림이다.
본 발명은 호스트의 마이크로프로세서에 전송되는 인터럽트를 줄이기 위하여 입출력 요구의 종료보고서를 결합하는 적응적 방법을 이용하는 호스트의 어댑터에 관한 것이다.
도 1은 본 발명의 한 실시태양에 따른 컴퓨터 시스템 10을 도시한 그림이다. 본 발명의 적응적인 특성 때문에, 도 1과는 다른 구성을 가진 컴퓨터 시스템 10의 실시태양이 있을 수 있다. 또한, 많거나 적은 입-출력 부하, 순차적 혹은 임의 입출력 접근, 다양한 수의 입출력 장치, 대기열화되거나, 대기열화되지 않은 입출력의 조합을 가진 여러 가지의 실시태양을 만들 수가 있다.
도 1에서 컴퓨터 시스템 10은 호스트 시스템 15, 첫 번째 버스 35, 호스트 어댑터 보드 40, 두 번째 버스 70, 여러 개의 주변 입출력장치 80 내지 86으로 이루어져있다. 통상적으로 호스트 시스템 15, 호스트 어댑터 보드 40, 첫 번째 버스 35, 두 번째 버스 70은 다양한 명칭과 구조를 가질 수가 있는데, 호스트 시스템 15 의 경우 중앙처리장치, 주 마이크로프로세서, 주 프로세서, 주 연산장치 또는 단순하게 호스트라는 명칭을 가질 수가 있다.
호스트 시스템
한 구성에서 도 1의 호스트 시스템 15는 호스트의 마이크로프로세서 20, 기억장치 25로 구성되고, 상기 기억장치 25는 소프트웨어 드라이버 30, 인터럽트 핸들러 32, 요구 대기열 26, 응답 대기열 27, 요구 대기열 인-포인터 변수 350, 요구 대기열 아웃-포인터 변수 352, 응답 대기열 인-포인터 변수 354, 응답 대기열 아웃-포인터 변수 356으로 구성된다. 소프트웨어 드라이버 30과 인터럽트 핸들러 32는 기억장치 25로부터 호스트의 마이크로프로세서20에 의하여 실행된다. 한 구성에서 소프트웨어 드라이버 30은 주 응용 프로그램, 파일 시스템 관리자, 입출력 장치에 대한 하나이상의 장치 드라이버 80-86 및 호스트 어댑터 드라이버(도시되지 않음)로 구성된다.
요구 대기열 26, 응답 대기열 27과 같은 기억장치 25의 일부분은 호스트의 마이크로프로세서 20과 호스트의 어댑터 보드 40사이에 공유될 수 있다. 요구 대기열 26과 응답 대기열 27은 입출력요구과 입출력응답에 관련된 명령과 상태정보를 저장한다.
PCI 버스와 SCSI 버스
첫 번째 버스와 두 번째 버스 35, 70은 시스템버스, 입출력버스, 네트워크버 스로 부른다. 한 구성에서 첫 번째 버스 35는 PCI(peripheral component interconnect) 버스이다. 한 구성에서 두 번째 버스 70은 SCSI(small computer standard interface) 버스이다. 두 번째 버스 70은 어떤 종류의 SCSI 버스라도 관계없다. 예를 들면, 한 구성에서 SCSI 버스는 15개의 장치를 지원하는 단일-포트 버스이고, 각각의 장치는 1 내지 32개의 논리장치를 지원할 수가 있어, 단일-포트의 SCSI 버스는 15 내지 480(15 × 32 = 480)개의 주변 입출력장치 80 내지 86을 지원할 수가 있다. 다른 구성에서 SCSI 버스는 31개의 장치를 지원하는 이중-포트 버스이고, 또 다른 구성에서 두 번째 버스 70은 고속, 초-광역 SCSI 버스이다. 또 다른 구성에서 두 번째 버스 70은 파이버채널(fibre channel)이다. 한 구성에서 파이버채널은 SCSI 명령형식 또는 SCSI 패킷형식을 따르도록 구성된다.
첫 번째 버스 35에 의하여 호스트 시스템 15와 호스트 어댑터 보드 40 간의 통신이 이루어진다. 두 번째 버스 70에 의하여 호스트 어댑터 보드 40과 입-출력 장치 80 내지 86 간의 통신이 이루어진다.
호스트 어댑터 보드
호스트 어댑터 보드 40 및/또는 호스트 어댑터 45는 입출력 제어기, 입출력 제어회로, 입출력 제어시스템, 입출력 처리장치, 입출력 부-처리장치, 통신 어댑터 또는 간단히 호스트 어댑터라고 부른다. 호스트 어댑터 보드 40은 차동 어댑터 보드, 단일-단자 어댑터 보드 또는 파이버채널 어댑터 보드가 될 수 있다. 한 실시태양에 의하면, 호스트 어댑터 보드 40은 호스트 어댑터 45, 읽기전용 기억장치(ROM) 60 및 임의접근 기억장치(RAM) 65로 구성된다. 한 구성에서 ROM은 기동가능 코드 61을 저장하는 프로그램 가능 판독 전용 기억장치(PROM)로 되어있다.
한 구성에서 호스트 어댑터 45는 마이크로프로세서 50, 인터페이스 레지스터 52 및 SCSI 실행 프로토콜(SXP) 엔진 55로 구성된다. 한 구성에서 마이크로프로세서 50은 간략화된 명령어 집합 컴퓨터(RISC)이다.
램 65에는 기동시에 소프트웨어 드라이버 30 또는 기동가능 코드 61에 의해서 RISC 코드 또는 펌웨어 62가 저장된다. 펌웨어 62는 호스트 어댑터 45가 호스트의 마이크로프로세서 20으로부터의 입출력요구와 명령을 처리할 때 작동한다. SXP 엔진 55는 입출력요구에 관련된 저급명령을 다루고, 마이크로프로세서 50이 다른 입출력요구를 처리할 수 있도록 한다.
입출력 장치
입출력 장치 80 내지 86은 테이프 드라이브, 디스크 드라이브, 비디오디스크 드라이브(VDD), 디지털 비디오디스크 드라이브(DVD), 레이드(RAID), 시디롬, 스캐너, 프린터 등이 될 수 있다. 도 1에서는 일곱의 입출력 주변장치 80 내지 86이 도시되어 있지만, 컴퓨팅시스템 10은 일곱보다 적거나 또는 많은 입출력 주변장치 80 내지 86으로 구성될 수 있다. 본 발명에 따라 어떤 수 및/또는 조합의 입출력장치도 사용될 수 있다.
일반적인 작동
컴퓨터 시스템 10의 일반적인 작동을 도 1을 참조하여 이하 서술한다. 호스트의 마이크로프로세서 20 및/또는 소프트웨어 드라이버 30은 주변 입출력장치 80 내지 86에 대한 입출력요구를 요구 대기열 26에 저장한다. 어댑터 45 및/또는 펌웨어 62는 PCI 버스 35를 통하여 요구 대기열 26으로부터 입출력 요구를 검색한다. 한 구성은 직접기억장소접근(DMA)를 통하여 호스트 기억장치 25로부터 입출력요구를 호스트 어댑터 45가 읽도록 한다. 어댑터 45는 호스트의 마이크로프로세서 20의 개입 없이 다중의 입출력 작동 및 데이터 전송을 할 수가 있다.
어댑터 45는 입출력 요구를 처리하고 SCSI 버스 70을 통하여 주변 입출력장치 80 내지 86에 명령을 내려 요구된 데이터를 검색하거나 저장한다. 호스트 어댑터 45는 DMA를 통하여 호스트 기억장치 25로 또는 기억장치 25로부터 요구된 데이터를 전송하거나 검색한다. 이하 서술한 적응적 방법에 의하면, 어댑터 45는 일정한 수 또는 비율의 입출력요구가 수행되거나, 입출력장치 80 내지 86이 더 이상 처리할 명령이 없으면, 일정 기간이 지나서 호스트의 마이크로프로세서 20을 인터럽트한다.
요구 대기열과 응답 대기열
도 2A내지 2B는 호스트 기억장치 25의 요구 대기열 26을 도시한 그림이다. 응답 대기열 27이 입출력 상태블록(IOSB)을 가지고, 요구 대기열 26이 입출력 명령블록(IOCB)을 가지는 것을 제외하면, 응답 대기열 27의 구조는 도 2A 내지 2B에 도 시된 요구 대기열 26의 구조와 매우 유사하다. 한 구성에서 요구 대기열 26과 응답 대기열 27은 원형의 고정된 길이를 가지는 64-바이트 선입선출(FIFO) 엔트리 목록으로 작성된다. 한 구성에서 각각의 대기열 26, 27에는 128 엔트리가 있다. 본 발명의 또 다른 실시태양에 의하면, 명령과 상태에 관한 정보는 원형이 아니라 스택과 같은 다른 유형의 데이터 구조로 저장된다.
각각의 대기열 26, 27은 색인역할을 하는 인-포인터와 아웃-포인터를 가지고 있다. 기억장치 25는 인-포인터와 아웃-포인터 변수 350 내지 356(도 1)의 세트를 저장하고, 호스트 어댑터 보드 40의 펌웨어 62는 램 65에 저장되는 고유의 인-포인터와 아웃-포인터 변수 360 내지 366(도 4)의 세트를 이용한다. 기억장치 25(도 1)에 저장된 각각의 인-포인터와 아웃-포인터 변수 350-356은 대기열 26, 27 중에서 하나의 대기열의 128개의 엔트리 중의 하나의 엔트리의 주소와 관련되어 있는 주소로 변환될 수 있다.
대기열 26, 27의 인-포인터와 아웃-포인터는 대기열 26, 27이 가득 차 있는지, 비어있는지 또는 부분적으로 차있는지를 나타낸다. 대기열 26, 27의 인-포인터가 아웃-포인터 보다 하나 적다면, 대기열 26, 27은 가득차있다. 도 2A는 가득 찬 요구 대기열 26의 한 구성을 도시한 것이다. 가득 찬 대기열 26, 27은 대기열 26, 27의 전체 길이보다 한개 적은 엔트리를 갖는다. 인-포인터 87과 아웃-포인터 88의 수가 같으면 대기열 26, 27은 비어있다. 도 2B는 비어있는 요구 대기열 26의 한 구성을 도시한 것이다. 특정 대기열 26, 27에서 가용한 대기열 엔트리의 수는 아웃-포인터에서 인-포인터의 수를 공제하여 구할 수 있다.
호스트의 마이크로프로세서 20은 요구 대기열 26을 통하여 호스트 어댑터 45(및/또는 펌웨어 62)에 다양한 명령들과 데이터로 구성된 입출력 명령블록(IOCB)에 대한 입출력요구를 전송한다. 요구 대기열 26의 엔트리는 요구 대기열의 인-포인터 87을 제어하는 호스트의 마이크로프로세서 20에 의해서만 대기열화된다. 요구 대기열의 아웃-포인터 88을 제어하는 호스트 어댑터 45(및/또는 펌웨어 62)만이 요구대기열 26의 엔트리를 대기열에서 제거할 수 있다.
호스트 어댑터 45(및/또는 펌웨어 62)는 응답 대기열 27을 통하여 호스트의 마이크로프로세서 20에 입출력요구에 대한 SCSI등에 대한 상태정보들로 구성된 입출력 상태블록(IOSB)에 대한 입출력 응답을 전송한다. 응답 대기열 인-포인터(도시되지 않음)를 제어하는 어댑터 45(및/또는 펌웨어 62)만이 응답 대기열 27의 엔트리를 대기열화 할 수 있다. 응답 대기열의 아웃-포인터를 제어하는 호스트의 마이크로프로세서 20만이 응답 대기열 27의 엔트리를 대기열에서 제거할 수 있다(도시되지 않음).
엔트리 타입 - 요구 대기열
요구 대기열 26에 있는 각각의 엔트리는 하나의 IOCB를 보유할 수 있다. 하나의 IOCB는 호스트 어댑터 처리장치 50이 호스트 기억장치 25로부터 검색하여 실행되는 명령과 데이터를 포함하고 있다. 다양한 유형의 IOCB가 있는데, 한 구성에서 요구 대기열 26은 적어도 두개의 IOCB 엔트리 타입을 가지고 있다: COMMAND와 EXTENDED COMMAND. 도 3A는 하나의 COMMAND 엔트리 타입 100의 한 구성을 도시한 것이고, 도 3B는 하나의 EXTENDED COMMAND 엔트리 타입 120의 한 구성을 도시한 것이다. 요구 대기열 26은 CONTINUATION, MARKER, SCAM OPERATION과 같은 다른 엔트리 타입을 가질 수 있다.
COMMAND 엔트리 타입 100(도 3A)은 SCSI 명령을 특정된 입출력 장치 80 내지 86으로 전송할 것을 요구한다. 도 3A에서 COMMAND 엔트리 타입 100은 적어도 일곱 개의 데이터 구조: 엔트리 타입 102; 핸들 104; 표적 106; 제어 플래그 108; SCSI 명령 기술어 블록(CDB) 118; 하나 또는 그 이상의 데이터 세그먼트 주소 110, 114 및 하나 또는 그 이상의 데이터 세그먼트 길이 112, 116으로 이루어져 있다.
도 3A에서 엔트리 타입 102를 EXTENDED COMMAND와 같은 다른 엔트리 타입이 아닌 COMMAND 엔트리 타입 100으로 인식한다. 한 구성에서 COMMAND 엔트리에 대한 엔트리 타입 번호는 '01H'이다. 핸들 104는 마이크로프로세서 20에 특정한 핸들 104와 관련된 IOCB가 수행되었다는 것을 알리는 종료 처리 루틴의 일부로 소프트웨어 드라이버 30에 의하여 이용되는 식별자이다. 한 구성에서 핸들 104는 16-비트이고, 다른 구성에서 핸들 104는 32-비트이다. 표적 106은 입출력 명령을 수신할 특정 표적 또는 입출력 장치 80 내지 86을 인식한다.
제어 플래그 108은 펌웨어 62가 COMMAND 엔트리 100을 수행하도록 지시한다. SCSI CDB 118은 COMMAND 단계동안 표적 또는 입출력 장치 80 내지 86에 전송되는 CDB 바이트를 가지고 있다. 데이터 세그먼트 주소 110, 114는 특정 읽기 또는 쓰기 입출력요구에 관련된 기억장치 25에 저장되는 데이터 세그먼트의 시작주소이다. 데이터 세그먼트 길이 112, 116은 특정 읽기 또는 쓰기 입출력 요구에 관련된 기억 장치 25에 저장되는 데이터 세그먼트 주소로 전송되거나, 데이터 세그먼트 주소로부터 전송되어 온 바이트의 수를 표시한다.
EXTENDED COMMAND 엔트리 타입 120은 특정된 입출력 장치 80 내지 86에 SCSI 명령을 보낸다. 한 구성에서 EXTENDED COMMAND 엔트리 타입 120은 COMMAND 엔트리 타입 100과 마찬가지로, 엔트리 타입 122, 핸들 124, 표적 126, 제어 플래그 128 및 SCSI CDB 130으로 구성되어 있다. 한 구성에서 EXTENDED COMMAND 엔트리에 대한 엔트리 타입의 번호는 '05H'이다.
엔트리 타입 - 응답 대기열
요구 대기열 27의 각각의 엔트리는 하나의 IOSB를 포함할 수 있다. 하나의 IOCB는 호스트의 마이크로프로세서 20에 입출력요구가 종료되었고, 입출력요구가 성공적이었는지의 여부를 알려주는 상태정보를 포함한다. 다양한 IOSB가 있을 수 있는데, 한 구성에서 응답 대기열 27은 적어도 세 개의 IOSB 엔트리 타입을 가지고 있다: STATUS, 16-비트 핸들의 SUCCESSFUL STATUS, 32-비트 핸들의 SUCCESSFUL STATUS. 도 3C는 STATUS 엔트리 타입 140의 한 구성을 도시한 것이다. 도 6A는 16-비트 핸들의 SUCCESSFUL STATUS 엔트리 타입 370의 한 구성을 도시한 그림이다. 도 6B는 32-비트 핸들의 SUCCESSFUL STATUS 엔트리 타입 380의 한 구성을 도시한 그림이다. 응답 대기열 27은 EXTENDED STATUS(도시되지 않음)와 같은 다른 엔트리 타입이 될 수 있다.
STATUS 엔트리 타입 140(도 3C)은 COMMAND 엔트리 100 또는 EXTENDED COMMAND 엔트리 120의 실시종료와 입출력요구의 수행여부를 보고한다. SUCCESSFUL STATUS 엔트리 타입 370, 380은 제대로 수행된 다중 IOCB의 핸들을 보고한다. 각각의 COMMAND 엔트리 100에 상응하는 STATUS 엔트리 140 또는 SUCCESSFUL STATUS 엔트리 370, 380이 응답 대기열 27에 생성될 수 있는데, 호스트의 마이크로프로세서 20에 명령의 실행을 통지하게된다. COMMAND 엔트리 100 또는 EXTENDED COMMAND 엔트리 120의 핸들 104는 응답 대기열 27에서 상응하는 STATUS 엔트리 140 또는 SUCCESSFUL STATUS 370, 380으로 이행하지 않은 상태로 반려된다.
도 3C에서 STATUS 엔트리 타입 140은 COMMAND 엔트리 타입 100과 같이 엔트리 타입 142와 핸들 144를 포함한다. 한 구성에서 STATUS 엔트리 140의 엔트리 타입 번호는 '03H'이다. STATUS 엔트리 타입 140은 두 개의 데이터 구조가 더 포함된다: 종료 상태 항목 146과 요구 데이터 항목 152. 종료 상태 항목 146은 전송오류가 발생했는지의 여부와 오류가 발생했을 때 오류의 설명을 보고한다. 요구 데이터 항목 152에는 호스트의 마이크로프로세서 20이 특정 입출력 장치 80 내지 86에 요구한 데이터가 들어있다.
도 6A에서 SUCCESSFUL STATUS 엔트리 타입 370은 하나의 엔트리 타입 372, 핸들 계수 374 및 성공적으로 수행된 특정 IOCB에 상응하는 다수의 16-비트 핸들로 이루어져 있다. 한 구성 예에서 16-비트 핸들의 SUCCESSFUL STATUS 엔트리 370의 엔트리 타입 번호는 '22H'이다. 도 6B에서 SUCCESSFUL STATUS 엔트리 타입 380은 하나의 엔트리 타입 382, 핸들 계수 384와 성공적으로 수행된 특정 IOCB에 상응하는 다수의 32-비트 핸들로 이루어져 있다. 한 구성 예에서 32-비트 핸들의 SUCCESSFUL STATUS 엔트리 380의 엔트리 타입 번호는 '21H'이다. 한 구성 예에서 SUCCESSFUL STATUS 엔트리 타입 370, 380의 핸들의 순서는 각각의 IOCB가 성공적으로 수행된 순서와 같다.
도 3A 내지 3C와 6A 내지 6B에 있는 엔트리 타입은 컴퓨터 시스템 10의 한 실시태양대로 사용된다. 다른 실시태양에 의하면, 컴퓨터 시스템 10은 상기 서술된 엔트리(COMMAND 100, EXTENDED COMMAND 120, STATUS 140, SUCCESSFUL STATUS 370, 380)는 다른 엔트리 타입을 사용하거나, 또는 다른 데이터 구조의 동일한 엔트리 타입을 사용할 수 있다.
편지상자(Mailboxes)
도 4는 도 1의 인터페이스 레지스터 52의 두 세트 160, 165의 내부 편지상자 레지스터 180 내지 187, 190 내지 197의 한 구성을 도시한 그림이다. 또한, 어댑터 45는 도 4에 도시된 바와 같이 타이머 245를 포함한다. 한 구성 예에서 인터페이스 레지스터 52는 호스트 명령과 제어 레지스터 170 및 PCI 제어 레지스터 175를 더 포함한다.
도 4는 호스트 어댑터 보드 40의 램 65에 저장되고, RISC 코드 또는 펌웨어 62에 의해 이용되는 변수들의 한 구성을 도시한 그림인데, TOTAL_REMAIN 220, TOTAL_COMPLETE 225, DEV_1_COUNT 230, DEV_2_COUNT 231, DEV_3_COUNT 232 등의 변수들이 있다. 도 4에서는 예를 들기 위하여 세 개의 DEV_n_COUNT 변수 230, 231, 232가 도시되었지만, 바람직하게는 각각의 주변 입출력장치 80 내지 86에 대하여, 적어도 하나 이상의 DEV_n_COUNT 변수가 있어야 한다. 다른 실시태양에 의하면, TOTAL_REMAIN, TOTAL_COMPLETE, DEV_1_COUNT, DEV_2_COUNT, DEV_3_COUNT 등의 변수는 어댑터 45의 인터페이스 레지스터 52의 레지스터들이다.
한 구성에서 편지상자 레지스터 180 내지 187, 190 내지 197은 호스트의 마이크로프로세서 20과 어댑터 처리장치 50에 접근 가능한 물리적인 하드웨어 레지스터이다. 한 구성에서 각각의 편지상자 레지스터 180 내지 187, 190 내지 197은 16-비트이다. 첫 번째 세트 160의 편지상자 레지스터 180 내지 187은 호스트의 마이크로프로세서 20이 기록하고, 어댑터 펌웨어 62(도 1)가 읽는 수입 편지상자 레지스터로 되어 있다. 수입 편지상자 레지스터 180 내지 187은 호스트의 마이크로프로세서 20으로부터 어댑터 처리장치 50 및/또는 펌웨어 62로 정보를 전송하는데 이용된다.
두 번째 세트 165의 편지상자 레지스터 190 내지 197은 어댑터 펌웨어 62가 기록하고, 호스트의 마이크로프로세서 20이 검색하는 수출 편지상자 레지스터이다. 수출 편지상자 레지스터 190 내지 197은 어댑터 처리장치 50 및/또는 펌웨어 62로부터 호스트의 마이크로프로세서 20으로 상태정보를 전송하는데 이용된다.
도 4의 두 편지상자 레지스터 세트 160, 165에서 레지스터 4는 요구 대기열 26에 대한 포인터를 포함하고, 레지스터 5는 응답 대기열 27에 대한 포인터를 포함한다. 수입 편지상자 레지스터 세트 160의 레지스터 4는 요구 대기열 26(도 1-2B)에 대한 인-포인터 87을 포함하는데, 호스트의 마이크로프로세서 20이 기록하고, 어댑터 프로세서 50(또는 펌웨어 62)이 검색한다. 수출 편지상자 레지스터 세트 165의 레지스터 4는 요구 대기열 26에 대한 아웃-포인터 88을 포함하는데, 어댑터 프로세서 50(또는 펌웨어 62)이 기록하고, 호스트의 마이크로프로세서 20이 검색한다.
수입 편지상자 레지스터 세트 160의 레지스터 5는 응답 대기열 27(도 1)의 아웃-포인터를 포함하는데, 호스트의 마이크로프로세서 20이 기록하고, 어댑터 처리장치 50(또는 펌웨어 62)이 검색한다. 수출 편지상자 레지스터 세트 165의 레지스터 5는 응답 대기열 27(도 1)의 인-포인터를 포함하는데, 어댑터 처리장치 50(또는 펌웨어 62)이 기록하고, 호스트의 마이크로프로세서 20이 검색한다.
도 4에서 수입 편지상자 레지스터 세트 160의 레지스터 0 내지 3, 6 내지 7은 호스트의 마이크로프로세서 20으로부터 어댑터 처리장치 50(또는 펌웨어 62)으로의 명령정보를 포함한다. 수출 편지상자 레지스터 세트 165의 레지스터 1 내지 3, 6 내지 7은 어댑터 펌웨어 62로부터 호스트의 마이크로프로세서 20으로의 입출력 상태정보를 포함하도록 설정된다.
한 구성에서 수출 편지상자 레지스터 세트 165의 레지스터 1 내지 3, 6 내지 7은 응답 대기열 27(도 1)에 있는 STATUS 엔트리 140(도 3C)의 하나 또는 그 이상의 핸들을 포함하거나, 호스트 기억장치 25의 요구 대기열 26의 성공적으로 수행된 COMMAND 엔트리 100(도 3A) 또는 EXTENDED COMMAND 엔트리 120(도 3B)의 핸들을 포함할 수 있다. 한 구성에서 수출 편지상자 레지스터 세트 165의 레지스터 1 내지 3, 6 내지 7의 핸들의 순서는 각각의 IOCB가 성공적으로 수행된 것에 의해 결정된다.
바람직한 실시태양에 의하면, 수출 편지상자 레지스터 세트 165의 레지스터 0은 어댑터 펌웨어 62에 의해서 호스트의 마이크로프로세서 20으로 전송되는 인터럽트에 관한 사건을 통지하는 고유의 코드를 포함한다. 한 구성에서 수출 편지상자 레지스터 세트 165의 편지상자 레지스터 0은 다섯의 가용한 수출 편지상자 레지스터 세트 1 내지 3, 6 내지 7의 정보의 타입을 표시하기위해 예약되었다. 권장되는 구성에서 수출 편지상자 레지스터 세트 165의 편지상자 0은 응답 레지스터 27에 있는 IOSB(또는 요구 대기열 26에 있는 성공적으로 수행된 IOCB)에 대한 핸들을 포함하는 수출 편지상자 레지스터 1 내지 3. 6 내지 7의 수 및 IOSB(또는 IOCB)의 크기 즉, 16-비트인지 32-비트인지를 호스트의 마이크로프로세서로 전송한다.
예를 들면, 한 구성에서 편지상자 0은 '802x' 또는 '803x'의 값을 포함할 수가 있는데, '803x'는 x개의 16-비트 IOSB 또는 가용한 수출 편지상자 레지스터 1 내지 3, 6 내지 7의 수행이 종료된 IOCB 핸들이 있다는 것을 의미하고, '802x'는 x개의 32-비트 IOSB 또는 가용한 수출 편지상자 레지스터 1 내지 2, 6 내지 7의 수행이 종료된 IOCB 핸들이 있다는 것을 의미한다. 따라서, 수출 편지상자 레지스터 세트 165의 편지상자 0은 다섯의 수출 편지상자 레지스터 1 내지 3, 6 내지 7 중에서 다섯까지의 16-비트 핸들 또는 둘까지의 32-비트 핸들을 설명하는 정보를 포함할 수 있다.
편지상자, 요구 대기열 및 응답 대기열의 작동
요구 및 응답 대기열 26, 27과 편지상자 레지스터 180 내지 187, 190 내지 197의 사용 및 작동을 도 1 내지 4를 참조하여 설명한다. 호스트의 마이크로프로세서 20은 하나 또는 그 이상의 IOCB(도 3A 내지 3B의 COMMAND 또는 EXTENDED COMMAND 엔트리 타입 100, 120)를 요구 대기열 26(도 2A 내지 2B)의 요구 대기열 인-포인터 변수 350(도 1)에 의해 지정된 첫 번째 가용한 엔트리에 적재한다. 호스트의 마이크로프로세서 20은 요구 대기열 인-포인터 변수 350의 값을 요구 대기열 26에 적재된 새로운 엔트리의 수만큼 증가시킨다. 증가된 요구 대기열 인-포인터 변수 350은 요구 대기열 26에서 다음 가용한 엔트리의 주소가된다.
호스트의 마이크로프로세서 20은 증가된 요구 대기열 인-포인터 변수 350의 새로운 값을 수입 편지상자 레지스터 세트 160(도 4)의 편지상자 레지스터 4 184에 기록한다. 호스트 어댑터 보드 40(도 1)의 펌웨어 62는 수입 편지상자 세트 160의 편지상자 레지스터 4의 값을 집계하고, 램 65에 저장된 요구 대기열 인-포인터 변수 360과 비교한다. 수입 편지상자 세트 160의 편지상자 레지스터 4의 값이 램 65에 저장된 내부의 요구 대기열 인-포인터 변수 360의 값과 다를 경우, 펌웨어 62는 호스트의 마이크로프로세서 20이 하나 또는 그이상의 새로운 엔트리를 요구 대기열 26에 추가했다는 것을 인지한다. 펌웨어 62는 램 65에 저장된 요구 대기열 인-포인터 변수 360을 수입 편지상자 레지스터 세트 160의 편지상자 레지스터 4에 저장된 새로운 값으로 이행시킨다.
호스트 어댑터 펌웨어 62가 요구 대기열 26에 있는 하나 또는 그이상의 IOCB를 처리할 준비가 되면, 호스트 어댑터 펌웨어 62는 요구 대기열 26으로부터 램 65(도 4)에 저장된 요구 대기열 아웃-포인터 변수 362에 의해 지정된 엔트리로부터 시작하여 요구 대기열 26으로부터 IOCB를 검색(및/또는 임시 저장)한다. 그런 다음, 펌웨어 62는 요구 대기열 아웃-포인터 변수 362의 값을 검색된 IOCB의 수만큼 증가시킨다. 펌웨어 62는 증가된 요구 대기열 아웃-포인터 변수 362의 값을 수출 편지상자 레지스터 세트 165의 편지상자 레지스터 4 194에 기록한다. 그런 다음, 호스트의 마이크로프로세서 20은 수출 편지상자 레지스터 세트 165의 편지상자 레지스터 4의 값을 읽어, 요구 대기열 26의 아웃-포인터 88의 위치를 결정할 수 있다.
호스트 어댑터 45는 두 번째 버스 70에 접근하여 주변 입출력장치 80 내지 86에 요구된 정보를 기록하거나, 주변 입출력장치 80 내지 86으로부터 요구된 정보를 검색함으로써, 요구 대기열 26으로부터 IOCB를 처리한다. 권장하는 실시태양은 읽기 입출력 요구를 하는 동안 호스트 어댑터 45가 지정된 입출력 장치 80 내지 86으로부터 검색된 데이터를 기억장치 25(도 1)에 있는 COMMAND 엔트리(도 3A, 3B)의 데이터 세그먼트 주소 110, 114가 지정하는 위치로 직접 전송하기 시작하는 것이다.
입출력 종료 보고
(수출 편지상자 레지스터 세트 165 또는 응답 대기열 27에서) 입출력 명령 종료 정보를 처리할 준비가 되고, (기억장치 25에서) 검색된 데이터를 처리할 준비가 되면, 호스트 어댑터 45는 호스트의 마이크로프로세서 20에 보고한다. 어댑터 45는 종료된 입출력 요구를 세 가지 방법으로 보고할 수 있다: ⑴ 성공적으로 종료 된 수출 편지상자 레지스터 1 내지 3, 6 내지 7, 191 내지 193, 196 내지 197(도 4)의 IOCB의 핸들을 배치하는 방법; ⑵ STATUS 엔트리 타입 140(도 3C)을 생성하고, 응답 대기열 27로 전송 및/또는 수출 편지상자 레지스터 1 내지 3, 6 내지 7, 191 내지 193, 196 내지 197에 STATUS 엔트리 140을 배치하는 방법 또는 ⑶ SUCCESSFUL STATUS 엔트리 타입 370, 380을 생성하고, 응답 대기열 27(도 1)로 전송하는 방법.
이하 기술하는 각각의 세 가지 방법은 호스트의 마이크로프로세서 20 또는 인터럽트 핸들러 32(도 1)에 대한 단일 인터럽트로 호스트의 마이크로프로세서 20에 복수의 입출력 종료를 보고할 수 있다. 복수의 종료된 입출력 요구를 단일 인터럽트로 호스트의 마이크로프로세서 20에 보고하는 방법을 '고속-포스팅(fast- posting)'이라고 한다. 고속-포스팅 또는 포스팅은 STATUS 또는 SUCCESSFUL STATUS 엔트리 타입 140, 370, 380을 생성 및 전송하지 않고, 성공적으로 종료된 IOCB의 하나 또는 그이상의 핸들을 수출 편지상자 레지스터 1 내지 3, 6 내지 7, 191 내지 193, 196 내지 197(도 4)에 배치하는 것을 의미하기도 한다.
호스트의 마이크로프로세서 20에 입출력 종료를 보고하는 첫 번째 방법은 어댑터 펌웨어 62가 성공적으로 종료된 IOCB의 핸들을 수출 편지상자 레지스터 1 내지 3, 6 내지 7, 191 내지 193, 196 내지 197(도 4)에 배치하는 것을 말한다. 종료된 입출력 요구가 읽기 작동을 포함하고 있다면, 호스트의 마이크로프로세서 20은 그 후 입출력 장치 80 내지 86에서 검색되고 기억장치 25에 저장된 데이터를 치리할 수 있다. 성공적으로 종료된 IOCB에 대한 핸들을 포함하는 수출 편지상자 레 지스터 1 내지 3, 6 내지 7의 수와 IOCB의 크기를, 즉 16 비트인지 32 비트인지, 결정하기위하여, 호스트의 마이크로프로세서 20은 수출 편지상자 레지스터 세트 165의 편지상자 0을 읽을 수 있다.
호스트의 마이크로프로세서 20에 입출력 종료를 보고하는 두 번째 방법은 어댑터 펌웨어 62가 STATUS 엔트리 타입 140(도 3C)을 램 65에 생성하고, 직접 기억장소 접근(DMA)을 통하여 STATUS 엔트리 타입 140을 응답 대기열 27에 전송하는 것이다. 특히, 펌웨어 62는 STATUS 엔트리 타입 140을 램 65에 저장된 응답 대기열 인-포인터 변수 364에 의해 지정된 것에서 시작하여 응답 대기열 27(도 1)에 있는 하나 또는 그 이상의 가용한 엔트리로 전송한다. STATUS 엔트리 타입 140은 펌웨어 62가 성공적인 것과 함께 비성공적인 종료된 입출력 요구도 보고할 수 있게 한다.
하나 또는 그 이상의 STATUS 엔트리 타입 140을 전송한 다음, 펌웨어 62는 응답 대기열 인-포인터 변수 364를 응답 대기열 27로 전송되어 온 STATUS 엔트리 타입 140의 수만큼 증가시킨 다음, 호스트의 마이크로프로세서 20이 읽을 수 있도록, 증가된 응답 대기열 인-포인터 변수 364의 값을 수출 편지상자 레지스터 세트 165의 편지상자 레지스터 5 195에 기록한다. 또한, 한 구성에서, 펌웨어 62는 호스트의 마이크로프로세서 20이 읽을 수 있도록, STATUS 엔트리 타입 140의 핸들 144를 가용한 수출 편지상자 레지스터 1 내지 3, 6 내지 7, 191 내지 193, 196 내지 197(도 4)에 배치한다.
호스트의 마이크로프로세서 20에 입출력 종료를 보고하는 세 번째 방법은 어 댑터 펌웨어 62가 SUCCESSFUL STATUS 엔트리 타입 370, 380을 램 65에 생성하고, DMA를 통하여 응답 대기열 27(도 1)로 전송하는 것이다. 상술한 바와 같이, 각각의 SUCCESSFUL STATUS 엔트리 타입 370, 380(도 6A, 6B)은 여럿의 성공적으로 종료된 입출력 요구에 대한 핸들을 포함할 수 있다. 그런 다음, 펌웨어 62는 응답 대기열 인-포인터 변수 364의 값을 응답 대기열 27에 전송되어 온 SUCCESSFUL STATUS 엔트리 타입 370, 380의 값만큼 증가시킨다. 그 후, 펌웨어 62는 호스트의 마이크로프로세서 20이 읽을 수 있도록 증가된 응답 대기열 인-포인터 변수 364의 값을 수출 편지상자 레지스터 세트 165의 편지상자 레지스터 5 195에 기록한다.
한 구성에서는 STATUS 또는 SUCCESSFUL 엔트리 타입 140, 370, 380을 생성해서 응답 대기열 27로 전송하는 것보다 수출 편지상자 레지스터 세트 165를 통하여 성공적으로 종료된 IOCB의 핸들을 보고하는 것이 더 빠르다. 그러나, 수출 편지상자 레지스터 1 내지 3, 6 내지 7을 통하여 보고 된 성공적인 입출력 요구의 수는 도 4의 구성에서는 5개인 레지스터 1 내지 3, 6 내지 7의 가용한 수에 의하여 제한을 받을 수 있다.
또한, 수출 편지상자 레지스터 1 내지 3, 6 내지 7을 통하여 성공적인 IOCB를 보고하는 것은 호스트의 마이크로프로세서 20에 입출력 요구 중에서 어느 것이 비성공적이었는지를 보고하지 않는다. 그러나, 바람직한 실시태양에 의하면, 호스트 어댑터 45가 소정의 시간 내에 성공적인 입출력 종료를 보고하지 않으면, 호스트의 마이크로프로세서 20 및/또는 소프트웨어 드라이버 30이 입출력 요구가 비성공적이었다고 추정하고, 소프트웨어 드라이버 30은 오류복구 절차를 시작하거나 입 출력 요구를 재 전송한다.
바람직한 실시태양에 의하면,, 호스트 어댑터 45는 종료된 입출력 요구의 수(5개보다 많거나 같음)와 상태(성공적/비성공적)에 따라, 종료된 입출력 요구를 보고하기위해 응답 대기열 27 또는 수출 편지상자 레지스터 1 내지 3, 6 내지 7, 191 내지 193, 196 내지 197을 이용할 수 있다.
인터럽트
호스트 어댑터 45 또는 펌웨어 62가 호스트의 마이크로프로세서 20 또는 인터럽트 핸들러 32에 입출력 요구가 종료된 것을 알리는 두 가지 방법이 있다. 바람직한 실시태양에 의하면,, 호스트 어댑터 45는 하드웨어 인터럽트를 생성하고 종료된 입출력 요구를 보고함으로써 호스트의 마이크로프로세서 20에 알린다. 다른 방법으로는, 호스트 마이크로세서 20이 첫 번째 버스 35와 관련된 상태 레지스터의 비트를 집계하는 방법이 있다. 호스트의 마이크로프로세서 20에 인터럽트를 생성하는 방법을 이하 기술한다.
한 구성에서, 호스트의 마이크로프로세서 20이 인터럽트를 수신하면, 호스트의 마이크로프로세서 20은 수출 편지상자 레지스터 세트 165의 레지스터 0을 읽고, 전술된 어댑터 펌웨어 62가 입출력 종료를 보고하는 세 가지 방법 중 어느 방법으로 보고를 한 것인지를 알아낸다. 전술된 세 가지 방법을 각각 표시하기위해, 편지상자 레지스터 0 190에 저장될 수 있는 독특한 코드 또는 순서가 이용된다.
펌웨어 62가 첫 번째 방법을 이용한다면, 수출 편지상자 레지스터 세트 165( 도 4)의 레지스터 0은 수출 편지상자 레지스터 세트 165에 성공적으로 종료된 IOCB 핸들의 수를 호스트의 마이크로프로세서 20에 알린다. 그런 다음, 호스트의 마이크로프로세서 20은 수출 편지상자 레지스터 세트 165의 편지상자 레지스터 1 내지 3, 6 내지 7을 검색하여, 성공적으로 종료된 IOCB를 알아낸다.
펌웨어 62가 두 번째 혹은 세 번째 방법을 이용한다면, 호스트의 마이크로프로세서 20은 수출 편지상자 레지스터 세트 165(도 4)의 편지상자 레지스터 5를 읽고, 응답 대기열 인-포인터를 결정한다. 호스트의 마이크로프로세서 20은 수출 편지상자 레지스터 5의 값을 기억장치 25(도 1)에 저장된 응답 대기열 인-포인터 변수 356에 기록한다. 그런 다음, 호스트의 마이크로프로세서 20은 기억장치 25에 저장된 응답 대기열 아웃-포인터 변수 356에서부터 시작하여 수출 편지상자 레지스터 세트 165의 편지상자 레지스터 5에 있는 응답 대기열 인-포인터 값까지 응답 대기열 27(도 1)의 IOSB 엔트리를 검색한다. 호스트의 마이크로프로세서 20은 응답 대기열 27의 IOSB를 처리하고, 처리된 IOSB의 수만큼 응답 대기열 아웃-포인터 변수 356의 값을 증가시키고, 증가된 응답 대기열 아웃-포인터 변수 365의 값을 수입 편지상자 레지스터 세트 160(도 4)의 편지상자 레지스터 5 185에 기록한다.
어댑터 알고리즘의 실시태양
도 4에서 TOTAL_REMAIN 220, TOTAL_COMPLETE 225, DEV_1_COUNT 230, DEV_2_COUNT 231, DEV_3_COUNT 232 등 변수의 값은 펌웨어 62에 의해서 결정되고 갱신된다. DEV_1_COUNT 230, DEV_2_COUNT 231 및 DEV_3_COUNT 232는 입출력 장치 1 80(도 1), 입출력 장치 2 81 및 입출력 장치 3 82 각각에 대한 계수형 변수이다. 각각의 입출력 장치 80 내지 86에 대하여 적어도 한 개의 계수형 변수(도시되지 않음)가 있다. 예를 들면, 15개의 입출력 장치가 있다면, 적어도 15개의 계수형 변수가 있다.
TOTAL_REMAIN 변수 220은 입출력 장치 80 내지 86에 의해 처리되지 않은 전체 입출력 요구의 수를 표시한다. TOTAL_COMPLETE 변수 225는 입출력 장치 80 내지 86에 의해 종료된, 호스트의 마이크로프로세서 20에 아직 보고되지 않은 전체 입출력 요구의 수를 표시한다.
DEV_1_COUNT 변수 230은 수신되었으나 첫 번째 입출력 장치 80에 의해서 아직 종료되지 않은 입출력 요구의 수를 표시한다. DEV_2_COUNT와 DEV_3_COUNT 변수 231, 232는 수신되었으나, 두 번째와 세 번째의 입출력 장치 81, 82에 의해서 아직 종료되지 않은 입출력 요구의 수를 표시한다. 상응하는 DEV_n_COUNT 변수는 수신되었으나, 네 번째 내지 일곱 번째 입출력 장치 83 내지 86에 의해서 아직 종료 되지 않은 입출력 요구의 수를 각각 표시한다.
도 5는 호스트 어댑터 보드 40이 입출력 요구의 종료 보고를 결합하여 호스트의 마이크로프로세서 20에 생성되는 인터럽트를 줄이기 위하여 이용하는 방법의 한 실시태양을 도시한 그림이다. 한 구성에서 도 5의 방법은 RISC 코드 또는 펌웨어 62의 일부분이다.
도 5의 방법의 이용과 작동은 도 1 및 4를 참조하여 설명한다. 도 5에서, 시작/연속 블록 300에서 호스트 시스템 15(도 1)의 소프트웨어 드라이버 30은 어댑 터 처리장치 50을 초기화하고, RISC 코드 또는 펌웨어 62를 읽어 온다. 초기화후에, 어댑터 45는 호스트의 마이크로프로세서로부터 수입되는 입출력 요구를 처리할 준비된다.
처리 블록 305에서 펌웨어 62(도 1)는 새로운 입출력 요구 또는 명령(IOCB)이 요구 대기열 26에 도달할 때마다, TOTAL_REMAIN 변수 220의 값을 1만큼 증가시킨다. TOTAL_REMAIN 은 입출력 장치 80 내지 86이 처리해야 할 입출력 명령의 수를 표시한다. 펌웨어 62는 또한 어댑터 45와 입출력 장치 80 내지 86이 처리하는 입출력 요구의 수만큼 ROTAL_REMAIN 변수 220의 값을 감소시킨다.
처리 블록 310에서, 펌웨어 62는 입출력 장치 80 내지 86에 의해서 종료되었지만, 호스트의 마이크로프로세서 20에 아직 보고되지 않은 입출력 요구의 수만큼 TOTAL_COMPLETE 변수 225를 증가시킨다. 결정 블록 315에서 펌웨어 62는 보고되지 않은 입출력 종료(TOTAL_COMPLETE 225)가 남아 있는 입출력 요구(TOTAL_REMAIN 220)보다 크거나 같은지를 확인한다. 이를 '첫 번째 트리거(first trigger)'라고 하는데, TOTAL_COMPLETE 225가 TOTAL_REMAIN 220보다 크거나 같으면, 펌웨어 62가 호스트의 마이크로프로세서 20에 인터럽트를 생성하고 처리 블록 340에서 종료된 보고되지 않은 입출력 요구를 보고하기 때문이다. 그런 다음, 펌웨어 62는 처리 블록 300에서 TOTAL_REMAIN 220과 TOTAL_COMPLETE 225를 적절히 증가 및 감소시킨다.
TOTAL_COMPLETE 225가 TOTAL_REMAIN 220보다 작으면, 펌웨어 62는 결정 블록 320에서 타이머 245(도 4)가 작동되었는지를 확인한다. 타이머 245가 작동되었으 면, 펌웨어 62는 타이머 245가 결정 블록 325에서 종료되었는지를 확인한다. 이것을 '두 번째 트리거(second trigger)'라고 하는데, 타이머 245가 종료되었으면, 펌웨어 62가 호스트의 마이크로프로세서 20에 인터럽트를 생성하고, 처리 블록 340의 모든 입출력 장치 80 내지 86에 대한 종료되었지만 보고되지 않은 모든 입출력 요구를 보고하기 때문이다. 또한, 펌웨어 62는 TOTAL_COMPLETE 변수 225의 값을 0으로 이행시킨다. 그런 다음, 펌웨어 62는 처리 블록 300에서 TOTAL_REMAIN 220과 TOTAL_COMPLETE 225를 그에 맞게 증가 및 감소시킨다. 타이머 245가 만료되지 않은 경우, 펌웨어 62는 처리블록 300으로 돌아가서, 그에 맞게 TOTAL_REMAIN과 TOTAL_COMPLETE을 그에 맞게 증가 및 감소시킨다.
결정 블록 330에서 타이머 245가 작동을 시작하지 않았다면, 펌웨어 62는 남아 있는(종료되지 않은) 입출력 요구 또는 입출력 장치 80 내지 86에 대하여, 처리할 명령의 수가 1에서 0으로 감소했는지를 확인한다. 좀 더 상세하게는, 펌웨어 62는 DEV_1_COUNT 230, DEV_2_COUNT 231 등의 변수가 1에서 0으로 이행한 것을 확인한다. DEV_n_COUNT가 0이 된 입출력장치 80 내지 86은 처리할 명령이 더 이상 없는 것이다. DEV_1_COUNT 230, DEV_2_COUNT 231 등의 변수 중 하나의 값이 1에서 0으로 이행되면, 펌웨어 62는 처리 블록 335의 타이머 245를 작동시킨다. 그런 다음, 펌웨어 62는 처리 블록 300에서 TOTAL_REMAIN 220과 TOTAL_COMPLETE 225를 그에 맞게 증가 및 감소시키는 것을 재개한다.
DEV_1_COUNT 230, DEV_2_COUNT 231 등의 변수 중, 값이 0이 된 것이 없다면, 펌웨어 62는 처리 블록 300에서 TOTAL_REMAIN 220과 TOTAL_COMPLETE 225를 그에 맞 게 증가 및 감소시키는 것을 재개한다.
바람직한 실시태양에 의하면, 일정기간 동안 입출력 장치 80 내지 86이 휴지상태이고, 더 이상 처리할 입출력 명령(DEV_1_COUNT = 0과 같이)이 없으면, 타이머 245는 작동을 시작하지 않고, 입출력 장치 80 내지 86이 처리할 입출력 명령의 수가 1에서 0으로 이행(DEV_1_COUNT가 1에서 0으로 이행되는 것과 같이)되면, 타이머 245는 작동을 시작한다.
사용될 수 있는 다른 비율
도 5를 참조하여 상술한 방법에서, 적어도 전체 입출력요구 중 절반이상이 종료되면(TOTAL_COMPLETE 225가 TOTAL_REMAIN 220보다 크거나 같을 때), 어댑터 45 와 펌웨어 62는 종료되었지만 보고되지 않은 모든 입출력 요구를 보고하고, 호스트의 마이크로프로세서 20에 인터럽트를 생성한다. 이는 호스트 프로세서 20이 보고 된 입출력 종료(전체 입출력 요구 중의 절반)를 처리하는 동안, 어댑터 45와 입출력 장치 80 내지 86이 처리할 상당수의 입출력 요구를 보유하도록 한다.
다른 실시태양에 의하면, 어댑터 45는 호스트의 마이크로프로세서 20에 대한 인터럽트를 생성하고, 종료되었지만 보고되지 않은 입출력 요구를 보고하기 위하여, 보고되지 않은 입출력 종료(TOTAL_COMPLETE 225)의 남아 있는 입출력 요구(TOTAL_REMAIN 220)에 대한 다른 비율을 사용한다. 예를 들면, 한 실시태양에 의하면, 어댑터 45는 TOTAL_COMPLETE 225의 TOTAL_REMAIN 220에 대한 비율를 3/2로 한다. TOTAL_COMPLETE 225가 TOTAL_REMAIN 220보다 적어도 3/2만큼 커지면, 어댑 터 45는 호스트의 마이크로프로세서 20에 인터럽트를 생성하고, 종료되었지만 보고되지 않은 모든 입출력요구를 호스트 시스템 15에 보고한다. 본 발명은 2/1, 3/1, 4/1, 4/3, 1/2, 1/3, 1/4, 2/3 또는 3/4와 같은 다른 비율을 적용해도 무방하다.
TOTAL_COMPLETE 225의 TOTAL_REMAIN 220에 대한 비율을 호스트의 마이크로프로세서 20의 입출력 부하, 접근 타입, 시스템 10의 구성 또는 구성 요소, 입출력 장치 80 내지 86의 수 및 입출력 요구의 타입과 같은 다양한 변수에 따라 제작자 또는 최종-사용자에 맞게 조정할 수가 있다.
입출력 장치는 여전히 요구를 수신가능하고; 타이머는 재시작하지 않는다.
타이머 245가 작동된 후, 하나 또는 그 이상의 새로운 입출력 요구가 수신되어, 타이머 245를 작동시킨 특정 입출력 장치 80 내지 86에 의해 처리될 수 있다. 예를 들면, 처리될 입출력 장치 1 80의 남아 있는 입출력 요구가 1에서 0으로 이행(DEV_1_COUNT 230이 1에서 0으로 감소)되면, 펌웨어 62는 이를 1에서 0으로의 이행으로 인식하고, 도 5의 처리 블록 335와 같이 타이머 245(입출력 장치 180이 1에서 0으로 이행된 첫 번째 입출력 장치 80 내지 86이면)를 작동시킨다. 입출력 장치 1 80이 새로운 입출력 요구를 수신하면, 이 입출력 요구를 처리할 것이다. 일단 입출력 장치 1 80이 새로운 입출력 요구를 수행하면, 1에서 0으로의 이행이 DEV_1_COUNT 230에 의해 다시 이루어진다; 그러나, 타이머 245는 다시 작동되지 않는다.
마찬가지로, 다른 입출력 장치 81 내지 86이 모든 입출력 요구를 처리하면, 즉, DEV_2_COUNT 231이 1에서 0으로 이행되면, 타이머 245는 다시 작동되지 않는다. 모든 입출력 요구를 수행한 첫 번째 입출력 장치 80 내지 86은 호스트 시스템 15에 종료된 입출력 요구를 보고하기 위해서, 입출력 장치들 중 가장 오래 대기한다. 타이머가 작동되면 작동이 종료되거나, 첫 번째 트리거(TOTAL_COMPLETE 225가 TOTAL_REMAIN 220보다 크거나 같을 때)가 호스트의 마이크로프로세서 20에 인터럽트를 생성하고, 보고되지 않은 입출력 요구의 종료를 보고할 때까지, 초기화되지 않을 것이다.
한 실시태양에 의하면,, 모든 입출력 장치 80 내지 86에 대해 처리해야 할 입출력 요구의 수가 1에서 0으로 이행이 되지 않고, 첫 번째 트리거(TOTAL_COMPLETE 225가 TOTAL_REMAIN 220보다 크거나 같을 때)가 계속 어댑터 45가 호스트의 마이크로프로세서 20에 인터럽트를 생성하고 입출력 종료를 보고한다면, 타이머 245는 일정시간동안 작동되지 않을 수도 있다. 즉, 펌웨어 62가 일정기간동안 도 5의 처리 블록 335를 실행하지 않게된다. 이런 상황은 작업의 부하가 크고, 각각의 입출력 장치 80 내지 86이 호스트의 마이크로프로세서 20에 의해서 과도하게 사용될 때 전형적으로 나타난다.
타이머의 지속시간
타이머 245의 지속시간 또는 지연시간은 컴퓨터 시스템 10의, 특히 입출력 장치 80 내지 86의, 구성과 구성요소에 따라서 달라질 수 있다. 타이머 245의 지속시간은 입출력 장치 80 내지 86 중 하나의 응답시간, 모든 입출력 장치 80 내지 86의 가장 긴 응답시간, 가장 자주 사용되는 입출력 장치 80 내지 86의 응답시간 또는 입출력장치 80 내지 86의 평균적인 응답시간에 맞추어 설정될 수가 있다. 또한, 타이머 245의 지속시간을 설정하는데 다른 요인을 고려할 수도 있다.
한 실시태양에 의하면,, 타이머 245의 지속시간은 약 5㎲ 내지 8㎲ 사이에서 설정이된다. 다른 실시태양에 의하면, 타이머 245의 지속시간은 약 25㎲ 내지 1,000㎲ 사이에서 설정된다. 또 다른 실시태양에 의하면,, 타이머 245의 지속시간은 약 600㎲ 내지 1,000㎲ 사이에서 설정된다.
바람직한 실시태양에 의하면,, 타이머 245의 지속시간은 약 800㎲로 설정되보고되는은 입출력 장치 80 내지 86의 전형적인 응답시간이 약 50㎲이기 때문이다. 타이머 245의 지속시간이 너무 짧으면, 어댑터 펌웨어 62는 타이머 245를 초기화시켜, 하나의 입출력 장치 80 내지 86이 더 이상 입출력 요구가 없을 때마다, 연속적으로 호스트의 마이크로프로세서 20에 인터럽트를 생성할 것이다. 타이머 245의 지속시간이 짧아질수록, 인터럽트당 호스트의 마이크로프로세서 20에 응답하면 적어지게 되어, 비효율적으로 된다.
특히, 첫 번째 입출력 장치 80 내지 86이 입출력 요구를 종료한 다음, 선정된 시간동안 입출력 종료의 보고를 연기함으로써, 하나 또는 그 이상의 입출력 장치 80 내지 86이 그 시간동안 추가적으로 입출력 요구를 종료할 수가 있는데, 두 개 또는 그 이상의 종료를 두 개 또는 그 이상의 독립된 인터럽트로 보고하는 것보다, 단일 인터럽트로 두 개 또는 그 이상의 입출력 종료를 보고하는 것이 유리하다. 호스트의 마이크로프로세서 20은 두 개 또는 그 이상의 인터럽트에 응답하는 대신 오직 하나의 인터럽트에 응답하면된다.
예를 들면, 입출력장치 1 80이 모든 입출력 요구를 50㎲에 종료했다면, 펌웨어 62가 타이머 245를 작동시키고, 입출력장치 4 83은 50㎲ 후에 입출력 요구를 종료된다. 그리고, 입출력장치 2 81은 50㎲ 더 후에 입출력 요구를 종료된다. 타이머 245가 75㎲의 지속시간을 가지고 있다면, 어댑터 45는 호스트의 마이크로프로세서 20에 하나의 인터럽트를 생성하여, 입출력장치 1 80 및 4 83의 입출력 종료를 보고하고, 입출력장치 2 81의 입출력 종료를 보고하기 위하여 두 번째 인터럽트를 생성할 것이다. 타이머 245의 지속시간이 더 길면, 즉, 125㎲라면, 어댑터 45는 입출력장치 1 80, 4 83 및 2 81의 입출력 종료를 호스트의 마이크로프로세서 20에 보고하기 위하여, 하나의 인터럽트만 생성할 것이다.
반면에, 타이머 245의 지속시간이 너무 길면, 호스트의 마이크로프로세서 20은 새로운 입출력 요구를 전송하기 전에 입출력장치 80 내지 86으로부터 입출력 종료를 기다리고 있을 수 있다. 또한, 하나 또는 그 이상의 입출력장치 80 내지 86이 호스트의 마이크로프로세서 20으로부터 새로운 입출력 요구가 도달할 때까지 유휴상태에 있을 것이다. 따라서, 바람직한 실시태양에 의하면, 타이머 245의 지속시간은 단시간에 여러 개의 인터럽트를 생성하지 않고, 유휴시간이 길지 않도록 설정된다.
한 실시태양에 의하면, 타이머 245의 지속시간은 어떤 입출력 장치 80 내지 86이 타이머 245를 작동시켰는지에 따라 변할 수가 있다. 자주 사용되는 입출력장치 80 내지 86은 상대적으로 더 짧은 지속시간을 가지고, 자주 사용되지 않는 입출 력장치 80 내지 86은 상대적으로 더 긴 지속시간을 가질 것이다. 다른 실시태양에 의하면, 하나 또는 그 이상의 입출력장치 80 내지 86에 대한, 타이머 245의 지속시간은 0이다. 이 실시태양에 의하면,, 0의 지속시간을 가진 입출력장치 80 내지 86이 모든 입출력 요구를 수행하면, 펌웨어 62는 즉시 호스트의 마이크로프로세서 20에 인터럽트를 생성하고 종료되었지만 보고되지 않은 모든 입출력 요구를 보고한다.
다른 실시태양에 의하면, 타이머 245는 도 5를 참조하여 상기 설명한 0대신, 입출력장치 80 내지 86에 대한 입출력 요구의 수가 소정의 수, 즉 3, 이하가 되면 작동하기 시작한다.
타이머 245의 지속시간은 호스트의 마이크로프로세서 20에 의하여 조절할 수 있고, 한 실시태양에 의하면, 최종-사용자가 타이머 245의 지속시간을 설정할 수가 있다. 다른 실시태양에 의하면, 시스템 설계자(호스트 컴퓨터 제작자 또는 어댑터 제작자) 또는 프로그래머가 타이머 245의 지속시간을 설정할 수가 있다.
역치 트리거의 장점
상기 서술한 방법은 적응적(adaptive)이다: 호스트의 마이크로프로세서 20의 입출력요구 작업부하에 적응한다. 입출력요구 작업부하가 클수록 초당 입출력 종료보고(IOPS)의 비율 또는 수가 증가한다. 예를 들면, 작업부하가 상대적으로 작으면, 즉, 한번에 5내지 10개의 입출력 요구가 생성되면, 3 내지 6개의 종료된 입출력 요구가 하나의 인터럽트에 의하여 호스트의 마이크로프로세서 20에 보고된다. 작업부하가 상대적으로 크면, 즉, 한번에 30내지 60개의 입출력 요구가 생성되면, 15 내지 30개의 종료된 입출력 요구가 하나의 인터럽트에 의하여 호스트의 마이크로프로세서 20에 보고된다. 따라서, 호스트의 마이크로프로세서 20이 바빠질수록 더 많은 입출력 종료보고가 어댑터 45의 인터럽트에 의하여 보고 되며, 이것은 호스트의 마이크로프로세서 20이 바빠질수록 인터럽트와 인터럽트에 의한 작업부담에 대응할 수 있는 시간과 자원이 부족해지기 때문에 중요한 장점이 된다.
타이머 트리거의 장점
타이머 245 또한 중요한 장점을 제공한다. 타이머 245는 다른 입출력장치 80 내지 86이 여전히 작업 중일 동안 입출력 요구를 모두 수행한 특정 입출력장치 80 내지 86의 유휴시간(지연시간)을 줄인다.
예를 들면, 입출력장치 1 80은 다른 입출력장치 81 내지 86이 여전히 여럿의 입출력요구를 수행해야 하는 동안, 모든 입출력요구(DEV_1_COUNT = 0)를 수행하였을 수 있다. 만약 TOTAL_REMAIN 220이 TOTAL_COMPLETE 225보다 충분히 크다면, 어댑터 45는 종료되었지만 보고되지 않은 입출력 요구를 상당한 시한동안 보고하지 않을 것이다. 하나 또는 그 이상의 이전 입출력 요구가 종료되고 보고되기 전에, 새로운 요구를 하나 또는 그 이상의 입출력장치 80 내지 86에 전송하지 않도록 하는 몇몇의 소프트웨어 응용 또는 서브루틴이 호스트의 마이크로프로세서 20에 있다. 이것은 시스템을 지체시키고 성능을 저하시킨다. 다른 입출력장치 81 내지 86은 처리할 입출력 요구를 가지고 있고 입출력요구를 처리하고 있는 동안, 입출력 장치 1 80이 장기간 유휴상태인 것은 비효율적이다.
타이머 245는 타이머의 작동이 종료한 후, 펌웨어 62가 호스트의 마이크로프로세서 20에 인터럽트를 생성하고, 종료되었지만 보고되지 않은 입출력 요구를 호스트 시스템 15에 보고하여, 입출력장치 1 80의 유휴시간을 줄이기 위해 노력한다. 이것은 첫 번째 트리거(TOTAL_REMAIN과 TOTAL_COMPLETE을 비교하는 전체 입출력종료 역치)를 회피하는 것이다. 호스트의 마이크로프로세서 20이 종료된 입출력요구를 처리한 다음, 호스트의 마이크로프로세서 20은 하나 또는 그 이상의 새로운 입출력요구를 유휴중인 입출력장치 1 80에 전송할 수가 있다. 따라서, 타이머 245(두 번째 트리거)는 모든 입출력 요구를 수행한 첫 번째 입출력장치 80 내지 86의 유휴시간을 줄임으로써, 입출력종료 역치 계수기, TOTAL_COMPLETE(첫 번째 트리거)를 보완한다.
각각의 트리거를 단독으로 사용하거나, 다른 트리거와 조합하여 사용한다.
도 5에 나오는 실시태양에 의하면,, 호스트의 마이크로프로세서 20에 인터럽트를 생성하기 위한 두 개의 트리거(블록 315와 블록 320 내지 335)가 있다. 본 발명의 다른 실시태양은 둘 중의 하나를 사용한다. 두개의 트리거 또는 변형 중 어떤 것이라도 독립적으로 호스트의 마이크로프로세서 20에 인터럽트를 생성할 시기를 결정하는데 이용될 수 있다. 예를 들면, 한 실시태양에 의하면, 어댑터 45는 블록 330 내지 315 및 340의 방법만을 실시한다. 이 실시태양은 결정 블록 315의 TOTAL_COMPLETE 225가 TOTAL_REMAIN 220 보다 크거나 같지 않으면, 펌웨어 62는 시 작/계속 블록 300으로 돌아간다.
본 발명의 다른 실시태양은 두 트리거 중의 하나만 사용하지만, 상기 두개의 트리거를 조합해서 사용하면 좀 더 나은 성능을 얻을 수가 있다. 추가적인 트리거는 상기 하나 또는 두개의 트리거와 조합으로 사용될 수가 있는데, 예를 들면, 한쪽 트리거는 다양한 TOTAL_REMAIN 220을 사용하지 않고, 호스트의 마이크로프로세서 20의 작업 부하를 결정할 수 있다. 다른 트리거는 둘 또는 그 이상의 입출력장치 80 내지 86의 입출력 요구의 수가 0이 아닌 소정의 값 이하로 내려가면, 호스트의 마이크로프로세서 20에 인터럽트를 생성할 수 있다.
적응적 알고리즘의 다른 실시태양
도 7은 도 1의 호스트 어댑터 보드 40이 입출력요구 종료 보고를 조합하여 호스트의 마이크로프로세서에 대한 인터럽트를 줄이기 위하여 사용되는 다른 실시태양을 도시한 것이다. 한 구성에서 도 7의 방법은 RISC 코드 또는 펌웨어 62의 일부분이다.
도 7의 방법의 사용과 작동은 도 1, 4 및 5를 참조하여 설명한다. 도 7에서 시작/계속 블록 400의 작동, 처리 블록 405 및 처리 블록 410의 처리 방법은 본질적으로는 도 5에서 시작/계속 블록 300, 처리 블록 305 및 처리 블록 310을 참조하여 전술한 것과 동일하다. 그러나, 도 7에서는 TOTAL_REMAIN 변수 220이 처리 블록 405에서 가장 먼저(요구 대기열 26에 전송되어 온 각각의 새로운 입출력요구에 대하여) 증가된다. TOTAL_REMAIN 변수 220이 증가된 다음, 다양한 TOTAL_REMAIN 변수 220은 감소(어댑터 45에 의해 종료된 각각의 입출력 요구에 대하여)되고, 다양한 TOTAL_COMPLETE은 처리 블록 410에서와 같이 증가(어댑터 45에 의하여 종료된 보고되지 않은 각각의 입출력요구에 대하여)된다.
결정 블록 415에서 펌웨어 62는 개개의 입출력장치 80 내지 86의 남아 있는 입출력요구가 1에서 0으로 감소된 것을 확인한다(DEV_n_COUNT 변수 230 내지 232중에서 1에서 0으로 이행된 것이 있는지를). 개개의 입출력장치 80 내지 86의 남아 있는 입출력요구의 수가 1에서 0으로 감소되었다면, 펌웨어 62는 처리 블록 420에 도시된 것처럼, 처리장치 50에 시작 타이머 플래그를 설정한다. 거기에 응답해서, 처리장치 50은 타이머 245(도 4)를 작동시킨다. 그런 다음, 펌웨어 62는 결정 블록 425에서처럼, TOTAL_COMPLETE 변수 225와 TOTAL_REMAIN 변수 220을 비교한다. 결정 블록 415에서는 개개의 입출력 장치 80 내지 86에 대하여, 남아 있는 입출력요구의 수가 1에서 0으로 감소하지 않았다면, 펌웨어 62는 결정블록 425에서와 같이, TOTAL_COMPLETE 변수 225와 TOTAL_REMAIN 변수 220을 비교한다.
결정블록 425에서 TOTAL_COMPLETE 변수 225가 TOTAL_REMAIN 변수 220보다 크거나 같으면, 펌웨어 62는 처리블록 430에서와 같이 호스트의 마이크로프로세서 20에 인터럽트를 생성하고 종료된 보고되지 않은 입출력요구를 보고한다. 처리블록 430에서 펌웨어 62는 또한 TOTAL_COMPLETE 변수 225의 갑을 0으로 초기화하고, 시작 타이머 플래그를 초기화한다. 그런 다음, 결정블록 435에서 펌웨어 62는 타이머 245가 작동되었는지를 확인한다. 결정블록 425에서 TOTAL_COMPLETE 변수 225가 TOTAL_REMAIN 변수 220보다 작으면, 펌웨어 62는 처리블록 430을 우회하여 직접 결 정블록으로 가서 타이머 245가 작동되었는지를 확인한다.
결정블록 435에서 타이머 245가 시작되지 않았다면, 펌웨어 62는 처리블록 400 내지 410에서와 같이, TOTAL_REMAIN 변수 220을 증감시키고, 거기에 맞추어 TOTAL_COMPLETE 변수 225의 값을 증가시킨다. 타이머가 작동되었다면, 펌웨어 62는 결정블록 440에서 타이머 245가 만료되었는지를 확인한다. 타이머 245가 만료되지 않았다면, 펌웨어 62는 처리블록 400 내지 410으로 돌아가서 TOTAL_REMAIN 변수 220을 증감시키고, 거기에 맞추어 TOTAL_COMPLETE 변수 225의 값을 증가시키는 것을 계속한다. 타이머 245가 만료되었다면, 펌웨어 62는 처리 블록 445에서와 같이, 호스트의 마이크로프로세서 20에 인터럽트를 생성하고, 종료되었지만 보고되지 않은 모든 입출력 요구를 보고한다. 처리블록 445에서 펌웨어 62는 또한 TOTAL_COMPLETE 변수 225의 값을 0으로 초기화하고, 시작 타이머 플래그를 초기화한다. 그런 다음, 펌웨어 62는 처리블록 400 내지 410으로 돌아가서 TOTAL_REMAIN 변수 220을 증감시키고, 거기에 맞추어 TOTAL_COMPLETE 변수 225의 값을 증가시키는 것을 계속한다.
장치에 의한 역치 - 도 8
도 8은 도 1의 호스트 어댑터 보드 40이 입출력요구 종료보고를 결합하여, 호스트의 마이크로프로세서 20에 대한 인터럽트를 감소시키는 방법의 또 다른 태양을 도시한 것이다. 도 1 내지 7을 참조하여 서술한 상기 실시태양은 연속적인 입출력 접근을 사용하는 호스트 컴퓨터 시스템 15에 적합하고, 도 8을 참조하여 이하 서술하는 임의 입출력 접근을 사용하는 호스트 컴퓨터 시스템 15에 적합한 것이다. 연속적인 입출력 접근과 임의 입출력 접근의 개념은 통상의 당업자에게 자명할 것이다.
도 8에 도시된 방법은 도 8의 결정블록 485가 도 7의 결정블록 425와 다른 점을 제외하면, 본질적으로는 도 7에 도시된 방법과 유사하다. 좀 더 자세하게는, 도 8의 결정블록 485에서 펌웨어 62(도 1)는 보고되지 않은 입출력종료(TOTAL_REMAIN 220)의 수가 현재 '활동중(active)'인 입출력장치 80 내지 86의 수와 같은지를 확인한다. '활동중'인 입출력장치 80 내지 86은 적어도 하나의 보류 중인(종료되지 않은) 입출력요구를 가지고 있는 입출력장치 80 내지 86이다. 하나의 입출력장치 80 내지 86이 마지막 입출력요구를 수행하면, 이 실시태양의 목적상, 입출력장치 80 내지 86은 더 이상 활동하지 않는 것으로 간주되고, 활동중인 입출력장치 80 내지 86의 수는 1만큼 감소한다. 반면에, 어댑터 45가 활동하고 있지 않은 입출력장치 80 내지 86에 대한 새로운(계류중인) 입출력요구를 수신하면, 활성화된 입출력장치 80 내지 86의 수는 1만큼 증가한다. 따라서, 활성화된 입출력장치 80 내지 86의 수는 동적으로 변화하여, 하나 또는 그 이상의 입출력장치 80 내지 86이 보류 중인 마지막 입출력요구를 수행하거나, 새로운 입출력요구를 수신하면, 값은 증가하거나 감소한다.
예를 들면, 첫 번째 세 개의 입출력장치 80 내지 82가 보류 중인 입출력요구를 가지고 있다면, 즉, DEV_1_COUNT 230, DEV_2_COUNT 231, DEV_3_COUNT 232가 0이 아니라면, 현재 활성화된 입출력장치 80 내지 86의 수는 3이다. 첫 번째 세 개의 입출력장치 80 내지 86은 예를 들기 위하여 활성화된 것이고, 어떤 수 또는 순서의 입출력장치 80 내지 86이라도 활성화될 수 있다. 도 8의 결정블록 485에서 호스트 처리장치 20에 인터럽트를 생성(또한 모든 종료된 입출력요구를 보고)하기 위한 '역치(threshold)'는 3이다. TOTAL_COMPLETE 225가 1이면, TOTAL_COMPLETE 225는 역치(현재 활성화되어있는 입출력장치 80 내지 86)가 아니다.
인터럽트를 생성하기위한 역치는 도 8의 블록 485에서와 같이 현재 활성화되어있는 입출력장치 80 내지 86의 수에 의하여 증가 또는 감소할 수 있다. 활성화된 입출력장치 80 내지 82가 배정된 입출력요구를 완수하면, TOTAL_COMPLETE 225는 증가하고, 역치(현재 활성화되어있는 입출력장치 83 내지 86)는 감소한다. 이전에 활성화되어있지 않은 입출력장치 80 내지 86이 활성화가 되면, 활성화된 입출력장치의 수와 역치는 증가한다. 도 8의 방법이 결정블록 485로 진행될 때, TOTAL_COMPLETE 225가 현재의 활성화된 입출력장치의 수와 같다면, 펌웨어 62는 호스트의 마이크로프로세서 20에 인터럽트를 생성하고, 처리블록 490에서 종료된 보고되지 않은 모든 입출력요구를 보고한다.
도 8의 방법에서 타이머 작동, 즉, 두 번째 트리거는 도 7을 참조하여 상술한 방법의 타이머 작동과 본질적으로 유사하다.
도 8의 방법의 다양한 역치는 호스트 어댑터 45와 펌웨어 62가 호스트의 마이크로프로세서 20의 작업부하에 적응할 수 있도록 한다. 호스트의 마이크로프로세서 20이 많은 입출력 작업부하를 가지고 있고, 여럿의 입출력 장치 80 내지 86이 활동중이면, 인터럽트를 생성하는 역치 또한 크다. 높은 역치는 초당 인터럽트(IPS)의 수를 감소시키고, 인터럽트당 보고되는 입출력종료의 수를 증가시킨다. 호스트가 적은 입출력 작업부하를 가지고 있고, 적은 수의 입출력 장치 80 내지 86이 활동중이면, 인터럽트를 생성하는 역치 또한 작다.
따라서, 도 5, 7 및 8의 방법과 호스트의 마이크로프로세서 20에 인터럽트를 생성하는 역치는 호스트의 마이크로프로세서 20의 입출력요구 작업부하에 적응한다. 호스트의 마이크로프로세서 20이 바쁠수록, 어댑터 45에 의하여 단일 인터럽트에 더 많은 입출력종료보고가 전송되어 온다. 좀 더 자세하게는 입출력요구 작업부하가 높을수록, 인터럽트에 대한 초당 입출력종료보고(IOPS)는 증가한다.
예를 들면, 도 5 또는 7을 참조하여 상술한 실시태양에 의하면, 작업부하가 상대적으로 낮은 경우, 즉, 한번에 5 내지 10개의 입출력요구만이 생성될 경우, 3 내지 5개의 입출력종료보고가 단일 인터럽트에 의하여 호스트의 마이크로프로세서 20에 보고된다. 작업부하가 상대적으로 높은 경우, 즉, 한번에 50 내지 100개의 입출력요구가 생성될 경우, 25 내지 50개의 입출력종료보고가 단일 인터럽트에 의하여 호스트의 마이크로프로세서 20에 보고된다. 이것은 호스트의 마이크로프로세서 20이 바빠질수록 인터럽트와 인터럽트에 의한 작업부담에 대응할 수 있는 시간과 자원이 부족하기 때문에 중요한 장점이 된다.
따라서, 적응적인 특성에 의하여, 본 발명은 입출력요구의 작업부하(대량 또는 소량의), 접근 타입(연속적 또는 임의), 시스템 구성의 타입, 입출력장치의 수 및 입출력요구의 타입(대기열화 또는 비대기열화의)에 관계없이 실시될 수 있다.
이상으로 본 발명 내용의 특정한 부분을 상세히 기술하였는 바. 당업계의 통상의 지식을 가진 자에게 있어서, 이러한 구체적 기술은 단지 바람직한 실시태양일 뿐이며, 이에 의해 본 발명의 범위가 제한되는 것이 아닌 점은 명백한 것이다. 따라서, 본 발명의 실질적인 범위는 첨부된 청구항들과 그것들의 등가물에 의해 정의된다고 할 것이다.
Claims (19)
- 호스트 컴퓨터의 호스트 마이크로프로세서가 입출력 제어기에 입출력요구를 전송하여, 호스트 컴퓨터와 복수의 주변 입출력장치 간의 데이터 전송을 개시하는 컴퓨터 시스템에 있어서, 전송된 입출력요구를 처리하는 다음의 단계를 포함하는 방법:⒜ 주변 입출력장치와 호스트 컴퓨터의 기억장치 간에 데이터를 전송하여, 전송된 입출력요구를 처리하는 단계;⒝ 상기 ⒜ 단계와 동시에, 보고되지 않은 종료된 입출력요구의 수와 보류 중인 입출력요구의 수를 참조하여, 호스트의 마이크로프로세서를 인터럽트할 것을 결정하는 단계;⒞ 상기 ⒝ 단계에서 호스트의 마이크로프로세서를 인터럽트하기로 결정한 경우, 호스트의 마이크로프로세서를 인터럽트하여 보고되지 않은 종료된 입출력요구를 호스트의 마이크로프로세서에 보고하는 단계; 및,⒟ 입출력 제어기의 작업부하에 따라, 상기 ⒞ 단계에서 호스트의 마이크로프로세서에 보고할, 상기 보고되지 않은 종료된 입출력요구의 수를 변화시키는 단계.
- 제 1항에 있어서,상기 ⒝ 단계는 상기 보고되지 않은 종료된 입출력요구의 수와 상기 보류 중인 입출력요구의 수를 비교하는 단계를 포함하는 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 2항에 있어서,상기 보고되지 않은 종료된 입출력요구의 수가 상기 보류 중인 입출력요구의 수보다 많거나 같을 때, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함하는 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 1항에 있어서,호스트의 마이크로프로세서를 인터럽트할 것을 결정하는 상기 ⒝ 단계는, 각각의 주변 입출력장치에 대한 상기 보류 중인 입출력요구의 수를 추가로 참조하는 단계를 포함하는 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 4항에 있어서,하나의 주변 입출력장치에 대해 상기 보류 중인 입출력요구의 수가 0 이 되면, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함하는 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 4항에 있어서,하나의 주변 입출력장치의 상기 보류 중인 입출력요구의 수가 사용자가 선택 가능한 소정의 수가 되면, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함하는 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 6항에 있어서,각각의 주변 입출력장치가 호스트의 마이크로프로세서에 인터럽트를 유발하는, 각각의 보류 중인 사용자가 선택 가능한 입출력요구의 수를 구비하는 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 5항에 있어서,하나의 주변 입출력장치에 대해 상기 보류 중인 입출력요구의 수가 0 이 되면, 호스트의 마이크로프로세서를 인터럽트하는 단계는, 호스트의 마이크로프로세서를 인터럽트하기 전에 소정의 시한(이때, 상기 소정의 시한은 호스트의 마이크로프로세서를 인터럽트하기 전에, 하나 또는 그 이상의 다른 주변 입출력장치가 각각의 보류 중인 입출력요구를 종료시킬 가능성을 실질적으로 증가시키기 위하여 선택된다)을 대기하는 단계를 포함하는 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 8항에 있어서,상기 소정의 시한은 약 5㎲ 내지 약 8㎲인 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 8항에 있어서,상기 소정의 시한은 약 25㎲ 내지 약 1,000㎲인 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 8항에 있어서,각각의 소정의 시한은 각각의 주변 입출력장치에 대하여 선택되는 것 을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 제 8항에 있어서,상기 소정의 시한은 사용자가 선택 가능한 것을 특징으로 하는전송된 입출력요구를 처리하는 방법.
- 호스트 컴퓨터의 호스트 마이크로프로세서가 입출력 제어기에 입출력요구를 전송하여, 호스트 컴퓨터와 복수의 주변 입출력장치 간의 데이터 전송을 개시하고, 종료된 입출력요구를 보고하기 위하여, 입출력 제어기가 호스트의 마이크로프로세서를 인터럽트하는 컴퓨터 시스템에 있어서, 종료된 입출력요구를 호스트의 마이크로프로세서에 보고하는 시기를 입출력 제어기에서 제어하는 다음의 단계를 포함하는 방법:적어도 (ⅰ) 보고되지 않은 종료된 입출력요구의 수, (ⅱ) 보류 중인 전체 입출력요구의 수, 및 (ⅲ) 복수의 주변 입출력장치 각각에 대응하는 보류 중인 입출력요구의 수를 감시하는 단계;상기 감시 단계를 참조하여, 종료된 입출력요구를 보고하기 위하여, 호스트의 마이크로프로세서를 인터럽트할 것을 결정하는 단계; 및,호스트의 마이크로프로세서에 인터럽트당 가변적인 수의 종료된 입출력요구를 보고하는 단계.
- 호스트 컴퓨터의 호스트 마이크로프로세서가 입출력 제어기에 입출력요구를 전송하여, 호스트 컴퓨터와 복수의 주변 입출력장치 간의 데이터 전송을 개시하고, 종료된 입출력요구를 보고하기 위하여, 입출력 제어기가 호스트의 마이크로프로세서를 인터럽트하는 컴퓨터 시스템에 있어서, 다음을 포함하는 것을 특징으로 하는 입출력 제어기:호스트의 마이크로프로세서로부터 전체 잔여 입출력요구의 수를 계산하도록 구성된 첫 번째 계수기; 및,입출력장치에 의하여 종료된 보고되지 않은 전체 입출력요구의 수를 계산하도록 구성된 두 번째 계수기(이때, 상기 입출력 제어기는 첫 번째 계수기의 수와 두 번째 계수기의 수를 비교하고, 두 번째 계수기의 수가 첫 번째 계수기의 수보다 크거나 같을 경우, 호스트의 마이크로프로세서를 인터럽트하여 입출력장치에 의하여 종료된 모든 보고되지 않은 입출력요구를 보고한다).
- 제 14항에 있어서,복수의 입출력장치 계수기(이때, 각각의 계수기는 하나의 입출력장치에 대한 잔여 입출력요구의 수를 계산하도록 구성된다); 및,상기 복수의 입출력장치 계수기 중 하나의 입출력장치 계수기가 1에서 0으로 이행되면, 작동을 시작하도록 구성된 소정의 시한을 구비한 타이머(이때, 상기 입출력 제어기는 타이머의 소정의 시한이 만료되면, 호스트의 마이크로프로세서를 인터럽트하여, 입출력장치에 의하여 종료된 모든 보고되지 않은 입출력요구를 보고한다)를 추가로 포함하는 것을 특징으로 하는입출력 제어기.
- 제 14항에 있어서,모든 계수기는 입출력 제어기와 관련된 임의접근기억장치에 저장되고, 갱신되는 변수인 것을 특징으로 하는입출력 제어기.
- 호스트 컴퓨터의 호스트 마이크로프로세서가 입출력 제어기에 입출력요구를 전송하여, 호스트 컴퓨터와 복수의 주변 입출력장치 간의 데이터 전송을 개시하고, 종료된 입출력요구를 보고하기 위하여, 입출력 제어기가 호스트의 마이크로프로세서를 인터럽트하는 컴퓨터 시스템에 있어서, 다음의 각 단계를 포함하는, 종료된 입출력 요구를 호스트의 마이크로프로세서에 보고하는 시기를 입출력 제어기에서 제어하는 방법:적어도 (ⅰ) 보고되지 않은 종료된 입출력요구의 수, 및 (ⅱ) 보류 중인 입출력요구를 가진 복수의 주변 입출력장치의 수를 감시하는 단계;상기 감시 단계를 참조하여, 종료된 입출력요구를 보고하기 위하여, 호스트의 마이크로프로세서를 인터럽트할 것을 결정하는 단계;호스트의 마이크로프로세서를 인터럽트하는 단계; 및,호스트의 마이크로프로세서에 인터럽트당 종료된 입출력요구의 가변적인 수를 보고하는 단계.
- 제 17항에 있어서,호스트의 마이크로프로세서를 인터럽트하여, 종료된 입출력요구를 보고할 것을 결정하는 단계는, 보고되지 않은 종료된 입출력 요구의 수와 보류 중인 입출력요구를 가진 복수의 주변 입출력장치의 수를 비교하는 단계를 포함하는 것을 특징으로 하는종료된 입출력 요구를 호스트의 마이크로프로세서에 보고하는 시기를 입출력 제어기에서 제어하는 방법.
- 제 18항에 있어서,보고되지 않은 종료된 입출력 요구의 수와 보류 중인 입출력요구를 가진 복수의 주변 입출력장치의 수가 같을 경우, 호스트의 마이크로프로세서를 인터럽트하는 단계를 포함하는 것을 특징으로 하는종료된 입출력 요구를 호스트의 마이크로프로세서에 보고하는 시기를 입출력 제어기에서 제어하는 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/282,341 | 1999-03-31 | ||
US09/282,341 US6434630B1 (en) | 1999-03-31 | 1999-03-31 | Host adapter for combining I/O completion reports and method of using the same |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20010104732A KR20010104732A (ko) | 2001-11-26 |
KR100677538B1 true KR100677538B1 (ko) | 2007-02-01 |
Family
ID=23081068
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020017012672A KR100677538B1 (ko) | 1999-03-31 | 2000-03-29 | 입출력 종료 보고서를 결합하는 호스트 어댑터와 그의사용방법 |
Country Status (9)
Country | Link |
---|---|
US (1) | US6434630B1 (ko) |
EP (1) | EP1163595B1 (ko) |
JP (1) | JP2002540526A (ko) |
KR (1) | KR100677538B1 (ko) |
AT (1) | ATE373844T1 (ko) |
AU (1) | AU4327800A (ko) |
CA (1) | CA2367890C (ko) |
DE (1) | DE60036465T2 (ko) |
WO (1) | WO2000058843A1 (ko) |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6564271B2 (en) * | 1999-06-09 | 2003-05-13 | Qlogic Corporation | Method and apparatus for automatically transferring I/O blocks between a host system and a host adapter |
US6792477B1 (en) * | 2000-05-18 | 2004-09-14 | Microsoft Corporation | Discovering printers and shares |
US6779054B2 (en) * | 2001-10-05 | 2004-08-17 | Intel Corporation | Method and apparatus for operating a network controller |
US20030086485A1 (en) * | 2001-11-08 | 2003-05-08 | John Lin | Master to multi-slave asynchronous transmit fifo |
US6829660B2 (en) * | 2001-12-12 | 2004-12-07 | Emulex Design & Manufacturing Corporation | Supercharge message exchanger |
JP4212811B2 (ja) * | 2002-01-10 | 2009-01-21 | 富士通株式会社 | 情報処理システム、インタフェース装置、情報処理装置、情報記憶装置 |
US20030189945A1 (en) * | 2002-04-05 | 2003-10-09 | Connor Patrick L. | Selective completion indication of controller events |
US7397768B1 (en) | 2002-09-11 | 2008-07-08 | Qlogic, Corporation | Zone management in a multi-module fibre channel switch |
FI20021867A (fi) * | 2002-10-18 | 2004-04-19 | Nokia Corp | Menetelmä kortin toimintatilan muuttamiseksi, järjestelmä, kortti ja laite |
JP4376787B2 (ja) * | 2002-11-21 | 2009-12-02 | 富士通株式会社 | イベント通知方法、デバイス及びプロセッサシステム |
US7646767B2 (en) | 2003-07-21 | 2010-01-12 | Qlogic, Corporation | Method and system for programmable data dependant network routing |
US7234101B1 (en) | 2003-08-27 | 2007-06-19 | Qlogic, Corporation | Method and system for providing data integrity in storage systems |
US20050071688A1 (en) * | 2003-09-25 | 2005-03-31 | International Business Machines Corporation | Hardware CPU utilization meter for a microprocessor |
US7219263B1 (en) | 2003-10-29 | 2007-05-15 | Qlogic, Corporation | Method and system for minimizing memory corruption |
US7930377B2 (en) | 2004-04-23 | 2011-04-19 | Qlogic, Corporation | Method and system for using boot servers in networks |
US7669190B2 (en) | 2004-05-18 | 2010-02-23 | Qlogic, Corporation | Method and system for efficiently recording processor events in host bus adapters |
US7577772B2 (en) * | 2004-09-08 | 2009-08-18 | Qlogic, Corporation | Method and system for optimizing DMA channel selection |
US20060064531A1 (en) * | 2004-09-23 | 2006-03-23 | Alston Jerald K | Method and system for optimizing data transfer in networks |
US7676611B2 (en) | 2004-10-01 | 2010-03-09 | Qlogic, Corporation | Method and system for processing out of orders frames |
US7398335B2 (en) * | 2004-11-22 | 2008-07-08 | Qlogic, Corporation | Method and system for DMA optimization in host bus adapters |
US7164425B2 (en) * | 2004-12-21 | 2007-01-16 | Qlogic Corporation | Method and system for high speed network application |
US7392437B2 (en) | 2005-01-20 | 2008-06-24 | Qlogic, Corporation | Method and system for testing host bus adapters |
US7853960B1 (en) * | 2005-02-25 | 2010-12-14 | Vmware, Inc. | Efficient virtualization of input/output completions for a virtual device |
US7231480B2 (en) * | 2005-04-06 | 2007-06-12 | Qlogic, Corporation | Method and system for receiver detection in PCI-Express devices |
US7281077B2 (en) * | 2005-04-06 | 2007-10-09 | Qlogic, Corporation | Elastic buffer module for PCI express devices |
JP2007012021A (ja) * | 2005-06-01 | 2007-01-18 | Sony Corp | 情報処理装置および情報処理方法、並びにプログラム |
US7461195B1 (en) | 2006-03-17 | 2008-12-02 | Qlogic, Corporation | Method and system for dynamically adjusting data transfer rates in PCI-express devices |
US7743195B2 (en) * | 2006-12-27 | 2010-06-22 | Intel Corporation | Interrupt mailbox in host memory |
US7716397B2 (en) * | 2007-07-03 | 2010-05-11 | Lsi Corporation | Methods and systems for interprocessor message exchange between devices using only write bus transactions |
JP5101195B2 (ja) * | 2007-07-09 | 2012-12-19 | 株式会社東芝 | インタフェースコントローラ |
US8458730B2 (en) * | 2008-02-05 | 2013-06-04 | International Business Machines Corporation | Multi-level driver configuration |
US9032128B2 (en) * | 2008-04-28 | 2015-05-12 | Hewlett-Packard Development Company, L.P. | Method and system for generating and delivering inter-processor interrupts in a multi-core processor and in certain shared memory multi-processor systems |
US20100005199A1 (en) * | 2008-07-07 | 2010-01-07 | Texas Instruments Incorporated | Direct memory access (dma) data transfers with reduced overhead |
JP5395797B2 (ja) * | 2008-08-20 | 2014-01-22 | パナソニック株式会社 | 通信装置、及び通信制御方法 |
US7853726B2 (en) * | 2008-10-06 | 2010-12-14 | International Business Machines Corporation | FCP command-data matching for write operations |
FR2952937B1 (fr) | 2009-11-20 | 2013-02-08 | Chaire Europeenne De Chimie Now Pour Un Developpement Durable | Nouvelles resines de type phenoplastes obtenues a partir de composes phenoliques et de durcisseurs macromoleculaire portant des fonctions aldehydes |
US8719843B2 (en) * | 2011-07-27 | 2014-05-06 | Intel Corporation | Virtualizable and forward-compatible hardware-software interface |
US8856479B2 (en) * | 2012-04-20 | 2014-10-07 | International Business Machines Corporation | Implementing storage adapter performance optimization with hardware operations completion coalescence |
US9727494B1 (en) * | 2012-10-11 | 2017-08-08 | Qlogic, Corporation | Method and system for communication between a computing device and a peripheral device |
US9298652B2 (en) * | 2013-03-15 | 2016-03-29 | Microsoft Technology Licensing, Llc | Moderated completion signaling |
KR102649324B1 (ko) * | 2016-05-19 | 2024-03-20 | 삼성전자주식회사 | 적응 인터럽트 제어를 수행하는 컴퓨터 시스템 및 그것의 인터럽트 제어 방법 |
US10776289B2 (en) | 2018-09-21 | 2020-09-15 | Microsoft Technology Licensing, Llc | I/O completion polling for low latency storage device |
US10740258B2 (en) * | 2018-10-23 | 2020-08-11 | Microsoft Technology Licensing, Llc | Timer-based I/O completion polling for low latency storage device |
US11194503B2 (en) | 2020-03-11 | 2021-12-07 | Samsung Electronics Co., Ltd. | Storage device having a configurable command response trigger |
US20230120600A1 (en) * | 2021-10-20 | 2023-04-20 | Western Digital Technologies, Inc. | Data Storage Devices, Systems, and Related Methods for Grouping Commands of Doorbell Transactions from Host Devices |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4268906A (en) * | 1978-12-22 | 1981-05-19 | International Business Machines Corporation | Data processor input/output controller |
EP0738978A1 (en) * | 1995-04-20 | 1996-10-23 | Sun Microsystems, Inc. | Method and apparatus for interrupt communication in a packet-switched computer system |
US5881296A (en) * | 1996-10-02 | 1999-03-09 | Intel Corporation | Method for improved interrupt processing in a computer system |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5129064A (en) | 1988-02-01 | 1992-07-07 | International Business Machines Corporation | System and method for simulating the I/O of a processing system |
JPH0315941A (ja) * | 1989-06-14 | 1991-01-24 | Hitachi Ltd | 半導体集積回路 |
EP0551191B1 (en) | 1992-01-09 | 2000-04-12 | Cabletron Systems, Inc. | Apparatus and method for transferring data to and from host system |
JP2901882B2 (ja) * | 1994-07-26 | 1999-06-07 | 株式会社日立製作所 | 計算機システムおよび入出力命令の発行方法 |
US5761427A (en) | 1994-12-28 | 1998-06-02 | Digital Equipment Corporation | Method and apparatus for updating host memory in an adapter to minimize host CPU overhead in servicing an interrupt |
US5671365A (en) | 1995-10-20 | 1997-09-23 | Symbios Logic Inc. | I/O system for reducing main processor overhead in initiating I/O requests and servicing I/O completion events |
US5892969A (en) | 1996-03-15 | 1999-04-06 | Adaptec, Inc. | Method for concurrently executing a configured string of concurrent I/O command blocks within a chain to perform a raid 5 I/O operation |
JP3586522B2 (ja) * | 1996-09-26 | 2004-11-10 | 日本電気株式会社 | 周辺機器制御装置 |
US6055603A (en) * | 1997-09-18 | 2000-04-25 | Emc Corporation | Method and apparatus for performing pre-request operations in a cached disk array storage system |
US6085277A (en) * | 1997-10-15 | 2000-07-04 | International Business Machines Corporation | Interrupt and message batching apparatus and method |
US6138176A (en) * | 1997-11-14 | 2000-10-24 | 3Ware | Disk array controller with automated processor which routes I/O data according to addresses and commands received from disk drive controllers |
US6006340A (en) * | 1998-03-27 | 1999-12-21 | Phoenix Technologies Ltd. | Communication interface between two finite state machines operating at different clock domains |
-
1999
- 1999-03-31 US US09/282,341 patent/US6434630B1/en not_active Expired - Lifetime
-
2000
- 2000-03-29 KR KR1020017012672A patent/KR100677538B1/ko not_active IP Right Cessation
- 2000-03-29 JP JP2000608268A patent/JP2002540526A/ja active Pending
- 2000-03-29 WO PCT/US2000/008443 patent/WO2000058843A1/en active IP Right Grant
- 2000-03-29 DE DE60036465T patent/DE60036465T2/de not_active Expired - Lifetime
- 2000-03-29 AU AU43278/00A patent/AU4327800A/en not_active Abandoned
- 2000-03-29 EP EP00923098A patent/EP1163595B1/en not_active Expired - Lifetime
- 2000-03-29 CA CA002367890A patent/CA2367890C/en not_active Expired - Fee Related
- 2000-03-29 AT AT00923098T patent/ATE373844T1/de not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4268906A (en) * | 1978-12-22 | 1981-05-19 | International Business Machines Corporation | Data processor input/output controller |
EP0738978A1 (en) * | 1995-04-20 | 1996-10-23 | Sun Microsystems, Inc. | Method and apparatus for interrupt communication in a packet-switched computer system |
US5881296A (en) * | 1996-10-02 | 1999-03-09 | Intel Corporation | Method for improved interrupt processing in a computer system |
Also Published As
Publication number | Publication date |
---|---|
KR20010104732A (ko) | 2001-11-26 |
CA2367890A1 (en) | 2000-10-05 |
DE60036465D1 (de) | 2007-10-31 |
ATE373844T1 (de) | 2007-10-15 |
AU4327800A (en) | 2000-10-16 |
WO2000058843A1 (en) | 2000-10-05 |
EP1163595B1 (en) | 2007-09-19 |
JP2002540526A (ja) | 2002-11-26 |
US6434630B1 (en) | 2002-08-13 |
EP1163595A1 (en) | 2001-12-19 |
CA2367890C (en) | 2007-05-29 |
DE60036465T2 (de) | 2008-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100677538B1 (ko) | 입출력 종료 보고서를 결합하는 호스트 어댑터와 그의사용방법 | |
EP3462326B1 (en) | Nvme device, and methods for reading and writing nvme data | |
US7464199B2 (en) | Method, system, and program for handling Input/Output commands | |
US7496699B2 (en) | DMA descriptor queue read and cache write pointer arrangement | |
US6272499B1 (en) | Linked lists of transfer descriptors scheduled at intervals | |
US5606703A (en) | Interrupt protocol system and method using priority-arranged queues of interrupt status block control data structures | |
US8302109B2 (en) | Synchronization optimized queuing system | |
US20020116565A1 (en) | USB host controller and interface with batched data transfer | |
US5937200A (en) | Using firmware to enhance the functionality of a controller | |
EP1188119A1 (en) | A method and apparatus for automatically transferring i/o blocks between a host system and a host adapter | |
KR100309189B1 (ko) | 중앙처리장치의사용최소화방법 | |
US8356299B2 (en) | Interrupt processing method and system | |
JPH06314205A (ja) | 割り込み源間の優先順位確立方法及びデータ処理システム | |
US20080162663A1 (en) | Computer system with network interface retransmit | |
JPH07221780A (ja) | データパケットの受信の速度を上げるためのシステム | |
US5911152A (en) | Computer system and method for storing data in a buffer which crosses page boundaries utilizing beginning and ending buffer pointers | |
US11709626B2 (en) | Scheduling storage system tasks to promote low latency and sustainability | |
CN111666237B (zh) | 具有高速缓存管理功能的dma控制器 | |
US20040019708A1 (en) | Method, system, and program for returning data to read requests received over a bus | |
JP4317348B2 (ja) | 情報処理装置及び入出力方法並びにプログラム | |
JP2002500454A (ja) | バッファ付きuartにおけるデータ損失の回避 | |
US20040111537A1 (en) | Method, system, and program for processing operations | |
KR960006472B1 (ko) | TICOM IOP 환경에서 FDDI펌웨어(firmware) 구동방법 | |
CN112347024A (zh) | 一种usb数据传输优化方法及系统 | |
CN117931406A (zh) | 一种virtio设备中断方法及装置、后端设备、芯片 |
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: 20130107 Year of fee payment: 7 |
|
FPAY | Annual fee payment |
Payment date: 20140106 Year of fee payment: 8 |
|
FPAY | Annual fee payment |
Payment date: 20150106 Year of fee payment: 9 |
|
LAPS | Lapse due to unpaid annual fee |