도 1은, 본 발명의 실시예에 따른 정보 처리 시스템의 구성을 나타낸 도면이다. 도 1에서, 정보 처리 시스템(1)은, 시스템 보드(2)(#0∼#7), IO 유닛(3)(#0∼#7), 시스템 인터코넥트(4), IO 장치(5)(5a∼5n)를 구비한다. 또한, 시스템 보드(2) 및 IO 유닛(3)의 개수는, 각각, 특별히 한정되는 것이 아니다. 또한, 시스템 보드(2) 및 IO 유닛(3)의 개수는, 서로 동일해도 좋고, 서로 달라도 좋다.
시스템 보드(2)는 각각 CPU(21) 및 메모리(22)를 구비한다. 도 1에 나타낸 예에서는, 시스템 보드(2)(#0)는 4개의 CPU(21)를 구비하고 있다. 또한, 메모리(22)는 복수의 CPU(21)에 의해 공용된다. 단, 각 CPU(21)에 대해서 각각 서로 독립한 메모리(22)를 설치하도록 해도 좋다.
각 CPU(21)는, 각각 IO 유닛(3)과의 접속을 제어하는 처리를 행하는 드라이버(23)를 갖고 있다. 각 드라이버(23)는, 예를 들면 메모리(22)에 저장되어 있는 드라이버 프로그램을 실행하는 것으로 실현된다.
IO 유닛(3)은, 각각 정보 처리 시스템(1)의 입출력 장치이다. 각 IO 유 닛(3)은 각각 시스템 인터코넥트(4)에 접속되는 PCI 버스를 구비한다. 이 PCI 버스에는, 예를 들면 하드디스크 드라이브(31), 채널 장치(32), LAN 포트, CD-ROM 또는 DVD용의 드라이브 장치 등의 입출력 유닛이 접속되어 있다. 도 1에 나타낸 예에서는, IO 유닛(3)(#0)에는, 4개의 하드디스크 드라이브(31), 및 4개의 채널 장치(32)가 탑재되어 있다. 채널 장치(32)는, 예를 들면 카드 형상의 인터페이스 디바이스이며, IO 장치(5)가 접속된다. 또한, IO 유닛(3)(#0∼#7)의 구성은, 서로 같은 구성이라도 좋고, 서로 다른 구성이라도 좋다. 즉, IO 유닛(3)(#1∼#7)은, 반드시 하드디스크 드라이브(31), 채널 장치(32), LAN 포트 등을 구비하고 있을 필요는 없다.
시스템 인터코넥트(4)는, 예를 들면 칩세트 등에 의해 구성되며, 시스템 보드(2)(#0∼#7)와 IO 유닛(3)(#0∼#7)의 사이를 접속한다. 또한, 시스템 인터코넥트(4)는, 이중화 구성 등, 장황하게 구성되도록 해도 좋다. IO 장치(5a∼5n)는, 예를 들면 RAID를 구성하는 스토리지 장치이며, 채널 장치(32)에 접속된다.
도 2는, 도 1에 나타낸 정보 처리 시스템(1)을 간략화하여 나타낸 개략도이다. 도 2에서, CPU(21) 및 메모리(22)는, 도 1에 나타낸 시스템 보드(2)(#0∼#7) 중의 임의의 하나에 설치된다. 시스템 제어부(40)는, 도 2에 나타낸 시스템 인터코넥트(4)를 포함해서 구성되고, CPU(21), 메모리(22), 채널 장치(32a∼32c)를 서로 접속한다. 또한, CPU(21)는 도 2에서는, 시스템 제어부(40)를 통해서 메모리(22)에 액세스하지만, 시스템 제어부(40)를 통하지 않고 메모리(22)에 액세스하도록 해도 좋다.
채널 장치(32a∼32c)는 CPU(21) 및 메모리(22)와, IO 장치(5a∼5c) 사이의 데이터 전송을 제어한다. 또한, 채널 장치(32a∼32c)는, 반드시 1대의 IO 유닛(3) 내에 탑재될 필요는 없고, 서로 다른 IO 유닛(3)에 탑재되어도 좋다. 또한, 채널 장치(32a∼32c)와 IO 장치(5a∼5c)의 사이는, 1대1로 접속될 필요는 없고, 「1대다」 또는 「다대1」로 접속되도록 해도 좋다.
상기 구성의 정보 처리 시스템(1)에서, 드라이버(23)는, 채널 장치(32a∼32c)를 기동할 수 있다. 예를 들면, IO 장치(5a)에 데이터를 송신할 때에는, 드라이버(23)는 채널 장치(32a)를 기동하여, 채널 장치(32a)에 데이터 전송 코맨드를 실행시킨다.
또한, CPU(21)는 드라이버(23)를 사용하여, 채널간의 조정을 행할 수 있다. 즉, 채널 장치(32a∼32c)는, 대응하는 IO 장치(5a∼5c)를 동작시킬 때는, CPU(21)에 대해서 우선권을 요구한다. 이 때, 어느 1개의 채널 장치(예를 들면, 32a)만이 우선권을 요구한 경우에는, 채널 장치(32a)에 대해서 우선권이 부여된다. 이에 따라, 채널 장치(32a)는 대응하는 IO 장치(5a)의 데이터 전송에 따른 동작을 개시한다. 한편, 복수의 채널 장치(예를 들면, 32a, 32b)로부터 우선권이 요구된 경우에는, 드라이버(23)는 소정의 알고리즘을 따라서 조정을 행하여, 채널 장치간의 우선 순위를 결정한다. 이 경우, 예를 들면 조정에 의해 채널 장치(32a)에 대해서 우선권이 부여되는 것으로 하면, 채널 장치(32b)는, 대응하는 IO 장치(5b)의 데이터 전송에 따른 동작을 개시할 수 없다. 즉, 채널 장치(32b)는, 드라이버(23)로부터의 지시를 기다리게 된다. 그리고, 드라이버(23)는 채널 장치(32b)에 의한 데이터 전 송이 종료하면, 채널 장치(32a)에 대해서 우선권을 부여한다. 또한, 채널간의 조정은, 드라이버(23)에 의해 실행되어도 좋고, 드라이버(23)가 상위의 애플리케이션과 제휴하면서 행하도록 해도 좋다.
이와 같이, 실시예의 정보 처리 시스템(1)에서는, 채널 장치(32)는, 드라이버(23)의 지시에 따라서, 또는 드라이버(23)로부터의 허가를 얻은 후에, IO 제어 동작을 개시한다. 즉, 채널 장치(32)는, 드라이버(23)로부터의 지시 또는 허가없이는 IO 제어 동작을 개시하지 않는다.
도 3은, 실시예의 정보 처리 시스템(1)에서 인터럽트 제어에 관한 요소를 나타낸 도면이다. 또한, 도 3에서, 채널 장치(32)는 도 1 또는 도 2에 나타낸 복수의 채널 장치의 임의의 1개에 상당한다.
CPU(21)는, 상술한 바와 같이, 드라이버(23)를 갖는다. 드라이버(23)는, 인터럽트 제어부(24)를 포함하여 구성된다. 인터럽트 제어부(24)는, 채널 장치(32)로부터의 인터럽트를 접수하여, 그 인터럽트에 따른 처리를 실행한다.
메모리(22)는, 특히 한정되는 것이 아니지만, 예를 들면 반도체 메모리이며, CPU(21)의 주기억으로서 사용된다. 메모리(22)에는, COB(Channel Operation Buffer: 채널 조작 버퍼) 영역(51), 및 CIB(Channel Interruption Buffer: 채널 인터럽트 버퍼) 영역(52)이 설치된다. COB 영역(51) 및 CIB 영역(52)은, 각각 드라이버(23)에 의해, 각 채널 장치에 대해서 확보된다. 즉, 드라이버(23)는, 예를 들면 정보 처리 장치(1)에 새로운 채널 장치(32)가 접속되면, 그 새로운 채널 장치에 대응하는 COB 영역(51) 및 CIB 영역(52)을, 메모리(22) 내에 확보한다.
COB 영역(51)은, 드라이버(23)로부터 채널 장치(32)에 대해서 동작 내용을 지시하기 위해서 사용된다. 이 실시예에서는, COB 영역(51)은, 채널 장치(32)를 기동시키기 위한 채널 장치 기동 명령 및 채널 장치(32)를 기동하기 위해서 사용하는 기동 정보를 유지한다. 또한, CIB 영역(52)은, 채널 장치(32)로부터 드라이버(23)에 제어 정보를 통지하기 위해서 사용된다. 이 실시예에서는, CIB 영역(52)에는, 채널 장치(32)의 동작 결과를 나타내는 정보, 및 채널 장치(32)로부터 CPU(21)에 대한 요구를 나타내는 정보 등이 기입된다.
채널 장치(32)는, 기동 제어부(61), 인터럽트 제어부(62), 채널 장치 제어부(63), PCI 버스 제어부(64), IO 제어부(65)를 구비한다. 또한, 이들의 유닛(61∼65)은, 하드웨어로 실현되어도 좋고, 하드웨어 및 (펌웨어(firmware)를 포함) 소프트웨어의 조합에 의해 실현되어도 좋다.
기동 제어부(61)는, 드라이버(23)로부터의 지시에 따라서, 채널 장치(32)를 기동한다. 이 실시예에서는, 기동 제어부(61)는, 레지스터를 구비하여, 채널 장치(32)에 의해 그 레지스터에 소정의 값이 기입되면, 메모리(22)의 COB 영역(51)에 저장되어 있는 정보를 판독하여 채널 장치 제어부(63)에 넘긴다. 이것에 의해, 채널 장치(32)는 기동된다.
인터럽트 제어부(62)는, 채널 장치(32)로부터 CPU(21)에의 인터럽트를 제어한다. 이 실시예에서는, 인터럽트 제어부(62)는 채널 장치(32)의 동작(예를 들면, 데이터 전송 처리 등)이 종료했을 때에, CPU(21)에 인터럽트 신호를 송신한다. 또한, 인터럽트 제어부(62)는 우선권을 요구할 때에도 CPU(21)에 인터럽트 신호를 송 신한다. 또한, CPU(21)의 인터럽트 제어부(24)는, 채널 장치(32)로부터 인터럽트를 받아들이면, 그 채널 장치(32)에 대응하는 CIB 영역(52)에 기입되어 있는 정보를 판독한다. 이에 따라, 인터럽트에 대응하는 처리가 실행된다.
채널 장치 제어부(63)는, 대응하는 IO 장치(5a∼5n)에 관한 데이터 전송을 위해, 채널 장치(32)의 동작을 제어한다. PCI 버스 제어부(64)는, 채널 장치 제어부(63)의 제어를 따라서, CPU(21) 및 메모리(22)와 데이터 전송하기 위해서 PCI 버스를 제어한다. IO 제어부(65)는 채널 장치 제어부(63)의 제어에 따라서, 대응하는 IO 장치(5a∼5n)와의 데이터 전송을 제어한다.
도 4는, 드라이버(23)로부터 채널 장치(32)를 기동할 때의 순서를 나타낸 플로차트이다. 또한, 이 플로차트의 처리는, 드라이버(23)에 의해 개시된다. 드라이버(23)는, 예를 들면 애플리케이션으로부터의 지시에 따라, 이 플로차트의 처리를 개시한다.
스텝 S1에서는, 드라이버(23)는, 기동해야 할 채널 장치(32)에 대응하는 COB 영역(51)에 기동 정보를 기입한다. 기동 정보는, 채널 장치(32)의 동작에 필요한 정보로서, 예를 들면 채널 장치(32)에 데이터 전송을 실행시키는 경우에는, 포인터, 선두 어드레스, 데이터 사이즈, Last Byte Count이다. 포인터는, 채널 장치(32)가 실행해야 할 명령을 지시한다. 선두 어드레스는, 전송해야 할 데이터를 저장하는 영역의 선두 어드레스이다. 데이터 사이즈는, 전송해야 할 데이터의 사이즈를 나타낸다. Last Byte Count는, 체인 데이터를 전송하는 경우에서, 최후의 체인 데이터의 바이트 계수 정보의 바이트 카운트를 나타낸다. 또한, 포인터 대신 에, COB 영역(51)에 명령 코드 자체를 기입하도록 해도 좋다.
스텝 S2에서는, 드라이버(23)는, 기동해야 할 채널 장치(32)의 기동 제어부(61)에 대해서, 기동을 지시한다. 기동 지시는, 이 실시예에서는, 기동 제어부(61)가 구비하는 레지스터에, 「채널 장치의 기동」을 나타내는 소정의 값을 기입함으로써 실현된다.
스텝 S3에서는, 기동 지시를 받은 채널 장치(32)의 기동 제어부(61)는, 당해 채널 장치(32)에 대응하는 COB 영역(51)에 저장되어 있는 정보를 판독한다. 여기서, 이 COB 영역(51)에는, 스텝 S1에서, 기동 정보가 기입되어 있다. 즉, 기동 제어부(61)는, 드라이버(23)에 의해 기입된 기동 정보를 취득한다. 그리고, 기동 제어부(61)는, 취득한 기동 정보를 채널 장치 제어부(63)에 넘긴다.
스텝 S4에서는, 채널 장치(32)는, COB 영역(51)으로부터 취득한 기동 정보에 대응하는 처리를 실행한다. 여기서, 기동 정보로서, 데이터 전송 명령을 지시하는 포인터, 전송 데이터의 선두 어드레스, 데이터 사이즈가 저장되어 있는 것으로 한다. 그렇게 하면, 채널 장치(32)는, 그 포인터가 지시하는 명령을 실행한다. 즉, 채널 장치(32)는, 선두 어드레스에 의해 지정되는 어드레스로부터, 데이터 사이즈에 의해 지정되는 사이즈의 데이터를 취득하고, 데이터 전송 명령을 따라서 그 데이터를 전송한다.
스텝 S5에서는, 채널 장치(32)는, 스텝 S4에 따른 처리의 동작 결과를, 당해 채널 장치(32)에 대응하는 CIB 영역(52)에 기입한다. 여기서, 스텝 S4에서 데이터 전송을 실행한 것으로 하고, 그 데이터 전송이 정상적으로 종료한 경우에는, 동작 결과로서 「정상 종료」를 나타내는 종료 코드가 CIB 영역(52)에 기입된다. 한편, 데이터 전송을 정상적으로 실행할 수 없었던 경우에는, 에러의 요인을 나타내는 에러 코드가 기입된다. 또한, 데이터 전송의 도중에서 그 전송 처리가 캔슬된 경우에는, 최후의 명령으로 전송된 데이터의 전송 사이즈를 CIB 영역(52)에 기입하도록 해도 좋다.
스텝 S6에서는, 채널 장치(32)의 인터럽트 제어부(62)는, CPU(21)에 인터럽트를 행한다. 또한, 인터럽트 방법은, 특히 한정되는 것이 아니다. 즉, 예를 들면, CPU(21)가 채널 장치마다 인터럽트 단자를 구비하고 있는 경우에는, 대응하는 인터럽트 단자의 논리값을 변경함으로써 인터럽트가 실현된다. 또는, 인터럽트를 행하는 채널 장치를 식별하는 정보를 CPU(21)에 송신함으로써 인터럽트를 실현하도록 해도 좋다.
스텝 S7에서는, CPU(21)의 드라이버(23)는 채널 장치(32)로부터의 인터럽트를 검출하면, 그 채널 장치(32)에 대응하는 CIB 영역(52)을 참조한다. 여기서, 이 CIB 영역(52)에는, 스텝 S5에서, 채널 장치(32)의 동작 결과가 기입되어 있다. 따라서, 드라이버(23)는 CIB 영역(52)을 참조함으로써, 채널 장치(32)의 동작 결과를 인식할 수 있다. 즉, CPU(21)는 스텝 S1에서 생성한 기동 정보에 대응하는 처리의 실행 결과를 알 수 있다.
스텝 S8에서는, 드라이버(23)는 인터럽트를 발행한 채널 장치(32)에 대해서, 인터럽트 처리가 완료된 것을 통지한다. 이 통지는, 예를 들면 인터럽트 제어부(62)가 구비하는 레지스터에, 「완료」를 나타내는 소정의 값을 기입함으로써 실 현된다.
이와 같이, 실시예의 정보 처리 시스템(1)에서는, 채널 장치(32)는 CPU(21)의 드라이버(23)에 의해 기동된다. 그리고, 이 기동 제어는, 드라이버(23)와 채널 장치(32) 사이에서, 메모리(22)상의 COB 영역(51) 및 CIB 영역(52)을 통해서 정보를 수수함으로써 실현된다. 또한, CPU(21)에의 인터럽트는, 그 CPU(21)에 CIB 영역(52)을 참조시키기 위한 트리거(trigger)로서의 역할을 갖고 있다.
또한, 드라이버(23)는 스텝 S1∼S2, S7∼S8의 처리를 CPU(21)에 실행시킨다. 또한, 드라이버(23)는 스텝 S3∼S6의 처리를 채널 장치(32)에 실행시킨다.
도 5는, 채널 장치(32)가 우선권을 요구했을 때의 순서를 나타낸 플로차트이다. 또한, 우선권의 요구는, 이 실시예에서는, 예를 들면 채널 장치(32)가 원하는 동작을 실행하기 위해서 컴퓨터 자원을 예약하기 위한 요구에 상당한다.
스텝 S11에서는, 채널 장치(32)는, 우선권의 요구를 나타내는 정보를, 그 채널 장치(32)에 대응하는 CIB 영역(52)에 기입한다. 즉, 채널 장치(32)는, 예를 들면, IO 장치(5)로부터 데이터를 판독하여 다른 장치에 전송할 때, 또는 IO 장치(5)에 데이터를 기입할 때에는, 필요한 컴퓨터 자원을 예약하기 위해서, CPU(21)에 대해서 우선권을 요구한다.
스텝 S12에서는, 채널 장치(32)의 인터럽트 제어부(62)는, CPU(21)에 인터럽트를 행한다. 또한, 이 인터럽트는, 기본적으로, 도 4에 나타낸 스텝 S6의 인터럽트와 동일하다.
스텝 S13에서는, 스텝 S7과 마찬가지로, CPU(21)의 드라이버(23)는 채널 장 치(23)로부터의 인터럽트를 검출하면, 그 채널 장치(23)에 대응하는 CIB 영역(52)을 참조한다. 단, 여기서는, CIB 영역(52)에는, 스텝 S11에서, 채널 장치(32)에 의해 우선권의 요구를 나타내는 정보가 기입되어 있다. 따라서, 드라이버(23)는 CIB 영역(52)을 참조함으로써, 채널 장치(32)가 우선권을 요구하고 있는 것을 인식한다.
스텝 S14에서는, 드라이버(23)는, 스텝 S13에서 인식한 우선권의 요구를 허가할지의 여부를 판단한다. 여기서, CPU(21)는 애플리케이션으로부터 요구된 처리를 우선적으로 실행하는 경우가 있다. 이 경우, 드라이버(23)는 그 애플리케이션으로부터 요구된 처리를 종료할 때까지, 채널 장치(32)로부터의 요구를 허가하지 않는다. 또한, CPU(21)는 복수의 채널 장치(32)로부터 우선권의 요구를 받아들이는 경우가 있다. 이 때, 드라이버(23)는 어느 채널 장치(예를 들면, 채널 장치(32a))로부터 우선권의 요구를 받았을 때에, 다른 채널 장치(예를 들면, 채널 장치(32b))에 우선권을 부여하고 있던 경우에는, 채널 장치(32b)의 처리가 종료할 때까지, 채널 장치(32a)로부터의 요구를 허가하지 않는다. 이와 같이, 드라이버(23)는, 정보 처리 시스템(1)의 동작 상태에 따라서, 우선권의 요구를 허가할지의 여부를 판단한다. 그리고, 요구를 허가하는 경우에는, 스텝 S15로 진행한다.
스텝 S15에서는, 드라이버(23)는 스텝 S11에서 우선권을 요구한 채널 장치(32)에 대해서, 인터럽트 처리의 개시를 지시한다. 이 지시는, 예를 들면, 인터럽트 제어부(62)가 구비하는 레지스터에, 「개시」를 나타내는 소정의 값을 기입(Accept 비트를 설정)함으로써 실현된다.
스텝 S16에서는, 채널 장치(32)는 인터럽트 제어부(62)가 드라이버(23)로부터의 지시를 검출하면, 우선권의 요구가 허가된 것이라고 판단하고, 원하는 동작을 실행한다. 여기서는, 예를 들면 대응하는 IO 장치(5)로부터의 비동기(非同期) 인터럽트를 계기로 하는 데이터 전송이 실행된다.
스텝 S17∼S20은, 기본적으로, 도 4에 나타낸 스텝 S5∼S8과 같다. 즉, 스텝 S17에서는, 채널 장치(32)는, 채널 장치(32)의 처리 결과를 CIB 영역(52)에 기입한다. 스텝 S18에서는, 인터럽트 제어부(62)는 CPU(21)에 인터럽트를 행한다. 스텝 S19에서는, 드라이버(23)는 채널 장치(32)로부터의 인터럽트를 검출하면, 그 채널 장치(32)에 대응하는 CIB 영역(52)을 참조한다. 즉, CPU(21)는, 스텝 S11에서 생성된 우선권의 요구에 대응하는 처리의 실행 결과를 알 수 있다. 그리고, 스텝 S20에서는, 드라이버(23)는 인터럽트를 발행한 채널 장치(32)에 대해서, 인터럽트 처리가 완료된 것을 통지한다.
스텝 S11에서 생성된 우선권의 요구를 허가하지 않을 때는(스텝 S14: No), 스텝 S21로 진행한다. 스텝 S21에서는, 드라이버(23)는 스텝 S11에서 생성된 요구보다도 우선 순위가 높은 처리를 실행한다. 또한, 드라이버(23)는 스텝 S21에서 실행하는 우선 순위가 높은 처리가 종료했을 때에, 스텝 S15로 진행하도록 해도 좋다. 즉, 드라이버(23)는 채널 장치(32)에 의한 인터럽트의 처리를 허가하지 않는 경우에는, 도 5에 나타낸 바와 같이, CPU(21)가 우선 순위가 높은 다른 처리를 실행한 후에, 그 채널 장치(32)에 의한 인터럽트의 처리를 실행시키도록 해도 좋다.
이와 같이, 실시예의 정보 처리 시스템(1)에서는, 채널 장치(32)는 CPU(21) 의 드라이버(23)의 허가를 기다려서 원하는 처리를 실행한다. 환언하면, 채널 장치(32)는 드라이버(23)의 허가없이 자발적인 처리를 실행할 수는 없다. 그리고, 이 우선 제어는, 드라이버(23)와 채널 장치(32)의 사이에서, 메모리(22)상의 CIB 영역(52)을 통하여 정보를 수수함으로써 실현된다. 또한, CPU(21)에의 인터럽트는, 도 4에 나타낸 순서와 마찬가지로, 그 CPU(21)에 CIB 영역(52)을 참조시키기 위한 트리거로서의 역할을 갖고 있다.
또한, 드라이버(23)는 스텝 S13∼S15, S19∼S21의 처리를 CPU(21)에 실행시킨다. 또한, 드라이버(23)는 스텝 S11∼S12, S16∼S18의 처리를 채널 장치(32)에 실행시킨다.
도 6은, 우선권이 허가되지 않을 때의 순서를 나타낸 플로차트이다. 이 플로차트의 처리는, 이 실시예에서는, 채널 장치(32)에 의해 실행된다.
스텝 S31 및 S32는, 도 5에 나타낸 스텝 S11 및 S12에 상당한다. 즉, 채널 장치(32)는 CIB 영역(52)을 이용하여 드라이버(23)에 대해서 우선권을 요구하고, 또한 CPU(21)에 인터럽트를 행한다.
스텝 S33에서는, 인터럽트 제어부(62)는 타이머를 기동한다. 즉, 우선권을 요구한 시점(또는, CPU(21)에 인터럽트를 행한 시점)으로부터의 경과 시간을 모니터한다. 스텝 S34∼S35에서는, 인터럽트 제어부(62)는, 드라이버(23)로부터의 응답을 기다린다. 그리고, 소정 시간 내에 드라이버(23)로부터의 응답(도 5에 나타낸 스텝 S15의 개시 지시)을 검출하면, 이 후, 채널 장치(32)는, 도 5에 나타낸 스텝 S16∼S18의 처리를 실행한다.
소정 시간 내에 드라이버(23)로부터의 응답이 검출되지 않고 타이머가 만료되면, 스텝 S36에서, 인터럽트 제어부(62)는 타임 아웃의 발생을 채널 장치 제어부(63)에 통지한다. 그렇게 하면, 채널 장치(32)는 스텝 S31∼S32에서 요구한 처리를 중지한다. 또한, 스텝 S37에서는, 채널 장치(32)는 우선권 획득에 실패한 것을 나타내는 에러 보고를 행한다. 에러는, 예를 들면, 대응하는 IO 장치(5)에(및, 필요에 따라 CPU(21)에도) 보고된다.
또한, 도 5∼도 6에 나타낸 순서에서는, 채널 장치(32)에 우선권을 부여하지 않을 때에, 드라이버(23)로부터 그 채널 장치(32)에 대해서 아무런 통지가 행해지지 않지만, 드라이버(23)로부터 채널 장치(32)에 대해서 우선권을 부여하지 않는 취지를 명시적으로 통지하도록 해도 좋다. 즉, 예를 들면 드라이버(23)는 스텝 S12의 인터럽트를 검출했을 때에 타이머를 기동하여, 소정 시간 내에 채널 장치(32)에 우선권을 부여할 수 없을 때에, 그 채널 장치(32)(또는, 채널 장치(32)의 채널 장치 제어부(63))에 에러를 보고하도록 해도 좋다. 이 에러 보고를 받으면, 채널 장치(32)는 우선권의 요구에 관한 처리를 중지한다. 즉, 이 에러 보고는, 채널 장치(32)의 처리 중지를 지시하는 정지 지시에 상당한다.
또한, 채널 장치(32)는 우선권을 요구하고 있는 기간에 드라이버(23)로부터 기동 지시를 받으면, 그 기동 지시를 우선한다. 즉, 채널 장치(32)가 우선권을 요구했을 때부터 개시 지시를 받을 때까지의 기간(즉, 스텝 S11∼S15의 기간)에, 기동 제어부(61)가 드라이버(23)로부터 도 4에서 설명한 기동 지시를 받으면, 기동 제어부(61)로부터 채널 장치 제어부(63)에 대해서 우선권의 획득에 실패한 취지가 보고된다. 그렇게 하면, 채널 장치(32)는 드라이버(23)로부터의 기동 지시를 우선하기 때문에, 우선권을 요구한 처리를 중지한다.
이와 같이, 실시예의 정보 처리 시스템에 의하면, 에뮬레이션 환경에서도 드라이버와 채널 장치 사이의 인터럽트 제어가 실현된다. 따라서, 종래의 메인프레임에서 제공되고 있던 기능이, 범용 플랫폼상에서도 실현된다. 예를 들면, 메인프레임의 하나의 형태로서, 메인프레임의 정보 처리 유닛과 1대의 IO 장치의 사이를 복수의 채널 장치를 이용하여 멀티패스 접속하는 기능을 제공하는 구성이 알려져 있다. 이 경우, 제 1 채널 장치를 이용해서 정보 처리 유닛과 IO 장치의 사이에서 데이터 전송을 행하고 있을 때에, 체인된 데이터 전송의 도중에서 그 제 1 채널 장치가 고장나면, 제 2 채널 장치를 사용해서 데이터 전송을 계속한다. 그리고, 실시예의 정보 처리 시스템은, 이러한 멀티패스 기능도 제공할 수 있다.
다음에, 세대 바이트를 이용하는 제어 방법에 관하여 설명한다. 채널 장치(32)는, 상술한 바와 같이, CIB 영역(52)을 이용해서 CUP(21)에 제어 정보를 통지한다. 이 때, 채널 장치(32)는 통지해야 할 제어 정보와 함께 세대 바이트를 CIB 영역(52)에 기입한다. 세대 바이트는, CIB 영역(52)에 기입되는 제어 정보를 식별하는 시퀀스 번호이며, 새로운 제어 정보를 기입할 때마다 「1」씩 인크리먼트(increment)된다. 따라서, 드라이버(23)는 CIB 영역(52)으로부터 제어 정보를 취득할 때, 이 세대 바이트를 참조함으로써, 과거의 제어 정보에 대응하는 처리를 실행해버리는 것을 회피할 수 있다. 즉, 세대 바이트를 이용하면, 채널 장치(32)로부터 CIB 영역(52)에의 기입의 실패를 검출할 수 있다.
또한, 이 세대 바이트를 이용하면, 채널 장치(32)로부터 CPU(21)에의 인터럽트를 행하지 않아도, 도 4에 나타낸 기동 순서, 및 도 5에 나타낸 우선권의 허가 순서와 동등한 동작을 실현할 수 있다.
도 7은, 채널 장치(32)의 기동시에 세대 바이트를 이용하는 경우의 순서를 나타낸 플로차트이다. 세대 바이트를 이용하는 경우에는, 스텝 S5 대신에 스텝 S41이 실행된다. 스텝 S41에서는, 채널 장치(32)는 동작 결과 및 새로운 세대 바이트를 CIB 영역(52)에 기입한다. 이에 따라, 세대 바이트는 「1」만큼 인크리먼트된다. 이 후, 채널 장치(32)는 CPU(21)에 대해서 인터럽트를 행할 필요는 없다.
드라이버(23)는 스텝 S42에서, 폴링(polling)에 의해 CIB 영역(52)에 설정되어 있는 세대 바이트를 정기적으로 참조한다. 그리고, 드라이버(23)는 세대 바이트가 인크리먼트되어 있는 것을 검출하면, 스텝 S43에서, 그 CIB 영역(52)에 기입되어 있는 제어 정보(여기서는, 채널 장치(32)의 동작 결과)를 파악한다. 이 후, 드라이버(23)는 채널 장치(32)에 대해서 인터럽트 완료 통지를 통지한다.
도 8은, 우선권의 요구시에 세대 바이트를 이용하는 경우의 순서를 나타낸 플로차트이다. 세대 바이트를 이용하는 경우, 채널 장치(32)는 스텝 S11 대신에, 스텝 S51에서, 우선권의 요구와 함께 새로운 세대 바이트를 CIB 영역(52)에 기입한다. 또한, 채널 장치(32)는 스텝 S17 대신에, 스텝 S54에서, 처리 결과와 함께 새로운 세대 바이트를 CIB 영역(52)에 기입한다. 이 경우, 채널 장치(32)는 CPU(21)에 대해서 인터럽트를 행할 필요는 없다.
드라이버(23)는 스텝 S52에서, 폴링에 의해 세대 바이트를 정기적으로 참조 한다. 그리고, 드라이버(23)는 세대 바이트가 인크리먼트되어 있는 것을 검출하면, 스텝 S53에서 CIB 영역(52)을 참조함으로써 채널 장치(32)로부터의 우선권의 요구를 인식하고, 스텝 S14 이후의 처리를 실행한다.
또한, 드라이버(23)는 스텝 S55에서, 폴링에 의해 세대 바이트를 정기적으로 참조한다. 그리고, 드라이버(23)는 스텝 S56에서, 세대 바이트가 인크리먼트되어 있는 것을 검출하면, CIB 영역(52)을 참조함으로써 채널 장치(32)의 처리 결과를 인식한다.