KR20130101565A - 확장 비동기 데이터 이동기 간접 데이터 주소 워드를 이용하는 방법, 컴퓨터 시스템 및 컴퓨터 프로그램 제품 - Google Patents

확장 비동기 데이터 이동기 간접 데이터 주소 워드를 이용하는 방법, 컴퓨터 시스템 및 컴퓨터 프로그램 제품 Download PDF

Info

Publication number
KR20130101565A
KR20130101565A KR20137015244A KR20137015244A KR20130101565A KR 20130101565 A KR20130101565 A KR 20130101565A KR 20137015244 A KR20137015244 A KR 20137015244A KR 20137015244 A KR20137015244 A KR 20137015244A KR 20130101565 A KR20130101565 A KR 20130101565A
Authority
KR
South Korea
Prior art keywords
block
subchannel
address
field
channel
Prior art date
Application number
KR20137015244A
Other languages
English (en)
Other versions
KR101476077B1 (ko
Inventor
케네스 제임스 오크스
피터 그림 서턴
피터 다나 드리버
해리 유든프렌드
스티븐 가드너 글라쎈
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20130101565A publication Critical patent/KR20130101565A/ko
Application granted granted Critical
Publication of KR101476077B1 publication Critical patent/KR101476077B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP

Abstract

메인 스토리지와 스토리지 클래스 메모리를 포함하는 컴퓨팅 환경에서 Start Subchannel 명령을 실행하는 방법이 제공되고, 상기 방법은: Start Subchannel 명령에 의해 식별된 서브채널이 비동기 데이터 이동기(ADM) 서브채널임을 결정하는 것에 응답하여, 다음의 단계들을 수행하는 것: 즉, 메인 스토리지로부터 오퍼레이션 요청 블록을 획득하는 단계 -상기 오퍼레이션 요청 블록은 오퍼레이션 블록의 주소를 포함함-; 상기 오퍼레이션 블록의 주소에 기초하여, 메인 스토리지로부터 상기 오퍼레이션 블록을 획득하는 단계 -상기 오퍼레이션 블록은 요청 블록, 응답 블록, 및 하나 또는 그 이상의 이동 명세 블록들(MSB들)로 구성되고, 상기 요청 블록은 MSB 카운트 필드를 포함하는데 상기 MSB 카운트 필드는 상기 오퍼레이션 블록에 포함되면서 그에 의해 참조되는 하나 또는 그 이상의 MSB들의 수를 표시하는 값을 가지며, 상기 응답 블록은 예외 조건들을 보유하도록 구성되고, 각 이동 명세 블록은 오퍼레이션 코드 필드, 블록 카운트 필드, 메인 스토리지 주소 필드, 스토리지 클래스 메모리 주소 필드, 블록 사이즈 필드 및 플래그들 필드를 포함하도록 구성됨-; 상기 오퍼레이션 블록의 각 MSB 블록을 위해, 상기 하나 또는 그 이상의 이동 명세 블록들의 이동 명세 블록을 획득하는 단계, 그리고 상기 획득된 이동 명세 블록이 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트를 획득하도록 구성됨을 상기 플래그들 필드에 기초하여 결정하는 단계 -상기 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트는 상기 획득된 MSB의 메인 스토리지 주소 필드의 제1 메인 스토리지 주소에 위치함-; 상기 획득된 MSB에 의해 명시되는 데이터의 각 블록을 위해, 상기 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트로부터 제2 메인 스토리지 주소를 획득하는 단계 -블록들의 수(number)와 블록 사이즈는 상기 획득된 MSB의 블록 카운트 필드와 블록 사이즈 필드에 기초하여 결정됨-; 상기 획득된 이동 명세 블록이 데이터의 블록들을 이동시키도록 구성됨을 상기 획득된 이동 명세 블록 내의 오퍼레이션 코드 필드의 오퍼레이션 코드에 기초하여 결정하는 단계; 및 상기 획득된 이동 명세 블록에 기초하여, 데이터의 각 블록을 상기 메인 스토리지와 스토리지 클래스 메모리 사이에서 이동시키는 단계 -데이터의 블록의 이동을 위해 사용되는 메인 스토리지 위치의 주소는 각각의 제2 메인 스토리지 주소를 사용하여 획득되고 상기 이동을 위해 사용되는 스토리지 클래스 메모리의 주소는 상기 스토리지 클래스 메모리 주소 필드를 사용하여 획득됨- 를 수행하는 것을 포함한다.

Description

확장 비동기 데이터 이동기 간접 데이터 주소 워드를 이용하는 방법, 컴퓨터 시스템 및 컴퓨터 프로그램 제품{USING EXTENDED ASYNCHRONOUS DATA MOVER INDIRECT DATA ADDRESS WORDS}
본 발명의 하나 또는 그 이상의 실시 예들은 일반적으로 컴퓨팅 환경의 보조 스토리지에 관한 것이고, 구체적으로는 보조 스토리지를 관리하는 것에 관한 것이다.
컴퓨팅 환경은 메인 스토리지(메인 메모리라고도 알려짐)와 보조 스토리지를 포함할 수 있다. 메인 스토리지는 프로세서가 액세스 가능한 스토리지이며, 예를 들어, 절대 주소에 의해 랜덤으로 주소지정 가능하다. 메인 스토리지는 직접 액세스 스토리지 디바이스(DASD, direct access storage devices) 또는 스토리지 클래스 메모리(storage class memory) 같은 보조 스토리지에 비해서 고속 액세스 스토리지로 간주된다. 또한, 메인 스토리지의 주소지정은 DASD 또는 스토리지 클래스 메모리의 주소지정보다 더 간단한 것으로 간주된다.
스토리지 클래스 메모리는, 고전적인 메인 스토리지 밖의 외부 스토리지 공간이며, 직접 액세스 스토리지 디바이스보다 더 고속의 액세스를 제공한다. DASD와는 달리, 스토리지 클래스 메모리는 통상적으로 기계적-아암식 회전 디스크(mechanical-arm spinning disks)로 구현되지 않고, 그보다는 비기계적 고체 상태 파트들로 구현된다. 통상적으로, 스토리지 클래스 메모리는, I/O 디바이스의 기술을 중앙 처리 장치(들)의 메모리 버스에 매핑하는데 사용되는, 여러 가지 입력/출력(I/O) 어댑터들을 통해서 컴퓨팅 시스템에 연결되는 고체 상태 디바이스들의 그룹들로 구현된다.
메인 스토리지와 스토리지 클래스 메모리를 포함하는 컴퓨팅 환경에서 Start Subchannel(서브채널을 시작하라) 명령을 실행하는 컴퓨터 프로그램 제품의 제공을 통해서 선행 기술의 단점들이 해결되고 장점들이 제공된다. 이 컴퓨터 프로그램 제품은 컴퓨터 리드가능 스토리지 매체를 포함하고, 이 매체는 처리 회로에 의해 리드가능하고 어떤 방법을 수행하기 위해 상기 처리회로에 의해 실행될 명령들을 저장한다. 상기 방법은, 예를 들어, Start Subchannel(서브채널을 시작하라) 명령에 의해 식별된 서브채널이 비동기 데이터 이동기(ADM) 서브채널임을 결정하는 것에 응답하여, 다음 단계들을 수행하는 것: 즉, 메인 스토리지로부터 오퍼레이션 요청 블록을 획득하는 단계 -상기 오퍼레이션 요청 블록은 오퍼레이션 블록의 주소를 포함함-; 상기 오퍼레이션 블록의 주소에 기초하여, 메인 스토리지로부터 상기 오퍼레이션 블록을 획득하는 단계 -상기 오퍼레이션 블록은 요청 블록, 응답 블록, 및 하나 또는 그 이상의 이동 명세 블록들(MSB들)로 구성되고, 상기 요청 블록은 MSB 카운트 필드를 포함하는데 상기 MSB 카운트 필드는 상기 오퍼레이션 블록에 포함되면서 그에 의해 참조되는 하나 또는 그 이상의 MSB들의 수를 표시하는 값을 가지며, 상기 응답 블록은 예외 조건들을 보유하도록 구성되고, 각 이동 명세 블록은 오퍼레이션 코드 필드, 블록 카운트 필드, 메인 스토리지 주소 필드, 스토리지 클래스 메모리 주소 필드, 블록 사이즈 필드 및 플래그들 필드를 포함하도록 구성됨-; 상기 오퍼레이션 블록의 각 MSB 블록을 위해, 상기 하나 또는 그 이상의 이동 명세 블록들의 이동 명세 블록을 획득하는 단계, 그리고 상기 획득된 이동 명세 블록이 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트를 획득하도록 구성됨을 상기 플래그들 필드에 기초하여 결정하는 단계 -상기 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트는 상기 획득된 MSB의 메인 스토리지 주소 필드의 제1 메인 스토리지 주소에 위치함-; 상기 획득된 MSB에 의해 명시되는 데이터의 각 블록을 위해, 상기 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트로부터 제2 메인 스토리지 주소를 획득하는 단계 -블록들의 수(number)와 블록 사이즈는 상기 획득된 MSB의 블록 카운트 필드와 블록 사이즈 필드에 기초하여 결정됨-; 상기 획득된 이동 명세 블록이 데이터의 블록들을 이동시키도록 구성됨을 상기 획득된 이동 명세 블록 내의 오퍼레이션 코드 필드의 오퍼레이션 코드에 기초하여 결정하는 단계; 및 상기 획득된 이동 명세 블록에 기초하여, 데이터의 각 블록을 상기 메인 스토리지와 스토리지 클래스 메모리 사이에서 이동시키는 단계 -데이터의 블록의 이동을 위해 사용되는 메인 스토리지 위치의 주소는 각각의 제2 메인 스토리지 주소를 사용하여 획득되고 상기 이동을 위해 사용되는 스토리지 클래스 메모리의 주소는 상기 스토리지 클래스 메모리 주소 필드를 사용하여 획득됨- 를 수행하는 것을 포함한다.
본 발명의 하나 또는 그 이상의 실시 예들에 관련된 방법들과 시스템들이 또한 여기에서 기술되고 청구된다. 또한, 본 발명의 하나 또는 그 이상의 실시 예들에 관련된 서비스들 또한 기술되며 여기에서 청구될 수 있다.
추가적인 특징들과 장점들이 본 발명의 기술들을 통해서 구현된다. 본 발명의 다른 실시 예들과 실시 예들이 여기에서 상세히 기술되며 청구되는 발명의 일 부분으로 간주된다.
이제 본 발명의 바람직한 실시 예들이 다음의 도면들을 참조하여 단지 예시의 방식으로 기술될 것이다.
도 1a는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨팅 환경의 일 실시 예를 도시한다.
도 1b는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨팅 환경의 또 하나의 실시 예를 도시한다.
도 2a는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기(an Extended Asynchronous Data Mover)의 오퍼레이션 요청 블록(operation request block)의 일 실시 예를 도시한다.
도 2b는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 오퍼레이션 블록(operation block)의 일 실시 예를 도시한다.
도 2c는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 요청 블록(request block)의 일 실시 예를 도시한다.
도 2d는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 응답 블록(response block)의 일 실시 예를 도시한다.
도 2e는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 이동 명세 블록(move specification block)의 일 실시 예를 도시한다.
도 2f는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 간접 데이터 주소 워드(indirect data address word)의 일 실시 예를 도시한다.
도 3a는 본 발명의 일 실시 예에 따라서 사용되는 Start Subchannel(서브채널을 시작하라) 명령의 일 실시 예를 도시한다.
도 3b는 본 발명의 일 실시 예에 따르는 Start Subchannel 명령과 연관된 논리의 일 실시 예를 도시한다.
도 3c는 본 발명의 일 실시 예에 따라서 사용되는 Clear Subchannel(서브채널을 클리어하라) 명령의 일 실시 예를 도시한다.
도 3d는 본 발명의 일 실시 예에 따라서 사용되는 Test Subchannel(서브채널을 테스트하라) 명령의 일 실시 예를 도시한다.
도 3e는 본 발명의 일 실시 예에 따라서 사용되는 Modify Subchannel(서브채널을 변경하라) 명령의 일 실시 예를 도시한다.
도 3f는 본 발명의 일 실시 예에 따라서 사용되는 Store Subchannel(서브채널을 저장하라) 명령의 일 실시 예를 도시한다.
도 4a는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 서브채널 정보 블록(subchannel information block)의 일 실시 예를 도시한다.
도 4b는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 경로 관리 컨트롤 워드(path management control word)의 일 실시 예를 도시한다.
도 4c는 본 발명의 일 실시 예에 따라서 사용되는 서브채널 상태 워드(subchannel status word)의 일 실시 예를 도시한다.
도 4d는 본 발명의 일 실시 예에 따라서 사용되는 확장 비동기 데이터 이동기의 확장 상태 워드(extended status word)의 일 실시 예를 도시한다.
도 5a는 본 발명의 일 실시 예에 따라서 사용되는 Store Storage Class Memory Information(스토리지 클래스 메모리 정보를 저장하라)의 요청 블록의 일 실시 예를 도시한다.
도 5b는 본 발명의 일 실시 예에 따라서 사용되는 Store Storage Class Memory Information의 응답 블록의 일 실시 예를 도시한다.
도 5c는 본 발명의 일 실시 예 예에 따라서 사용되는 스토리지 클래스 메모리 주소 리스트 엔트리의 일 실시 예를 도시한다.
도 5d는 본 발명의 일 실시 예에 따르는, Store Storage Class Memory Information 커맨드와 연관된 논리의 일 실시 예를 도시한다.
도 6a는 본 발명의 일 실시 예에 따르는, 스토리지 클래스 메모리의 여러 가지 상태들을 표시하는 상태도(state diagram)의 일 실시 예를 도시한다.
도 6b는 본 발명의 일 실시 예에 따르는, 오퍼레이션 상태(operation states)와 데이터 상태를 도시하는 상태도의 일 실시 예를 도시한다.
도 7a는 본 발명의 일 실시 예에 따라서 사용되는 Configure Storage Class Memory(스토리지 클래스 메모리를 구성하라)의 요청 블록의 일 실시 예를 도시한다.
도 7b는 본 발명의 일 실시 예에 따라서 사용되는 Configure Storage Class Memory의 응답 블록의 일 실시 예를 도시한다.
도 7c-7d는 본 발명의 일 실시 예에 따라서 사용되는 Configure Storage Class Memory 커맨드와 연관된 논리의 일 실시 예를 도시한다.
도 8a는 본 발명의 일 실시 예에 따라서 사용되는 통지 응답 블록(notification response block)의 일 예를 도시한다.
도 8b는 본 발명의 일 실시 예에 따라서 사용되는 Store Event Information(이벤트 정보를 저장하라)의 요청 블록의 일 실시 예를 도시한다.
도 8c는 본 발명의 일 실시 예에 따라서 사용되는 Store Event Information의 응답 블록의 일 실시 예를 도시한다.
도 9a는 본 발명의 일 실시 예에 따라서 사용되는 Deconfigure Storage Class Memory(스토리지 클래스 메모리를 구성해제하라)의 요청 블록의 일 실시 예를 도시한다.
도 9b는 본 발명의 일 실시 예에 따라서 사용되는 스토리지 클래스 메모리의 증분 요청 리스트 엔트리(increment request list entry)의 일 실시 예를 도시한다.
도 9c는 본 발명의 일 실시 예에 따라서 사용되는 Deconfigure Storage Class Memory의 응답 블록의 일 실시 예를 도시한다.
도 9d-9e는 본 발명의 일 실시 예에 따라서 사용되는 Deconfigure Storage Class Memory 커맨드와 연관된 논리의 일 실시 예를 도시한다.
도 10은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하는 컴퓨터 프로그램 제품의 일 실시 예를 도시한다.
도 11은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 호스트 컴퓨터 시스템의 일 실시 예를 도시한다.
도 12는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨터 시스템의 추가 예를 도시한다.
도 13은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨터 네트워크를 포함하는 컴퓨터 시스템의 또 다른 예를 도시한다.
도 14는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 컴퓨터 시스템의 여러 가지 엘리먼트들의 일 실시 예를 도시한다.
도 15a는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 도 14의 컴퓨터 시스템의 실행 유닛(execution unit)의 일 실시 예를 도시한다.
도 15b는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 도 14의 컴퓨터 시스템의 분기 유닛(branch unit)의 일 실시 예를 도시한다.
도 15c는 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 도 14의 컴퓨터 시스템의 로드/저장 유닛(load/store unit)의 일 실시 예를 도시한다.
도 16은 본 발명의 하나 또는 그 이상의 실시 예들을 구현하고 사용하기 위한 에뮬레이트된 호스트 컴퓨터 시스템의 일 실시 예를 도시한다.
하나 또는 그 이상의 실시 예들에 따라서, 스토리지 클래스 메모리에 대한 추상화가 제공되는데, 이는 프로그램 (예, 운영체제)으로부터 스토리지 클래스 메모리의 구현의 세부사항들을 감추고, 메인 스토리지와 스토리지 클래스 메모리 사이의 데이터의 이동을 컨트롤하는 것과 같은 특정한 액션들(actions)을 수행하기 위한 표준 채널 프로그래밍 인터페이스(a standard channel programming interface)를 제공한다.
한 예에서, “확장 비동기 데이터 이동기 (EADM) 퍼실리티(Extended Asynchronous Data Mover (EADM) Facility)”라고 불리는 퍼실리티가 제공되고, 이것은 프로그램들이 메인 스토리지와 스토리지 클래스 메모리 사이에 데이터의 블록들의 전송을 요청하게 하며, 또한 다른 오퍼레이션들도 요청하게 한다. 이 퍼실리티의 실시 예들은 아래에 상세하게 기술된다.
또한, EADM 해제 퍼실리티(EADM Release Facility)라고 불리는 선택적인 퍼실리티(optional facility)가 EADM 퍼실리티와 연관된다. 설치되면, EADM 해제 퍼실리티는 프로그램에게 하나의 수단을 제공하는데, 이 수단은 프로그램이 스토리지 클래스 메모리의 하나 또는 그 이상의 블록들에서 데이터의 보유(retention)를 더 이상 필요로 하지 않음을 명시한다. 해제 오퍼레이션(release operation)이 스토리지 클래스 메모리의 모든 블록들에 대해서 지원되는지 아니면 스토리지 클래스 메모리의 서브세트(subset)에 대해서만 지원되는지는 모델에 따라 다르다(model dependent).
일단 스토리지 클래스 메모리의 한 블록이 해제되면, 프로그램은 새로운 데이터를 그 블록으로 전송할 수 있는데, 만일 그렇지 않으면 상기 블록으로부터 메인 스토리지로 데이터의 전송을 요청하는 후속 요청들이 성공하지 못할 것이다.
본 발명의 하나 또는 그 이상의 실시 예들을 구현 및/또는 사용하기 위한 컴퓨팅 환경의 일 실시 예가 도 1a를 참조하여 기술된다. 컴퓨팅 환경(100)은, 예를 들어, 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션(International Business Machines Corporation)(IBM®)에 의해 공급되는 z/Architecture®에 기반을 둔다. z/Architecture®의 실시 예는 "z/Architecture Principles of Operation(z/Architecture 운영 원리)"라는 제목의 IBM® 간행물인 IBM 공개번호 SA22-7832-08(2010년 8월)에 기술되어 있으며, 이것은 그 전체가 여기에서 참조로 포함된다. 한 예에서, z/Architecture®에 기반한 컴퓨팅 환경은 인터내셔널 비지네스 머신즈 코포레이션에서 공급하는 zEnterprise 196(zl96) 시스템을 포함한다. IBM®과 z/Architecture®는 등록상표이며, zEnterprise 196과 zl96은 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션의 상표이다. 여기에서 사용되는 다른 명칭들은 인터내셔널 비지네스 머신즈 코포레이션 또는 다른 회사의 등록상표, 상표 또는 제품 명칭일 수 있다.
한 예로서, 컴퓨팅 환경(100)은 하나 또는 그 이상의 중앙 처리 장치들(102)를 포함하며, 이것은 하나 또는 그 이상의 버스들(106)을 통하여 메인 메모리(104)에 연결된다. 하나 또는 그 이상의 상기 중앙 처리 장치들은 인터내셔널 비지네스 머신즈 코포레이션에 의해 공급되는 z/OS® 운영체제와 같은 운영체제(108)을 실행할 수 있다. 다른 예들에서, 하나 또는 그 이상의 상기 중앙 처리 장치들은 다른 운영체제들을 실행할 수도 있고 또는 운영체제를 실행하지 않을 수도 있다. z/OS®은 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션의 등록상표이다.
중앙 처리 장치들(102)와 메인 메모리(104)는 하나 또는 그 이상의 연결들(122)(예를 들어, 버스 또는 기타 연결)을 통하여 I/O 허브(120)에 더 결합될 수 있다. 상기 I/O 허브는 하나 또는 그 이상의 I/O 어댑터들(130)에 연결을 제공하고, 이들은 하나 또는 그 이상의 고체 상태 디바이스들(140)에 더 결합된다. 이 어댑터들과 고체 상태 디바이스들은 스토리지 클래스 메모리의 구현체이다(예, 플래시 메모리). 상기 I/O 허브는 실시 예의 하나 또는 그 이상의 실시 예들의 구현을 용이하게 해주는 I/O 시스템(145)의 일부분이다.
추가 실시 예에서, 도 1b에 도시된 바와 같이, 컴퓨팅 환경(150)은 중앙 처리 컴플렉스(CPC, 152)를 포함하며, 이것은 인터내셔널 비지네스 머신즈 코포레이션에 의해 공급되는 z/Architecture®에 기반을 둔다. 중앙 처리 컴플렉스(152)는, 예를 들어, 하나 또는 그 이상의 파티션들(154), 하이퍼바이저(156), 하나 또는 그 이상의 중앙 프로세서들(158), 및 입력/출력 서브시스템(160)의 하나 또는 그 이상의 컴포넌트들을 포함한다. 이 예에서, 파티션들(154)는 논리적 파티션들(예를 들어, LPAR들)이고, 이들의 각각은 별개의 시스템으로 가상화된, 일 세트의 시스템의 하드웨어 리소스들을 포함한다.
각 논리적 파티션(154)는 별개의 시스템으로 기능하는 것이 가능하다. 즉, 각 논리적 파티션은 독립적으로 리셋되고, 처음에 운영체제와 함께 로드되거나 또는 원할 경우 다른 컨트롤 코드와 함께 로드되고, 그리고 다른 프로그램들로 동작할 수 있다. 논리적 파티션에서 실행중인 운영체제 또는 응용프로그램은 완전한 전체 시스템(full and complete system)에 액세스할 수 있을 것으로 보이지만, 실제는 단지 그 일부분만이 이용 가능하다. 펌웨어라 불리는, 하드웨어와 라이선스된 내부 코드 (LIC)의 조합은 한 논리적 파티션 내의 프로그램이 다른 논리적 파티션 내의 프로그램을 간섭하는 것을 금지한다. 이것은 여러 다른 논리적 파티션들이 단일 또는 다수 물리적 프로세서들상에서 타임 슬라이스(time-slice) 방식으로 동작할 수 있게 해준다. 여기에서 사용될 때, 펌웨어는, 예를 들어, 프로세서(또는 처리를 수행하는 엔티티)의 마이크로코드(microcode), 밀리코드(millicode) 및/또는 매크로코드(macrocode)를 포함한다. 펌웨어는, 예를 들어, 상위 레벨 기계 코드(higher level machine code)의 구현에 사용되는 하드웨어-레벨 명령들 및/또는 데이터 구조들을 포함한다. 한 실시 예에서, 펌웨어는, 예를 들어, 통상적으로 마이크로코드로 전달되는 소유권 있는 코드(proprietary code)를 포함하며, 이것은 하부 하드웨어(underlying hardware)에 특화된 신뢰 소프트웨어(trusted software) 또는 마이크로코드를 포함하며 시스템 하드웨어에 대한 운영체제의 액세스를 컨트롤한다.
이 예에서, 몇몇 논리적 파티션들은 상주 운영체제(OS)(170)을 가지며, 이것은 하나 또는 그 이상의 논리적 파티션들에 있어서 다를 수 있다. 한 실시 예에서, 적어도 하나의 논리적 파티션은 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션에 의해 공급되는 z/OS® 운영체제를 실행한다.
논리적 파티션들(154)는 하이퍼바이저(156)에 의해 관리되고, 이것은 중앙 프로세서들(158)상에서 실행되는 펌웨어에 의해 구현된다. 논리적 파티션들(154)와 하이퍼바이저(156)은 각각 중앙 프로세서들과 연관된 메인 메모리(159)의 각자의 부분들에 상주하는 하나 또는 그 이상의 프로그램들을 포함한다. 하이퍼바이저(156)의 한 예는 미국 뉴욕주 아몬크 소재 인터내셔널 비지네스 머신즈 코포레이션에 의해 공급되는, 프로세서 리소스/시스템 매니저(PR/SM™, Processor Resource/Systems Manager)이다.
중앙 프로세서들(158)은 논리 파티션들에 할당되는 물리적 프로세서 리소스들이다. 예를 들어, 논리적 파티션(154)는 하나 또는 그 이상의 논리적 프로세서들을 포함하고, 이들 논리적 프로세서들의 각각은 그 파티션에 할당되는 물리적 프로세서 리소스(158)의 전부(all) 또는 할당량(a share)을 나타낸다. 특정한 파티션(154)의 논리적 프로세서들은 하부 프로세서 리소스(underlying processor resource)가 그 파티션을 위해 유보되도록 그 파티션에 전용이 되거나, 또는 하부 프로세서 리소스가 잠재적으로 다른 파티션에도 이용 가능하도록 다른 파티션과 공유될 수 있다.
입력/출력 서브시스템(160)(이중 일 부분만 묘사됨)은 스토리지 클래스 메모리(180)에 연결성(connectivity)을 제공한다. 이 예에서, 주소 공간이 스토리지 클래스 메모리에 대해 제공되고, 스토리지 클래스 메모리는 메모리를 플랫(flat)으로 제공하며, 프로그램으로부터 물리적인 구현의 세부사항들을 감춘다. 한 예로서, 스토리지 클래스 메모리에 대해 시스템 전체적으로(system-wide) 하나의 주소 공간이 있으나, 구성(configuration) (예를 들어, LPAR 또는 또 다른 실시 예에서는, 가상화된 게스트)의 관점에서 보면 시스템의 각 구성에 대해서 스토리지 클래스 메모리 증분들이 차지하는 하나의 주소 공간이 있다. 스토리지 클래스 메모리 주소 공간은 메인 스토리지 주소 공간과는 별개이며 분리되어 있다.
z/Architecture®의 한 특정한 예에서, I/O 서브시스템은 채널 서브시스템을 포함하며, 이것은 I/O 주변 제어 유닛들(과 디바이스들)과 메인 메모리 사이에 정보의 흐름뿐 아니라 스토리지 클래스 메모리와 메인 메모리 사이에 정보의 흐름까지도 제어한다. 그러나, I/O 서브시스템은 채널 서브시스템과 다를 수도 있다.
채널 서브시스템의 경우에, 서브채널들은 EADM 오퍼레이션들을 수행하는데 사용된다. 이 서브채널들은 비동기 데이터 이동기(ADM)-타입 서브채널들이라 불리고 EADM 오퍼레이션들과 연관되며, 그리고 다른 I/O-타입 서브채널들과 같은 I/O 디바이스들은 아니다. ADM-타입 서브채널은 디바이스 번호도, 채널 경로 정보도 포함하지 않는다. 구성을 위해 제공된 ADM-타입 서브채널들의 번호는 모델에 따라 다르다. ADM-타입 서브채널들은 서브시스템 식별 워드(SID, subsystem identification word)에 의해 주소지정된다.
ADM-타입 서브채널들은, 채널 서브시스템에 대한 확장(an extension)인, 확장 비동기 데이터 이동기 퍼실리티(the Extended Asynchronous Data Mover Facility)에 의해 사용된다. 여기에 기술되는 바와 같이, EADM 퍼실리티는 프로그램이 메인 메모리와 스토리지 클래스 메모리 사이에 데이터 블록들의 전송을 요청할 수 있게 해주고, 또한 스토리지 클래스 메모리의 블록의 클리어 또는 스토리지 클래스 메모리의 블록의 해제 등과 같은 다른 오퍼레이션들도 수행할 수 있게 해준다. 한 실시 예에서, EADM 퍼실리티가 설치되면, 다음과 같은 일이 일어난다:
Figure pct00001
하나 또는 그 이상의 ADM-타입 서브채널들이 제공되고 이들은 EADM 오퍼레이션들을 위해 사용된다.
Figure pct00002
EADM 오퍼레이션들은 명시된(specified) EADM-오퍼레이션 블록(AOB)에 의해 지정된다(designated). AOB는 EADM-요청 블록(ARQB)와 EADM-응답 블록(ARSB)를 포함하며, EADM 이동-명세 블록들(MSB들)의 리스트를 지정한다. 이동 오퍼레이션을 위해, MSB들은 블록들의 사이즈, 블록들의 소스 위치(source location)와 목적지 위치(destination location), 데이터 이동 방향 등의 이동될 데이터의 블록들에 관한 정보를 포함한다.
AOB에 의해 명시될 수 있는 MSB들의 최대 수는 모델에 따라 다르다. MSB가 명시할 수 있는 이동 또는 오퍼레이션될 블록들의 최대 카운트 또한 모델에 따라 다르다.
Figure pct00003
프로그램이 ADM-타입 서브채널과 EADM 오퍼레이션 요청 블록(ORB)를 지정하는 Start Subchannel 명령을 발행함으로써 EADM 오퍼레이션들을 개시한다. 이어서, EADM ORB가 AOB를 지정한다. 상기 명령은 EADM ORB의 콘텐츠들을 지정된 서브채널에 전달한다.
Figure pct00004
Start Subchannel이 발행되어 EADM 오퍼레이션들을 개시하면, 채널 서브시스템은 명시된 오퍼레이션을 비동기적으로 수행한다.
Figure pct00005
프로그램에 의해 관측될 때, 스토리지 클래스 메모리는 모델 종속적인 최소 블록 사이즈에서 동시처리 블록(block concurrent)으로 보여진다. 이 모델 종속 값은 SCM 블록 동시처리 사이즈(SCM block concurrency size)라 불린다.
Figure pct00006
EADM 오퍼레이션들이 완료되면, 상기 오퍼레이션들이 개시된 ADM-타입 서브채널을 위한 프로그램에 대해서 I/O 인터럽션이 펜딩된다.
EADM ORB는 서브채널 키 (a subchannel key)의 명세(specification)와 사용될 AOB의 주소를 포함한다. AOB는, 예를 들어, 4K 바이트 범위에서(on a 4 K-byte boundary) 지정되고 사이즈는 최대 4K 바이트까지 될 수 있다. 4K 바이트 AOB에 들어맞는 것보다 더 많은 MSB가 필요하다면, AOB는 추가 스토리지 영역들로 확장되는 MSB 리스트를 명시할 수 있는데, 이는 데이터 전송을 위해 사용될 스토리지 영역을 지정하는 대신에 상기 리스트에서 다음(next) MSB의 주소를 지정하는 MSB들을 사용하여서 그렇게 한다.
MSB를 페치(fetch)하기 위해, 제1 EADM 오퍼레이션은 지정된 EADM ORB 내의 정보와 지정된 AOB 내의 ARQB를 이용하여, 채널 서브시스템에 의해 시작된다. MSB는 처리될 EADM 오퍼레이션을 명시하고 컨트롤하는 정보를 포함한다.
각 EADM 오퍼레이션은 하나의 MSB에 의해 표시된다. MSB는, 예를 들어, 메인 스토리지에서 스토리지 클래스 메모리로의 데이터 블록들의 전송, 스토리지 클래스에서 메인 스토리지로의 데이터 블록들의 전송, 스토리지 클래스 메모리의 블록들의 클리어, 및 스토리지 클래스 메모리의 블록들의 해제를 명시할 수 있다.
전송될 스토리지의 블록들이 메인 스토리지에서 인접해 있지 않다면, 새로운 MSB가 사용되거나 또는 그 MSB가 EADM 간접 데이터 주소 워드들(AIDAW들)의 리스트를 명시하여 인접하지 않은 블록들을 지정함으로써 간접 주소지정법을 사용할 수 있다.
MSB는 단지 한 방향으로만 데이터의 전송을 명시하므로, 새로운 MSB는 전송의 방향에 변경이 있을 때 사용된다.
EADM 오퍼레이션의 종결(conclusion)은 보통으로 채널 종료(channel end)와 디바이스 종료(device end)의 조합된 상태 조건들에 의해 표시된다. 이 상태 조합은 상태가 클리어된 후에 서브채널이 다른 시작 펑션(start function)을 위해 이용 가능하다는 것을 표시하는 1차 및 2차 상태의 조합을 표시한다.
EADM 오퍼레이션은 Clear Subchannel(서브채널을 클리어하라) 명령에 의해 조기에 종료될 수 있다. Clear Subchannel 명령의 실행은 서브채널에서 AOB의 실행을 종료시키고, 실행 중인 AOB의 표시들을 서브채널에서 클리어하며, 그리고 클리어 펑션을 비동기로 수행한다.
EADM ORB 및 관련 컨트롤 구조들에 관한 추가 세부사항들이 도 2a-2f를 참조하여 아래에 기술된다. 처음에, 도 2a를 참조하여, EADM ORB의 한 실시 예가 기술된다.
한 예로서, EADM ORB(200)은 다음을 포함한다:
인터럽션 파라미터(202): 이 필드는 후속 Modify Subchannel(서브채널을 변경하라) 또는 Start Subchannel(서브채널을 시작하라) 명령에 의해 대체될 때까지 서브채널에서 수정되지 않은 채 보존된다. 이 비트들은 I/O 인터럽션이 서브채널에 대하여 발생할 때 그리고 인터럽션 요청이, 예를 들어, Test Pending Interruption(펜딩 인터럽션을 테스트하라)의 실행에 의해 클리어 될 때 I/O 인터럽션 코드에 배치된다.
서브채널 키(204): 이 필드는 ARQB에 의해 명시된 EADM 오퍼레이션들에 대한 서브채널 키(subchannel key)를 형성하고 ARQB의 페치, MSB들의 페치, ARSB의 저장, 및 데이터 전송을 위해 메인 스토리지에 액세스하는데 적용된다. 이 필드의 값은 정의된 값이다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되거나(recognized) 또는 오퍼랜드 예외(operand exception)가 인지된다.
ORB 확장 컨트롤(X)(205): 이 필드는 ORB가 확장되는지를 명시한다. 이 필드는 ADM-타입 서브채널이 지정될 때 명시된 값이다; 그렇지 않으면, 오퍼랜드 예외 또는 프로그램 검사 조건이 인지된다.
EADM 오퍼레이션 블록(AOB) 주소(206): 이 필드는 EADM 오퍼레이션 블록(AOB)의 주소를 명시한다. 이 필드의 어떤 비트들이 정의된 값을 포함하지 않는다면, 오퍼랜드 예외 또는 프로그램 검사 조건이 인지된다.
이 필드가 페치(fetching)에 대하여 보호되고 있는 위치를 지정하거나 구성(configuration)의 밖에 있는 위치를 지정하면, 시작 펑션(start function)은 개시되지 않는다. 이 경우에, 서브채널은 1차, 2차 및 경보 상태(alert status)로 상태 펜딩(status pending)이 된다.
채널 서브시스템(CSS) 우선(208): 이 필드는, 시작 펜딩인 하나 또는 그 이상의 서브채널들에 대한 시작 펑션(start function)이 개시되어야 할 때, 지정된 서브채널에 할당되어 ADM-타입 서브채널들의 선택을 명령하는데 사용되는 채널 서브시스템 우선 번호(priority number)를 포함한다.
스토리지 클래스 메모리(SCM) 우선(210): 이 필드는 시작 펑션과 연관된 모든 EADM 오퍼레이션들에 적용되는 우선 레벨을 명시하는 스토리지 클래스 메모리(SCM) 우선 번호를 포함한다.
SCM 우선 필드의 콘텐츠들이 EADM 퍼실리티에 의해 인지되는지는 모델에 따라 다르다. 이 필드를 인지하지 않는 모델들에서, 필드 콘텐츠들은 무시되고 시작 펑션과 연관된 모든 EADM 오퍼레이션들은 묵시적인 우선 번호(priority number)를 할당받는다.
포맷(FMT)(212): 이 필드는 ORB의 레이아웃을 명시한다. 이 필드는 ADM-타입 서브채널이 지정될 때 명시된 값을 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지되거나 특정한 조건 코드가 세트된다.
EADM ORB의 EADM AOB 주소(206)에 의해 명시되는 EADM 오퍼레이션 블록(AOB)은 EADM 오퍼레이션들을 호출하는데 사용되는 정보를 포함한다. AOB는, 한 예에서, 4K 바이트 범위내에서 할당되고 길이는 가변적이다.
한 예에서, 도 2b에 도시된 바와 같이, EADM AOB(220)은 세 부분, 즉, EADM 요청 블록(ARQB)(222), EADM 응답 블록(ARSB)(224), 및 정의된 수(예, 124)의 MSB들을 최대로 포함하는 MSB 영역(226)을 포함한다. ARQB는, MSB 분기(branch)를 사용할 때(즉, MSB 내 다음 MSB 플래그로의 분기를 사용하여서) 정의된 MSB들보다 더 많은 사용을 명시할 수 있다.
EADM 요청 블록(ARQB)(222)의 한 실시 예가 도 2c를 참조하여 기술된다. 한 예에서, ARQB(222)는 다음을 포함한다:
포맷(FMT)(230): 이 필드는 ARQB의 레이아웃을 명시한다. 이 필드의 값은 정의된 값이다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되거나 커맨드 코드 에러가 ARSB의 예외 한정자 코드 필드(exception qualifier code field)에 표시된다.
커맨드 코드(232): 이 필드는 EADM 이동 블록들의 커맨드를 명시해야 한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 커맨드 코드 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
MSB 카운트(234): 이 필드는 EADM 요청을 구성하는 MSB들의 카운트를 명시한다. 명시될 수 있는 MSB들의 최대 카운트는 모델에 따라 다르다. 이 필드의 값은 0보다는 크고 모델 종속적인 최대 MSB 카운트 값보다는 작거나 같아야 한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 MSB 카운트 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
EADM 요청 블록뿐 아니라, EADM ORB는 EADM 응답 블록(ARSB)도 명시한다. EADM 응답 블록은, 이 실시 예에서, 예외 조건이 인지될 때에만 의미가 있다. 구체적으로, ARSB는 경보 상태가 EADM 서브채널 상태 워드(SCSW)에 존재할 때와, EADM 확장 상태 워드(ESW)가 의미 있을 때와, EADM 응답 블록 저장(R) 비트가 EADM 확장 보고 워드(ERW)에서 1일 때에만, 의미가 있으며, 이들의 각각은 아래에서 기술된다. ARSB가 의미가 있지 않을 때, AOB 내의 ARSB의 콘텐츠들은 예측할 수 없다.
연관된 서브채널이 서브채널 활성인(subchannel active) 동안 프로그램이 ARSB에 저장되면, 예측할 수 없는 결과가 발생할 수 있다.
ARSB가 저장될 때, 전송된 데이터의 양은, 있더라도, 예측할 수 없다.
EADM 응답 블록의 한 실시 예가 도 2d를 참조하여 기술된다. 한 예에서, ARSB(224)는 다음을 포함한다:
포맷(FMT)(240): 이 필드는 ARSB의 레이아웃을 명시한다. ARSB가 저장될 때, 이 필드의 값은 정의된 값으로 저장된다.
예외 플래그들(EF)(242): ARSB가 저장될 때, 이 필드는 세트될 때 ARSB가 저장되는 예외 이유(exception reason)를 명시한다. 예시적인 예외 이유들은 다음을 포함한다:
프로그램 검사(program check): 프로그래밍 에러가 검출된다.
보호 검사(protection check): 스토리지 액세스가 보호 메커니즘에 의해 금지된다. 보호는 스토리지 클래스 메모리로 전송될 ARQB, MSB, AIDAW들 및 데이터의 페치에 적용되고, ARSB 내의 정보와 스토리지 클래스 메모리로부터 전송된 데이터의 저장에도 적용된다.
채널 데이터 검사(channel data check): 메인 스토리지에 포함되어 있고 EADM 오퍼레이션의 수행에 현재 사용되는 데이터와 관련하여 교정되지 않은(uncorrected) 스토리지 에러가 검출된다. 검출되면, 그 데이터는 프리페치(prefetch)될 때 사용되지 않을지라도, 조건은 표시될 수 있다. 채널 데이터 검사는, 데이터가 채널 서브시스템에 의해 참조될 때 그 데이터 또는 연관된 키(key)가 메인 스토리지에 무효 검사 블록 코드(CBC)를 가지고 있을 때, 표시된다.
채널 컨트롤 검사(channel control check): 채널 컨트롤 검사는 채널 서브시스템 컨트롤에 영향을 주는 기계 오동작에 의해 발생된다. 조건은 ARQB, ARSB, MSB, AIDAW 또는 각각의 연관된 키상에 무효 CBC를 포함한다. ARQB, MSB, 또는 AIDAW가 사용되지 않을 지라도, 조건은 무효의 CBC가 프리페치된 ARQB, MSB, AIDAW 또는 각각의 연관된 키상에서 검출될 때 표시된다.
확장 비동기 데이터 이동 퍼실리티 검사: 스토리지 클래스 메모리에 포함되어 있고 EADM 오퍼레이션의 수행에 현재 사용되고 있는 데이터와 관련하여 교정되지 않은 에러가 검출된다.
예외 컨트롤 블록 식별자들(ECBI)(244): ARSB가 저장될 때, 이 필드는 다수 비트 마스크(multiple bit mask)이며, 이 마스크의 비트들은, 세트될 때, EF 필드에 의해 지정된 인지된 예외와 연관된 다음의 단일 또는 조합의 컴포넌트들을 명시한다:
Figure pct00007
컨트롤 블록 또는 블록들.
Figure pct00008
메인 스토리지 데이터 영역.
Figure pct00009
스토리지 클래스 메모리.
세트될 수 있는 비트들은, 예를 들어, EADM 이동 명세 블록, EADM 간접 데이터 주소, 메인 스토리지 내의 데이터, 및/또는 스토리지 클래스 메모리 내의 데이터를 표시한다.
ECBI 필드 내 비트들은 단일 예외 조건과 연관된 컴포넌트들을 기술한다. 상기 예외 조건에 대하여 컴포넌트들이 식별될 수 없다면, 이 필드는 예를 들어 0들을 포함한다.
필드 유효성 플래그(FVF)(246): ARSB가 저장될 때, 이 필드는 다수 비트 마스크를 포함하며, 이 마스크의 비트들은 ARSB 내의 특정 필드들의 유효성을 표시한다. 유효성 비트가 세트될 때, 그 대응 필드는 저장되어 복구 목적으로 이용 가능하다. 세트될 수 있는 비트들은 예를 들어 실패 MSB 주소 필드(failing MSB address field), 실패 AIDAW 필드, 실패 메인 스토리지 주소 필드, 및/또는 실패 스토리지 클래스 메모리 주소 필드를 표시한다.
예외 한정자 코드(EQC, Exception Qualifier Code)(248): ARSB가 저장될 때, 이 필드는 예외 플래그들 필드에 의해 명시되는 예외를 더 설명하는 코드 값을 포함한다. 코드 값들은 예로서 다음과 같이 표시될 수 있다:
추가 설명은 제공되지 않는다. 이 경우에, 예외 컨트롤 블록 식별자들(ECBI) 필드와, 필드 유효성 플래그들 필드에 의해 유효성 검증된 필드들은 예외가 인지되는 컨트롤 블록들을 식별할 수 있다.
포맷 에러: 포맷 필드에 의해 명시된 포맷이 유보된다(reserved). 이 경우에, 예외 컨트롤 블록 식별자들 (ECBI) 필드와, 필드 유효성 플래그들 필드(the field validity flags field)에 의해 유효성이 검증된 필드들은 예외가 인지되는 컨트롤 블록들을 식별할 수 있다.
커맨드 코드 에러: ARQB의 커맨드 코드 필드에 명시된 값이 인지되지 않는다.
MSB 카운트 에러: ARQB의 MSB 카운트 필드에 명시된 값은 0이거나 명시될 수 있는 MSB들의 모델 종속적인 최대치를 초과한다.
플래그들 에러: 플래그들 필드에 의해 명시된 플래그 비트들이 유보된다. 이 경우에, 예외 컨트롤 블록 식별자들(ECBI) 필드와, 필드 유효성 플래그들 필드에 의해 유효성 검증된 필드들은 예외가 인지되는 컨트롤 블록들을 식별할 수 있다.
오퍼레이션 코드 에러: 유보된 오퍼레이션 코드 값이 명시된다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다.
블록 사이즈 에러: 유보된 블록 사이즈 값이 명시된다. 필드 유효성 플래그들이 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다.
블록 카운트 에러: MSB의 블록 카운트 필드에 명시된 값은 0이거나 MSB에 의해 명시될 수 있는 블록들의 모델 종속적인 최대 카운트를 초과한다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다.
메인 스토리지 주소 명세 에러: 메인 스토리지 주소가 부정확한 범위로 명시된다. 이러한 주소는 MSB나 AIDAW에 의해 지정되었을 수 있다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 메인 스토리지 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 메인 스토리지 주소를 포함한다.
스토리지 클래스 메모리 주소 명세 에러: 스토리지 클래스 메모리 주소가 부정확한 범위로 명시된다. 이러한 주소는 MSB에 의해 지정된다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 스토리지 클래스 메모리 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 스토리지 클래스 메모리 주소를 포함한다.
메인 스토리지 주소 예외: EADM 퍼실리티가 구성(configuration)에서 이용 가능하지 않은 주소를 사용하려고 시도하였거나 또는 최대 스토리지 주소를 덮었다(wrapped). 이러한 주소는 MSB에 의해 지정되었거나 데이터 전송 동안에 메인 스토리지 주소들을 증분하는 것으로부터 초래됐을 수도 있다. 필드 유효성 플래그들 필드(the field validity flags field)가 실패(failing) MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 MSB의 주소를 포함하며, 이 주소에 대해서는 예외가 인지된다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 AIDAW의 주소를 포함하며, 이 주소에 대해서는 예외가 인지된다. 필드 유효성 플래그들 필드가 실패 메인 스토리지 주소 필드는 유효하다고 표시하면, 상기 필드는 메인 스토리지 주소를 포함하며, 이 주소에 대해서는 예외가 인지된다.
스토리지 클래스 메모리 주소 예외: EADM 퍼실리티가 구성에서 이용 가능하지 않은 스토리지 클래스 메모리 주소를 사용하려고 시도하였다. 이러한 주소는 MSB에 의해 지정되었거나 데이터 전송 동안에 스토리지 클래스 메모리 주소들을 증분하는 것으로부터 초래됐을 수도 있다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드(the failing MSB address field)는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드(the failing AIDAW address field)는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 스토리지 클래스 메모리 주소 필드(the failing storage class memory address field)는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 스토리지 클래스 메모리 주소를 포함한다.
메인 스토리지 에러: 교정되지 않은 메인 스토리지 에러(an uncorrected main storage error)가 검출된다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 메인 스토리지 주소 필드(the failing main storage address field)는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 메인 스토리지 주소를 포함한다.
MSB 리스트 에러: AOB는 4K 바이트 범위를 크로스하기 위해(cross) 브랜치-투-넥스트(branch-to-next) MSB(BNM)을 명시하지 않고 4K 바이트 범위를 크로스하는 MSB 리스트를 명시하거나 또는 상기 MSB는 명시된 MSB 리스트에서 마지막 MSB이고 BNM은 상기 MSB에 의해 명시된다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다.
MSB 분기 에러: AOB가 MSB 리스트를 명시하고, 이 리스트에서 MSB(분기-소스 MSB)가 브랜치-투-넥스트 MSB(BNM)을 명시하고 분기 타겟(branch target)인 상기 MSB가 또한 BNM을 명시한다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 분기 소스 MSB의 주소를 포함한다.
AIDAW 리스트 에러: MSB는 4K 바이트 범위를 크로스하기 위해 브랜치-투-넥스트 AIDAW(BNA)를 명시함이 없이 4K 바이트 범위를 크로스하는 EADM 간접 데이터 주소 워드(AIDAW) 리스트를 명시한다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다.
AIDAW 분기 에러: MSB는 EADM 간접 데이터 주소 워드 (AIDAW) 리스트를 명시하고, 이 리스트에서 AIDAW (분기 소스 AIDAW)가 브랜치-투-소스(a branch-to-source) AIDAW (BNA)를 명시하고 분기 타겟인 상기 AIDAW가 또한 BNA를 명시한다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 분기-소스 AIDAW의 주소를 포함한다.
스토리지 클래스 메모리 일시(temporary) 에러: 복구 가능한 스토리지 클래스 메모리 에러가 검출된다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 스토리지 클래스 메모리 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 스토리지 클래스 메모리 주소를 포함한다.
해제 오퍼레이션 미지원 에러(release operation not supported error): 해제 오퍼레이션이 지원되지 않는 스토리지 클래스 메모리에 대해 해제 오퍼레이션이 명시되었다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 스토리지 클래스 메모리 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 스토리지 클래스 메모리 주소를 포함한다.
해제된 데이터 리드 에러(Released data read error): 마지막 성공적인 오퍼레이션이 해제 오퍼레이션이었던 스토리지 클래스 메모리에 대하여 리드 오퍼레이션이 명시되었다. 필드 유효성 플래그들 필드가 실패 MSB 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 MSB의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 AIDAW 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 AIDAW의 주소를 포함한다. 필드 유효성 플래그들 필드가 실패 스토리지 클래스 메모리 주소 필드는 유효하다고 표시하면, 상기 필드는 예외가 인지되는 스토리지 클래스 메모리 주소를 포함한다.
실패 MSB 주소(250): 필드 유효성 플래그들 필드의 명시된 비트가 세트될 때, 이 필드는 예외가 인지되는 MSB의 주소를 표시한다.
실패 AIDAW 주소(252): 필드 유효성 플래그들 필드의 명시된 비트가 세트될 때, 이 필드는 예외가 인지되는 AIDAW의 주소를 표시한다.
실패 메인 스토리지 주소(254): 필드 유효성 플래그들 필드의 명시된 비트가 세트될 때, 이 필드는 예외가 인지되는 메인 스토리지의 블록의 주소를 표시한다.
실패 스토리지 클래스 메모리 주소(256): 필드 유효성 플래그들 필드의 명시된 비트가 세트될 때, 이 필드는 예외가 인지되는 스토리지 클래스 메모리의 블록의 (예를 들어, 64비트) SCM 주소를 포함한다.
EADM 요청 블록과 EADM 응답 블록에 더하여, EADM 오퍼레이션 블록(AOB)도 하나 또는 그 이상의 EADM 이동 명세 블록들(MSB들)을 명시한다. AOB는, 예를 들어, 최대 124 개의 MSB를 포함할 수 있다. 그러나, 프로그램은 ARQB의 카운트 필드에서 더 큰 수의 MSB들을 지정함으로써 그리고 브랜치-투-넥스트-MSB(BNM) 플래그를 이용하여 MSB 리스트의 연속(a continuation of MSB list)으로 분기함으로써 124개의 MSB 이상을 명시할 수 있다. MSB 리스트의 다수의 연속들이 있을 수 있지만, 한 실시 예에서, 이 연속들 중 어느 것도 4K 바이트 범위를 크로스하기 위해 BNM을 이용하지 않고서는 4K 바이트 범위를 크로스할 수 없다. MSB 리스트의 연속들은 인접할 필요는 없다. MSB 리스트의 각 연속은, 4K 바이트 범위로 시작하도록 지정되었다면, 최대 128 개의 MSB를 포함할 수 있다. MSB 리스트 내 MSB들의 총수(total number)는 ARQB 내 MSB 카운트 필드에 의해 명시된다.
EADM 이동 명세 블록은, 예를 들어, 메인 스토리지와 스토리지 클래스 메모리 사이에 이동할 스토리지의 블록들 또는 스토리지 블록상에서 수행될 오퍼레이션에 관해 기술한다. MSB(226)의 한 실시 예가 도 2e를 참조하여 기술되고, 이 실시 예는, 예를 들어, 다음의 필드들을 포함한다:
포맷(FMT)(260): 이 필드는 MSB의 레이아웃을 명시한다. 이 필드의 값은 정의된 값이다; 그렇지 않으면, MSB 포맷 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
오퍼레이션 코드(OC)(262): 이 필드는 수행될 오퍼레이션을 명시한다. 한 예에서, 아래에 기술된, 플래그들 필드의 명시된 비트가 정의된 값일 때, 이 필드는 수행될 오퍼레이션을 명시한다. 예시 오퍼레이션들에는 다음의 코드들이 포함된다:
스토리지 클래스 메모리를 클리어하라(Clear storage class memory): 이 코드가 지정될 때, 스토리지 클래스 메모리 주소, 블록 사이즈, 및 블록 카운트 필드에 의해 명시된 스토리지 클래스 메모리가 클리어된다(예를 들어, 0들로 세트된다). 메인 스토리지 주소 필드는 이 오퍼레이션에 대해서 의미를 갖지 않는다.
리드하라(Read): 이 코드가 지정될 때, 데이터는 스토리지 클래스 메모리에서 메인 메모리로 전송되도록 명시된다. 블록 카운트, 블록 사이즈, 메인 스토리지 주소 및 스토리지 클래스 메모리 주소 필드들은 이 오퍼레이션에 대해서 의미를 갖는다.
라이트하라(Write): 이 코드가 지정될 때, 데이터는 메인 스토리지에서 스토리지 클래스 메모리로 전송되도록 명시된다. 블록 카운트, 블록 사이즈, 메인 스토리지 주소 및 스토리지 클래스 메모리 주소 필드들은 이 오퍼레이션에 대해서 의미를 갖는다.
해제하라(release): 이 코드가 지정되고 EADM 해제 퍼실리티가 설치될 때, 스토리지 클래스 메모리 주소, 블록 사이즈, 및 블록 카운트 필드들에 의해 명시된 스토리지 클래스 메모리가 해제된다. 메인 스토리지 주소 필드는 이 오퍼레이션에 대해서 의미를 갖지 않는다. EADM 해제 퍼실리티가 설치되어 있지 않을 때, 이 코드는 유보된다.
유보된 값이 명시되면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 오퍼레이션 코드 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
플래그 필드의 명시된 플래그 비트가 정의된 값이 아닐 때, 이 필드는 유보되고 검사되지 않는다.
플래그들(264): 이 필드는 세트될 수 있는 하나 또는 그 이상의 플래그들을 식별한다. 유보된 플래그 비트들은 정의된 값으로 세트된다; 그렇지 않으면 플래그들 에러가 ARSB의 예외 한정자 코드 필드에 표시된다. 예시 플래그들은 다음을 포함한다:
Figure pct00010
브랜치 투 넥스트 MSB(BNM): 세트될 때, 이 플래그는 MSB가 EADM 오퍼레이션을 명시하지 않고 데이터를 전송하기 위해 사용되지 않는다고 표시한다. 그 대신에, 메인 스토리지 주소 필드가 EADM 오퍼레이션을 명시하기 위해 사용될 다음 MSB의 주소를 명시한다.
BNM 플래그가 (예를 들어, 0으로) 세트되고 메인 스토리지 주소 필드가 MSB를 명시할 때 -그 MSB에서 BNM 플래그 또한 세트됨-, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고, 분기 소스 MSB의 주소가 ARSB의 실패 MSB 주소 필드에 저장되고, 그리고 MSB 분기 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
만일 MSB가 4K 바이트 범위에서 끝나고, AOB는 추가 MSB들을 명시하며, 그리고 BNM 플래그가 세트되지 않는다면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고, MSB의 주소는 ARSB의 실패 MSB 주소 필드에 저장되며, 그리고 MSB 리스트 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
만일 MSB가 명시된 MSB 리스트에서 마지막 MSB이고 BNM 플래그가 세트되면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고, MSB의 주소는 ARSB의 실패 MSB 주소 필드에 저장되며, 그리고 MSB 리스트 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
BNM 플래그가 세트될 때, 나머지 플래그들, 오퍼레이션 코드 필드, 블록 사이즈 필드, 블록 세트 카운트 필드, 및 스토리지 클래스 메모리 주소는 의미를 갖지 않는다.
Figure pct00011
간접 주소지정(Indirect addressing): 세트될 때, 이 플래그는 메인 스토리지 주소 필드가 데이터 전송을 위해 사용될 메인 스토리지 위치 또는 위치들을 각각 지정하는 EADM 간접 데이터 주소 워드(AIDAW)의 주소 또는 AIDAW들의 리스트의 제1 AIDAW의 주소를 지정한다고 표시한다. 세트되지 않을 때, 이 플래그는 메인 스토리지 주소 필드가 데이터 전송을 위해 사용될 메인 스토리지 위치의 주소를 지정한다고 표시한다.
블록 사이즈(BS)(266): 이 필드는 메인 스토리지와 스토리지 클래스 메모리 둘 모두에 대해 전송될 데이터 블록들의 사이즈와 범위 또는 오퍼레이션될(예를 들어, 클리어되거나 해제될) 스토리지 클래스 메모리의 블록의 사이즈와 범위를 명시한다. 다음의 예들이 포함된다:
4K: 코드 값이 하나의 정의된 값일 때, 전송될 데이터 블록들은 4K 바이트 범위에 있고 사이즈가 4K 바이트이다.
1M: 코드 값이 또 다른 정의된 값일 때, 전송될 데이터 블록들은 1M 바이트 범위에 있고 사이즈가 1M 바이트이다.
만일 유보된 값이 명시되면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 블록 사이즈 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
BNM 플래그가 세트될 때, 이 필드는 무시된다.
블록 카운트(268): 이 필드는 전송되거나 오퍼레이션될(예를 들어, 클리어되거나 해제될) 데이터의 블록들의 카운트를 포함한다. 블록 사이즈 필드에 기초하여, 이것은 4K 바이트 또는 1M 바이트 블록들 중 하나의 카운트이다.
이 필드의 값은 0보다는 크고 MSB에 의해 명시될 수 있는 모델 종속적인 최대 블록 카운트보다는 작거나 같아야 한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 블록 카운트 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
BNM 플래그가 세트될 때, 이 필드는 유보되고 검사되지 않는다.
메인 스토리지 주소(270): 오퍼레이션 코드 필드가 의미를 갖고(예를 들어, BNM 플래그가 세트되지 않음) 리드(read) 또는 라이트(write) 오퍼레이션을 명시하고, 그리고 플래그들 필드 내 간접 주소지정 표시자가 세트되지 않을 때, 이 필드는 데이터 전송을 위해 사용될 메인 스토리지 주소를 포함하며 다음 사항이 적용된다:
Figure pct00012
블록 사이즈 필드가 4K 바이트 블록들을 명시할 때, 이 필드의 명시된 비트들은 정의된 값(예를 들어, 0)을 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 메인 스토리지 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
Figure pct00013
블록 사이즈 필드가 1M 바이트 블록들을 명시할 때, 이 필드의 명시된 비트들은 정의된 값(예를 들어, 0들)을 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 메인 스토리지 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
오퍼레이션 코드 필드가 의미를 갖고 리드 또는 라이트 오퍼레이션 중 하나를 명시하고 플래그들 필드 내 간접 주소지정 표시자가 세트될 때, 이 필드는 데이터 전송을 위해 사용될 AIDAW 또는 AIDAW들의 리스트의 제1번째의 메인 스토리지 주소를 포함한다. 이 경우에, 이 필드의 특정 비트들은 정의된 값을 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 메인 스토리지 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
BNM 플래그가 세트될 때, 오퍼레이션 코드는 의미를 갖지 않고 MSB는 EADM 오퍼레이션을 명시하지 않는다. 그 대신에, 이 필드는 EADM 오퍼레이션을 명시하는 다음 MSB의 메인 스토리지 주소를 포함한다. 이 경우에, 이 필드의 명시된 비트들은 정의된 값을 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 메인 스토리지 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
스토리지 클래스 메모리 주소(272): 오퍼레이션 코드 필드가 의미를 가질 때, 이 필드는 데이터 전송을 위해 사용될 또는 오퍼레이션(예를 들어, 클리어, 해제)될 (예를 들어, 64 비트) 스토리지 클래스 메모리 주소를 포함하고 다음 사항이 적용된다:
Figure pct00014
블록 사이즈 필드가 4K 바이트 블록들을 명시할 때, 이 필드의 명시된 비트들은 정의된 값(예를 들어, 0들)을 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 스토리지 클래스 메모리 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
Figure pct00015
블록 사이즈 필드가 1M 바이트 블록들을 명시할 때, 이 필드의 명시된 비트들은 정의된 값 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 스토리지 클래스 메모리 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
BNM 플래그가 세트될 때, 이 필드는 유보되고 검사되지 않는다.
위에서 표시한 바와 같이, EADM 간접 데이터 주소 워드가 명시될 수 있다. EADM 간접 데이터 주소 워드(AIDAW)는 프로그램이 스토리지 클래스 메모리와 메인 스토리지의 비인접(non-contiguous) 블록들 사이에 데이터의 블록들의 전송을 명시하는 것을 허용한다. AIDAW 또는 AIDAW들의 리스트는 MSB 내 간접 주소지정 플래그가 세트될 때 MSB에 의해 지정된다.
단일 AIDAW에 의해 전송되는 데이터의 양은 MSB 내 블록 사이즈 필드에 의해 명시된다. AIDAW 리스트 내 AIDAW들의 수는 MSB 내 블록 카운트 필드에 의해 명시된 수와 브랜치-투-넥스트-AIDAW를 명시하는 AIDAW들의 수의 합이다. 데이터 전송들은 AIDAW 리스트에서 명시된 것과 다른 순서로 처리될 수도 있다. 또한, AIDAW 리스트 내 다수의 AIDAW들에 의해 명시된 데이터 전송들은 동시에 처리될 수도 있다.
AIDAW는, 예를 들어, 쿼드워드(quadword) 범위로 할당된다. AIDAW들의 리스트는 임의의 길이일 수 있으나, 한 예에서는, 브랜치 투 넥스트 AIDAW(BNA)가 4K 바이트 범위를 크로스하도록 명시되지 않는 한 4K 바이트 범위를 크로스하지 않는다. 분기의 타겟인 AIDAW가 BNA를 명시하는 AIDAW와 인접해야 하는 것이 필수요건은 아니다. 그러나, 프로그램은 AIDAW 리스트를 가능한 한 적은 4K 바이트 블록들에서 생성해야 한다; 그렇지 않으면, 성능 저하가 발생할 수 있다.
도 2f를 참조하면, 한 예에서, EADM 간접 데이터 주소 워드(AIDAW)(280)은 다음을 포함한다:
플래그들(282): 플래그의 한 예는 다음과 같다:
브랜치 투 넥스트 AIDAW(BNA): 세트될 때, 이 플래그는 메인 스토리지 주소 필드가 데이터 전송에 사용될 메인 스토리지 주소를 명시하지 않음을 표시한다. 그 대신에, 메인 스토리지 주소 필드는 데이터 전송에 사용될 다음(next) AIDAW의 주소를 명시한다.
BNA 플래그가 세트되고 그리고 메인 스토리지 주소 필드가 BNA 플래그가 또한 세트되는 AIDAW를 명시할 때, MSB의 주소는 ARSB의 실패 MSB 주소 필드에 저장되고, 분기 소스 AIDAW의 주소는 ARSB의 실패 메인 스토리지 주소 필드에 저장되며, 그리고 AIDAW 분기 에러가 ARSB 내 예외 한정자 코드 필드에 표시된다.
만일 AIDAW가 4K 바이트 범위에서 끝나고, MSB가 추가 AIDAW들을 명시하고, 그리고 BNA 플래그가 세트되지 않으면, MSB의 주소가 ARSB의 실패 MSB 주소 필드에 저장되고, AIDAW의 주소가 ARSB의 실패 메인 스토리지 주소에 저장되며, 그리고 AIDAW 리스트 에러가 ARSB 내 예외 한정자 코드 필드에 표시된다.
메인 스토리지 주소(284): BNA 필드가 세트되지 않을 때, 이 필드는 데이터 전송을 위해 사용될 메인 스토리지 내 주소를 포함하고 다음 사항이 적용된다:
Figure pct00016
MSB 내 블록 사이즈 필드가 4K 바이트 블록들을 명시할 때, 이 필드의 명시된 비트들은 정의된 값(예를 들어, 0)을 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 메인 스토리지 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
Figure pct00017
MSB 내 블록 사이즈 필드가 1M 바이트 블록들을 명시할 때, 이 필드의 명시된 비트들은 정의된 값(예를 들어, 0들)을 포함한다; 그렇지 않으면, 프로그램 검사 조건이 채널 서브시스템에 의해 인지되고 메인 스토리지 명세 에러가 ARSB의 예외 한정자 코드 필드에 표시된다.
Figure pct00018
BNA 플래그가 세트될 때, 이 필드는 데이터 전송을 위해 사용될 다음 AIDAW의 메인 스토리지 주소를 포함한다.
위에서 기술된 바와 같이, EADM 오퍼레이션들은 Start Subchannel 명령에 의해 명시된다. 즉, 프로그램은 ADM-타입 서브채널과 EADM ORB를 지정하는 Start Subchannel 명령을 발행함으로써 EADM 오퍼레이션들을 개시한다. 상기 명령의 실행은 EADM ORB의 콘텐츠들을 지정된 서브채널에 전달한다. EADM ORB는 (보호에 사용되는) 서브채널 키의 명세와 사용될 AOB의 주소를 포함한다.
한 예에서, 도 3a에 도시된 바와 같이, Start Subchannel(서브채널을 시작하라) 명령(300)은 Start Subchannel 펑션을 명시하는 오퍼레이션 코드(302); 시작될 ADM-타입 서브채널을 지정하는 서브시스템 식별자를 포함하는, 예를 들어, 범용 레지스터 1에 위치한 암시된(implied) 오퍼랜드인 제1 오퍼랜드(304); 및 EADM ORB의 논리적 주소인 제2 오퍼랜드(306)을 포함한다. EADM ORB는 시작 펑션(start function)을 컨트롤하는데 사용되는 파라미터들을 명시한다. EADM ORB의 콘텐츠들은, 조건 코드를 세트하기 전에, Start Subchannel의 실행 동안에 지정된 서브채널에 배치된다. 만일 Start Subchannel의 실행이 성공을 표시하는 코드 이외의 조건 코드의 세트로 결과가 나오면, EADM ORB의 콘텐츠들은 지정된 서브채널에 배치되지 않는다.
ADM-타입 서브채널에 대한 Start Subchannel의 실행에 후속하여, 채널 서브시스템은 EADM 퍼실리티로 EADM 오퍼레이션들을 개시하기 위해 시작 펑션을 비동기적으로 수행한다. 시작 펑션은, 예를 들어, 다음을 포함한다:
1. AOB로부터 ARQB를 페치함.
2. ARQB와 그 ARQB가 지정하는 MSB들에 의해 명시되는 바와 같이 EADM 오퍼레이션들을 실행함.
3. AOB 내 ARSB에 완료 정보를 조건부로 저장함.
4. ADM-타입 서브채널이 상태 펜딩(status pending)이 되게 하여, 시작 펑션의 완료를 표시함.
한 실시 예에서, 도 3b를 참조하면, Start Subchannel 명령이 실행되고 SID가 ADM-타입 서브채널을 지정하며 제2 오퍼랜드가 EADM ORB를 지정할 때, EADM 오퍼레이션이 명시된다(단계 320). EADM ORB 내 파라미터들이 지정된 서브채널로 전달되고(단계 322), 채널 서브시스템은 EADM 퍼실리티로 시작 펑션을 수행하라는 요청을 받는다(단계 324). 채널 서브시스템은 Start Subchannel 명령의 실행 동안에 전달된 정보를 포함하여 서브채널의 정보를 이용함으로써 시작 펑션을 비동기적으로 수행하여 EADM 오퍼레이션들을 개시한다(단계 326).
EADM 오퍼레이션(예를 들어, 제1 오퍼레이션)의 실행은 EADM ORB로부터의 정보를 이용하여 AOB를 획득하는 것(단계 328)을 포함하고, AOB 내 정보를 이용하여 EADM 요청 블록(ARQB)을 획득하고 하나 또는 그 이상의 EADM 이동 명세 블록들 (MSB들)의 지정을 획득한다(단계 330). 그 다음, 하나 또는 그 이상의 지정된 MSB들이 메인 스토리지로부터 페치되고(단계 332), MSB들에 명시된 정보는 요청된 EADM 오퍼레이션을 컨트롤하는데 사용된다. 채널 서브시스템이 데이터 전송의 개시를 시도하거나 클리어 또는 해제 오퍼레이션을 시도할 때 제1 오퍼레이션이 시작되는 것으로 간주된다.
채널 서브시스템은 MSB(들)에서 요청된 오퍼레이션(들)을 수행한다(단계 334). 이 처리는 시작 커맨드의 실행과 비동기적이다.
Start Subchannel에 의해 개시된 EADM 오퍼레이션들이 종료될 때(단계 336), 채널 서브시스템은 상태 조건들(status conditions)을 생성한다(단계 338). 이 조건들의 생성은 I/O 인터럽션에 의해서 프로그램의 어텐션(the attention of the program)을 불러온다(단계339). 프로그램은 또한 Test Pending Interruption(펜딩 인터럽션을 테스트하라) 명령의 실행에 의해서 이 조건들을 질의할 수 있다.
생성된 상태 조건들은 EADM 서브채널 상태 워드(SCSW)의 형태로 프로그램에 제공된다. EADM SCSW는 Test Subchannel(서브채널을 테스트하라) 명령의 실행에 의해 EADM 인터럽션 응답 블록(IRB)의 일부로서 저장된다.
EADM 오퍼레이션 블록(AOB)에서 명시된 EADM 오퍼레이션들이 종료될 때, 채널 서브시스템은 1차 및 2차 인터럽션 상태를 생성한다. EADM 오퍼레이션들은 Clear Subchannel(서브채널을 클리어하라) 또는 시작 펑션을 수행하는 중에 인지된 비정상 조건(abnormal condition)에 의해 종료될 수 있다.
이동 오퍼레이션(a move operation)을 위해, 채널 서브시스템에 의한 MSB의 처리는 메인 스토리지 내부 또는 외부로의 정보의 유닛(a unit of information)의 흐름을 컨트롤한다. MSB 처리 동안에 데이터 이동의 방향을 변경하려면, 새로운 MSB가 필요하다. ARQB는 요청을 포함하는 MSB들의 카운트를 지정한다.
각 EADM 오퍼레이션은 하나의 MSB에 의해 표시된다. MSB는 다음 사항 중 어느 하나를 명시한다:
Figure pct00019
메인 스토리지로부터 스토리지 클래스 메모리로 데이터 블록들의 전송.
Figure pct00020
스토리지 클래스 메모리로부터 메인 스토리지로 데이터 블록들의 전송.
Figure pct00021
스토리지 클래스 메모리의 블록들을 클리어함.
Figure pct00022
EADM 해제 퍼실리티가 설치되어 있을 때, 스토리지 클래스 메모리의 블록들을 해제함.
만일 이동 오퍼레이션을 위해 전송될 스토리지의 블록들이 메인 스토리지에서 인접해 있지 않으면, 새로운 MSB가 사용되거나 또는 그 MSB가 비인접 블록들을 지정하기 위해 EADM 간접 데이터 주소 워드들(AIDAW들)의 리스트를 명시함으로써 간접 주소지정법을 사용할 수 있다. MSB는 단지 한 방향으로만 데이터의 전송을 명시할 수 있으므로, 데이터 전송의 방향에 변경이 있을 때는 새로운 MSB가 사용된다.
다음은 EADM 데이터 전송들의 특성들(characteristics)이다:
Figure pct00023
데이터 전송들은 명시된 MSB 리스트의 순서에 관해서 순서와 다르게 처리될 수 있다.
Figure pct00024
MSB 리스트에서 다수 MSB들에 의해 명시된 데이터 전송들은 동시에 처리될 수 있다.
데이터 전송들은 명시된 AIDAW 리스트의 순서와 관련하여 순서와 다르게 처리될 수 있다.
Figure pct00026
AIDAW 리스트에서 다수 AIDAW들에 의해 명시된 데이터 전송들은 동시에 처리될 수 있다.
Figure pct00027
메인 스토리지와 스토리지 클래스 메모리에 대한 액세스는, 프로그램과 기타 CPU들에서 관찰되는 바와 같이, 필수적으로 단일-액세스 참조들일 필요는 없으며 필수적으로 좌-에서-우(left-to-right) 방향으로 수행될 필요도 없다.
Figure pct00028
둘 또는 그 이상의 EADM 오퍼레이션들이 현재 활성이고 동일한 SCM 위치들, 메인 스토리지 위치, 또는 둘 모두를 주소지정 한다면, 상기 오퍼레이션들은 동시에 수행될 수 있고 다른 오퍼레이션들로부터 콘텐츠가 인터리브될 (interleaved) 수 있다; 그러나:
- 입력 오퍼레이션들을 위해, EADM 퍼실리티에 의해 SCM 블록 동시처리 사이즈(block concurrency size)와 같은 사이즈인 메인 스토리지의 각 블록으로 저장된 데이터는 동시처리 EADM 오퍼레이션들 중 하나에 의해서만 스토리지 클래스 메모리로부터 전송된 데이터로 구성된다.
- 출력 오퍼레이션들을 위해, 일정 범위에 있고 SCM 블록 동시처리 사이즈와 같은 사이즈인 스토리지 클래스 메모리의 각 블록은 동시처리 EADM 오퍼레이션들 중 하나에 의해서만 명시된 데이터를 포함한다.
위의 사항은 EADM 오퍼레이션들이 단일 AOB에 의해 명시되고 시작 펑션의 동일한 인스턴스(same instance)에 의해 처리되든지 또는 EADM 오퍼레이션들이 다른 AOB들에 의해 명시되고 시작 펑션의 다른 인스턴스들에 의해 처리되든지와 상관없이 참이다.
Figure pct00029
EADM 오퍼레이션들이 서브채널에 대하여 활성일 때, 프로그램에 의해 ARQB, MSB들, AIDAW들, 및 그 활성인 오퍼레이션과 연관된 전송 데이터에 행해진 변경들이 EADM 퍼실리티에 의해 관찰되는지는 예측할 수 없다.
AOB에 의해 명시된 모든 MSB들에 의해 지정된 모든 블록들이 전송 또는 클리어 또는 해제 완료될 때, 서브채널은 그 서브채널에 저장되는 상태를 생성하고, ADM-타입 서브채널에 대하여 I/O 인터럽션을 요청한다.
EADM 오퍼레이션의 종결은 보통으로 채널 종료와 디바이스 종료의 조합된 상태 조건들에 의해 표시된다. 이 상태 조합은 1차 및 2차 상태의 조합을 표시하며, 이는 상태가 클리어된 후 서브채널이 또 다른 시작 펑션을 위해 이용 가능하다는 것을 표시한다.
전술한 바와 같이, MSB는 데이터 전송 오퍼레이션, 클리어 오퍼레이션 또는 해제 오퍼레이션을 명시할 수 있으며, 상기 오퍼레이션들의 각각은 아래에 기술된다.
이동 오퍼레이션이 요청되면, 하나 또는 그 이상의 데이터 블록들이 메인 스토리지와 스토리지 클래스 메모리 사이에서 이동한다. 예를 들어, 리드 오퍼레이션에서, SCM 데이터가 명시된 SCM 주소에 의해 지정된 콘텐츠를 제공하는 SSD들로부터 획득되고, 그 다음 그 콘텐츠가 메인 메모리에 저장된다. 라이트 오퍼레이션에서는 이 프로세스가 역으로 진행된다. SSD들을 컨트롤하는 어댑터(들)이 저장을 수행한다. 더 상세하게 말하면, 이동 오퍼레이션을 수행하기 위해, 시스템 펌웨어는 먼저 주어진 SCM 주소를 어댑터 주소(예를 들어, 논리적 볼륨이 하나 또는 그 이상의 SSD들을 포함하는 논리적 볼륨 주소)로 변환한다. 예를 들어, 변환 테이블이 사용되어 SCM 주소를 어댑터 주소와 상관시킨다(correlate). 그 다음, 시스템 펌웨어가 하나 또는 그 이상의 대응 어댑터 이동 커맨드들(예를 들어, 리드 또는 라이트)을 하나 또는 그 이상의 I/O 어댑터들에 제출한다. 어댑터 이동 커맨드는 메인 스토리지 주소, 어댑터 주소, 및 전송 사이즈를 포함한다. 그 다음, 어댑터는 또 다른 변환 테이블을 사용하여 어댑터 주소에 대응하는 하나 또는 그 이상의 물리적 SSD 주소들을 찾는다. I/O 어댑터는 메인 스토리지로부터 데이터를 페치하여 그것을 SSD들에 저장하거나, 또는 SSD들로부터 데이터를 페치하여 그것을 메인 메모리에 저장함으로써 이동 오퍼레이션을 실행한다. 추가 세부사항들은 "스토리지 클래스 메모리의 펌웨어 관리"라는 명칭으로 특허 출원된 POU920110090US1에서 더 제공되며, 이것은 여기에 전체가 참조로 포함된다.
클리어 오퍼레이션이 수행될 때, 스토리지 클래스 메모리의 지정된 증분들은 콘텐츠들을 0들로 세트함으로써 클리어된다.
또한, 해제 오퍼레이션이 수행될 때, 하나 또는 그 이상의 표준 트림(TRIM) 커맨드들이 대응 SCM 주소들을 포함하고 있는 SSD들에 제출될 수 있다. 트림 커맨드는 프로그램이 블록의 이용에 관한 힌트를 줄 수 있게 하여, SSD들에 의한 더 나은 폐영역 회수(garbage collection)를 할 수 있게 한다. 트림 커맨드는 운영체제가 스토리지의 어느 블록들이 더 이상 사용이 고려되지 않아 지워질 수 있는지를 SSD에 통보하게 한다.
EADM 오퍼레이션은 Clear Subchannel(서브채널을 클리어하라) 명령에 의해 조기에 종료될 수 있다. Clear Subchannel 명령의 실행은 서브채널에서 AOB의 실행을 종료시키고, 실행 중인 AOB의 표시들을 서브채널에서 클리어하고, 그리고 클리어 펑션을 비동기적으로 수행한다. 클리어 펑션이 수행될 때, 서브채널이 상태 펜딩(status pending) 되기 전에, 데이터 전송은 종료되며 전송된 데이터의 양은 예측 불가능하다. 클리어 펑션의 실행으로 상태의 생성이 되지는 않지만, 채널 서브시스템이 I/O 인터럽션 펜딩(interruption pending)을 만들게 한다.
한 실시 예에서, 도 3c를 참조하면, Clear Subchannel 명령(350)은 Clear Subchannel 펑션을 지정하는 오퍼레이션 코드(352)를 포함한다. 클리어될 서브채널이, 예를 들어, 범용 레지스터 1에 있는 서브시스템 식별 워드에 의해 지정된다.
ADM-타입 서브채널에 대한 클리어 펑션은 다음을 포함한다:
1. 현재 데이터 전송이 종료되는 것을 보장함.
2. 서브채널에서 필드들을 변경하고 조건부로 ARSB를 변경함. 예를 들어, 서브채널 상태 워드가 클리어 펑션을 펑션 컨트롤(Function Control) 필드와 활동 컨트롤(Activity Control) 필드에 표시하도록 변경된다. ARSB가 모든 검출된 에러들을 반영하도록 변경될 수 있다.
3. 서브채널이 클리어 펑션의 완료를 표시하는 상태 펜딩이 되게함.
Test Subchannel, Modify Subchannel 및 Store Subchannel을 포함하여 ADM-타입 서브채널을 명시할 수 있는 다른 명령들도 발행될 수 있으며, 이들의 각각은 아래에 기술된다.
도 3d를 참조하면, 한 예에서, Test Subchannel 명령(360)은, 예를 들어, Test Subchannel 펑션을 명시하는 오퍼레이션 코드(362); 테스트될 서브채널을 지정하는 서브시스템 식별 워드를 포함하는, 예를 들어, 범용 레지스터 1에 위치한 암시된 오퍼랜드인 제1 오퍼랜드(364); 및 정보가 저장되는 정보 응답 블록(IRB)의 논리적 주소인 제2 오퍼랜드(366)을 포함한다.
Test Subchannel이 실행되어 ADM-타입 서브채널을 명시하고, 서브채널이 상태 펜딩이고, 그리고 정보가 지정된 EADM IRB(Interruption Response Block)에 저장될 때, 명시된 조건 코드가 세트된다. 서브채널이 상태 펜딩이 아니고 상태 정보가 지정된 EADM IRB에 저장될 때, 정의된 조건 코드가 세트된다. 서브채널이 제공되지 않거나 인에이블되지 않을 때는, 어떤 액션도 일어나지 않는다.
한 예에서, EADM IRB는 서브채널 상태 워드(SSW, Subchannel Status Word)와 확장 상태 워드(ESW, Extended Status Word)를 포함하고, 또한 상기 퍼실리티에 존재할 수 있는 조건들을 기술하는 추가 모델 종속 정보를 제공할 수 있는 확장 컨트롤 워드(Extended Control Word)를 포함한다. 이 워드들의 각각은 ADM-타입 서브채널을 명시할 수 있는 여러 가지 명령들의 논의 이후에 아래에서 더 기술하고자 한다.
도 3e를 참조하면, 한 실시 예에서, Modify Subchannel(서브채널을 변경하라) 명령(370)은 Modify Subchannel 펑션을 명시하는 오퍼레이션 코드(372); 수정될 서브채널을 지정하는 서브시스템 식별 워드를 포함하는, 예를 들어, 범용 레지스터 1에 위치한 암시된 오퍼랜드인 제1 오퍼랜드(374); 및 서브채널과 연관된 서브채널 정보 블록(SCHIB)의 논리적 주소인 제2 오퍼랜드(376)을 포함한다.
Modify Subchannel이 실행되어 ADM-타입 서브채널을 명시하고, 명시된 서브채널 정보 블록(SCHIB)로부터 정보가 서브채널에 배치될 때, 특정한(specific) 조건 코드가 세트된다. 서브채널이 상태 펜딩일 때, 어떤 액션도 취해지지 않고 정의된 조건 코드가 세트된다. 서브채널이 시작 또는 클리어 펑션에 대해서 비지(busy)이면, 어떤 액션도 취해지지 않는다.
도 3f를 참조하여, Store Subchannel(서브채널을 저장하라) 명령의 한 예가 기술된다. 한 예에서, Store Subchannel 명령(380)은 Store Subchannel 펑션을 식별하는 오퍼레이션 코드(382); 서브채널 -이 서브채널에 대하여 정보가 저장됨- 을 지정하는 서브시스템 식별 워드를 포함하는, 예를 들어, 범용 레지스터 1에 위치한 암시된 오퍼랜드인 제1 오퍼랜드(384); 및 SCHIB의 논리적 주소인 제2 오퍼랜드(386)을 포함한다.
Store Subchannel이 발행되어 ADM-타입 서브채널을 명시하고, SCHIB가 저장될 때, 명시된 조건 코드가 세트된다. 지정된 서브채널이 채널 서브시스템에서 제공되지 않으면, 어떤 액션도 취해지지 않는다.
ADM-타입 서브채널에 대한 서브채널 정보 블록(EADM SCHIB)의 한 예가 도 4a를 참조하여 기술된다. 한 예에서, (EADM SCHIB)(400)은 모델 종속 정보를 포함하는 모델 종속 영역(401)을 포함한다. 또한, SCHIB(400)은 경로 관리 컨트롤 워드(PMCW)(402)와 서브채널 상태 워드(SCSW)(404)를 포함하며, 이들의 각각은 아래에서 기술된다.
한 예에서, EADM PMCW(402)는, 예를 들어, 도 4b에 도시된 바와 같이 다음의 필드들을 포함한다:
인터럽션 파라미터(410): 이 필드는 I/O 인터럽션 코드에 저장되는 인터럽션 파라미터를 포함한다. 인터럽션 파라미터는 Start Subchannel과 Modify Subchannel에 의해 임의 값으로 세트될 수 있다. 서브채널 내 인터럽션 파라미터 필드의 초기값은 0이다.
인터럽션 서브클래스(ISC)(412): 이 필드는, 구성(configuration)에서 각 CPU의 명시된 컨트롤 레지스터 내 I/O 인터럽션 서브클래스 마스크 비트의 비트 포지션(bit position)에 대응하는, 명시된 범위 내, 무부호 2진 정수(unsigned binary integer)인 복수의 비트들을 포함한다. CPU의 컨트롤 레지스터에 상기 마스크 비트의 세트는 그 CPU에 의해 서브채널에 관련된 인터럽션 요청들의 인지를 컨트롤한다. ISC는 Modify Subchannel에 의해 어떤 값으로 세트될 수 있다. 서브채널 내 ISC 필드의 초기 값은, 예를 들어, 0이다.
인에이블됨(E, Enabled)(414): 이 필드는, 세트될 때, 서브채널이 모든 EADM 펑션들에 대하여 인에이블됨을 표시한다.
서브채널 타입(ST)(416): 이 필드는 서브채널 타입을 지정한다. 모델과 구성에 따라서, 하나 또는 그 이상의 I/O 서브채널 타입 또는 ADM 서브채널 타입이 제공될 수 있다.
이 필드의 값은 서브채널이 구성되고 Modify Subchannel에 의해 변경될 수 없을 때 결정된다.
Modify Subchannel 명령이 실행되고 ADM-타입 서브채널을 지정할 때, ST는 ADM 서브채널을 표시한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
도 4a로 돌아가서, 서브채널 정보 블록은 또한 서브채널 상태 워드(404)를 포함한다. EADM 서브채널 상태 워드(SCSW)는 ADM-타입 서브채널과 그 연관된 EADM 오퍼레이션들의 상태를 기술하는 표시들을 프로그램에 제공한다. 한 예에서, 도 4c에 도시된 바와 같이, 서브채널 상태 워드(404)는 다음을 포함한다:
서브채널 키(Key)(420): 펑션 컨트롤 필드(아래에 기술됨) 내 EADM 시작 펑션 표시자가 세트될 때, 이 필드는 채널 서브시스템에 의해 사용되는 스토리지 액세스 키를 포함한다. 이 비트들은 Start Subchannel이 실행되었을 때 EADM ORB에서 명시된 키(key)와 동일하다.
확장 상태 워드 포맷(L)(422): 상태 컨트롤들 필드(아래에 기술됨)의 상태 펜딩 표시자(status pending indicator)가 세트될 때, 이 필드는, 세트될 때, 포맷-0 ESW가 저장되었다고 표시한다. 포맷-0 ESW는 다음의 표시들 중 어느 하나를 포함하는 인터럽션 조건이 Test Subchannel에 의해 클리어될 때 저장된다:
Figure pct00030
프로그램 검사
Figure pct00031
보호 검사
Figure pct00032
채널 데이터 검사
Figure pct00033
채널 컨트롤 검사
Figure pct00034
확장 비동기 데이터 이동 퍼실리티(EADMF) 검사
지연 조건 코드(CC, Deferred Condition Code)(424): EADM 시작 펑션 표시자가 세트되고 상태 펜딩 표시자 또한 세트되면, 이 필드는 Test Subchannel 또는 Store Subchannel이 실행되었을 때 서브채널이 상태 펜딩이었던 일반적인 이유를 표시한다. 지연 조건 코드(deferred condition code)는 서브채널이 어느 조합의 상태와도 상태 펜딩일 때 그리고 SCSW 내 펑션 컨트롤 필드의 시작 펑션 표시자가 세트되어 있을 때만 의미가 있다.
지연 조건 코드는, 만일 세트되어 있다면, 서브채널이 시작 펜딩인 동안 서브채널이 서브채널 활성으로(subchannel active)되는 것을 배제하는 조건들을 만났는지를 표시하기 위해 사용된다.
예시 지연 조건 코드들은 다음을 포함한다:
Figure pct00035
정상 I/O 인터럽션이 제출되었다.
Figure pct00036
EADM 시작 펑션이 성공적으로 개시되는 것을 배제하는 조건들을 위해 채널 서브시스템에 의해서 생성된 상태가 EADM SCSW에 존재한다. 즉, 서브채널은 서브채널 활성 상태(subchannel active state)로 전환되지 않았다.
CCW 포맷(F)(426): EADM 시작 펑션 표시자가 세트될 때, 이 필드는 정의된 값으로 저장된다.
프리페치(P)(428): EADM 시작 펑션 표시자가 세트될 때, 이 필드는 정의된 값으로 저장된다.
확장 컨트롤(E)(430): 이 필드는 세트될 때 모델 종속 정보가 EADM 확장 컨트롤 워드(ECW)에 저장된다고 표시한다.
펑션 컨트롤(FC)(432): 펑션 컨트롤 필드는 서브채널에 표시되는 EADM 펑션들을 표시한다. 예시 펑션들은 다음을 포함한다:
Figure pct00037
EADM 시작 펑션: 세트될 때, EADM 시작 펑션은 요청 완료되었으며 ADM-타입 서브채널에서 펜딩 또는 진행중이라는 것을 표시한다. EADM 시작 펑션은 성공적인 조건 코드가 Start Subchannel에 대해서 세트될 때 서브채널에 표시된다. EADM 시작 펑션은 Test Subchannel이 실행되고 서브채널이 상태 펜딩일 때 서브채널에서 클리어된다. EADM 시작 펑션은 또한 Clear Subchannel의 실행 동안에 서브채널에서 클리어된다.
Figure pct00038
EADM 클리어 펑션: 세트될 때, EADM 클리어 펑션은 요청 완료되었고 ADM-타입 서브채널에서 펜딩 또는 진행중이라는 것을 표시한다. EADM 클리어 펑션은 성공적인 조건 코드가 Clear Subchannel에 대해서 세트될 때 서브채널에 표시된다. EADM 클리어 펑션 표시는 Test Subchannel이 실행되고 서브채널이 상태 펜딩일 때 서브채널에서 클리어된다.
활동 컨트롤(AC)(434): 활동 컨트롤 필드는 서브채널에서 이전에 수용된 EADM 펑션의 현재 진행상황을 표시한다.
활동 컨트롤 필드 내 비트들에 의해 표시되는 모든 조건들은 Test Subchannel이 실행되고 서브채널이 상태 펜딩일 때 ADM-타입 서브채널에서 리셋된다.
예시 활동들은 다음을 포함한다:
Figure pct00039
시작 펜딩(Start pending): 세트될 때, 서브채널이 시작 펜딩임을 표시한다. 채널 서브시스템은 EADM 시작 펑션의 수행을 처리하는 중일 수도 있고 그렇지 않을 수도 있다. 서브채널은 Start Subchannel에 대해서 성공적인 조건 코드가 세트될 때 시작 펜딩이 된다. 서브채널은 EADM 시작 펑션을 수행중일 때 시작 펜딩으로 남아있고 채널 서브시스템은 ARQB의 페치를 막는 조건들이 존재함을 결정한다.
다음 사항 중 어느 하나가 발생할 때 서브채널은 더 이상 시작 펜딩이 아니다:
Figure pct00040
채널 서브시스템이 AOB에 의해 명시된 제1 데이터 전송의 개시를 시도한다.
Figure pct00041
Clear Subchannel이 실행된다.
Figure pct00042
Test Subchannel이 서브채널에서 상태 조건을 클리어한다.
클리어 펜딩(Clear pending): 세트될 때, 서브채널은 클리어 펜딩이 된다. 채널 서브시스템은 EADM 클리어 펑션의 수행을 처리하는 중일 수도 있고 그렇지 않을 수도 있다. 서브채널은 명시된 조건 코드가 Clear Subchannel에 대해서 세트될 때 클리어 펜딩이 될 수 있다.
다음 중 어느 하나가 발생하면 서브채널은 더 이상 클리어 펜딩이 아니다:
Figure pct00043
EADM 클리어 펑션이 수행된다.
Figure pct00044
Test Subchannel이 상태 펜딩 조건만을 클리어한다.
서브채널 활성(Subchannel active): 세트될 때, ADM-타입 서브채널이 서브채널 활성이라는 것을 표시한다. ADM-타입 서브채널은 채널 서브시스템이 (어느 것이 먼저 일어나든) AOB에 의해 명시된 제1 데이터 전송의 개시 또는 제1 오퍼레이션의 수행을 시도할 때 서브채널 활성(subchannel active)이라고 한다.
다음 사항 중 하나가 발생할 때 서브채널은 더 이상 서브채널 활성이 아니다:
Figure pct00045
서브채널이 상태 펜딩이 된다.
Figure pct00046
Clear Subchannel이 실행된다.
상태 컨트롤(SC)(436): 상태 컨트롤 필드는 프로그램에 서브채널 상태 필드와 디바이스 상태 필드 내 정보에 의해 기술되는 인터럽션 조건의 요약 수준의 표시(summary level indication)를 제공한다. 하나 보다 많은 상태 컨트롤 표시자가 서브채널에서의 조건들의 결과로 세트될 수 있다.
예시 상태 컨트롤들은 다음을 포함한다:
경보 상태(Alert status): 세트될 때, 경보 인터럽션 조건이 존재한다는 것을 표시한다. 경보 인터럽션 조건은 경보 상태가 서브채널에 존재할 때 인지된다. 경보 상태는 다음의 조건들 중 어느 하나의 조건에서 채널 서브시스템에 의해 생성된다:
Figure pct00047
ADM-타입 서브채널이 시작 펜딩이고 상태 조건이 제1 데이터 전송의 개시를 금지한다.
Figure pct00048
서브채널은 서브채널 활성이고 서브채널 상태로 보고되는 비정상 조건이 EADM 오퍼레이션들을 종료 완료했다.
Test Subchannel 또는 Clear Subchannel이 실행될 때, 경보 상태는 서브채널에서 클리어된다.
1차 상태(Primary status): 세트될 때, 1차 인터럽션 조건이 존재한다는 것을 표시한다. 1차 인터럽션 조건은 1차 상태가 서브채널에 존재할 때 인지된다. 1차 인터럽션 조건은, 2차 인터럽션 조건을 동반할 때 서브채널에서 EADM 시작 펑션의 완료를 표시하는, 비자발적 인터럽션(solicited interruption) 조건이다.
Test Subchannel 또는 Clear Subchannel이 실행될 때, 1차 인터럽션 조건은 서브채널에서 클리어된다.
2차 상태(Secondary status): 세트될 때, 2차 인터럽션 조건이 존재한다는 것을 표시한다. 2차 인터럽션 조건은 2차 상태가 서브채널에 존재할 때 인지된다. 2차 인터럽션 조건은, 1차 인터럽션 조건을 동반할 때 서브채널에서 EADM 시작 펑션의 완료를 표시하는, 비자발적 인터럽션(solicited interruption) 조건이다.
Test Subchannel 또는 Clear Subchannel이 실행될 때, 2차 인터럽션 조건은 서브채널에서 클리어된다.
상태 펜딩(Status pending): 세트될 때, 서브채널이 상태 펜딩이고 인터럽션 조건의 원인(cause)을 기술하는 정보가 이용 가능하다고 표시한다. Test Subchannel이 실행되어, 상태 펜딩 비트가 세트된 채로 EADM SCSW를 저장할 때, 모든 EADM SCSW 표시들은 서브채널에서 클리어되고 서브채널을 유휴 상태(idle state)로 만든다. 상태 펜딩 조건은 또한 Clear Subchannel의 실행 동안에도 서브채널에서 클리어된다.
상태 펜딩이 세트될 때, 서브채널 ARSB에 대해서 메인 스토리지와 스토리지 클래스 메모리에 대한 모든 액세스들은 종료 완료된다.
서브채널 상태(438): ADM-타입 서브채널 상태 조건들이 검출되고 채널 서브시스템에 의해 서브채널 상태 필드에 저장된다. 서브채널 상태 필드는 서브채널이 상태 펜딩일 때 의미가 있다. 장치 오동작(equipment malfunctions)에 의해 야기된 조건들을 제외하고, 서브채널 상태는 채널 서브시스템이 EADM 펑션을 처리하는 것과 관계될(involved) 때만 발생할 수 있다.
상태 조건들의 예들은 다음을 포함한다:
Figure pct00049
프로그램 검사: 프로그램 검사는 프로그래밍 에러들이 채널 서브시스템에 의해 검출될 때 발생한다.
Figure pct00050
보호 검사: 보호 검사는 채널 서브시스템이 보호 메커니즘에 의해 금지된 스토리지 액세스를 시도할 때 발생한다. 보호는 스토리지 클래스 메모리로 전송될 ARQB, MSB들, AIDAW들, 및 데이터의 페치와, ARSB 내 정보와 스토리지 클래스 메모리로부터 전송된 데이터의 저장에 적용된다.
Figure pct00051
채널 데이터 검사: 채널 데이터 검사는 메인 스토리지로부터 데이터를 페치하는 것 또는 데이터를 메인 스토리지로 저장하는 것과 관련하여 교정되지 않은 스토리지 에러가 검출되었다는 것을 표시한다.
Figure pct00052
채널 컨트롤 검사: 채널 컨트롤 검사는 AOB, MSB들, 또는 AIDAW들의 페치 또는 저장과 관련하여 교정되지 않은 스토리지 에러가 검출되었다는 것, 또는 채널 서브시스템에 기계 오동작이 일어나서 그 오동작이 EADM 오퍼레이션들에 영향을 주었다는 것을 표시한다.
Figure pct00053
확장 비동기 데이터 이동(EADM) 퍼실리티 검사: EADM 퍼실리티 검사는 스토리지 클래스 메모리 내부 또는 외부로 데이터의 전송과 관련하여 또는 스토리지 클래스 메모리에서 오퍼레이션을 수행하는 것과 관련하여 EADM 퍼실리티에 의해 에러가 검출되었다는 것을 표시한다.
프로그램 검사, 보호 검사, 채널 데이터 검사, 채널 컨트롤 검사, 또는 EADM 퍼실리티 검사 조건이 채널 서브시스템에 의해 인지될 때, EADM 오퍼레이션들은 종료되고 그 채널은 1차, 2차, 및 경보 상태로 상태 펜딩된다.
EADM 오퍼레이션 블록 주소(440): 이 필드는 EADM 오퍼레이션 블록 주소를 포함한다.
디바이스 상태(442): 이것은 디바이스 종료 또는 채널 종료를 포함한다.
서브채널 상태 워드의 ESW 포맷(422)가 세트되고 서브채널이 상태 펜딩일 때, EADM 서브채널 확장 상태 워드(EADM ESW)가 제공되어 ADM-타입 서브채널에 관한 추가 정보를 명시한다.
한 예에서, 도 4d를 참조하면, EADM 서브채널 확장 상태 워드(450)는 다음을 포함한다:
EADM 서브채널 로그아웃(452): EADM 서브채널 로그아웃은, 한 예에서 다음을 포함한다:
Figure pct00054
확장 상태 플래그들(ESF): 비트들이, 1일 때, 채널 서브시스템에 의해 에러가 검출되었다고 명시하는 필드.
확장 상태 플래그들의 예들은 다음을 포함한다:
키 검사(Key check): 세트될 때, 채널 서브시스템이, EADM 오퍼레이션 블록(AOB)에서, EADM 이동 명세 블록(MSB)에서, 또는 EADM 간접 데이터 주소 워드(AIDAW)에서 데이터를 참조할 때 연관된 스토리지 키에서 무효 검사 블록 코드(CBC)를 검출하였다는 것을 표시한다.
Figure pct00055
AOB 주소 유효성: 세트될 때, SCSW의 AOB 주소 필드에 저장된 주소는 복구 목적으로 사용 가능하다는 것을 표시한다.
EADM 확장 보고 워드(EADM Extended Report Word)(454): 예를 들어, 다음을 포함한다:
EADM 오퍼레이션들 블록 에러(B) 표시자: 세트될 때, EADM SCSW에 저장된 예외 상태는 명시된 EADM 오퍼레이션 블록(AOB)와 연관된다는 것을 명시하고; EADM 응답 블록 저장(R) 표시자: 세트될 때, EADM 응답 블록(ARSB)가 저장된다는 것을 표시한다.
SCSW의 확장 컨트롤 표시자와 SCSW의 확장 상태 워드 포맷 표시자가 세트될 때, EADM 확장 컨트롤 워드는 EADM 퍼실리티에 존재할 수 있는 조건들을 기술하는 모델 종속 성질(model dependent nature)에 대한 추가 정보를 제공한다.
이어서, 다음의 채널 보고 워드들(CRW들)이 ADM-타입 서브채널들에 대하여 보고될 수 있다: 서브채널 설치된 파라미터들이 초기화됨; 서브채널 설치된 파라미터들이 복원됨; 서브채널들이 사용 가능함; 채널 이벤트 정보 펜딩.
EADM 퍼실리티에서 발생하는 자발적(unsolicited) 이벤트들 및 오동작들이 채널 이벤트 정보 펜딩 CRW에 의해 보고될 수 있다.
위에서 상세하게 기술된 것은 메인 스토리지와 스토리지 클래스 메모리 사이에서 데이터 블록들을 이동시키고 스토리지 클래스 메모리에서 기타 오퍼레이션들을 수행하는데 사용되는 확장 비동기 데이터 이동기 퍼실리티(Extended Asynchronous Data Mover Facility)에 관한 것이다. 한 실시 예에서, EADM 퍼실리티와 스토리지 클래스 메모리에 관한 정보를 EADM 커맨드를 사용하여 획득한다. 구체적으로, 스토리지 클래스 메모리는 직접 액세스할 수 없으므로, 스토리지 클래스 메모리가 할당되는지를 결정하고 만일 할당되면 그 구성(configuration)에 관한 정보를 획득하기 위한 능력(capability)이 제공된다. 구체적으로, 한 예에서, 모든 스토리지 클래스 메모리가 할당되었는지 아닌지 그리고 만일 할당되었다면 얼마나 그리고 어떤 위치에 되었는지를 컨트롤 프로그램(예를 들어, 운영체제)에 통신하기 위한 능력이 제공된다. 사용 가능한 스토리지 클래스 메모리를 결정하기 위한 능력을 여기에서는 발견(discovery)이라 부르며 발견 펑션(discovery function)의 한 예가 Store Storage Class Memory(SCM) Information(SSI) 커맨드에 의해 제공된다.
Store Storage Class Memory Information(SSI) 커맨드는 스토리지 클래스 메모리와 확장 비동기 데이터 이동기 퍼실리티에 관한 정보를 획득하는데 사용된다. SSI 커맨드는 예를 들어 채널 서브시스템으로부터 획득한 다음의 정보를 회신한다(return). 이 정보는 아래에 더 상세하게 기술된다:
1. EADM 퍼실리티의 특성들(다음을 포함함):
Figure pct00056
AOB 당(per) 이동 명세 블록들 (MSB들)의 최대 카운트.
Figure pct00057
MSB 당 최대 블록 카운트.
2. 스토리지 클래스 메모리의 특성들(다음을 포함함):
Figure pct00058
SCM 증분 사이즈.
Figure pct00059
SCM 주소 공간 내의 SCM 주소 증분들의 리스트.
Figure pct00060
모델 종속 최대 SCM 주소.
Store SCM Information 커맨드의 실행은, 동기적이며, 채널 서브시스템에 포함된 어떤 정보도 변경시키지 않는다.
SSI 커맨드에 관한 더 상세한 사항들이 도 5a-5d를 참조하여 기술된다. 먼저 도 5a를 참조하면, 한 실시 예에서, Store SCM Information 커맨드에 대한 커맨드 요청 블록(500)은 예를 들어 다음을 포함한다:
길이(502): 커맨드 요청 블록의 길이를 명시하는 값.
커맨드 코드(504): Store SCM Information 커맨드에 대한 커맨드 코드를 명시하는 값.
포맷(FMT)(506): 커맨드 요청 블록의 포맷을 명시하는 값.
연속 토큰(Continuation Token)(508): 완료되지 않았던 이전 응답으로부터 재개(resume)하기 위한 연속 지점(continuation point)을 요청할 수 있는 값. 연속 토큰의 값이 0이면, 새로운 시작(fresh start)이 이루어진다. 연속 토큰의 값이 0이 아니고 인지되지 않는다면, 새로운 시작이 이루어진다.
SSI 커맨드의 응답 블록(520)의 한 실시 예가 도 5b를 참조하여 기술되며, 예를 들어, 다음을 포함한다:
길이(522): 커맨드 응답 블록의 길이를 바이트로 표시하는 값.
응답 코드(524): SSI 커맨드를 실행하는 시도의 결과들을 기술하는 값. 응답 코드 값은 응답 블록의 길이를 지시한다. 예를 들면, 선택된 응답 코드가 저장되면, 그 길이는 96+Nxl6 바이트를 명시하고, 여기에서 N은 스토리지 클래스 메모리 주소 리스트 엔트리의 개수이며, 아래에 기술된다. 한 예에서, N은 1≤N≤248 범위(range)에 있다.
포맷(FMT)(526): 커맨드 응답 블록의 포맷을 표시하는 값. 이 필드의 값은, 예를 들어, 0이다.
RQ(528): 응답 한정자 값이며, 아래에 정의되는 바와 같다:
응답 한정(response qualification)은 존재하지 않는다.
명시된 연속 토큰이 인지되지 않고 마치 0이 명시된 것처럼 처리된다.
MSB 당 최대 블록 카운트(MBC)(530): 이동 명세 블록(MSB)의 블록 카운트 필드에서 사용될 수 있는 최대 값을 표시하는 값.
최대 SCM 주소(MSA)(532): 모델 종속 최대 SCM 주소를 표시하는 값. 이 값은 가장 높은 주소지정 가능 SCM 증분에서 마지막 바이트의 SCM 주소이다.
SCM 증분 사이즈(IS)(534): SCM 주소 리스트에서 각 SCM 증분의 사이즈를 표시하는 값이며, 예를 들어, 2의 거듭제곱(power-of-two)이다.
최대 MSB 카운트(MMC)(536): EADM 오퍼레이션 블록(AOB)에서 명시될 수 있는 이동 명세 블록들(MSB)의 최대 카운트를 표시하는 값.
최대 구성가능 SCM 증분들(MCI)(538): 요청하는 구성으로 구성될 수 있는 SCM 증분들의 최대 수인 값.
한 실시 예에서, MCI는 2(64- IS )를 초과하지 않는다. 예를 들면, 16G 바이트 SCM 증분 사이즈에 대해서, MCI ≤ 2(64-34)인데, 이는 모든 16G 바이트 SCM 증분들은 64 비트 주소의 주소지정 제한 내에서 주소지정이 가능해야 하기 때문이다. 또한, ((MCI+1) x IS)-1은 모델 종속 최대 SCM 주소를 초과하지 않는다.
구성된 SCM 증분들의 수(NCI)는, 아래에 기술되는, 성공적인 Configure Storage Class Memory 커맨드가 실행될 때 명시될 수 있는 총 사이즈(TS)를 감소시켜, TS ≤ (MCI-NCI)가 되게 한다. 그러나, 시스템의 전체 용량(capacity)과 이미 다른 구성들에 할당된 할당들에 기초하여, 초기화된 상태에서의 SCM 증분들의 수가 요청하는 구성의 최대 MCI 한계치까지 유효하게 구성하지 못한다면 그 요청을 완전히 충족시킬 수도 충족시키지 못할 수도 있다.
CPC의 총 초기화된 SCM 증분들(540): 시스템에 대하여(예를 들어, 중앙 처리 컴플렉스(CPC)에 대하여) 초기화된 상태에 있는 SCM 증분들의 수를 표시하는 값. 시스템이 논리적으로 분할되어 있다면, 이것은 파티션들에 또는 그 파티션들에 의해 할당될 총 가용(available) 증분들의 수이다.
CPC의 총 초기화되지 않은 SCM 증분들(542): 시스템에 대해서(예를 들어, CPC에 대해서) 초기화되지 않은 상태에 있는 SCM 증분들의 수를 표시하는 값.
SCM 측정 블록 사이즈(544): SCM 측정 블록의 바이트로 된 블록 사이즈 (BS)인 값. 한 예에서, 이 값은 2의 거듭제곱(a power of 2)이며, 최대 SCM 측정 블록 사이즈는, 예를 들어, 4096 바이트이다.
SCM 리소스 파트들의 최대 수(546): CPC에서 SCM 리소스 파트들(RP)(예를 들어, I/O 어댑터들)의 최대 수인 값. 각 SCM 증분은 SCM 리소스 파트와 연관된다. 각 SCM 리소스(예를 들어, 하나 또는 그 이상의 I/O 어댑터들 및 하나 또는 그 이상의 SSD들)은 하나 또는 그 이상의 파트들을 포함한다. SCM 리소스 파트들의 최대 수는, 예를 들어, 509이다.
한 예에서, “리소스 파트(resource part)”라는 말은 스토리지 클래스 메모리에 관한 측정 정보를 획득하는데 사용하기 위해 정의된다. 각 SCM 증분은 다수의 어댑터들에 걸쳐서 분산될 수 있고 각 어댑터는 어떤 사용효율/측정(utilization/measurement) 데이터를 제공한다. 그래서, 회신된 각 측정 블록은 증분 식별자와 리소스 식별자의 합으로 구성된 투플(tuple)에 의해 식별된다.
SCM 데이터 유닛 사이즈(548): SCM 데이터 유닛(SCM data unit)에 포함된 바이트 수를 표시하는 모델 종속 값(model dependent value). 한 예에서, 상기 데이터 유닛은 스토리지 클래스 메모리에 관한 측정 정보를 획득하는 데 사용하기 위해 정의된다. 보고되는 카운트는 바이트라기보다는 데이터 유닛들의 카운트이다.
연속 토큰(550): 모델 종속 값이며, 이 값에 의해서 SSI 커맨드의 후속 발행이 이 토큰에 의해 표시되는 연속 지점에서 계속될 수 있다. 연속 토큰의 콘텐츠들은 모델에 따라 다르다.
스토리지 클래스 메모리 주소 리스트(552): SCM 주소 리스트의 근원(origin). 저장된 응답 코드가 미리 정의된 값일 때, 복수의 SCM 주소 리스트 엔트리(SALE, SCM address list entry)들이 저장된다(예를 들어, (길이 - 96)/16 SALE들이 저장된다).
한 예에서, 저장된 SALE들의 수는 요청자의 구성에서 SCM 증분들의 수와, 커맨드가 실행될 때 각각의 상태, 및 채널 서브시스템 모델에 따라 다르다. 0 또는 그 이상의 SALE들이 저장되고, 저장되는 실제 수는, 한 예에서, 응답 블록의 사이즈(길이)에서 96을 뺀 다음 그 결과를 16으로 나눔으로써 결정된다.
각 SCM 주소 리스트 엔트리(SALE)는 일정 범위의(a range of) SCM 주소들을 점유하는 하나의 SCM 증분을 나타낸다. SALE에 의해 표시되는 SCM 증분의 시작(starting) SCM 주소는 SALE에 포함되어 있고 대응하는 SCM 증분의 제1 바이트의 SCM 주소이다. 종료(ending) 주소는, 한 예에서, SCM 증분 사이즈를, 바이트로, 시작 SCM 주소에 더한 다음 1을 뺌으로써 계산된다. 이것은 SCM 증분의 마지막 바이트의 SCM 주소이다. SALE에 의해 표시되는 스토리지 클래스 메모리는 SCM 바이트 위치들의 인접한 세트이며, 이 세트는, 한 실시 예에서, 내추럴 2IS 바이트 범위에서(on a natural 2IS byte boundary) 시작한다.
SALE은, 대응하는 SCM 증분이 구성된 상태에 있고 SALE에 대한 응답 블록에서 공간이 이용 가능할 때, 저장된다. 만일 응답 블록의 SCM 주소 리스트 내 공간이 소진되면(exhausted), 값이 연속 토큰에 저장되고 실행은 특정한 응답 코드로 완료된다.
둘 또는 그 이상의 SALE들이 그들의 SCM 주소들의 오름차순으로 저장된다.
SALE의 한 실시 예가 도 5c를 참조하여 기술된다. 한 예에서, SALE(552)는, 예를 들어, 다음을 포함한다:
SCM 주소(SA)(560): SCM 증분 사이즈 (2IS 바이트)에 의해 결정되는 내추럴 범위(natural boundary)에 정렬된, SCM 주소 공간 내 대응하는 SCM 증분의 바이트 0의 시작 SCM 주소인 값.
지속성(Persistence Attribute)(P)(562): SCM 증분에 적용되는 현재의 지속 규칙(persistence rule)을 표시하는 값. SCM 증분 내의 모든 위치는 지속 규칙을 이어받는다. 가능한(possible) 지속 규칙은 다음과 같다:
규칙 1 - 파워가 오프될 때 데이터를 보존한다.
규칙 2 - 파워 온 리셋(power on reset) 또는 IML 때까지 데이터를 보존한다.
오퍼레이션(op) 상태(564): SALE에 의해 표시되는 스토리지 클래스 메모리 증분의 오퍼레이션 상태(operation state)를 표시하는 값. 오퍼레이션 상태는 연관된 SCM 증분이 구성된 상태(configured state)에 있을 때만 유효하다.
오퍼레이션 상태의 예들은 다음과 같다:
오퍼레이션 가능(Op): SALE에 의해 표시되는 스토리지 클래스 메모리는 모든 I/O 오퍼레이션들에 이용 가능하다. 성공적으로 구성될 때 오퍼레이션 가능 상태(operational state)에 진입하고 일시 또는 영구 에러 상태에서 벗어날 때 재-진입할 수 있다.
일시 에러(TE): SALE에 의해 표시되는 스토리지 클래스 메모리는 모든 I/O 오퍼레이션들에 가능하지 않다. 데이터 상태는 무효이지만 오퍼레이션 가능에서 일시 에러로 전환시에 데이터 콘텐츠는 보존된다. 일시 에러 상태(temporary error state)는 SCM 증분에 대한 액세스가 존재하지 않을 때 오퍼레이션 가능 상태로부터 진입한다.
영구 에러(PE): SALE에 의해 표시되는 스토리지 클래스 메모리는 모든 I/O 오퍼레이션들에 이용 가능하지 않다. 데이터 상태는 무효이고 데이터는 유실된다. 영구 에러 상태는 교정할 수 없는 에러 조건이 인지될 때 일시 에러 상태 또는 오퍼레이션 가능 상태로부터 진입한다.
오퍼레이션이 EADM 응답 블록의 예외 한정자 코드(exception qualifier code)에 영구 에러의 표시가 세트된 상태로 완료되면, 적어도 그 대응 SCM 증분은 영구 에러 상태에 진입한 것이다. 그러나, 하나의 SCM 증분보다 더 많은 수가 영구 에러 상태에 진입한 것일 수도 있다.
SCM 증분이 오퍼레이션 가능 상태에 있지 않으면, 상기 증분 내 위치를 참조하는 I/O 오퍼레이션은 확장 비동기 데이터 이동 퍼실리티 검사를 EADM 응답 블록의 예외 한정자 코드에 일시 또는 영구 에러 상태 둘 중 하나가 세트된 상태로 인지한다.
데이터 상태(Data State)(566): SALE에 의해 표시되는 스토리지 클래스 메모리 증분의 콘텐츠들의 데이터 상태를 표시하는 값. 데이터 상태는 연관된 SCM 증분이 구성된(configured) 상태 및 오퍼레이션 가능 상태에 있을 때 유효하다.
예시 데이터 상태들은 다음을 포함한다:
영이됨(zeroed) - SCM 증분의 콘텐츠들은 모두 0들(zeros)이다.
유효(valid) - SCM 증분의 콘텐츠들은 모든 성공적인 라이트(write) 타입 오퍼레이션들의 누적(accumulation)이다. 아직 라이트 되지 않은 증분 내 위치들은 영이됨 또는 예측 불가능 상태로 남아 있는다.
예측 불가능(unpredictable) - 라이트 타입 I/O 오퍼레이션 전의 SCM 증분의 콘텐츠들은 알려지지 않는다. 하나 또는 그 이상의 라이트 타입 오퍼레이션들이 수행된 후에, 성공적으로 라이트된(written) 위치들이 SCM 증분의 데이터 상태를 유효로 되게 할지라도, 다른 라이트되지 않은 위치들의 데이터 콘텐츠는 예측 불가능한 상태로 남는다.
영이됨(zeroed) 상태 또는 예측 불가능(unpredictable) 상태로부터 유효 상태로의 전환은 제1의 성공적인 라이트(write)와 함께 발생한다. 라이트된 데이터의 사이즈와 타겟 SCM 증분의 사이즈 사이의 차이(any difference)로 인해, 유효로의 변경(change)이 아직 라이트 되지 않은 모든 데이터의 실제 조건을 기술하지는 않는다. 라이트를 위해 액세스된 적이 없는 이러한 위치는 여전히 유효하게 영이됨으로 또는 예측 불가능으로 기술된다.
랭크(rank)(568): SALE에 의해 표시되는 스토리지 클래스 메모리의 개념적 질(conceptual quality)을 표시하는 값. 랭크(rank)는 연관된 SCM 증분이 구성된 상태 및 오퍼레이션 가능 상태에 있을 때만 유효하다. 0(zero)의 값은 랭크가 존재하지 않는다는 의미이다. 명시된 범위에서 0이 아닌 값은 랭크가 존재한다는 의미이다. 이 예에서, 1의 랭크 값은 가장 높거나 가장 좋은 랭크다. 15의 랭크 값은 가장 낮거나 가장 안 좋은(worst) 랭크다. 다른 모든 사정이 같다면, 더 높은 랭크를 가진 SCM이 더 낮은 랭크를 가진 SCM보다 더 선호된다.
R(570): 이 필드는 SCM 증분이 해제 오퍼레이션을 인지하는 것을 표시한다. 다음의 액션들과 관련이 있다:
1. 해제된 블록은 리드(read)되기 전에 먼저 라이트가 되어야 한다, 그렇지 않고 만일 리드가 라이트보다 선행되면 리드 오퍼레이션에서 에러가 인지된다. 이러한 에러 때문에, SCM 증분은 오퍼레이션 가능 상태로 남는다.
2. 초기 구성이 되면, 데이터 상태는 영이 된다.
3. 프로그램은, 해제(release)라고 불리는, 특별 오퍼레이션(special operation)을 수행할 수 있으며, 이 해제는 명시된 블록을 해제된 조건(released condition)으로 배치한다.
리소스 ID(572): SALE에 의해 표시되는 SCM 증분을 제공하는 리소스의 리소스 식별자(RID)는 영이 아닌 값이다. RID가 영이면, 리소스 ID는 표시되지 않는다. 한 구체적인 예에서, RID는 SCM 증분에 스토리지를 제공하는 많은 어댑터들과 SSD들을 표시한다. 특정한 RAID 알고리즘들이, 다수의 어댑터/SSD들에 걸쳐서 동시처리 I/O 오퍼레이션들을 허용함으로써 성능을 향상시키기 위해, 적용되거나 스트라이핑(striping)될 때, RID는 복합 엔티티(compound entity)를 표시할 수 있다.
스토리지 클래스 메모리의 구성 상태들과, 스토리지 클래스 메모리 주소 리스트의 오퍼레이션 상태 및 데이터 상태에 관한 더 상세한 사항들이 아래에 기술된다.
먼저, 도 6a를 참조하면, 구성 상태들과, 이 상태들 내에서 전환되는 이벤트들/액션들이 기술된다. 도시된 바와 같이, SCM 상태들은 구성됨(configured), 대기중(standby) 및 유보됨(reserved)이다. SCM은 유보됨에서 대기중으로, 그리고 그 다음 대기중에서 구성됨으로 배치될 수 있다. 구성됨으로부터, SCM은 구성해제되어(deconfigured) 유보됨 상태로 진입할 수 있다.
도 6b를 참조하면, 오퍼레이션 상태들과 이 상태들 내에서 전환되는 이벤트들이 도시된다. SCM 증분은 구성됨의 상태가 되기 위해서 대기중 상태에 있어야 하고 구성 액션(configure action)이 성공적으로 완료되면 오퍼레이션 가능 상태에 있게 된다. 영이됨 상태에서 SCM 증분에 대한 제1 라이트는 SCM 증분을 유효 상태로 이동시킨다. 규칙 1 지속성(rule 1 persistence)을 갖는 것으로 표시되지 않는 SCM 증분의 개입적인(intervening) 파워 오프(power off)와 그 다음 파워 온(power on)은 그 SCM 증분을 예측 불가능 상태로 이동시킨다.
에러(E)는, 에러의 모델 종속 특성(specifics)에 따라서, 일시 에러(TE) 상태 또는 영구 에러(PE) 상태로 전환을 일으킬 수 있다. 연결성(connectivity)의 획득(A)은 일시 에러 상태에서 오퍼레이션 가능(Op) 상태로 전환을 일으킬 수 있다. SCM 증분의 구성해제(deconfigure)는 SCM 증분의 오퍼레이션 상태(operation state)와 상관없이 일어날 수 있다.
도 6b는 또한, 오퍼레이션 가능 상태에 어떻게 진입했는가에 따라서, 오퍼레이션 가능 상태에 있을 때 데이터 상태들을 예시한다. 데이터 상태는 구성되고 오퍼레이션 가능 상태에 있을 때 유효하고 대응 SCM 증분에 적용된다. 유효한 데이터 상태들은 영이됨(zeroed), 예측 불가능(unpredictable), 및 유효(valid)이다. 다음은 여러 가지 엔트리들에서 오퍼레이션 가능 상태로 가는 가능한(possible) 데이터 상태들이다:
Figure pct00061
대기중으로부터 - 영이됨(z)
Figure pct00062
일시 에러로부터 - 유효(v)
Figure pct00063
영구 에러로부터 - 예측 불가능(u) 또는 영이됨(z)
Figure pct00064
오퍼레이션 가능으로부터 - 유효(v) - 제1 라이트
Figure pct00065
오퍼레이션 가능으로부터 - 예측 불가능(u) - 파워가 순환되고(power cycled) 지속성(persistence)은 규칙 1이 아니다.
오퍼레이션 가능 상태에 있지 않을 때, 데이터 상태는 무효이다.
처음으로 구성되고 그리고 제1 라이트 전일 때, SCM 증분의 데이터는 영이됨 상태에 있으며, 이는 그 콘텐츠들이 모두 0들이라는 것을 의미한다.
SCM 증분의 데이터 콘텐츠는 일시 에러 상태로 이동하거나 일시 에러 상태에 있을 때 변경되지 않는 반면, 상기 증분은 액세스 불가능하다. 그러므로, 데이터가 유효하다고 말하는 것은 설명이 될 수는 있지만(descriptive), 프로그램 액세스 가능성의 결여로 인해 그다지 의미가 있는 것은 아니다. 따라서, 데이터 상태는 이 상황에서는 무효이다. 또한, 오퍼레이션 가능으로부터 일시 에러로의 전환을 일으키는 에러에 기초하여, 데이터 무결성(data integrity)이 영향을 받으면, 영구 에러 상태로 진입하고, 데이터 상태는 무효인 상태로 남으며, 데이터는 유실된다. 만일 구성해제하고 그 다음 다시 구성하는 일 둘 모두를 행함이 없이 동시 수리(concurrent repair)가 영구 에러 상태에 있는 SCM 증분을 오퍼레이션 가능 상태로 이동시킬 수 있다고 하더라도, 원 데이터(original data)는 여전히 유실된 상태이며, 데이터 상태가 예측 불가능인지 또는 영이됨인지는 모델에 따라 다르다.
SCM 증분의 지속성(persistence)과 그 RAS(신뢰성, 액세스가능성 및 서비스가용성) 특성들도 또한 유효에서 예측 불가능 데이터 상태로의 변경을 결정할 수 있다. 지속성이 초과된다면, 데이터 상태는 유효에서 예측 불가능으로 전환될 것으로 예상된다.
영이됨 또는 예측 불가능 데이터 상태들에서 유효 데이터 상태로의 전환은 제1의 성공적인 라이트와 함께 일어난다. 라이트된 데이터의 사이즈와 타겟 SCM 증분의 사이즈 사이의 차이로 인해, 유효로의 변경은 아직 라이트 되지 않은 모든 데이터 위치의 실제 조건을 기술하는 것은 아니다. 제1의 라이트 액세스 이전의 이러한 위치는 여전히 유효하게 영이됨 또는 예측 불가능으로 기술된다.
SCM 증분이 구성된 후에, Store SCM Information 커맨드의 응답에서 관찰할 수 있는 하나 또는 그 이상의 이벤트들이 발생할 때 자발적 통지(unsolicited notification)는 펜딩이 된다. 예들은 다음과 같다:
1. 오퍼레이션 상태가 오퍼레이션 가능에서 일시 에러 또는 영구 에러로 바뀌지만, 실패한 오퍼레이션에서는 보고되지 않는다.
2. 오퍼레이션 상태가 일시 에러에서 오퍼레이션 가능으로 바뀐다.
3. 오퍼레이션 상태가 일시 에러에서 영구 에러로 바뀐다.
4. 랭크가 바뀐다.
자발적 통지들이 펜딩되지 않는 예들은 다음과 같다:
1. 데이터 상태가 영이됨 또는 예측 불가능에서 유효로 바뀐다.
2. Configure Storage Class Memory 커맨드가 완료된다.
3. Deconfigure Storage Class Memory 커맨드가 완료된다.
통지(notification)가 펜딩일 때, 프로그램은 그 통지를 관찰하고 정보를 획득하기 위해 Store SCM Information 커맨드를 발행할 수 있다. Store SCM Information 커맨드는 또한 프로그램이 SCM 및/또는 SALE에 관한 정보를 획득하고자 하는 다른 때에도 발행될 수 있다.
한 예에서, 통지는 이벤트 리포트를 표시하는 대응 CRW와 함께 프로그램에 발행되는 머신 검사 인터럽션(machine check interruption)을 포함한다. 프로그램은 CHSC Store Event Information 커맨드를 발행하고 스토리지 클래스 메모리 변경 통지(storage class memory change notification)를 신호하는(signaling) 콘텐츠 코드를 갖는 응답 블록을 획득한다.
한 실시 예에서, Store SCM Information(SSI) 커맨드는 스토리지 클래스 메모리 및/또는 SCM 주소 리스트 엔트리에 관한 정보를 획득하기 위해 프로그램(예, 운영체제)에 의해 발행되는 채널 서브시스템 커맨드이다. 한 예에서, 상기 프로그램이 Channel Subsystem Call 명령을 발행하면 그 명령의 커맨드 블록에 SSI 커맨드가 표시되며, 이것은 채널 서브시스템으로 보내진다. 이 커맨드가 채널 서브시스템에서 수행되면, 응답이, 4K 바이트 컨트롤 블록의 나머지 부분인, 응답 블록에 회신된다(즉, 요청된 정보가 응답 블록을 위해 지정된 메인 스토리지 영역에 저장된다). 이 커맨드의 오퍼레이션에 관한 더 상세한 사항들은 도 5d를 참조하여 기술된다.
초기에, 상기 프로그램은 위에서 표시한 요청 블록을 생성하여 Store SCM Information 커맨드를 요청한다(단계 580). 요청 블록이 채널 서브시스템에 의해 획득되고(단계 582), 하나 또는 그 이상의 유효성 검사가 요청 블록의 유효성(예를 들어, 유효 길이 필드, 유효 커맨드 요청 블록 포맷, 설치된 커맨드 등)에 관해 이루어진다. 만일 요청이 유효하지 않다면(질의 584), 문제를 표시하는 응답 코드가 응답 블록에 배치되고(단계 586), 응답 블록이 회신된다(단계 592).
그러나, 요청이 유효하다면(질의 584), 채널 서브시스템은 머신(예를 들어, 프로세서 등)으로부터 정보를 획득하고(단계 588), 응답 블록을 채운다(단계 590). 그리고 응답 블록이 회신된다(단계 592). 예를 들어, 정보는 머신의 비휘발성 스토리지에 저장되어 있고 시스템 초기화 동안에 펌웨어에 의해서만 액세스 가능한 메인 스토리지로 펌웨어에 의해 로드된다. 채널 서브시스템(즉, 이 경우에는 펌웨어)은 펌웨어에 의해서만 액세스 가능한 메인 스토리지로부터 정보를 리드(read)함으로써 그 정보를 획득한다.
스토리지 클래스 메모리 또는 다른 것에 관한 정보를 수신한 것에 응답하여, 스토리지 클래스 메모리의 구성을 변경하는 것에 관한 결정이 이루어 질 수 있다. 이 결정은 수동으로 또는 프로그램이나 다른 엔티티에 의해 자동으로 이루어질 수 있다. 구성은, 아래에 기술된 바와 같이, 증분들을 더하거나 증분들을 삭제함으로써 변경될 수 있다.
한 예에서, 스토리지 클래스 메모리를 구성하기 위해, Configure Storage Class Memory(스토리지 클래스 메모리를 구성하라) 커맨드가 사용된다. 이 커맨드는 시스템의 이용 가능한 풀(pool)로부터 스토리지 클래스 메모리의 일정 양이 구성되도록 요청한다. 상기 양은 사이즈로 명시되고, SCM 증분들의 카운트로 인코딩된다.
달리 언급하지 않는 한, 상기 요청을 충족시키기 위해 사용된 SCM 증분들의 수는 초기화된 상태에 있다. 만일 요청된 SCM 증분들의 수가 최대 구성 가능 SCM 증분들의 한계치를 초과되도록 한다면, 특정한 응답 코드가 제공된다.
각 증분의 콘텐츠들은 유효한 CBC 때문에 0들이다. 각 구성된 SCM 증분과 연관된 해당 지속 규칙은, 예를 들어, 수동 컨트롤들에 의해 세트된다.
Configure Storage Class Memory 커맨드에 대한 커맨드 요청 블록의 한 실시 예가 도 7a에 도시된다. 한 예에서, Configure Storage Class Memory의 요청 블록(700)은 다음을 포함한다:
길이(702): 상기 커맨드 요청 블록의 길이를 명시하는 값.
커맨드 코드(704): Configure Storage Class Memory 커맨드에 대한 커맨드 코드를 명시하는 값.
포맷(FMT)(706): 상기 커맨드 요청 블록의 포맷을 명시하는 값.
총 사이즈(TS)(708): SCM 증분들의 카운트로서 인코딩된, 요청된 스토리지 클래스 메모리의 사이즈를 명시하는 값. 이미 구성된 SCM 증분들의 카운트에 TS를 더하면 최대 구성 가능 SCM 증분들(MCI) 한계치를 초과하지 않아야 한다. 만일 초기화된 상태에 있는 SCM 증분들의 수가 명시된 총 사이즈보다 작다면, 특정한 응답 코드가 제공된다.
비동기 완료 상관자(ACC)(710): 아래에 기술된 통지 응답의 비동기 완료 통지 필드에 회신되는 값. 이 상관자(correlator)는 요청을 개시한 원 스레드(original thread)를 재개시키는 역할을 한다.
Configure Storage Class Memory 커맨드에 대한 커맨드 응답 블록의 한 실시 예가 도 7b에 도시된다. 한 실시 예에서, 커맨드 응답 블록(730)은 다음을 포함한다:
길이(732): 상기 커맨드 응답 블록의 길이를 표시하는 값.
응답 코드(734): Configure Storage Class Memory 커맨드를 실행하는 시도의 결과들을 기술하는 값.
만일 정의된 응답 코드가 응답 코드 필드에 저장되면, 비동기 프로세스가 상기 커맨드의 처리를 완료하기 위해 개시된다. 만일 상기 정의된 코드 이외의 응답 코드가 응답 코드 필드에 저장되면, SCM 증분은 구성되지 않고, 비동기 프로세스도 개시되지 않고, 그리고 후속 통지도 이루어지지 않는다. 비동기 프로세스의 완료가 통지 응답에 표시된다.
포맷(FMT)(736): 상기 커맨드 응답 블록의 포맷을 표시하는 값.
Configure Storage Class Memory 커맨드는 스토리지 클래스 메모리의 일정 양이 SCM 주소 공간으로 구성되도록 요청하기 위해 프로그램에 의해 발행된다. SCM을 구성하는데 사용되는 논리의 한 실시 예가 도 7c를 참조하여 기술된다.
초기에, 프로그램이 Configure SCM 커맨드를 포함하는 Channel Subsystem Call 명령을 발행한다(단계 740). Configure SCM 커맨드의 요청 블록이 채널 서브시스템에 의해 획득되고(단계 742), 채널 서브시스템이 상기 커맨드의 실행을 시도한다(단계 744). 상기 커맨드의 실행 시도가 성공을 표시하지 않는 응답 코드를 산출하면(질의 746), 이 응답 코드는 Configure SCM 커맨드의 응답 블록에 배치되고(단계 748), 이 응답 블록이 회신된다(단계 750).
성공적인 응답 코드가 표시되면(질의 746), 이 응답 코드는 응답 블록에 배치되고(단계 752), 이 응답 블록이 회신된다(단계 754). 이 예에서, 성공적인 응답 코드는, 요청 블록의 길이 필드가 유효하고; 이 커맨드가 시스템에서 이용 가능하고; 커맨드 요청 블록이 유효한 포맷을 갖고 있으며; 채널 서브시스템은 명령을 수행할 수 있고(즉, 비지(busy)하지 않음); 요청된 총 사이즈는 요청된 구성의 최대 구성가능 SCM 증분들의 한계치를 초과하지 않으며; 요청된 총 사이즈가 초기화된 상태에 있는 SCM 증분들의 수를 초과하지 않는다는 것을 표시한다.
이어서, 구성을 완료하기 위한 비동기 프로세스가 개시된다(단계 756). 이 프로세스에 관련된 더 상세한 사항들은 도 7d를 참조하여 기술된다.
한 실시 예에서, 비동기 프로세스가 구성을 수행하여 하나 또는 그 이상의 증분들을 할당한다(단계 760). 예를 들어, 각 구성된 SCM 증분에 대해서, 내부 컨트롤들이 변경되어 새로 구성된 증분이 그 파티션에 대한 I/O 이동 요청들에 액세스될 수 있도록 한다. 구체적으로는, 채널 서브시스템이 CHSC Configure 커맨드를 수신한 것에 응답하여, 채널 서브시스템의 펌웨어는 내부 테이블들을 조사하는데, 이는 요청을 충족시킬 충분한 증분들이 있다는 것을 확인하기 위해서 그리고 그 요청이 구성을 위해 최대 구성가능 SCM 증분들을 초과하지 않도록 하기 위해서이다. 만일 그 요청이 유효하면, 펌웨어는 하나 또는 그 이상의 테이블들을 업데이트 하는데, 이는 증분(들)을 구성에 할당하고 그 증분(들)을 그 구성에 대해 오퍼레이션 가능 상태로 배치하기 위해서이다. 그 다음, 그 증분들은 구성으로부터 (전술한) I/O 이동 요청들이 액세스 가능하다. 비동기 프로세스의 완료가 통지 응답에 표시된다(단계 762).
Configure Storage Class Memory 커맨드에 대한 통지 응답 데이터가 SEI(Store Event Information) 커맨드의 응답 블록에 회신된다. Configure Storage Class Memory 커맨드에 대해 사용되는 통지 응답 블록의 포맷의 한 실시 예가 도 8a를 참조하여 기술된다.
한 실시 예에서, Configure Storage Class Memory 커맨드의 통지 응답 블록(800)은 다음을 포함한다:
길이(802): 커맨드 응답 블록의 길이를 표시하는 값.
응답 코드(804): Store Event Information CHSC 커맨드를 실행하기 위한 시도의 결과들을 기술하는 값.
포맷(FMT)(806): 커맨드 응답 블록의 포맷을 표시하는 값.
통지 타입(808): 이것은 EADM 관련 통지임을 표시하는 값.
P(810): 세트될 때, 채널 서브시스템이 이 CHSC 커맨드에 응답하여 제공된 정보에 더하여 펜딩 이벤트 정보를 갖고 있다는 것을 명시한다.
V(812): 세트될 때, 채널 서브시스템이 오버플로 조건(overflow condition)을 인지하였고 이벤트 정보는 유실되었다는 것을 명시한다.
콘텐츠 코드(814): 이것은 Configure Storage Class Memory 커맨드 요청에 의해 개시된 비동기 프로세스의 실행의 종결에 대한 응답이라는 것을 표시하는 값.
2차 응답 코드(816): Configure SCM 커맨드를 실행하기 위한 시도의 결과들을 더 기술하는 값.
2차 응답 코드가 명시된 값일 때, 원래 요청된 바대로, 완전한 양의 스토리지 클래스 메모리의 구성이 완료된 것이다. 그렇지 않으면, 예를 들어, 다음을 표시하는 응답 코드들이 제공될 수 있다. 무효한 길이 필드, Configure SCM 커맨드가 설치되지 않음, Configure SCM 커맨드 블록이 무효한 포맷을 가졌음, 총 요청된 사이즈가 MCI 한계치를 초과할 것임, 요청된 총 사이즈가 초기화된 상태에 있는 SCM 증분들의 수를 초과함, 채널 서브시스템이 비지(busy)임.
비동기 완료 상관자(ACC)(818): 대응 커맨드 요청 블록에 원래 명시된 값.
Configure Storage Class Memory 커맨드에 대한 통지 응답 블록을 회신하는데 사용되는 Store Event Information 커맨드의 한 실시 예가 도 8b-8c를 참조하여 기술된다.
Store Event Information 커맨드는 채널 서브시스템에 의해 펜딩된 이벤트 정보를 저장하는데 사용된다. 보통으로, 이 커맨드는 프로그램이 이벤트 정보 펜딩 채널 리포트를 수신한 결과로서 실행된다.
Store Event Information 커맨드의 실행은 채널 서브시스템에 포함된 정보를 변경시킬 수 있다. Store Event Information 커맨드는 동기적으로 실행된다.
Store Event Information 커맨드에 대한 커맨드 요청 블록의 한 실시 예가 도 8b를 참조하여 기술된다. 한 예에서, 요청 블록(830)은 다음을 포함한다:
길이(832): 이 필드는 커맨드 요청 블록의 길이를 명시한다.
커맨드 코드(834): 이 필드는 Store Event Information 커맨드를 명시한다.
포맷(FMT)(836): 커맨드 요청 블록의 포맷을 명시하는 값.
통지 타입 선택 마스크(NTSM, Notification Type Selection Mask)(838): 각 비트 포지션(bit position)이 동일 수치 값(same numeric value)의 논리적 프로세서 실렉터(LPS) 값에 대응하는 마스크. 한 예에서, 비트 0은 무시되고 1인 것으로 가정한다. 1에서 시작하는 명시된 범위에서 비트 포지션이 0(zero)일 때, 그 비트 포지션에 대응하는 통지 타입은 응답 블록에 저장되지 않으며, 만일 펜딩으로 인지되면, 폐기된다. 이러한 비트가 1일 때, 그 비트 포지션에 대응하는 통지 타입은 응답 블록에 저장될 수 있다.
한 실시 예에서, 도 8c를 참조하여, Store Event Information 커맨드에 대한 응답 블록(850)이 아래에 다음과 같이 기술된다:
길이(852): 커맨드 응답 블록의 최초 길이를 명시하는 값. 완료 길이는 응답 코드에 따라 다르며, 응답 코드는 Store Event Information 커맨드를 실행하기 위한 시도의 결과로서 저장된다.
만일 성공을 표시하는 코드 이외의 응답 코드가 응답 코드 필드에 저장되면, 어떤 정보도 응답 데이터 영역(response data area)에 저장되지 않는다.
만일 성공을 표시하는 응답 코드가 응답 코드 필드에 저장되면, 이벤트 정보가 응답 데이터 영역에 저장된다.
응답 코드(854): Store Event Information 커맨드를 실행하기 위한 시도의 결과들을 기술하는 값.
Store Event Information 커맨드를 위해, 응답 데이터 영역은 고정된 길이 부분과 가변적인 길이 부분을 포함한다.
명시된 포맷 응답을 위해, NT가 영이 아닐 때, 포맷은 구체적인 통지 타입에 따라 결정되며, 콘텐츠 코드 종속 필드의 포맷은 구체적인 통지 타입과 콘텐츠 코드 (CC) 필드에 따라, 함께 고려하여 결정된다.
포맷(FMT)(856): 커맨드 응답 블록의 포맷을 명시하는 값.
통지 타입(NT)(858): 통지 타입(NT)을 표시하는 값. 특정한 값이 Configure SCM 커맨드에 대하여 제공된다.
P 플래그(860): 세트될 때, 채널 서브시스템이 이 CHSC 커맨드에 응답하여 제공된 정보에 추가하여 펜딩 이벤트 정보를 가지고 있음을 명시한다. 프로그램은 Store Event Information 커맨드를 다시 실행함으로써 추가 정보를 획득할 수 있다. 세트되지 않을 때, 이 플래그는 채널 서브시스템이 추가 펜딩 이벤트 정보를 가지고 있지 않음을 명시한다.
V 플래그(862): 세트될 때, 채널 서브시스템이 오버플로 조건(overflow condition)을 인지하였고 이벤트 정보는 유실되었다는 것을 명시한다. 응답 데이터 영역에 포함되지 않은 이벤트 정보가 가장 최근의 펜딩 정보인 동안에 오버플로 조건이 인지되었다. 오버플로는 응답 데이터 영역에 포함된 정보에 영향을 주지 않는다.
콘텐츠 코드(CC)(864): 응답 데이터 영역에 포함된 정보의 타입을 기술하는 값. 한 예에서, 이 값은 스토리지 클래스 메모리 변경 통지를 표시하며 이 안에서 하나 또는 그 이상의 SCM 증분들이 상태(state or status)를 변경하였다.
콘텐츠 코드 종속 필드(866): 이 필드는 상기 이벤트에 관한 추가 정보를 포함할 수 있다.
구성 변경의 성공적인 통지는 프로그램이 Store SCM Information 커맨드를 발행하게 하여 그 구성에 관한 상세 사항들을 획득하게 할 수 있다.
스토리지 클래스 메모리는 증가시킬 수도 있지만, 스토리지 클래스 메모리는 감소될 수도 있다. Deconfigure Storage Class Memory 커맨드는 요청하는 구성의 SCM 주소 공간으로부터 스토리지 클래스 메모리의 일정 양이 제거되도록 요청한다. 구성해제될(to be diconfigured) SCM 증분은 구성된 상태에 있어야 한다.
구성해제될 SCM 증분들이, 여기에서 기술되는 SCM 증분 요청 리스트에 명시된다. 하나 또는 그 이상의 인접한 SCM 증분들이 SCM 증분 요청 리스트 엔트리(SIRLE)에 명시될 수 있다. 다른 증분들의 리스트와 인접하지 않은 증분들의 각 리스트(영역(extent)이라고도 알려짐)를 위해 별도의(separate) SIRLE가 명시될 수 있다.
지속 규칙들과 상관없이, SCM 증분의 성공적인 구성해제는 그 증분을 초기화되지 않은 상태로 배치한다. 영이됨(zeroing)이 완료될 때, SCM 증분은 초기화 되지 않은 상태(the unitialized state)에서 초기화 상태 (the initialized state)로 전환한다.
Deconfigure Storage Class Memory 커맨드에 대한 커맨드 요청 블록의 한 실시 예가 도 9a에 도시된다. Deconfigure Storage Class Memory 커맨드에 대한 커맨드 요청 블록(900)은, 예를 들어, 다음을 포함한다:
길이(902): 커맨드 요청 블록의 길이를 명시하는 값. 한 예에서, 길이는 32+(Nxl6) 바이트이고, 여기에서 N은 SCM 증분 요청 리스트 엔트리들 (SIRLE들)의 카운트이다. 이 예에서 유효한 길이는 16으로 균등하게(evenly) 나눌 수 있고(divisible) (32+1x16) ≤ L1 ≤ (32+253x16) 범위 안에 있다.
커맨드 코드(904): Deconfigure Storage Class Memory 커맨드에 대한 커맨드 코드를 명시하는 값.
포맷(FMT)(906): 커맨드 요청 블록의 포맷을 명시하는 값.
비동기 완료 상관자(ACC)(908): 전술한, 비동기 완료 통지에서 회신되는 값.
SCM 증분 요청 리스트(910): 이 필드는 SCM 증분 요청 리스트(SIRL)을 포함한다. SCM 증분 요청 리스트는 하나 또는 그 이상의 엔트리들(SIRLE들)을 포함한다. SIRL의 길이는 길이 필드의 값으로부터 결정된다.
SCM 증분 요청 리스트 엔트리(SIRLE)는 스토리지 클래스 메모리의 명시된 영역(예를 들어, 증분들의 리스트)의 사이즈와 위치를 명시한다. 영역(extent) 또는 SCM 영역(extent)은 스토리지 클래스 메모리의 명시된 사이즈이다.
도 9b를 참조하여, 한 예에서, SIRLE(920)은 다음을 포함한다:
총 사이즈(TS)(922): 구성해제될 스토리지 클래스 메모리의 사이즈를 명시하는 값이며, SCM 증분들의 카운트로 인코딩됨.
시작 SCM 주소(SA)(924): SCM 주소이고, SCM 주소 공간 내 위치인 값이며, 이 위치로부터 SIRLE에 의해 구성해제된 제1 또는 유일한 SCM 증분이 제거된다. 이 예에서는, 제1 SCM 증분 내의 오프셋을 구성할 최하위 비트(least significant bit) 포지션들은 무시되고 0들이 되는 것으로 가정한다.
총 사이즈가 1보다 클 때, 제1 증분을 넘는 각각의 추가 SCM 증분은 어떤 SCM 주소에 위치하는데, 이 SCM 주소는 SCM 증분 사이즈로 균등하게 나눌 수 있고(divisible), 구성된 SCM 증분을 포함하며, 그리고 그 위치가 이전의(prior) SCM 증분의 마지막 바이트와 인접한다. 다른 말로 하면, 다음의, 연속 위치에 있는 것을 말한다.
만일 시작 주소와 총 사이즈에 의해, 함께 고려되어, 기술되는 공간이 구성된 SCM 증분들로 완전히 가득 차지(full) 않으면, 명시된 응답 코드가 제공되고, SCM 증분은 구성해제 되지 않고, 비동기 프로세스는 개시되지 않으며, 그리고 후속 통지도 발생하지 않는다.
성공적으로 완료되면, 각각의 구성해제된 SCM 증분은 유보 상태(reserved state)에 진입하고 그 다음엔 대기 상태(standby state)로 배치되기 전에 영이됨 상태가 된다.
Deconfigure Storage Class Memory 커맨드에 대한 커맨드 응답 블록이 도 9c에 도시된다. 한 실시 예에서, 커맨드 응답 블록(950)은 다음을 포함한다:
길이(952): 커맨드 응답 블록의 길이를 표시하는 값.
응답 코드(954): Deconfigure Storage Class Memory 커맨드를 실행하기 위한 시도의 결과들을 기술하는 값.
만일 명시된 값의 응답 코드가 응답 코드 필드에 저장되면, 상기 커맨드의 처리를 완료하기 위해 비동기 프로세스가 개시된다. 만일 명시된 값 이외의 응답 코드가 응답 코드 필드에 저장되면, SCM 증분은 구성해제 되지 않고, 비동기 프로세스는 개시되지 않으며, 그리고 후속 통지도 일어나지 않는다. 비동기 프로세스의 완료가 통지 응답에 표시된다.
Deconfigure Storage Class Memory 커맨드의 동기 파트(synchronous part)가 명시된 응답 코드로 완료되기 전에, SCM 증분 요청 리스트 내 모든 엔트리들이 조사되는데, 이는 모든 명시된 SCM 증분들이 구성된 상태에 있도록 하기 위함이다.
포맷(FMT)(956): 커맨드 응답 블록의 포맷을 표시하는 값.
Deconfigure SCM 커맨드와 연관된 논리의 한 실시 예가 도 9d-9e를 참조하여 기술된다.
초기에, 프로그램은 Deconfigure SCM 커맨드를 포함하는 Channel Subsystem Call 명령을 발행한다(단계 970). Deconfigure SCM 커맨드의 요청 블록이 채널 서브시스템에 의해 획득되고(단계 972), 채널 서브시스템이 상기 커맨드의 실행을 시도한다(단계 974). 만일 상기 커맨드의 실행 시도가 성공을 표시하지 않는 응답 코드를 산출하면(질의 976), 그 응답 코드는 Deconfigure SCM 커맨드의 응답 블록에 배치되고(단계 978), 그 응답 블록은 회신된다(단계 980).
만일 성공적인 응답 코드가 표시되면(질의 976), 그 응답 코드는 응답 블록에 배치되고(단계 982), 그 응답 블록은 회신된다(단계 984). 이 예에서, 성공적인 응답 코드는: 요청 블록의 길이 필드가 유효함; 커맨드가 시스템에서 이용 가능함; 커맨드 요청 블록이 유효한 포맷을 가짐; 채널 서브시스템이 상기 커맨드를 수행 가능함(즉, 비지(busy)하지 않음); 및 SCM 증분들은 원래 구성된 상태에 있었음을 표시한다.
이어서, 구성해제를 완료할 비동기 프로세스가 개시된다(단계 986). 이 처리에 관한 더 상세한 사항은 도 9e를 참조하여 기술된다.
한 실시 예에서, 비동기 프로세스가 구성해제를 수행한다(단계 990). 예를 들어, 하나 또는 그 이상의 증분들이 할당해제 된다(deallocated). SCM 증분이 구성된 상태에서 유보 상태로 이동한다. 유보 상태로 진입(entry)하면, 영이 되게하는 프로세스(zeroing process)는 계속되고, 완료되면, SCM 증분은 대기 상태로 전환된다. 비동기 프로세스의 완료가 통지 응답에 표시된다(단계 992).
Deconfigure Storage Class Memory 커맨드에 대한 통지 응답 데이터가 Store Event Information(SEI) CHSC 커맨드의 응답 블록에 회신된다. 이 응답 블록의 한 예가 도 8a를 참조하여 기술된다. 그러나, 이 예에서 콘텐츠 코드는 이것이 Deconfigure Storage Class Memory 커맨드 요청에 의해 개시된 비동기 프로세스의 실행의 종결에 대한 응답이라고 표시한다. 이와 유사하게, 2차 응답 코드가 Deconfigure Storage Class Memory 커맨드의 실행 시도의 결과들을 더 기술한다.
추가 실시 예에서, 스토리지 증분들의 할당 및 할당해제가 사용자에게 제출되는 패널을 통해서 요청될 수 있다. 예를 들어, 한 서비스 엘리먼트가 그래픽 인터페이스를 제공하기 위해 사용되며, 이 그래픽 인터페이스를 통해 사용자는 시스템에 파라미터들을 명시할 수 있다. 스토리지 클래스 메모리를 위해, 스토리지 클래스 메모리 할당 패널이라 불리는 패널이 사용자에게 다음의 오퍼레이션들을 수행할 수 있게 해준다:
1. 주어진 구성에 대한 최대 구성가능 증분들(MCI)을 명시한다.
2. 증분들을 구성에 할당한다.
3. 증분들을 구성으로부터 할당해제 한다.
상기 패널은 또한 구성 증분 할당들 및 MCI를 볼 수 있게 해주고, 이용 가능 풀(pool), 이용 불가능 풀, 및 초기화되지 않은 풀 내의 증분들의 수를 볼 수 있게 해준다. SE에서의 액션(action)으로 인해 증분들의 할당이 변경될 때 또는 상기 풀들 중 하나의 사이즈가 변경될 때, 통지가 구성들에 보내진다.
위에 상세하게 기술된 것은 스토리지 클래스 메모리를 관리하기 위한 퍼실리티에 관한 것이다. 퍼실리티는 프로그램이 상기 메모리에 대한 특정한 지식(knowledge)이 없이도 상기 메모리에 액세스하게 해주는 추상화(abstraction)를 제공한다. 본 발명의 하나 또는 그 이상의 실시 예들에 따라서, 메인 스토리지와 SCM 사이에 데이터를 운반하기 위한; SCM을 클리어 또는 해제하기 위한; SCM을 구성 또는 구성해제 하기 위한; 그리고 SCM의 구성을 발견하기 위한 능력(capability)이 제공된다. 다른 능력들도 또한 제공된다.
한 실시 예에서, 스토리지 클래스 메모리가 다수 디바이스들 및 I/O 어댑터들에 걸친 그 물리적 구현과는 관계없이, 사용자 레벨 프로그램들에 플랫 메모리 공간으로서 제공된다.
채널 서브시스템 및/또는 ADM 퍼실리티에 관한 상세 사항들은 "하드웨어 페이지 전송 제어 엔티티를 통하여 소프트웨어 사용자에 의한 가상 주소지정 제어 인에이블링을 위한 방법 및 수단(Method and Means for Enabling Virtual Addressing Control By Software Users Over A Hardware Page Transfer Control Entity),"(Antognini 외 발명, 1994년 12월 27일 발행)라는 명칭의 미국 특허번호 5,377,337호와; "비동기 코-프로세서 데이터 이동기의 방법 및 수단(Asynchronous Co-Processor Data Mover Method and Means),"(Brent 외 발명, 1995년 8월 15일 발행)이라는 명칭의 미국 특허 일련번호 5,442,802호와; "채널 커맨드 워드의 처리를 위한 파이프라인 방법 및 시스템(Method and System for Pipelining the Processing of Channel Command Words),"(Casper 외 발명, 1996년 6월 11일 발행)이라는 명칭의 미국 특허번호 5,526,484호에 기술되어 있으며, 이들 각각은 여기에서 전체가 참조로 포함된다.
이어서, (z/Architecture®의 구체적인 구현을 위해) 채널 서브시스템과 그와 연관된 명령들에 관한 추가 정보가 아래에 제공된다:
입력/출력(I/O)
"입력(input)"과 "출력(output)"이라는 용어는 I/O 디바이스들과 메인 스토리지 사이에 데이터의 전송을 기술하는데 사용된다. 이러한 종류의 전송과 관련된 오퍼레이션(operation)을 I/O 오퍼레이션이라 부른다. I/O 오퍼레이션들을 컨트롤하는데 사용되는 퍼실리티들을 집합적으로 채널 서브시스템이라 부른다. (I/O 디바이스들과 이들의 컨트롤 유닛들은 채널 서브시스템에 접속된다.
채널 서브시스템( The Channel Subsystem )
채널 서브시스템은 I/O 디바이스들과 메인 스토리지 사이에 정보의 흐름을 지시한다. 채널 서브시스템은 CPU들에게서 I/O 디바이스들과 직접 통신하는 태스크를 경감해주고 데이터 처리가 I/O 처리와 동시에 진행되도록 가능하게 해준다. 채널 서브시스템은 I/O 디바이스들의 내부/외부로의 정보의 흐름을 관리하는데 통신 링크로서 하나 또는 그 이상의 채널 경로들을 사용한다. I/O 처리의 일부로서, 채널 서브시스템은 또한 채널 경로 가용성(availability)을 테스트함으로써 경로 관리 오퍼레이션을 수행하고, 가용 채널 경로를 선택하고, 디바이스에 의한 I/O 오퍼레이션의 수행을 개시한다.
채널 서브시스템 내에 서브채널들이 있다. 채널 서브시스템을 통해서 프로그램이 액세스 가능한 각각의 I/O 디바이스에 대해 하나의 전용 서브채널이 제공된다.
다수-서브채널-세트(multiple-subchannel-set) 퍼실리티는 옵션(optional) 퍼실리티이다. 그것이 설치될 때, 서브채널들은 다수 서브채널 세트들로 분할되고(partitioned), 각 서브채널 세트는 I/O 디바이스에 하나의 전용 서브채널을 제공할 수 있다. 사용되는 모델과 인터페이스에 따라서, 어떤 I/O 디바이스들은 단지 특정한 서브채널 세트들을 통해서만 액세스가 허용될 수도 있다.
각 서브채널은 그와 연관된 I/O 디바이스와 채널 서브시스템에 대한 그 디바이스의 접속(attachment)에 관한 정보를 제공한다. 서브채널은 또한 I/O 오퍼레이션들과 그와 연관된 I/O 디바이스와 관련된 기타 기능들에 관한 정보를 제공한다. 서브채널은 채널 서브시스템이 연관된 I/O 디바이스들에 관한 정보를 CPU들에 제공하는데 이용하는 수단이고, CPU들은 이 정보를 I/O 명령들을 실행함으로써 획득한다. 제공되는 실제 서브채널의 수는 모델과 구성에 따라 다르며; 최대 주소지정능력(maximum addressability)은 각 서브채널 세트에서 0-65,535이다.
I/O 디바이스들은 컨트롤 유닛들을 통해서 채널 경로들을 이용하여 채널 서브시스템에 접속된다. 컨트롤 유닛들은 하나의 채널 경로보다 많은 채널 경로를 이용하여 채널 서브시스템에 접속될 수 있고, I/O 디바이스는 하나보다 많은 컨트롤 유닛에 접속될 수 있다. 모두에서, 개별(individual) I/O 디바이스는, 모델과 구성에 따라서는, 서브채널을 통해서 8개까지의 다른 채널 경로들을 이용하여 채널 서브시스템이 액세스 가능하다. 채널 서브시스템에 의해 제공되는 채널 경로의 총수는 모델과 구성에 따라 다르며; 최대 주소지정능력은 0-255이다.
채널 서브시스템의 성능은 그 사용법(use)과 구현되는 시스템 모델에 달려있다. 다른 데이터-전송 능력들을 갖는 채널 경로들이 제공되고, 특정한 속도(rate)로만 데이터를 전송하도록 설계된 I/O 디바이스(예를 들어, 자기 테이프 유닛 또는 디스크 스토리지)는 적어도 이 데이터 속도를 감당할 수 있는 채널 경로에서만 동작할 수 있다.
채널 서브시스템은 I/O 오퍼레이션들의 컨트롤을 위한 공통의 퍼실리티들을 포함한다. 이러한 퍼실리티들이 I/O 디바이스들을 컨트롤하기 위해 특정하게 설계된 별개의(separate) 자율적인(autonomous) 장치(equipment)의 형태로 제공될 때, I/O 오퍼레이션들은 CPU들 내 활동(activity)과 완전히 중복된다. I/O 오퍼레이션들 동안에 채널 서브시스템에 의해 요구되는 유일한 메인 스토리지의 사이클들은, 서브채널들이 주소지정불가능 메인 스토리지의 일부로서 구현될 때, 채널 서브시스템이 그 서브채널들에 액세스하는데 요구될 수 있는 사이클들과 함께, 메인 스토리지 내 최종 위치들 내/외부로 데이터와 컨트롤 정보를 전송하는데 필요한 사이클들이다. 이 사이클들은, CPU와 채널 서브시스템이 동시에 동일한 메인 스토리지의 영역을 참조하려고 시도할 때를 제외하고는, CPU 프로그램들을 지연시키지 않는다.
서브채널 세트( Subchannel Sets )
다수-서브채널-세트(multiple-subchannel-set) 퍼실리티가 설치될 때, 서브채널들은 다수 서브채널 세트들로 분할된다. 이들은 최대 4개의 서브채널 세트까지 될 수 있으며, 각각은 서브채널-세트 식별자(SSID)에 의해 식별된다. 다수-서브채널-세트 퍼실리티가 설치되지 않을 때는, 0(zero)의 SSID를 갖는 하나의 서브채널 세트만이 존재한다. 다수-서브채널-세트 퍼실리티가 인에이블되지 않을 때는, 단지 서브채널 세트 0(zero)만이 프로그램에 보인다.
서브채널( Subchannels )
서브채널은 디바이스의 논리적 외관(logical appearance)을 프로그램에 제공하고 단일 I/O 오퍼레이션을 지속하기 위해 요구되는 정보를 포함한다. 서브채널은 채널-프로그램 지정(a channel-program designation), 채널-경로 식별자, 디바이스 번호, 카운트, 상태 표시들, 및 I/O-인터럽션-서브클래스 코드의 형태로 정보를 포함하고, 또한 경로 가용성과 펜딩 또는 수행중인 기능들에 관한 정보도 포함하는 내부 스토리지로 구성된다. I/O 오퍼레이션들은 디바이스와 함께, 그 디바이스와 연관된 서브채널을 지정하는 I/O 명령들의 실행에 의해 개시된다.
각 디바이스는, 설치 시 구성되는 동안에 그 디바이스가 할당된 각 채널 서브시스템 내 하나의 서브채널을 이용하여 액세스 가능하다. 이 디바이스는 물리적으로 식별 가능한 유닛일 수도 있고 또는 컨트롤 유닛 내부에 들어 있을 수도 있다. 예를 들면, 특정한 디스크-스토리지 디바이스들에서, 데이터를 검색하는데 사용되는 각 액추에이터는 디바이스로 간주된다. 모든 경우에, 채널 서브시스템의 관점에서 보면, 디바이스는 하나의 서브채널과 고유하게(uniquely) 연관되면서 채널 경로 -이 채널 경로를 통해 액세스 가능함- 의 타입에 맞게 정의된 통신 프로토콜을 사용하여 채널 서브시스템에 의한 선택에 응답하는 엔티티(entity)이다.
일부 모델들에서, 서브채널들은 블록들로 제공된다. 이 모델들에서, 접속된 디바이스들보다 더 많은 서브채널들이 제공될 수 있다. 서브채널들 -즉, 제공되나 이들에 할당된 디바이스들을 갖지 않는 서브채널들- 은 기능을 수행하기 위해 채널 서브시스템에 의해 사용되지 않으며 연관된 디바이스-번호-유효 비트(device-number-valid bit)를 서브채널의 서브채널-정보 블록에 영으로 저장함으로써 표시된다.
채널 서브시스템에 의해 제공되는 서브채널의 수는 연관된 디바이스들로 가는 채널 경로의 수와는 무관하다. 예를 들면, 대체(alternate) 채널 경로들을 통하여 여전히 액세스 가능한 디바이스는 단일 서브채널에 의해 표시된다. 각 서브채널은, 서브채널-세트 퍼실리티가 설치될 때, 16비트 이진 서브채널 수와 2비트 SSID를 사용하여 주소지정 된다.
서브채널에서의 I/O 처리가 START SUBCHANNEL의 실행에 의해 요청된 후에, CPU는 다른 작업(other work)을 위해 해제되고, 채널 서브시스템은 데이터를 어셈블(assemble) 또는 역어셈블(disassemble)하여 I/O 디바이스와 메인 스토리지 사이의 데이터 바이트의 전송을 동기화한다. 이것을 달성하기 위해, 채널 서브시스템은 메인 스토리지에서 데이터의 수신지(destination) 또는 출처(source)를 기술하는 주소와 카운트를 유지하고 업데이트한다. 이와 유사하게, I/O 디바이스가 프로그램의 어텐션(attention of the program)을 불러와야 하는 신호들을 제공할 때, 채널 서브시스템은 그 신호들을 상태 정보(status information)로 변환하여 그 정보를 서브채널에 저장하며, 여기에서 그 정보는 프로그램에 의해 검색될 수 있다.
입력/출력 디바이스들의 접속( Attachment of Input / Output Devices )
채널 경로( Channel Paths )
채널 서브시스템은 채널 서브시스템과 컨트롤 유닛들 사이의 채널 경로들을 이용하여 I/O 디바이스들과 통신한다. 컨트롤 유닛은 하나 보다 많은 채널 경로를 이용하여 채널 서브시스템에 의해 액세스될 수 있다. 이와 유사하게, I/O 디바이스는, 각각 채널 서브시스템으로 가는 하나 또는 그 이상의 채널 경로들을 갖는, 하나 보다 많은 컨트롤 유닛을 통하여 채널 서브시스템에 의해 액세스될 수 있다.
서브채널로 가도록 구성된 다수 채널 경로들에 의해 채널 서브시스템에 접속되는 디바이스들은 가용 채널 경로들 중 어느 하나를 이용하여 채널 서브시스템에 의해 액세스될 수 있다. 이와 유사하게, 동적-재연결(dynamic-reconnection) 기능을 갖고 다수경로 모드에서 동작하는 디바이스는, 일련의 I/O 오퍼레이션들을 계속하기 위해 채널 서브시스템에 논리적으로 재연결할 때, 이 디바이스가 서브채널로 가도록 구성된 가용 채널 경로들 중 어느 하나를 선택할 수 있게 동작하도록 초기화될 수 있다.
채널 서브시스템은 하나 이상의 채널 경로 타입을 포함할 수 있다. 채널 서브시스템에 의해 사용되는 채널-경로 타입들의 예들은 ESCON I/O 인터페이스, FICON I/O 인터페이스, FICON-변환 I/O 인터페이스, 및 IBM System/360 및 System/370 I/O 인터페이스가 있다. "직렬-I/O 인터페이스"라는 용어는 ESCON I/O 인터페이스, FICON I/O 인터페이스, 및 FICON-변환 I/O 인터페이스를 참조하는데 사용된다. "병렬-I/O 인터페이스"라는 용어는 IBM System/360 및 System/370 I/O 인터페이스를 참조하는데 사용된다.
ESCON I/O 인터페이스는 시스템 라이브러리 간행물 "IBM 기업용 시스템 아키텍처/390 ESCON I/O 인터페이스(IBM Enterprise Systems Architecture/ 390 ESCON I/O Interface), SA22-7202"에 기술되어 있으며, 이것은 그 전체가 여기에 참조로 포함된다.
FICON I/O 인터페이스는 ANSI 표준 문서 "Fibre Channel-Single-Byte Command Code Sets-2(FC-SB-2)"에 기술되어 있다.
IBM 시스템/360 및 시스템/370 I/O 인터페이스는 시스템 라이브러리 간행물 "IBM System/360 and System/370 I/O Interface Channel to Control Unit OEMI, GA22-6974"에 기술되어 있으며, 이것은 그 전체가 여기에 참조로 포함된다.
채널 경로의 타입, 그 채널 경로에 의해 제공되는 퍼실리티들, 및 I/O 디바이스에 따라서, I/O 오퍼레이션은 프레임-멀티플렉스 모드(frame-multiplex mode), 버스트 모드(burst mode), 또는 바이트-멀티플렉스 모드(byte-multiplex mode) 이들 세 모드 중 한 모드에서 일어날 수 있다.
프레임-멀티플렉스 모드에서, I/O 디바이스는 채널 프로그램의 실행의 지속 시간 동안 채널 경로에 논리적으로 연결된(connected) 상태를 유지한다. 프레임-멀티플렉스 모드에서 오퍼레이션 가능한 채널 경로의 퍼실리티들은 다수의 동시에 동작하는(concurrently operating) I/O 디바이스들에 의해 공유될 수 있다. 이 모드에서 I/O 오퍼레이션을 완료하기 위해 요구되는 정보는 프레임들로 분할되어 다른 I/O 디바이스들을 위한 I/O 오퍼레이션들의 프레임들과 인터리브(interleave)될 수 있다. 이 기간 동안에, 다수 I/O 디바이스들은 채널 경로에 논리적으로 연결된 것으로 간주된다.
버스트 모드에서, I/O 디바이스는 채널 경로를 독점하고 정보의 버스트를 전송하기 위해 채널 경로에 논리적으로 연결된 상태를 유지한다. 버스트가 전송되는 시간 동안에는 다른 디바이스는 상기 채널 경로를 통해 통신할 수 없다. 버스트는 몇 개의 바이트, 데이터의 전체 블록, 연관된 컨트롤 및 상태 정보를 갖는 일련의 블록들(블록 길이들은 0일 수 있음), 또는 채널 경로를 독점하는 상태 정보로 구성될 수 있다. 버스트 모드에서 오퍼레이션 가능한 채널 경로의 퍼실리티들은 다수의 동시에 동작하는(concurrently operating) I/O 디바이스들에 의해 공유될 수 있다.
어떤 채널 경로들은 자기 테이프(magnetic tape)상에서 긴 간격(long gap)이 리드될 때와 같이, 버스트 모드 오퍼레이션 동안에 30초 동안 데이터 전송의 부재(an absence of data transfer)를 허용할 수 있다. 데이터 전송의 부재가 규정된 한계치를 초과할 때 장치 오동작이 표시될 수 있다.
바이트-멀티플렉스 모드에서, I/O 디바이스는 단지 짧은 시간의 간격(interval) 동안만 채널 경로에 논리적으로 연결된 상태를 유지한다. 바이트-멀티플렉스 모드에서 오퍼레이션 가능한 채널 경로의 퍼실리티들은 다수의 동시에 동작하는 I/O 디바이스들에 의해 공유될 수 있다. 이 모드에서, 모든 I/O 오퍼레이션은 짧은 시간의 간격들로 나뉘고 그 시간의 간격들 동안 단지 정보의 일 세그먼트만이 그 채널 경로를 통해서 전송된다. 이러한 간격 동안에, 단지 하나의 디바이스와 그와 연관된 서브채널만이 그 채널 경로에 논리적으로 연결된다. 다수 I/O 디바이스들의 동시 오퍼레이션(concurrent operation)과 연관된 간격들은 디바이스들로부터의 요구(demands)에 응답하여 순서대로 배열된다. 서브채널과 연관된 채널 서브시스템의 퍼실리티는 정보의 일 세그먼트를 전송하는데 요구되는 시간 동안만 임의의 한 오퍼레이션에 대해 자신의 컨트롤을 행사한다. 세그먼트는 단일 바이트의 데이터, 몇 개 바이트의 데이터, 디바이스로부터의 상태 리포트, 또는 새로운 오퍼레이션의 개시에 사용되는 컨트롤 시퀀스로 구성될 수 있다.
보통, 높은 데이터-전송률(data-transfer-rate) 요건을 갖는 디바이스들은 이 채널 경로와 프레임-멀티플렉스 모드에서 동작하고, 더 느린 디바이스들은 버스트 모드에서 동작하고, 그리고 가장 느린 디바이스들은 바이트-멀티플렉스 모드에서 동작한다. 어떤 컨트롤 유닛들은 원하는 오퍼레이션 모드를 세트하기 위한 수동 스위치를 갖고 있다.
병렬-I/O-인터페이스 타입의 채널 경로상에서 발생하는 I/O 오퍼레이션은 그 채널 경로와 I/O 디바이스에 의해 제공되는 퍼실리티들에 따라서 버스트 모드 또는 바이트-멀티플렉스 모드 중 하나에서 발생할 수 있다. 성능의 향상을 위해서, 어떤 채널 경로들과 컨트롤 유닛들은 고속 전송 및 데이터 스트리밍(high-speed transfer and data streaming)을 위한 퍼실리티들과 함께 제공된다. 상기 두 퍼실리티들의 설명은 시스템 라이브러리 간행물 "IBM System/360 and System/ 370 I/O Interface Channel to Control Unit OEMI, GA22-6974"를 참조하기 바라며, 이는 그 전체가 여기에 참조로 포함된다.
직렬-I/O-인터페이스-타입의 채널 경로상에서 발생하는 I/O 오퍼레이션은 프레임-멀티플렉스 모드 또는 버스트 모드 중 하나에서 발생할 수 있다. 성능의 향상을 위해서, 상기 직렬-I/O-인터페이스에 접속되는 어떤 컨트롤 유닛들은, 프로그램에 의해 허용될 경우, 유닛-검사 상태의 표시(presentation)과 함께 프로그램에 센스 데이터(sense data)를 제공하는 능력(capability)을 제공한다.
컨트롤 유닛 또는 채널 서브시스템에 따라서, 서브채널을 통한 디바이스로의 액세스는 단일 채널-경로 타입으로 제한될 수 있다.
위에 기술된 모드들과 특징들은 채널 경로를 통해서 정보를 전송하는데 사용되는 프로토콜과 전송 속도에만 영향을 준다. 이 프로그램들이 실행되는 방식(way)에 관해 CPU 또는 채널 프로그램들에 의해 관찰될 수 있는 영향은 없다.
컨트롤 유닛( Control Units )
컨트롤 유닛은 I/O 디바이스를 동작시키고 컨트롤하는데 필요한 논리적 능력들을 제공하고 각 디바이스가 채널 서브시스템에 의해 제공되는 컨트롤의 표준 형식(standard form)에 응답할 수 있도록 각 디바이스의 특성들을 구성시킨다(adapt).
컨트롤 유닛과 채널 서브시스템 사이의 통신은 채널 경로를 통해서 일어난다. 컨트롤 유닛이 채널 서브시스템으로부터 컨트롤 신호들을 받아들이고, 그 채널 경로를 통한 데이터 전송의 타이밍을 컨트롤하고, 그리고 그 디바이스의 상태에 관한 표시들을 제공한다.
컨트롤 유닛에 접속된 I/O 디바이스는 단지 특정의 제한된 오퍼레이션들만을 수행하도록 설계될 수 있고, 또는 다른 많은 오퍼레이션들을 수행할 수도 있다. 통상적인 오퍼레이션은 기록하는 매체와 기록하는 데이터를 이동시킨다. 그 오퍼레이션들을 완수하기 위해, 디바이스는 그 디바이스의 타입에 특유한 상세 신호 시퀀스들이 필요하다. 컨트롤 유닛은 채널 서브시스템으로부터 수신된 커맨드들을 디코딩(decode)하고, 상기 특유한 디바이스의 타입에 대해 그들을 해석하고, 그리고 오퍼레이션의 수행에 요구되는 신호 시퀀스를 제공한다.
컨트롤 유닛은 따로 하우징(housing)에 담길 수도 있고, 또는 물리적 및 논리적으로 I/O 디바이스, 채널 서브시스템, 또는 CPU와 통합될 수도 있다. 대부분의 전기기계식 디바이스들의 경우에, 컨트롤 유닛과 디바이스가 요구하는 장치의 타입에서 차이가 있기 때문에, 디바이스와 컨트롤 유닛 사이에 명확한 인터페이스가 존재한다. 이 전기기계식 디바이스들은 흔히 한 번에 데이터를 전송하는데 컨트롤 유닛에 접속되는 그룹 중 단지 한 디바이스만이 요구되는 타입이고(예를 들면, 자기-테이프 유닛 또는 디스크-액세스 메커니즘), 컨트롤 유닛은 다수의 I/O 디바이스들 사이에서 공유된다. 반대로, 채널-대-채널(channel-to-channel) 어댑터와 같은 어떤 전자식 I/O 디바이스들에서, 컨트롤 유닛은 자신의 아이덴티티를 갖지 않는다.
프로그래머의 관점에서, 컨트롤 유닛에 의해 수행되는 대부분의 기능들은 I/O 디바이스에 의해 수행되는 기능들과 통합될 수 있다. 따라서, 보통 본 설명에서는 컨트롤 유닛의 기능에 대한 특정한 언급을 하지 않으며; I/O 오퍼레이션들의 수행은 마치 I/O 디바이스가 채널 서브시스템과 직접 통신하는 것처럼 기술된다. 컨트롤 유닛에 대한 참조는 컨트롤 유닛에 의해 수행되는 기능을 강조할 때 또는 다수의 디바이스들 사이에서 컨트롤 유닛을 공유하는 것이 I/O 오퍼레이션들의 수행에 어떤 영향을 주는가를 기술할 때만 이루어진다.
I/O 디바이스(I/O Devices )
입력/출력(I/O) 디바이스는 데이터 처리 시스템들 사이에 통신의 수단 또는 시스템과 그 시스템의 환경 사이에 통신의 수단인 외부 스토리지를 제공한다. I/O 디바이스들에는 자기 테이프 유닛, 직접-액세스-스토리지 디바이스(예를 들면, 디스크), 디스플레이 유닛, 타이프라이터-키보드 디바이스, 프린터, 텔레프로세싱 디바이스, 및 센서-기반 장치 등의 장치(equipment)가 포함된다. I/O 디바이스는 물리적으로 뚜렷한 장치일 수도 있고, 다른 I/O 디바이스들과 장치를 공유할 수도 있다.
프린터나 테이프 디바이스와 같은 I/O 디바이스들의 대부분 타입들은 외부 매체를 사용하고, 이 디바이스들은 물리적으로 구분할 수 있으며 식별 가능하다. 다른 타입들은 단지 전자식(electronic)이고 물리적 기록 매체를 직접 다루지 않는다. 채널-대-채널 어댑터는, 예를 들면, 두 채널 경로 사이에 데이터 전송을 제공하고, 그 데이터는 메인 스토리지 밖의 물리적 기록 매체에 결코 도달하지 않는다. 이와 유사하게, 통신 컨트롤러들은 데이터-처리 시스템과 원격 지국(remote station) 사이에 전송을 다룰 수 있고, 그 입력 및 출력은 전송 라인상의 신호들이다.
가장 간단한 경우에, I/O 디바이스는 하나의 컨트롤 유닛에 접속되고 하나의 채널 경로로부터 액세스 가능하다. 컨트롤 유닛들 사이에서 디바이스들을 전환시키고 채널 경로들 사이에서 컨트롤 유닛들을 전환시킴으로써, 어떤 디바이스들을 둘 또는 그 이상의 채널 경로들로부터 액세스 가능하게 만들기 위해 전환 장치(switching equipment)가 사용될 수 있다. 이러한 전환 장치는 다수 경로들을 제공하며 이 경로들에 의해서 I/O 디바이스가 액세스될 수 있다. 성능 또는 I/O 가용성을 향상시키기 위해, 또는 둘 모두를 위해 시스템 내에 I/O 디바이스로 가는 다수 채널 경로들이 제공된다. 디바이스들로 가는 다수 채널 경로들의 관리는 채널 서브시스템과 디바이스의 컨트롤 하에 있지만, 채널 경로들은 프로그램에 의해 간접적으로 컨트롤될 수도 있다.
I/O 주소지정(I/O Addressing )
I/O 주소지정의 네 가지 다른 타입들이 여러 가지 컴포넌트들, 즉, 채널-경로 식별자, 서브채널 번호, 디바이스 번호, 및 프로그램들에 보이지는 않지만 채널-경로 타입에 종속적인 주소들의 필요한 주소지정을 위해 채널 서브시스템에 의해 제공된다. 다수-서브채널-세트 퍼실리티가 설치될 때, 서브채널-세트 식별자(SSID)도 또한 I/O 주소지정에 사용될 수 있다.
서브채널-세트 식별자( Subchannel - Set Identifier )
서브채널-세트 식별자(SSID)는 각각의 제공된 서브채널 세트에 할당되는 2-비트 값이다.
채널-경로 식별자( Channel - Path Identifier )
채널-경로 식별자(CHPID)는 시스템의 각각 설치된 채널 경로에 할당되는 시스템-고유(system-unique)의 8-비트 값이다. CHPID는 채널 경로에 주소를 지정하는데 사용된다. CHPID는 RESET CHANNEL PATH(채널 경로를 리셋하라)의 제2-오퍼랜드 주소에 의해 명시되고 리셋될 채널 경로를 지정하는데 사용된다. 채널 경로들, 즉, 이들에 의해 디바이스에 액세스 가능한 채널 경로들은 STORE SUBCHANNEL이 실행될 때, 각각 그 연관된 CHPID에 의해, 서브채널-정보 블록(SCHIB)에서 식별된다. CHPID는 또한 특정한 채널 경로를 식별할 필요가 있을 때 오퍼레이터 메시지들에서 사용될 수 있다. 시스템 모델은 256개의 채널 경로만큼 제공할 수 있다. 채널 경로의 최대수와 CHPID들을 채널 경로들에 할당하는 것은 시스템 모델에 좌우된다.
서브채널 번호( Subchannel Number )
서브채널 번호는 서브채널에 주소를 지정하는데 사용되는 시스템-고유의 16-비트 값이다. 이 값은 채널 서브시스템의 서브채널 세트 내에서는 고유하다. 서브채널은 8개의 I/O 명령들: 즉, CANCEL SUBCHANNEL, CLEAR SUBCHANNEL, HALT SUBCHANNEL, MODIFY SUBCHANNEL, RESUME SUBCHANNEL, START SUBCHANNEL, STORE SUBCHANNEL, 및 TEST SUBCHANNEL에 의해 주소지정 된다. 특정한 I/O 디바이스에 관한 모든 I/O 기능들은 프로그램에 의해 그 I/O 디바이스에 할당되는 서브채널을 지정함으로써 명시된다. 각 서브채널 세트에서 서브채널들은 항상 단일 범위(single range)의 인접 번호들 내에서 할당되는 서브채널 번호들이다. 가장 낮은 번호의 서브채널은 서브채널 0이다. 채널 서브시스템의 가장 높은 번호의 서브채널은 제공되는 서브채널들의 수보다 1이 적은 것과 동일(equal) 서브채널 번호를 갖는다. 최대 65,536개의 서브채널들이 각 서브채널 세트에서 제공될 수 있다. 보통, 서브채널 번호들은 CPU 프로그램과 채널 서브시스템 사이에 통신에서만 사용된다.
디바이스 번호( Device Number )
할당된 I/O 디바이스를 갖는 각 서브채널은 또한 디바이스 번호라고 불리는 파라미터를 포함한다. 디바이스 번호는 그 디바이스가 서브채널에 할당되는 시점에 서브채널의 파라미터들 중 하나로서 할당되는 16-비트 값이다. 디바이스 번호는 프로그램에 디바이스를 고유하게 식별해준다.
디바이스 번호는 시스템 모델, 구성, 또는 채널-경로 프로토콜들에 의해 부과되는 제한들과는 독립적으로, 디바이스를 식별하는 수단을 제공한다. 디바이스 번호는 시스템과 시스템 오퍼레이터 사이에 일어나는 그 디바이스에 관한 통신들에서 사용된다. 예를 들면, 디바이스 번호는 시스템 오퍼레이터에 의해 입력되는데, 입력 디바이스를 초기 프로그램 로딩에 사용되도록 지정하기 위해 입력된다.
프로그래밍 주석( Programming Note ): 디바이스 번호는 디바이스-설치 시점에 할당되고 임의 값을 가질 수 있다. 그러나, 사용자는 컨트롤 프로그램, 지원 프로그램들, 또는 특정한 컨트롤 유닛이나 I/O 디바이스에 의해 요구될 수 있는 디바이스-번호 할당에 대한 어떤 제한사항들이든 준수해야 한다.
디바이스 식별자( Device Identifier )
디바이스 식별자는, 프로그램에게는 명백하지 않은(not apparent), 즉, 채널 서브시스템에 의해 I/O 디바이스들과 통신하는데 사용되는 주소이다. 사용되는 디바이스 식별자의 타입은 제공되는 특정한 채널-경로 타입과 프로토콜들에 따라 결정된다. 각 서브채널은 하나 또는 그 이상의 디바이스 식별자들을 포함한다.
병렬-I/O-인터페이스 타입의 채널 경로에 있어서, 디바이스 식별자는 디바이스 주소라 불리고 8-비트 값으로 구성된다. ESCON I/O 인터페이스에 있어서, 디바이스 식별자는 4-비트 컨트롤-유닛 주소와 8-비트 디바이스 주소로 구성된다. FICON I/O 인터페이스에 있어서, 디바이스 식별자는 8-비트 컨트롤-유닛-이미지 ID와 8-비트 디바이스 주소로 구성된다. FICON-변환 I/O 인터페이스에 있어서, 디바이스 식별자는 4-비트 컨트롤-유닛 주소와 8-비트 디바이스 주소로 구성된다.
디바이스 주소는 서브채널과 연관된 특정한 I/O 디바이스(와, 병렬-I/O 인터페이스상에서, 컨트롤 유닛)를 식별한다. 디바이스 주소는, 예를 들면, 특정한 자기-테이프 드라이브, 디스크-액세스 메커니즘, 또는 전송선(transmission line)을 식별할 수 있다. 0-255 범위에서 임의 번호가 디바이스 주소로 할당될 수 있다.
파이버-채널 확장( Fibre - Channel Extensions )
파이버-채널-확장(fibre-channel-extensions, FCX) 퍼실리티는 전송-커맨드-컨트롤 블록(TCCB)와 전송-상태 블록(TSB)를 지정하는 전송-컨트롤 워드(TCW)로 구성되는 채널 프로그램의 형성(formation)을 제공하는 선택적인(optional) 퍼실리티이다. TCCB는 전송-커맨드 영역(TCA)를 포함하고 이 영역은 디바이스-커맨드 워드들(DCW들)의 형식으로 존재하는 최대 30개의 I/O 커맨드들로 구성된 리스트를 갖는다. TCW와 그의 TCCB는 리드(read) 또는 라이트(write) 오퍼레이션을 명시할 수 있다. IRB에 더하여, TSB는 TCW 채널 프로그램과 관련된 완료 상태 및 기타 정보를 포함한다.
FCX 퍼실리티는 TCCB, 입력 데이터 스토리지 영역, 및 출력 데이터 스토리지 영역 중 어느 하나 또는 모두를 직접적 또는 간접적으로 지정하는 능력(ability)를 제공한다. 스토리지 영역이 직접적으로 지정되면, TCW는 단일의 인접한 스토리지 블록의 위치를 명시한다. 스토리지 영역이 간접적으로 지정되면, TCW는 하나 또는 그 이상의 전송-간접-데이터-주소 워드들(TIDAW들)로 된 리스트의 위치를 지정한다. TIDAW 리스트들 및 리스트 내 각 TIDAW에 의해 지정된 스토리지 영역은 4K-바이트 범위들을 크로스하는 것이 제한된다.
FCX 퍼실리티는 I/O 오퍼레이션의 상태를 결정하기 위해 CANCEL SUBCHANNEL 명령에 의해 개시될 수 있는 질의 오퍼레이션(interrogate operation)을 또한 제공한다.
I/O- 커맨드 워드(I/O- Command Words )
I/O-커맨드 워드는 커맨드를 명시하고 그 커맨드와 연관된 정보를 포함한다. FCX 퍼실리티가 설치될 때, 두 가지 기본적인 형식의 I/O 커맨드 워드들이 존재하며, 이들은 채널-커맨드 워드(CCW)와 디바이스-커맨드 워드(DCW)이다.
CCW는 길이가 8 바이트이고 실행될 커맨드를 명시한다. 특정한 오퍼레이션들을 개시하는 커맨드들에 있어서, CCW는 또한 그 오퍼레이션과 연관된 스토리지 영역, 데이터 바이트들의 카운트, 그 커맨드가 완료될 때 취해질 액션(action), 및 다른 옵션들을 지정할 수 있다. 모든 I/O 디바이스들은 CCW들을 인지한다.
DCW는 길이가 8 바이트이고 실행될 커맨드, 데이터 바이트들의 카운트, 및 다른 옵션들을 명시한다. FCX를 지원하는 I/O 디바이스들은 DCW들을 인지한다.
전송 커맨드 워드( TCW )
TCW는 전송-커맨드-컨트롤 블록(TCCB)를 지정하며 TCCB는 I/O 디바이스에 전송될 그리고 I/O 디바이스에 의해 실행될 커맨드들의 리스트를 포함한다. TCW는 또한 TCCB 내 커맨드들에 대한 스토리지 영역들을 지정하고 또한 I/O 오퍼레이션의 상태를 가질 전송-상태 블록(TSB)도 지정한다.
채널 프로그램 편성( Channel Program Organization )
FCX 퍼실리티가 설치되지 않을 때, 단일 형식의 채널 프로그램이 존재하며 이것은 CCW 채널 프로그램이다. FCX 퍼실리티가 설치될 때, 또 다른 형식의 채널 프로그램이 존재하며 이것은 TCW 채널 프로그램이다. 두 형식의 채널 프로그램들은 아래에 기술된다.
CCW 채널 프로그램( CCW Channel Program )
하나 또는 그 이상의 CCW들로 구성되는 채널 프로그램을 CCW 채널 프로그램(CCP)라 부른다. 이런 채널 프로그램은 채널 서브시스템에 의한 순차적인 실행을 위해 논리적으로 링크되고 배열되는(arranged) 하나 또는 그 이상의 CCW들을 포함한다.
TCW 채널 프로그램( TCW Channel Program )
단일 TCW로 구성된 채널 프로그램을 TCW 채널 프로그램이라 부른다. TCW는 1부터 30까지의 DCW들을 포함하는 전송-커맨드-컨트롤 블록(TCCB)을 지정한다. TCCB 내의 DCW들은 순차적인 실행을 위해 논리적으로 링크되고 배열된다. 컨트롤 정보를 명시하는 DCW들에 있어서, TCCB는 또한 그 커맨드들에 대한 컨트롤 정보를 포함한다. TCW는 또한 디바이스 내/외부로의 데이터의 전송 및 완료 상태에 대한 전송-상태 블록(TSB)의 위치를 명시하는 DCW들의 스토리지 영역 또는 영역들을 지정한다. 데이터의 전송을 위한 TCCB 및 스토리지 영역들은 인접 또는 인접하지 않은 스토리지로서 명시될 수 있다.
TCW는 또한 완료 상태에 대한 TSB를 지정할 수 있다.
I/O 오퍼레이션의 실행( Execution of I/O Operations )
I/O 오퍼레이션은 4가지 타입의 포맷: 즉, 명령 START SUBCHANNEL, 전송-커맨드 워드들, I/O-커맨드 워드들, 및 오더들(orders)을 갖는 정보에 의해 개시되고 컨트롤된다. START SUBCHANNEL 명령은 CPU에 의해 실행되며, CPU 프로그램의 일부분으로서 I/O 데이터를 관리 또는 처리하는 다른 프로그램들로부터의 I/O 오퍼레이션들에 대한 요청들의 흐름을 감독한다.
START SUBCHANNEL이 실행될 때, 파라미터들이 타겟 서브채널로 보내져 채널 서브시스템이 서브채널과 연관된 I/O 디바이스를 갖는 시작 펑션을 수행하도록 요청한다. 채널 서브시스템이 START SUBCHANNEL 명령의 실행 동안에 보내진 정보를 포함하여 서브채널에 있는 정보를 사용함으로써 시작 펑션을 시작하여, 디바이스로 가는 액세스 가능한 채널 경로를 찾는다. 일단 디바이스가 선택되면, I/O 오퍼레이션의 실행은, CCW 채널 프로그램들을 위해 또는 TCW 채널 프로그램들을 위해, 채널 서브시스템과 I/O 디바이스에 의해서 CCW를 디코딩(decoding) 및 실행하고, 채널 서브시스템에 의해서 TCCB를 I/O 디바이스로 전송하며, 그리고 디바이스에 의해서 DCW를 디코딩 및 실행함으로써 이루어진다. CCW DCW의 커맨드 코드 내 변경자 비트(modifier bit)들이 디바이스에서의 오퍼레이션의 실행에 대한 디바이스-종속적 조건들을 명시함에도 불구하고, I/O-커맨드 워드들과, 전송-커맨드 워드들은 메인 스토리지로부터 페치된다.
테이프를 되감기 하거나 액세스 메커니즘을 디스크 드라이브상에 위치시키는 것과 같은 디바이스에 고유한 오퍼레이션들은 I/O 디바이스들에 의해 디코딩되고 실행되는 오더들(orders)에 의해 명시된다. 오더들은 컨트롤 커맨드의 커맨드 코드 내 변경자 비트들로 디바이스에 전송될 수도 있고, 컨트롤 또는 라이트 오퍼레이션 동안에 데이터로서 디바이스에 전송될 수도 있으며, 또는 다른 수단을 이용하여 디바이스에 이용될 수도 있다.
시작- 펑션의 개시( Start - Function Initiation )
CPU 프로그램들이 명령 START SUBCHANNEL로 I/O 오퍼레이션들을 개시한다. 이 명령은 오퍼레이션-요청 블록(ORB)의 콘텐츠들을 서브채널에 보낸다.
ORB가 CCW 채널 프로그램을 명시하면, ORB의 콘텐츠들은 서브채널 키, 실행될 제1 CCW의 주소, 및 CCW들의 포맷의 명세를 포함한다. CCW는 실행될 커맨드와, 있을 경우, 사용될 스토리지 영역을 명시한다. ORB가 TCW 채널 프로그램을 명시하면, ORB의 콘텐츠들은 서브채널 키와 실행될 TCW의 주소를 포함한다. TCW는 실행을 위해 디바이스로 전송될 커맨드들과, 있을 경우, 데이터 전송을 위해 사용될 스토리지 영역 또는 영역들, 및 I/O 오퍼레이션의 상태를 포함할 TSB를 가질 TCCB를 지정한다.
ORB 콘텐츠들을 서브채널에 보내는 것이 완료될 때, START SUBCHANNEL의 실행은 완료된 것이다. 상기 명령의 실행의 결과들은 프로그램-상태 워드에 세트된 조건 코드(condition code)에 의해 표시된다.
퍼실리티들이 이용 가능하게 되고 ORB가 CCW 채널 프로그램을 명시할 때, 채널 서브시스템은 제1 CCW를 페치하고 그것을 ORB에서 명시된 포맷 비트에 따라서 디코딩한다. 그 포맷 비트가 0이면, 포맷-0 CCW들이 명시된다. 포맷 비트가 1이면, 포맷-1 CCW들이 명시된다. 포맷-0과 포맷-1 CCW들은 동일한 정보를 포함하고 있지만, 그 필드들은, 31-비트 주소들이 CCW에서 직접 명시될 수 있도록, 포맷-1 CCW에서 다르게 배열된다. 퍼실리티들이 이용 가능하게 되고 ORB가 TCW 채널 프로그램을 명시할 때, 채널 서브시스템은 지정된 TCW를 페치하고 그 지정된 TCCB를 디바이스에 전송한다. 디바이스 내/외부로의 데이터의 전송을 위해 TCW에 의해 지정된 스토리지 영역들은 64-비트 주소들이다.
서브채널 오퍼레이션 모드( Subchannel Operation Modes )
서브채널 오퍼레이션에는 두 가지 모드가 있다. 서브채널은, FCX 퍼실리티가 설치되고 TCW 채널 프로그램을 명시하는 START SUBCHANNEL 명령의 실행의 결과로서 시작 펑션이 그 서브채널에 세트될 때, 전송 모드(transport mode)로 진입한다. 서브채널은 시작 펑션이 서브채널에서 리셋될 때까지 전송 모드를 유지한다. 다른 모든 경우들에는, 서브채널은 커맨드 모드에 있다.
경로 관리( Path Management )
만일 ORB가 CCW 채널 프로그램을 명시하고 제1 CCW가 특정한 유효성 테스트들(validity tests)을 통과하여 1로 명시된 중단 플래그(suspend flag)를 갖고 있지 않다면 또는 만일 ORB가 TCW 채널 프로그램을 명시하고 그 지정된 TCW가 특정한 유효성 테스트들을 통과한다면, 채널 서브시스템은 선택할 수 있는 채널 경로들의 그룹으로부터 채널 경로를 선택함으로써 디바이스 선택을 시도한다. 디바이스 식별자를 인지하는 컨트롤 유닛이 그 자신을 상기 채널 경로에 논리적으로 연결하고 그 선택에 응답한다.
만일 ORB가 CCW 채널 프로그램을 명시하면, 채널 서브시스템은 채널 경로를 통해서 CCW의 커맨드-코드 부분을 보내고, 디바이스는 그 커맨드가 실행될 수 있는지를 표시하는 상태 바이트로 응답한다. 컨트롤 유닛은 이 경우에 채널 경로로부터 논리적으로 연결 해제할 수 있거나, 또는 데이터 전송을 개시하기 위해 연결된 채로 유지될 수 있다.
만일 ORB가 TCW 채널 프로그램을 명시하면, 채널 서브시스템은 지정된 TCW 내 정보를 사용하여 TCCB를 컨트롤 유닛으로 전송한다. TCCB의 콘텐츠들은 채널 서브시스템에 의해 무시되고 컨트롤 유닛과 I/O 디바이스에 대해서만 의미를 갖는다.
만일 시도된 선택이 비지(busy) 표시 또는 경로-오퍼레이션-불가능 조건(condition) 중 하나의 결과로서 발생하지 않으면, 채널 서브시스템은 사용 가능한 경우 대체(alternate) 채널 경로에 의해 디바이스를 선택하려고 시도한다. 선택 가능한 모든 경로들상에서 선택 시도가 완료되고 비지 조건(busy condition)이 지속될 때, 오퍼레이션은 한 경로가 자유롭게 될 때까지 펜딩을 유지한다. 경로-오퍼레이션-불가능 조건이 디바이스 선택이 시도되었던 하나 또는 그 이상의 채널 경로들상에서 검출되면, 프로그램은 후속 I/O 인터럽션에 의해 경보된다(alerted). I/O 인터럽션은 채널 프로그램이 실행되면(디바이스는 대체 채널 경로상에서 선택되었다고 가정함) 또는 실행이 포기된 결과로서 발생하는데, 그 이유는 경로-오퍼레이션-불가능 조건들(path-not-operational conditions)이 디바이스 선택이 시도되었던 모든 채널 경로들상에서 검출되었기 때문이다.
채널-프로그램의 실행( Channel - Program Execution )
만일 커맨드가 디바이스에서 개시되고 커맨드 실행이 어떤 데이터도 디바이스 내/외부로 전송되기를 요구하지 않는다면, 디바이스는 커맨드 코드의 수신 즉시 오퍼레이션의 종료를 신호할 수 있다. 데이터의 전송을 수반하는 오퍼레이션들에서, 서브채널은 채널 서브시스템이 디바이스로부터의 서비스 요청들에 응답하고 오퍼레이션의 추가 컨트롤을 가정하도록(assume) 세트된다.
I/O 오퍼레이션은, 단일 CCW 또는 TCW에 의해 지정된, 하나의 스토리지 영역 내/외부로의 데이터의 전송 또는 다수의 비인접 스토리지 영역들 내/외부로의 데이터의 전송을 수반할 수 있다. 후자의 경우에, 일반적으로 I/O 오퍼레이션의 실행을 위해 CCW들의 리스트가 사용되고, 각 CCW는 인접 스토리지 영역을 지정하며 상기 CCW들은 데이터 체이닝(data chaining)에 의해 결합된다. 데이터 체이닝은 CCW 내의 플래그에 의해 명시되며 현재의 CCW에 의해 지정된 스토리지 영역이 소진(exhaustion) 또는 충전(filling) 되면 채널 서브시스템이 또 다른 CCW를 페치하게 한다. 데이터 체이닝에서 페치된 CCW에 의해 지정된 스토리지 영역은 I/O 디바이스에서 이미 진행중인 I/O 오퍼레이션에 관한 것이고, I/O 디바이스는 새로운 CCW가 페치될 때 통지받지 않는다.
CCW가 디코딩될 때, 채널 서브시스템이 가능한 빠르게 I/O 인터럽션을 요청하여, 그에 의해서 CPU 프로그램에 체이닝이 그 채널 프로그램에서 적어도 그 CCW까지 진행되었음을 통지하도록, 프로그래머가 명시하는 것이 CCW 포맷에 제공된다.
CPU들에서 동적 주소 변환을 보완하기 위해, CCW 간접 데이터 주소지정 및 변경된(modified) CCW 간접 데이터 주소지정이 제공된다.
ORB가 CCW 채널 프로그램을 명시하고 CCW-간접-데이터 주소지정이 사용될 때, CCW 내 플래그는 간접-데이터-주소 리스트가 그 CCW에 대한 스토리지 영역들을 지정하는데 사용될 것이라고 명시한다. 스토리지의 블록의 범위에 도달할 때마다, 사용될 다음 스토리지의 블록을 결정하기 위해 상기 리스트가 참조된다. ORB는 스토리지의 각 블록의 사이즈가 2K 바이트인지 또는 4K 바이트인지 명시한다.
ORB가 CCW 채널 프로그램을 명시하고 변경된-CCW-간접-데이터 주소지정이 사용될 때, ORB 내 플래그와 CCW 내 플래그는 변경된-간접-데이터-주소 리스트가 그 CCW에 대한 스토리지 영역들을 지정하는데 사용될 것이라고 명시한다. 스토리지의 블록에 대해서 명시된 바이트의 카운트에 도달할 때마다, 사용될 다음 스토리지의 블록을 결정하기 위해 상기 리스트가 참조된다. 간접 데이터 주소지정이 사용될 때와는 달리, 4K-바이트 범위에 걸친 데이터 전송이 명시되지 않는 조건에서, 상기 블록은 최대 4K까지 임의 범위와 길이로 명시될 수 있다.
ORB가 TCW 채널 프로그램을 명시하고 전송-간접-데이터 주소지정이 사용될 때, TCW 내 플래그들은 전송-간접-데이터-주소 리스트가 TCCB를 포함하는 스토리지 영역들을 지정하는데 사용될지와 전송-간접-데이터-주소 리스트가 그 TCCB 내 DCW들과 연관된 데이터 스토리지 영역들을 지정하는데 사용될지를 명시한다. 스토리지의 블록에 대해서 명시된 바이트의 카운트에 도달할 때마다, 대응 전송-간접-데이터-주소 리스트를 참조하여 사용될 다음 스토리지 블록을 결정한다.
CCW 간접 데이터 주소지정과 변경된 CCW 간접 데이터 주소지정은, 마치 CPU가 등가의 인접 실제 스토리지(real storage)와 동작하고 있다면 사용되는 것처럼, 동적 주소 변환이 CPU에서 활성일 때 프로그램 실행을 위해 사용되도록 동일 CCW 시퀀스들을 필수적으로 허용한다. CCW 간접 데이터 주소지정은 포맷-0 또는 포맷-1 CCW들이 ORB에서 명시되었는지에 상관없이 프로그램이 최대 264-l까지의 절대 스토리지 주소들을 갖는 데이터 블록들을 지정하도록 허용한다. 변경된 CCW 간접 데이터 주소지정은 포맷-0 또는 포맷-1 CCW들이 ORB에서 명시되었는지에 상관없이 프로그램이 최대 264-l까지의 절대 스토리지 주소들을 갖는 데이터 블록들을 지정하도록 허용한다.
일반적으로, I/O 오퍼레이션 또는 체인 오퍼레이션들의 실행은 참여(participation)의 세가지 레벨을 수반한다:
1. CPU와 채널-서브시스템 장치의 통합(integration)으로 인한 영향들(effects)을 제외하고, CPU는 START SUBCHANNEL의 실행 지속시간(duration) 동안에 비지(busy)하며, 이것은 주소지정된 서브채널로 ORB 콘텐츠들이 완전히 보내질 때까지 지속된다.
2. 서브채널은 ORB 콘텐츠들을 수신함으로부터 1차 인터럽션 조건이 서브채널에서 클리어될 때까지 새로운 START SUBCHANNEL에 대해 비지하다.
3. I/O 디바이스는 I/O 디바이스에서 제1 오퍼레이션의 개시부터 서브채널이 중단되거나 또는 2차 인터럽션 조건이 서브채널에 배치될 때까지 비지하다. 서브채널이 중단된 경우에, 상기 디바이스는 중단된 채널 프로그램의 실행이 재개될 때 다시 비지가 된다.
I/O 오퍼레이션의 종결( Conclusion of I/O Operations )
I/O 오퍼레이션의 종결은 통상적으로 두 가지 상태 조건: 즉, 채널 종료(channel end)와 디바이스 종료(device end)에 의해 표시된다. 채널-종료 조건은 I/O 디바이스가 그 오퍼레이션과 연관된 모든 데이터를 수신 또는 제공 완료했고 더 이상 채널-서브시스템 퍼실리티들이 필요하지 않다고 표시한다. 이 조건은 1차 인터럽션 조건이라고 불리며, 이 경우에 채널 종료는 1차 상태이다. 일반적으로, 1차 인터럽션 조건은 I/O 오퍼레이션에 관련되고 I/O 오퍼레이션 또는 체인 I/O 오퍼레이션들의 서브채널에 종결을 신호하는 인터럽션 조건이다.
디바이스-종료 신호는 I/O 디바이스가 실행을 종결 완료했고 또 다른 오퍼레이션을 수행할 준비가 되어 있다고 표시한다. 이 조건은 2차 인터럽션 조건이라고 불리며, 이 경우에 디바이스 종료는 2차 상태이다. 일반적으로, 2차 인터럽션 조건은 I/O 오퍼레이션에 관련되고 I/O 오퍼레이션 또는 체인 오퍼레이션들의 디바이스에 종결을 신호하는 인터럽션 조건이다. 2차 인터럽션 조건은 1차 인터럽션 조건과 동시에 또는 그보다 이후에 일어날 수 있다.
1차 인터럽션 조건 또는 2차 인터럽션 조건과 동시에, 채널 서브시스템과 I/O 디바이스는 둘 모두 이상 상황(unusual situations)의 표시들을 제공할 수 있다.
I/O 오퍼레이션의 종결을 신호하는 조건들은 I/O 인터럽션들에 의해서, 또는 CPU들이 I/O 인터럽션들로 인해 디스에이블될 때 채널 서브시스템의 프로그램된 질의에 의해서 프로그램의 어텐션(attention)을 받을 수 있다. 전자의 경우, 이 조건들은, 인터럽트 소스(interrupting source)에 관련된 정보를 포함하고 있는, I/O-인터럽션 코드를 저장하게 한다. 후자의 경우, 상기 인터럽션 코드는 TEST PENDING INTERRUPTION의 실행의 결과로서 저장된다.
1차 인터럽션 조건이 인지되면, 채널 서브시스템은, 인터럽션 요청을 이용하여 프로그램에, 서브채널이 그 서브채널에서 I/O 오퍼레이션의 종결을 기술하는 정보를 포함하고 있다고, 통지를 시도한다. 커맨드-모드 인터럽션들에 있어서, 그 정보는 사용된 마지막 CCW를 식별하고 그 잔류 바이트 카운트를 제공할 수 있으며, 그럼으로써 메인 스토리지가 사용된 영역(extent)을 기술한다. 전송-모드 인터럽션들에 있어서, 그 정보는 현재의 TCW를 식별하고 잔류 바이트 카운트와 같은 I/O 오퍼레이션에 관한 추가 상태를 포함하는 채널 프로그램과 연관된 TSB를 식별한다. 채널 프로그램에 관한 정보에 더하여, 채널 서브시스템과 I/O 디바이스는 1차 또는 2차 인터럽션 조건의 일부로서 이상 조건들(unusual conditions)의 추가 표시들을 제공할 수 있다. 서브채널에 포함된 정보는 TEST SUBCHANNEL의 실행 또는 STORE SUBCHANNEL의 실행에 의해 저장될 수 있다. 이 정보는, 저장될 때, 서브채널-상태 워드(SCSW)라고 불린다.
CCW 채널 프로그램 사용시의 체이닝( Chaining When Using a CCW Channel Program )
ORB가 CCW 채널 프로그램을 명시할 때, 그 프로그램이 단일 START SUBCHANNEL 명령으로 체인 I/O 오퍼레이션들의 실행을 개시하기 위한 퍼실리티들이 제공된다. 현재 CCW가 커맨드 체이닝을 명시하고 그 오퍼레이션 동안 이상 조건들이 검출되지 않을 때, 디바이스-종료 신호를 수신하면 채널 서브시스템에 새로운 CCW를 페치하게 한다. 만일 CCW가 특정한 유효성 테스트들을 보내고 중단 플래그가 새로운 CCW에서 1로 명시되지 않으면, 그 디바이스에서 새로운 커맨드의 실행이 개시된다. 만일 CCW가 유효성 테스트들을 보내는 것에 실패하면, 새로운 커맨드는 개시되지 않고, 커맨드 체이닝은 억제되며(suppressed), 그리고 새로운 CCW와 연관된 상태가 인터럽션 조건의 생성을 일으킨다. 만일 중단 플래그(the suspend flag)가 1로 명시되고 이 값이 연관된 ORB의 워드 1의 비트 4인 중단 컨트롤(the suspend control)에서 1의 값이기 때문에 유효하다면, 새로운 커맨드의 실행은 개시되지 않고, 커맨드 체이닝은 종결된다.
새로운 커맨드의 실행은 이전 오퍼레이션에서와 동일한 방식으로 채널 서브시스템에 의해 개시된다. 커맨드 체이닝을 명시하는 CCW에 의해 야기된 오퍼레이션의 종결시에 발생하는 종료 신호들은 프로그램이 이용할 수 없게 된다. 또 다른 I/O 오퍼레이션이 커맨드 체이닝에 의해 개시될 때, 채널 서브시스템이 상기 채널 프로그램의 실행을 계속한다. 그러나 만일 이상 조건이 검출되면, 커맨드 체이닝은 억제되고, 상기 채널 프로그램은 종료되며, 인터럽션 조건이 생성되고, 그리고 종료를 일으키는 종료 신호들이 프로그램에 이용될 수 있게 된다.
중단-및-재개(suspend-and-resume) 펑션은 프로그램에 채널 프로그램의 실행에 대한 컨트롤을 제공한다. 중단 펑션의 개시는 ORB 내 중단-컨트롤 비트의 세팅(setting)에 의해 컨트롤된다. 중단 펑션은 ORB 내 중단-컨트롤 비트가 1이고 제1 CCW 내 또는 커맨드 체이닝 동안 페치된 CCW 내 중단 플래그가 1일 때 채널-프로그램의 실행 동안에 채널 서브시스템에 전달된다.
중단(suspension)은 채널 서브시스템이 (ORB 내 중단-컨트롤 비트의 1의 값 때문에) 유효하게 1로 명시된 중단 플래그를 갖는 CCW를 페치할 때 일어난다. 이 CCW 내 커맨드는 I/O 디바이스에 보내지지 않고, 상기 디바이스는 체인 커맨드들이 종결된다는 신호를 받는다. 후속 RESUME SUBCHANNEL 명령이 채널 서브시스템에, 중단을 야기한 CCW가 변경되었고 채널 서브시스템이 그 CCW를 재페치하여 중단 플래그의 현재 세트를 조사해야 한다고, 통지한다. 중단 플래그가 CCW에서 0인 것으로 확인되면, 채널 서브시스템은 I/O 디바이스와 함께 체인 커맨드들의 실행을 재개한다.
TCW 채널 프로그램 사용시의 체이닝( Chaining When Using a TCW Channel Program )
ORB가 TCW 채널 프로그램을 명시할 때, 그 프로그램이 단일 START SUBCHANNEL 명령으로 체인 디바이스 오퍼레이션들의 실행을 개시하기 위한 퍼실리티들이 또한 제공된다. 커맨드 체이닝이 단일 TCW에 의해 지정된 DCW들에 대해서 명시될 수 있다. 현재의 DCW가 커맨드 체이닝을 명시하고 그 오퍼레이션 동안 이상 조건들이 검출되지 않을 때, DCW의 성공적인 실행이 인지되면 현재 TCCB에서 그 다음 DCW가 처리되게 한다.
만일 그 다음 DCW가 특정한 유효성 테스트들을 통과하면, 새로운 커맨드의 실행이 그 디바이스에서 개시되고 상기 DCW는 현재 DCW가 된다. 만일 DCW가 유효성 테스트들을 통과하는데 실패하면, 새로운 커맨드는 개시되지 않고, 커맨드 체이닝은 억제되고, 채널 프로그램은 종료되며, 그리고 상기 새로운 DCW와 연관된 상태가 인터럽션 조건의 생성을 일으킨다.
새로운 커맨드의 실행은 이전 오퍼레이션에서와 동일한 방식으로 개시된다. 마지막으로 명시된 DCW가 아닌 DCW에 의해 야기된 오퍼레이션의 종결시에 발생하는 종료 신호들은 프로그램이 이용할 수 없게 된다. 또 다른 I/O 오퍼레이션이 커맨드 체이닝에 의해 개시될 때, 채널 프로그램의 실행은 계속된다. 그러나 만일 이상 조건이 검출되면, 커맨드 체이닝은 억제되고, 채널 프로그램은 종료되고, 인터럽션 조건이 생성되며, 그리고 이상 조건을 식별하는 상태를 프로그램이 이용할 수 있게 된다.
I/O 오퍼레이션의 조기 종결( Premature Conclusion of I/O Operations )
채널-프로그램의 실행은 CANCEL SUBCHANNEL, HALT SUBCHANNEL 또는 CLEAR SUBCHANNEL에 의해 조기에 종료될 수 있다. CANCEL SUBCHANNEL을 실행하면 채널 프로그램이 디바이스에서 개시되지 않은 경우 채널 서브시스템이 서브채널에서 시작 펑션을 종료하게 한다. 시작 펑션이 CANCEL SUBCHANNEL의 실행에 의해 종료되면, 채널 서브시스템은 CANCEL SUBCHANNEL 명령에 응답하여 조건 코드를 0으로 세트한다. HALT SUBCHANNEL을 실행하면 채널 서브시스템이 I/O 디바이스에 홀트 신호(halt signal)를 발행하여 서브채널에서 채널-프로그램의 실행을 종료시키게 한다. 채널-프로그램의 실행이 HALT SUBCHANNEL의 실행에 의해 종료되면, 프로그램은 I/O-인터럽션 요청을 통하여 종료를 통지받는다. 서브채널이 커맨드 모드에 있으면, 인터럽션 요청은 디바이스가 종료된 오퍼레이션에 대한 상태를 제출할 때 생성된다. 서브채널이 전송 모드에 있으면, 인터럽션 요청은 즉시 생성된다. 그러나 만일 홀트 신호(halt signal)가, 디바이스 종료를 수신한 후나 그 다음 커맨드가 그 디바이스에 전송되기 전 커맨드 체이닝 동안에, 그 디바이스에 발행되었다면, 그 디바이스가 신호를 받은 이후에 인터럽션 요청이 생성된다. 후자의 경우에, SCSW의 디바이스-상태 필드는 0들을 포함할 것이다. CLEAR SUBCHANNEL을 실행하면 서브채널에서 실행중인 채널 프로그램의 표시들을 클리어하고, 채널 서브시스템이 클리어 신호를 I/O 디바이스에 발행하게 하며, 채널 서브시스템이 I/O-인터럽션 요청을 생성하여 프로그램에 클리어 펑션의 완료를 통지하게 한다.
I/O 인터럽션(I/O Interruptions )
I/O 인터럽션 요청들을 일으키는 조건들은 CPU들 내의 활동(activity)과 비동기적이며, 하나보다 많은 조건이 동시에 발생할 수 있다. 상기 조건들은 SUBCHANNEL 또는 CLEAR SUBCHANNEL에 의해 클리어되거나 I/O-시스템 리셋에 의해 리셋될 때까지 서브채널들에 보존된다.
I/O-인터럽션 조건이 채널 서브시스템에 의해 인지되고 서브채널에 표시될 때, I/O-인터럽션 요청은 서브채널에서 명시된 I/O-인터럽션 서브클래스에 대해 펜딩된다. 인터럽션이 펜딩되는, I/O-인터럽션 서브클래스는 MODIFY SUBCHANNEL의 사용을 통해서 프로그램된 컨트롤 하에 있게 된다. 펜딩 I/O 인터럽션은 자신의 I/O-인터럽션 서브클래스로부터 인터럽션들을 위해 인에이블 된 모든 CPU에 의해 수용될 수 있다. 각각의 CPU는 컨트롤 레지스터 6에 8개의 마스크 비트들을 가지며, 이 비트들은, I/O 마스크 즉 PSW 내 비트 6이 그 CPU에 대한 마스터 I/O-인터럽션 마스크일 때, 8개의 I/O-인터럽션 서브클래스들의 각각에 대한 CPU의 인에이블먼트(enablement)를 컨트롤한다.
I/O 인터럽션이 CPU에 발생하면, I/O-인터럽션 코드가 그 CPU의 I/O-통신 영역에 저장되고, I/O-인터럽션 요청은 클리어된다. I/O-인터럽션 코드가 인터럽션이 펜딩되었던 서브채널을 식별한다. 그 다음, 인터럽션 요청의 생성을 일으키는 조건들이 서브채널로부터 명시적으로(explicitly) TEST SUBCHANNEL에 의해 또는 STORE SUBCHANNEL에 의해 검색될 수 있다.
펜딩 I/O-인터럽션 요청은 또한 대응 I/O-인터럽션 서브클래스가 인에이블되지만 PSW는 I/O 인터럽션들이 디스에이블될 때 TEST PENDING INTERRUPTION에 의해 클리어되거나 또는 CPU가 대응 I/O-인터럽션 서브클래스로부터 I/O 인터럽션들에 대해 디스에이블될 때 TEST SUBCHANNEL에 의해 클리어될 수 있다. 펜딩 I/O-인터럽션 요청은 또한 CLEAR SUBCHANNEL에 의해서도 클리어될 수 있다. CLEAR SUBCHANNEL과 TEST SUBCHANNEL 모두는 또한 서브채널의 보존된 인터럽션 조건을 클리어한다.
보통으로, 인터럽션 요청이 CLEAR SUBCHANNEL에 의해 클리어되지 않으면, 상기 프로그램은 상기 오퍼레이션의 실행에 관한 정보를 획득하기 위해 TEST SUBCHANNEL을 발행한다.
CLEAR SUBCHANNEL 명령
지정된 서브채널이 클리어되고, 현재의 시작 또는 홀트 펑션은, 있다면, 지정된 서브채널에서 종료되고, 그리고 채널 서브시스템은 지정된 서브채널과 지정된 디바이스에서 클리어 펑션을 비동기적으로 수행하도록 신호를 받는다.
범용 레지스터 1은 클리어될 서브채널을 지정하는 서브시스템-식별 워드(SID)를 포함한다.
만일 시작 또는 홀트 펑션이 진행중이면, 그 펑션은 서브채널에서 종료된다.
서브채널은 더 이상 상태 펜딩이 되지 않는다. 모든 활동은, SCSW의 활동-컨트롤 필드에 표시되는 바와 같이, 서브채널이 클리어 펜딩(clear pending)되는 것을 제외하고, 서브채널에서 클리어된다. 진행중인 펑션들은, SCSW의 펑션-컨트롤 필드에 표시되는 바와 같이, 이 명령의 실행 때문에 수행될 클리어 펑션을 제외하고는, 서브채널에서 모두 클리어된다.
서브채널이 전송 모드에서 동작중이고 조건 코드 2가 세트되면, CPU는 채널 서브시스템에 질의 펑션(interrogate function)을 비동기적으로 수행하도록 신호하고, 그리고 그 명령을 종료할 수 있다.
채널 서브시스템은 클리어 펑션을 비동기적으로 수행하라는 신호를 받는다. 클리어 펑션은 아래의 “연관된 펑션(Associated Functions)”이라는 섹션에서 요약되며 그 후 상세하게 기술된다.
조건 코드 0이 세트되어 전술한 액션들(actions)이 취해졌음을 표시한다.
연관된 펑션( Associated Functions )
CLEAR SUBCHANNEL의 실행에 후속하여, 채널 서브시스템이 클리어 펑션을 비동기적으로 수행한다. 만일 조건들이 허용한다면, 채널 서브시스템은 채널 경로를 선택하고 디바이스에 클리어 신호를 발행하여 I/O 오퍼레이션을, 있을 경우, 종료 시도한다. 그 다음, 서브채널은 상태 펜딩이 된다. 채널 서브시스템이 만나는, 디바이스에 클리어 신호 발행을 못하게 하는 조건들은 서브채널이 상태 펜딩이 되는 것을 막지 않는다.
서브채널이 클리어 펑션 수행의 결과로 상태 펜딩되면, 데이터 전송은, 있다면, 연관된 디바이스와 함께 종료된다. 그 결과로 나온 상태(resulting status)가 TEST SUBCHANNEL에 의해 클리어되면 저장된 SCSW는 1로 저장된 클리어-펑션 비트를 갖는다. 만일 채널 서브시스템이 클리어 신호가 디바이스에 발행되었다고 결정할 수 있다면, 클리어-펜딩 비트는 SCSW에 0으로 저장된다. 그렇지 않으면, 클리어-펜딩 비트는 1로 저장되고, 만났던 조건을 아주 상세하게 기술하는 다른 표시들이 제공된다.
CLEAR SUBCHANNEL에 의해 종료된 시작 펑션에 대해서, 서브채널에 대한 확장-상태 워드에는 측정 데이터가 축적되지 않으며, 디바이스-연결 시간도 저장되지 않는다.
특별 조건( Special Conditions )
조건 코드 3( Condition code 3)이 세트되고, 다른 어떤 액션도 취해지지 않으며, 이때 서브채널은 CLEAR SUBCHANNEL에 대해서 오퍼레이션 가능하지 않다. 서브채널이 채널 서브시스템에서 제공되지 않거나, 할당된 유효한 디바이스 번호를 갖고 있지 않거나, 또는 인에이블되지 않으면 서브채널은 CLEAR SUBCHANNEL에 대해서 오퍼레이션 가능하지 않다.
CLEAR SUBCHANNEL은 아래에 기술된 또는 나열된 프로그램 예외들과 만날 수 있다.
다수-서브채널-세트 퍼실리티가 설치되지 않으면, 범용 레지스터 1의 비트들 32-47은 0001 hex를 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
다수-서브채널-세트 퍼실리티가 설치되면, 범용 레지스터 1의 비트들 32-44는 0들을 포함해야하고, 비트들 45-46은 유효 값을 포함해야 하고, 그리고 비트 47은 값 1을 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
결과 조건 코드(Resulting Condition Code):
0 펑션 개시됨
1 ―
2 ―
3 오퍼레이션 불가능
프로그램 예외:
Figure pct00066
오퍼랜드
Figure pct00067
특권 오퍼레이션(privileged operation)
클리어 펑션( Clear Function )
CLEAR SUBCHANNEL의 실행에 후속하여, 채널 서브시스템은 클리어 펑션을 수행한다. 클리어 펑션의 수행은 (1)경로-관리 오퍼레이션을 수행하는 단계, (2)서브채널에서 필드들을 변경하는 단계, (3)클리어 신호를 연관된 디바이스에 발행하는 단계 (4)서브채널이 상태 펜딩이 되어, 클리어 펑션의 완료를 표시하게 하는 단계로 구성된다.
클리어 - 펑션 경로 관리( Clear - Function Path Management )
경로-관리 오퍼레이션이 클리어 펑션의 일부로서 수행되며, 이는 연관된 서브채널에 대한 채널-경로 조건들을 조사하여 클리어 신호가 연관된 디바이스에 발행될 수 있는 가용 채널 경로를 선택하기 위함이다.
채널-경로 조건들은 다음의 순서로 조사된다:
1. 채널 서브시스템이 신호를 받을 디바이스와 능동적 통신을 확립하기 위해 능동적으로 통신하거나 시도하고 있다면, 사용중인 채널 경로가 선택된다.
2. 만일 채널 서브시스템이 신호를 받을 디바이스로부터 더-이상-비지하지-않음 표시(이것은 인터럽션 조건이 인지되게 하지 않을 것임)를 수용하는 처리를 진행 중에 있고, 연관된 서브채널이 어떤 채널 경로에도 충성도(allegiance)를 갖고 있지 않다면, 사용중인 채널 경로가 선택된다.
3. 연관된 서브채널이 어떤 채널 경로에 대해서 전적인 충성도(a dedicated allegiance)를 갖고 있다면, 그 채널 경로가 선택된다.
4. 연관된 서브채널이 하나 또는 그 이상의 채널 경로들에 대해서 작업 충성도(a working allegiance)를 갖고 있다면 그 채널 경로들 중 하나가 선택된다.
5. 만일 연관된 서브채널이 어느 채널 경로에 대해서도 충성도를 갖고 있지 않다면, 만일 마지막-사용된 채널 경로가 표시된다면, 그리고 만일 그 채널 경로가 선택 가능하다면, 그 경로가 선택된다. 만일 그 채널 경로가 선택 가능하지 않다면, 어떤 채널 경로도 선택되지 않거나, 있을 경우, (마치 마지막-사용된 채널 경로가 표시되지 않은 것처럼) 선택 가능한 채널 경로들의 세트로부터 채널 경로가 선택된다.
6. 만일 연관된 서브채널이 어느 채널 경로에 대해서도 충성도를 갖고 있지 않다면, 마지막-사용된 채널 경로가 표시되지 않는다면, 그리고 하나 또는 그 이상의 선택 가능한 채널 경로들이 존재한다면, 그 채널 경로들 중 하나가 선택된다.
위에 나열된 채널-경로의 조건들 중 어느 것도 적용되지 않는다면, 어느 채널 경로도 선택되지 않는다.
항목 4와, 명시된 조건들 하에서의 항목 5와, 항목 6을 위해, 채널 서브시스템은 일 세트의 채널 경로들로부터 채널 경로를 선택한다. 이 경우들에서, 채널 서브시스템은, 다음의 조건들이 적용되지 않는다는 조건하에서, 채널 경로를 선택하기 위해 시도할 수 있다:
1. 채널-경로-단말(channel-path-terminal) 조건이 그 채널 경로에 대해서 존재한다.
2. 병렬 또는 ESCON 채널 경로에 있어서: 또 다른 서브채널이 그 채널 경로에 대한 능동적 충성도(an active allegiance)를 갖고 있다.
FICON 채널 경로에 있어서: 채널 경로가 현재 사용되고 있는데, 동시 활성인 통신들을 가질 수 있는 최대 수의 서브채널들과 능동적으로 통신하기 위해 사용된다.
3. 신호를 받을 디바이스가 타입-1 컨트롤 유닛에 접속되어 있고, 동일한 컨트롤 유닛에 접속된 또 다른 디바이스를 위한 서브채널은, 충성도가 작업 충성도가 아니고 1차 상태도 그 서브채널에 의해 수용된 것이 아닌 한, 동일한 채널 경로에 대해서 충성도를 갖는다.
4. 신호를 받을 디바이스가 타입-3 컨트롤 유닛에 접속되어 있고, 동일한 컨트롤 유닛에 접속된 또 다른 디바이스에 대한 서브채널은 동일한 채널 경로에 대해서 전적인 충성도(a dedicated allegiance)를 갖는다.
클리어 - 펑션 서브채널 변경( Clear - Function Subchannel Modification )
서브채널에서의 경로-관리-컨트롤 표시들은 클리어 펑션이 수행되는 동안 변경된다. 실질적으로, 이 변경은 채널 경로를 선택하기 위한 시도 후에, 그러나 클리어 신호를 발행할 디바이스를 선택하기 위한 시도 전에 발생한다. 변경되는 경로-관리-컨트롤 표시들은 다음과 같다:
1. 서브채널에서 8개의 가능한 모든 채널 경로들의 상태가 서브채널에 대해서 오퍼레이션 가능으로 세트된다.
2. 사용된-마지막-경로 표시는 마지막-사용된 채널 경로가 없음을 표시하기 위해 리셋된다.
3. 경로-오퍼레이션-불가능 조건들은, 있을 경우, 리셋된다.
클리어 - 펑션 시그널링 및 완료( Clear - Function Signaling and Completion )
채널 경로 선택을 위한 시도와 경로-관리-컨트롤 필드들의 변경에 후속하여, 채널 서브시스템은, 만일 조건들이 허용하는 경우, 클리어 신호를 발행할 디바이스 선택을 시도한다. 서브채널과 선택된 채널 경로와 연관된 조건들은, 만일 있을 경우, (1)클리어 신호 발행 시도가 이루어지는지와 (2)클리어 신호 발행 시도가 성공적인지에 영향을 준다. 이 조건들과 상관없이, 서브채널은 후속해서 상태 펜딩으로 세트되고, 클리어 펑션의 수행이 완료된다. 이 조건들과 클리어 펑션에 대한 이들의 영향은 다음과 같이 기술된다:
클리어 신호 발행 시도가 이루어지지 않음: 채널 서브시스템은 다음의 조건들 중 어느 하나라도 존재하면 디바이스에 클리어 신호 발행을 시도하지 않는다:
1. 채널 경로가 선택되지 않았음.
2. 선택된 채널 경로는 더 이상 선택 가능하지 않다.
3. 채널-경로-단말 조건이 선택된 채널 경로에 대해 존재한다.
4. 병렬 및 ESCON 채널 경로들에 있어서: 선택된 경로가 현재 사용되는데, 다른 디바이스와 능동적으로 통신하기 위해 사용된다. FICON 채널 경로들에 있어서: 선택된 채널 경로가 현재 사용 되는데, 동시 활성인 통신들을 가질 수 있는 최대수의 디바이스들과 능동적으로 통신하기 위해 사용된다.
5. 신호를 받을 디바이스는 타입-1 컨트롤 유닛에 접속되어 있고, 동일 컨트롤 유닛에 접속된 또 다른 디바이스에 대한 서브채널은, 충성도가 작업 충성도가 아니고 1차 상태도 그 서브채널에 의해 수용된 것이 아닌 한, 동일 채널 경로에 충성도를 갖는다.
6. 신호를 받을 디바이스가 타입-3 컨트롤 유닛에 접속되어 있고, 동일한 컨트롤 유닛에 접속된 또 다른 디바이스에 대한 서브채널이 동일한 채널 경로에 대해 전적인 충성도(a dedicated allegiance)를 갖는다.
위의 조건들 중 어느 하나라도 존재한다면, 서브채널은 클리어 펜딩을 유지하고 상태 펜딩으로 세트되며, 클리어 펑션의 수행은 완료된다.
클리어 신호 발행 시도가 성공적이지 않음: 채널 서브시스템이 디바이스에 클리어 신호 발행을 시도할 때, 그 시도는 다음의 조건들 때문에 성공적이지 않을 수 있다:
1. 채널 서브시스템이 클리어 신호를 발행할 디바이스를 선택 시도할 때 컨트롤 유닛 또는 디바이스가 비지 조건을 신호한다.
2. 채널 서브시스템이 클리어 신호를 발행할 디바이스를 선택 시도할 때 경로-오퍼레이션-불가능 조건이 인지된다.
3. 채널 서브시스템이 클리어 신호를 발행할 디바이스를 선택 시도할 때 에러 조건과 만난다.
위의 조건들 중 어느 하나라도 존재하고 채널 서브시스템이 클리어 신호 발행 시도가 성공적이지 않았다고 결정하거나 그 시도가 성공적이었는지를 결정할 수 없다면, 서브채널은 클리어 펜딩을 유지하고 상태 펜딩으로 세트되며, 클리어 펑션의 수행은 완료된다.
클리어 신호 발행 시도가 성공적임: 채널 서브시스템이 클리어 신호 발행 시도가 성공적이었다고 결정하면, 서브채널은 더 이상 클리어 펜딩이 아니며 상태 펜딩으로 세트되고, 클리어 펑션의 수행은 완료된다. 서브채널이 상태 펜딩 될 때, I/O 오퍼레이션은, 있을 경우, 연관된 디바이스와 함께 종료된다.
프로그래밍 주석: 클리어 펑션의 수행에 후속하여, 컨트롤 유닛 종료(control unit end)만을 제외하고, 디바이스에 의하여 채널 서브시스템에 제출되는 모든 0이 아닌 상태는 자발적 경보 상태(unsolicited alert status)로서 프로그램에 보내진다. 컨트롤 유닛 종료만으로 구성된 자발적 상태(unsolicited status) 또는 0 상태는 프로그램에 제출되지 않는다.
MODIFY SUBCHANNEL 명령
서브채널-정보 블록 (SCHIB)에 포함된 정보는 서브채널의 프로그램-변경가능 필드들에 배치된다. 그 결과, 프로그램은, 그 서브채널에 대해서, 클리어(clear), 홀트(halt), 재개(resume) 및 시작(start) 펑션들과 특정한 I/O 지원 펑션들에 관한 I/O 처리의 특정한 측면들에 영향을 준다.
범용 레지스터 1은 SCHIB의 특정 필드들에 의해 명시되는 바와 같이 변경될 서브채널을 지정하는 서브시스템-식별 워드(SID)를 포함한다. 제2-오퍼랜드 주소는 SCHIB의 논리적 주소이며 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외(specification exception)가 인지된다.
SCHIB 정보를 서브채널에 배치함으로 인해 영향을 받을 수 있는 채널-서브시스템 오퍼레이션들은 다음과 같다:
Figure pct00068
I/O 처리 (E 필드)
Figure pct00069
인터럽션 처리 (인터럽션 파라미터 및 ISC 필드)
Figure pct00070
경로 관리 (D, LPM, 및 POM 필드들)
Figure pct00071
모니터링 및 주소-한계 검사 (측정-블록 인덱스, LM, 및 MM 필드들)
Figure pct00072
측정-블록-포맷 컨트롤 (F 필드)
Figure pct00073
확장-측정-워드-모드 인에이블 (X 필드)
Figure pct00074
동시-센스 퍼실리티 (S 필드)
Figure pct00075
측정-블록 주소 (MBA)
SCHIB 오퍼랜드의 워드 1의 비트들 0, 1, 6, 및 7과 워드 6의 비트들 0-28은 0들이어야 하고, 워드 1의 비트들 9와 10은 모두 1들이 아니어야 한다. 확장-I/O-측정-블록 퍼실리티가 설치되고 포맷-1 측정 블록이 명시되면, 워드 11의 비트들 26-31은 0들로 명시되어야 한다. 확장-I/O-측정-블록 퍼실리티가 설치되지 않으면, 워드 6의 비트 29는 0으로 명시되어야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다. 확장-I/O-측정-워드 퍼실리티가 설치되지 않거나, 또는 설치되지만 인에이블되지 않으면, 워드 6의 비트 30은 0으로 명시되어야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다. SCHIB의 나머지 필드들은 무시되고 MODIFY SUBCHANNEL의 처리에 영향을 주지 않는다.
조건 코드 0이 세트되어 SCHIB로부터의 정보가 서브채널의 프로그램-변경가능 필드들에 배치되었음을 표시는데, 단 지정된 서브채널에서 디바이스-번호-유효 비트(V)가 0이면, 컨디션 코드 0이 세트되고 그 SCHIB로부터의 정보가 프로그램-변경가능(program-modifiable) 필드들에 배치되지 않는 것은 예외이다.
특별 조건( Special Conditions )
서브채널이 상태 펜딩되면, 조건 코드 1이 세트되고, 다른 액션은 취해지지 않는다.
클리어, 홀트, 또는 시작 펑션이 서브채널에서 진행중이면, 조건 코드 2가 세트되고, 다른 액션은 취해지지 않는다.
서브채널이 MODIFY SUBCHANNEL에 대해서 오퍼레이션 가능하지 않으면, 조건 코드 3이 세트되고, 다른 액션은 취해지지 않는다. 서브채널이 채널 서브시스템에서 제공되지 않으면 그 서브채널은 MODIFY SUBCHANNEL에 대해서 오퍼레이션 가능하지 않다.
MODIFY SUBCHANNEL은 아래에 기술 또는 나열되는 프로그램 예외들과 만날 수 있다.
SCHIB의 워드 1에서, 비트들 0, 1, 6, 및 7은 0들이어야 하고, 주소-한계-검사 퍼실리티가 설치되면, 비트들 9와 10은 모두 1이 아니어야 한다. SCHIB의 워드 6에서, 비트들 0-28은 0들이어야 한다. 그렇지 않으면 오퍼랜드 예외가 인지된다.
확장-I/O-측정-블록 퍼실리티가 설치되고 포맷-1 측정 블록이 명시되면, 워드 11의 비트들 26-31은 0들로 명시되어야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다. 확장-I/O-측정-블록 퍼실리티가 설치되지 않으면, 워드 6의 비트 29는 0으로 명시되어야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다. 확장-I/O-측정-워드 퍼실리티가 설치되지 않거나, 또는 설치되지만 인에이블되지 않으면, 워드 6의 비트 30은 0으로 명시되어야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
다수-서브채널-세트 퍼실리티가 설치되지 않으면, 범용 레지스터 1의 비트들 32-47은 0001 hex를 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
다수-서브채널-세트 퍼실리티가 설치되면, 범용 레지스터 1의 비트들 32-44는 0들을 포함해야 하고, 비트들 45-46은 유효 값을 포함해야 하고, 그리고 비트 47은 값 1을 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
제2 오퍼랜드는 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다. MODIFY SUBCHANNEL의 실행은 모든 주소지정 및 보호 예외들에서 억제된다.
결과 조건 코드:
0 펑션 완료됨
1 상태 펜딩
2 비지
3 오퍼레이션 불가능
프로그램 예외:
Figure pct00076
액세스 (페치, 오퍼랜드 2)
Figure pct00077
오퍼랜드
Figure pct00078
특권 오퍼레이션
Figure pct00079
명세
프로그래밍 주석:
1. 연관된 서브채널이 디스에이블되면서 디바이스가 I/O-에러 경보를 신호하면, 채널 서브시스템은 그 디바이스에 클리어 신호를 발행하고 I/O-인터럽션 조건을 생성하지 않고 I/O-에러-경보 표시를 폐기한다.
2. 연관된 서브채널이 디스에이블되면서 디바이스가 자발적 상태(unsolicited status)를 제출하면, 그 상태는 I/O-인터럽션 조건을 생성하지 않고 채널 서브시스템에 의해 폐기된다. 그러나, 제출된 상태가 유닛 검사를 포함하고 있으면, 채널 서브시스템은 연관된 서브채널에 대한 클리어 신호를 발행하고 I/O-인터럽션 조건을 생성하지 않는다. 이것은 프로그램이 MODIFY SUBCHANNEL을 사용하여 서브채널을 인에이블 시킬 때 고려되어야 한다. 예를 들면, 서브채널이 디스에이블 되었을 때 존재했던 연관된 디바이스상의 매체는 교체되었을 수도 있으며, 따라서, 프로그램은 그 매체의 무결성을 검증해야 한다.
3. MODIFY SUBCHANNEL이 조건 코드 0을 세트할 때 후속적으로 STORE SUBCHANNEL을 발행함으로써 프로그램이 서브채널의 콘텐츠들을 검사할 것이 권고된다. STORE SUBCHANNEL을 사용하는 것은 지정된 서브채널이 변경되었는지 아닌지를 결정하는 방법이다. MODIFY SUBCHANNEL에 의한 조건 코드 0의 세트에 이어서 서브채널의 검사를 하지 못하면 프로그램이 발생을 예상하지 못하는 조건들이 초래될 수 있다.
START SUBCHANNEL 명령
채널 서브시스템이 연관된 디바이스에 대해 시작 펑션을 비동기적으로 수행하도록 신호를 받고, 지정된 ORB에 포함된 실행 파라미터들이 지정된 서브채널에 배치된다.
범용 레지스터 1은 시작될 서브채널을 지정하는 서브시스템-식별 워드를 포함한다. 제2-오퍼랜드 주소는 ORB의 논리적 주소이며 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다.
ORB에 포함된 실행 파라미터들이 서브채널에 배치된다.
START SUBCHANNEL이 실행되면, 서브채널은 2차 상태로만 상태 펜딩되고, 확장-상태-워드-포맷 비트(L)은 0이고, 상태-펜딩 조건은 서브채널에서 폐기된다.
서브채널이 시작 펜딩되고, 시작 펑션이 서브채널에 표시된다. 제2 오퍼랜드가 커맨드-모드 ORB를 지정하면, 서브채널은 커맨드 모드를 유지한다. 제2 오퍼랜드가 전송-모드 ORB를 지정하면, 서브채널은 전송 모드에 진입한다. 서브채널이 전송모드에 진입할 때, 이전의 전적인 충성도가 존재하지 않는다면 LPUM은 0으로 세트된다; 그렇지 않으면 LPUM은 변경되지 않는다.
논리적으로 조건 코드 0의 세트 이전에, 서브채널의 경로-오퍼레이션-불가능 조건들은, 있을 경우, 클리어된다.
채널 서브시스템이 시작 펑션을 비동기적으로 수행하도록 신호를 받는다. 시작 펑션은 아래의 “연관된 펑션” 섹션에 요약되고 그 후에 상세하게 기술된다.
조건 코드 0이 세트되어 위에 기술된 액션들이 취해졌음을 표시한다.
연관된 펑션( Associated Functions )
START SUBCHANNEL의 실행에 후속하여, 채널 서브시스템이 시작 펑션을 비동기적으로 수행한다.
모두 0들을 포함해야 하는 필드들이 아닌, ORB의 콘텐츠들은 유효성 검사를 받는다. 어떤 모델들에서는, 0들을 포함해야 하는 ORB의 필드들이, 명령의 실행 동안 대신에, 비동기적으로 검사를 받는다. 무효 필드들이 비동기적으로 검출될 때, 서브채널은 1차, 2차, 및 경보 상태로 상태 펜딩되고 지연 조건 코드 1과 프로그램 검사가 표시된다. 이 상황에서, I/O 오퍼레이션 또는 체인 I/O 오퍼레이션들은 디바이스에서 개시되지 않고, SCSW가 TEST SUBCHANNEL의 실행에 의해 클리어될 때 상기 조건은 시작-펜딩 비트가 1로 저장되는 것으로 표시된다.
어떤 모델들에서는, 경로 가용성이 명령의 실행 동안 대신에, 비동기적으로 테스트된다. 선택 가능한 채널 경로가 없을 때, 서브채널은 1차 및 2차 상태로 상태 펜딩되고 지연 조건 코드 3이 표시된다. I/O 오퍼레이션 또는 체인 I/O 오퍼레이션들은 디바이스에서 개시되지 않고, SCSW가 TEST SUBCHANNEL의 실행에 의해 클리어될 때 이 조건은 시작-펜딩 비트가 1로 저장되는 것으로 표시된다.
조건들이 허용하면, 채널 경로가 선택되고, ORB에서 지정되는 채널 프로그램의 실행이 개시된다.
특별 조건( Special Conditions )
START SUBCHANNEL이 실행될 때 서브채널이 상태 펜딩되면, 조건 코드 1이 세트되고, 다른 액션은 취해지지 않는다. 어떤 모델들에서는, 서브채널이 2차 상태로만 상태 펜딩일 때 조건 코드 1이 세트되지 않는다; 그 대신 상태-펜딩 조건은 폐기된다.
시작, 홀트, 또는 클리어 펑션이 서브채널에서 현재 진행중일 때, 조건 코드 2가 세트되고, 다른 액션은 취해지지 않는다.
서브채널이 START SUBCHANNEL에 대해서 오퍼레이션 불가능일 때, 조건 코드 3이 세트되고, 다른 액션은 취해지지 않는다. 서브채널이 채널 서브시스템에서 제공되지 않거나, 그것과 연관된 유효 디바이스 번호를 갖고 있지 않거나, 또는 인에이블되지 않으면 그 서브채널은 START SUBCHANNEL에 대해서 오퍼레이션 불가능하다.
어떤 모델들에서는, 선택 가능한 채널 경로가 없을 때, 서브채널이 또한 START SUBCHANNEL에 대해 오퍼레이션 불가능하다. 이 모델들에서는, 가용 채널 경로의 부족이 START SUBCHANNEL 실행의 일부로서 검출된다. 다른 모델들에서는, 채널-경로 가용성은 오직 비동기 시작 펑션의 일부로서만 테스트된다.
START SUBCHANNEL은 아래에 기술 또는 나열된 프로그램 예외들과 만날 수 있다.
커맨드-모드 ORB의 워드 1에서, 비트들 26-30은 0들이어야 하고, 그리고, 커맨드-모드 ORB의 워드 2에서, 비트 0은 0(zero)이어야 한다. 그렇지 않으면, 어떤 모델들에서는, 오퍼랜드 예외가 인지된다. 다른 모델들에서는, I/O-인터럽션 조건이 생성되어, 비동기 시작 펑션의 일부로서, 프로그램 검사를 표시한다.
START SUBCHANNEL은 또한 아래에 나열된 프로그램 예외들과 만날 수 있다.
다수-서브채널-세트 퍼실리티가 설치되지 않으면, 범용 레지스터 1의 비트들 32-47은 0001 hex를 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
다수-서브채널-세트 퍼실리티가 설치되면, 범용 레지스터 1의 비트들 32-44는 0들을 포함해야 하고, 비트들 45-46은 유효 값을 포함해야 하며, 그리고 비트 47은 값 1을 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
제2 오퍼랜드는 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다. START SUBCHANNEL의 실행은 모든 주소지정 및 보호 예외들에서 억제된다.
결과 조건 코드:
0 펑션이 개시됨
1 상태 펜딩
2 비지
3 오퍼레이션 불가능
프로그램 예외:
Figure pct00080
액세스 (페치, 오퍼랜드 2)
Figure pct00081
오퍼랜드
Figure pct00082
특권 오퍼레이션
Figure pct00083
명세
시작 펑션 및 재개 펑션( Start Function and Resume Function )
시작 펑션 및 재개 펑션은 아래에 기술된 바와 같이 I/O 오퍼레이션들을 개시한다. 시작 펑션은 커맨드 모드 또는 전송 모드에서 동작하는 서브채널들에 적용된다. 재개 펑션은 커맨드 모드에서 동작하는 서브채널들에만 적용된다.
START SUBCHANNEL 및 RESUME SUBCHANNEL의 실행에 후속하여, 채널 서브시스템은 시작 펑션 및 재개 펑션을 각각 수행하여 연관된 디바이스와 I/O 오퍼레이션을 개시한다. 시작 또는 재개 펑션의 수행은: (1)경로-관리 오퍼레이션을 수행하는 단계, (2)연관된 디바이스와 I/O 오퍼레이션 또는 체인 I/O 오퍼레이션들을 수행하는 단계, 및 (3) 서브채널이 상태 펜딩이 되게하여, 시작 펑션의 완료를 표시하도록 하는 단계로 구성된다. 재개 펑션(the resume function) 이, 만일 있다면, 중단을 일으킨 CCW에서 시작하여, 중단된 채널 프로그램의 실행을 개시하는 것과는 대조적으로, 시작 펑션은 ORB 내에서 지정되어 그 다음 START SUBCHANNEL의 오퍼랜드로 지정되는 채널 프로그램의 실행을 개시한다; 그렇지 않으면, 재개 펑션은 마치 시작 펑션인 것처럼 수행된다.
시작- 펑션 및 재개- 펑션 경로 관리( Start - Function and Resume - Function Path Management )
경로-관리 오퍼레이션이 채널 서브시스템에 의해 시작 또는 재개 펑션이 수행되는 동안에 수행되어, 디바이스와 함께 I/O 오퍼레이션을 개시하기 위해 그 디바이스 선택에 사용될 수 있는 가용 채널 경로를 선택한다. 취해지는 액션들은 다음과 같다:
1. 만일 서브채널이 현재 시작 펜딩이고 디바이스 활성(device active)이면, 시작 펑션은 서브채널에서 펜딩으로 남게되는데, 이전 시작 펑션에 대한 2차 상태가 연관된 디바이스로부터 수용이 되어서 서브채널이 시작 펜딩으로만 될 때까지 펜딩으로 남는다. 상기 상태가 수용되고 경보 인터럽션 조건을 기술하지 않을 때, 서브채널은 상태 펜딩으로 되지 않고, 펜딩 시작 펑션의 수행이 후속하여 개시된다. 만일 상기 상태가 경보 인터럽션 조건을 기술하면, 서브채널은 2차 및 경보 상태에서 상태 펜딩이 되고, 펜딩 시작 펑션은 개시되지 않으며, 지연 조건 코드 1이 세트되고, 그리고 시작-펜딩 비트는 1을 유지한다. 만일 서브채널이 현재 시작 펜딩만으로 되어 있다면, 시작 펑션의 수행은 아래 기술된 바와 같이 개시된다.
2. 만일 전적인 충성도(a dedicated allegiance)가 어떤 채널 경로에 대해서 서브채널에 존재하면, 채널 서브시스템은 디바이스 선택을 위해 그 경로를 선택한다. 만일 디바이스 선택 시도 중에 비지 조건을 만나고 전적인 충성도가 서브채널에 존재하면, 시작 펑션은 비지에 관한 내부 표시(the internal indication of busy)가 그 채널 경로에 대해서 리셋될 때까지 펜딩을 유지한다. 비지에 관한 내부 표시가 리셋되면, 펜딩 시작 펑션의 수행이 그 채널 경로에서 개시된다.
3. 만일 선택 가능한 채널 경로가 없고 채널 경로에 대한 전적인 충성도가 서브채널에 존재하지 않으면, 채널 경로는 선택되지 않는다.
4. 만일 선택 가능한 모든 채널 경로들이 시도되었고 그들 중 하나 또는 그 이상이 다른 디바이스들과 능동적으로 통신하는데 사용되는 중이라면, 또는, 그와 달리, 만일 채널 서브시스템이 하나 또는 그 이상의 그 채널 경로들에서 컨트롤-유닛-비지 또는 디바이스-비지 조건을 만나거나 혹은 하나 또는 그 이상의 그 채널 경로들에서 상기 조건들의 조합을 만난다면, 시작 펑션은 채널 경로, 컨트롤 유닛, 또는 디바이스가, 적절하게, 이용 가능하게 될 때까지 서브채널에서 펜딩으로 남아 있는다.
5. 만일 (1)시작 펑션이 한 디바이스가 타입-1 컨트롤 유닛에 접속된 어느 채널 경로에서 개시되어야 하고 그리고 (2)다른 디바이스는 아무도 그 동일한 컨트롤 유닛에 접속되어 있지 않다면 - 그 동일 컨트롤 유닛의 서브채널은 상기 동일 채널 경로에 대해 전적인 충성도(a dedicated allegiance)를 갖거나 동일한 채널 경로에 대해 작업 충성도(a working allegiance)를 가지며 그 서브채널에 대해서는 1차 상태(primary status)가 수신되지 않았음 -, 선택 가능한 경우 그 채널 경로가 선택된다; 그렇지 않으면, 그 채널 경로는 선택되지 않는다. 그러나, 만일 디바이스에 대한 다른 경로가 선택 가능하고 위에 기술된 바와 같은 어떤 충성도도 존재하지 않는다면, 그 다른 경로가 선택된다. 선택 가능한 다른 채널 경로가 없으면, 시작 또는 재개 펑션은 채널 경로가 이용 가능하게 될 때까지 적절하게 펜딩으로 남아 있는다.
6. 만일 디바이스가 타입-3 컨트롤 유닛에 접속되어 있다면, 그리고 만일 적어도 하나의 다른 디바이스가 동일 컨트롤 유닛에 접속되어 있고 그 유닛의 서브채널이 그 동일 채널 경로에 대해 전적인 충성도를 갖고 있다면, 선택 가능한 다른 채널 경로가 선택될 수 있거나, 또는 상기 다른 디바이스에 대한 전적인 충성도가 클리어될 때까지 시작 펑션은 펜딩으로 남아 있는다.
7. 만일 채널 경로가 선택 완료되고 펜딩 CCW 채널 프로그램의 제1 커맨드의 실행을 개시할 또는 펜딩 TCW 채널 프로그램의 TCCB를 전송할 디바이스를 선택하는 동안에 비지 표시가 수신되면, 비지 표시가 수신된 채널 경로는 비지의 내부 표시가 리셋될 때까지 (디바이스-비지 또는 컨트롤-유닛-비지 표시가 수신되었는지에 따라서) 그 디바이스 또는 컨트롤 유닛에 대해서 다시 사용되지 않는다.
8. 만일, CCW 채널 프로그램에 대해서 시작 펑션을 위해 명시된 또는 재개 펑션을 위해 암시된 제1 커맨드의 실행을 개시하기 위하여, 또는 TCW 채널 프로그램에 대해서 시작 펑션을 위한 TCCB의 전송을 개시하기 위하여(위의 액션 7에서 기술한 바와 같이) 디바이스 선택을 시도하는 동안에, 채널 서브시스템이 비지 표시를 수신하면, 다음의 액션들 중 하나를 수행한다:
a. 만일 디바이스가 다수경로 모드에서 동작하도록 명시되고 수신된 비지 표시가 디바이스 비지이면, 시작 또는 재개 펑션은 내부 비지 표시가 리셋될 때까지 펜딩으로 남아 있는다.
b. 만일 디바이스가 다수경로 모드에서 동작하도록 명시되고 수신된 비지 표시가 컨트롤 유닛 비지이면, 또는 만일 디바이스가 단일-경로 모드에서 동작하도록 명시된다면, 채널 서브시스템은, 시작 또는 재개 펑션이 개시되거나 또는 디바이스의 선택이 선택 가능한 모든 경로에 대해서 시도될 때까지, 선택 가능한 대체 채널 경로를 선택함으로써 디바이스의 선택을 시도하고 경로-관리 오퍼레이션을 계속한다. 만일 시작 또는 재개 펑션이 선택 가능한 모든 채널 경로가 선택된 이후에도 채널 서브시스템에 의해 개시되지 않았다면, 시작 또는 재개 펑션은 내부 비지 표시가 리셋될 때까지 펜딩으로 남아 있는다.
c. 만일 서브채널이 전적인 충성도를 갖는다면, 액션 2가 적용된다.
9. CCW 채널 프로그램을 위해 제1 커맨드를 전송하거나 또는 TCW 채널 프로그램을 위해 TCCB를 전송하기 위한 선택을 시도하는 동안에, 디바이스는 오퍼레이션 불가능한 것으로 나타나고, 그 대응 채널 경로는 서브채널에 대해서 오퍼레이션 가능할 때, 경로-오퍼레이션-불가능 조건이 인지되고, 서브채널에서 채널 경로의 상태는 서브채널에 대해 오퍼레이션 가능에서 서브채널에 대해 오퍼레이션 불가능으로 변경된다. 서브채널에서 경로-오퍼레이션-불가능 조건들은, 만일 있을 경우, 서브채널이 클리어 펜딩, 시작 펜딩, 또는 (서브채널이 중단되었을 경우) 재개 펜딩이 될 때까지 보존되며, 그러한 펜딩이 되었을 때 경로-오퍼레이션-불가능 조건들은 클리어된다. 그러나, 만일 그 대응 채널 경로가 서브채널에 대해 오퍼레이션 가능하지 않다면, 경로-오퍼레이션-불가능 조건은 인지되지 않는다. 선택 가능한 채널 경로상에서 제1 커맨드 또는 TCCB를 전송하기 위한 선택을 시도하는 동안에 디바이스가 오퍼레이션 불가능한 것으로 나타날 때, 다음 액션들 중 하나가 발생한다:
a. 만일 그 채널 경로에 대해서 전적인 충성도가 존재한다면, 그 채널 경로가 선택 가능한 유일한 채널 경로이다; 따라서 시작 또는 재개 펑션을 개시하기 위한 추가 시도들은 포기되고, 인터럽션 조건이 인지된다.
b. 만일 전적인 충성도가 존재하지 않고 시도되지 않은 선택 가능한 대체 채널 경로들이 있다면, 디바이스 선택을 시도하고 CCW 채널 프로그램에 대해 제1 커맨드를 또는 TCW 채널 프로그램에 대해 TCCB를 전송하기 위해 그 채널 경로들 중 하나가 선택된다.
c. 만일 전적인 충성도가 존재하지 않고, 시도되지 않은 선택 가능한 대체 채널 경로들이 존재하지 않으며, 그리고 디바이스가 시도된 채널 경로들 중 적어도 하나에서 오퍼레이션 가능한 것으로 나타나면, 시작 또는 재개 펑션은 채널 경로, 컨트롤 유닛, 또는 디바이스가, 적절하게, 이용 가능하게 될 때까지 서브채널에서 펜딩으로 남아 있는다.
d. 만일 전적인 충성도가 존재하지 않고, 시도되지 않은 선택 가능한 대체 채널 경로들이 존재하지 않으며, 그리고 디바이스가 시도된 모든 채널 경로에서 오퍼레이션 불가능한 것으로 나타난다면, 시작 또는 재개 펑션을 개시하기 위한 추가 시도들은 포기되고, 인터럽션 조건이 인지된다.
10. 서브채널이 활성이고 I/O 오퍼레이션이 디바이스와 함께 개시되어야 할 때, 다수경로 모드가 서브채널에서 명시되지 않는다면 모든 디바이스 선택은 LPUM 표시에 따라서 발생한다. 예를 들어, 커맨드 체이닝이 CCW 채널 프로그램에 대해서 명시되면, 채널 서브시스템은 체인 I/O 오퍼레이션들을 기술하는 제1 및 모든 후속 커맨드들을 동일한 채널 경로를 통해서 전송한다.
I/O 오퍼레이션의 실행( Execution of I/O Operations )
채널 경로가 선택된 이후에, 채널 서브시스템은, 조건들이 허용할 경우, 연관된 디바이스와 I/O 오퍼레이션의 실행을 개시한다. 추가 I/O 오퍼레이션들의 실행이 제1 I/O 오퍼레이션의 개시 및 실행에 이어서 이루어질 수 있다.
커맨드 모드에서 동작하는 서브채널들에 있어서, 채널 서브시스템은 다음의 7가지 타입의 커맨드들을 실행할 수 있다: 라이트(write), 리드(read), 리드 백워드(read backward), 컨트롤(control), 센스(sense), 센스 ID(sense ID), 및 채널에서 전송(transfer in channel). 각 커맨드는, 채널에서 전송 커맨드를 제외하고, 대응 I/O 오퍼레이션을 개시한다. 채널-프로그램 실행이 서브채널에서 중단될 때의 기간들을 제외하고, 서브채널은 1차 인터럽션 조건이 서브채널에서 인지될 때까지 제1 커맨드의 수용으로부터 활성이 된다. 만일 1차 인터럽션 조건이 제1 커맨드의 수용 전에 인지되면, 서브채널은 활성이 되지 않는다. 보통으로, 1차 인터럽션 조건은 채널-종료 신호에 의해, 또는 커맨드 체이닝의 경우에는 그 체인의 마지막 CCW에 대한 채널-종료 신호에 의해 야기된다. 디바이스는 1차 인터럽션 조건이 서브채널에서 인지될 때까지 활성이다. 보통으로, 2차 인터럽션 조건은 디바이스-종료 신호에 의해, 또는 커맨드 체이닝의 경우에는 그 체인의 마지막 CCW에 대한 디바이스-종료 신호에 의해 야기된다.
전송 모드에서 동작하는 서브채널들에 있어서, 채널 서브시스템은 실행을 위해 다음의 6가지 타입의 커맨드들: 즉, 라이트, 리드, 컨트롤, 센스, 센스 ID, 및 질의(interrogate)를 전송할 수 있다. 각 커맨드는 대응 디바이스 오퍼레이션을 개시한다. 하나 또는 그 이상의 커맨드들이 TCCB 내 I/O 디바이스 TCCB에 전송되면, 서브채널은 1차 상태가 제출될 때까지 시작 펜딩으로 남아 있는다.
프로그래밍 주석:
단일-경로 모드에서, I/O 오퍼레이션 또는 체인 I/O 오퍼레이션들에 대한 커맨드들, 데이터, 및 상태의 모든 전송은 제1 커맨드가 디바이스에 전송된 채널 경로상에서 발생한다.
디바이스가 동적-재연결 기능(feature)이 설치되어 있을 때, I/O 오퍼레이션 또는 체인 I/O 오퍼레이션들은 다수경로 모드에서 수행될 수 있다. 다수경로 모드에서 동작하기 위해서는, SCHIB의 워드 1의 비트 13이 1로 명시된 상태에서 서브채널에 대해서 MODIFY SUBCHANNEL이 미리 실행되었어야 한다. 또한, 디바이스는 그 디바이스의 타입에 적절한 특정 모델-종속 커맨드들의 실행에 의해 다수경로 모드에 세트되야 한다. 다수-경로 오퍼레이션들을 처리하는 일반적인 절차들은 다음과 같다:
1. 셋업(setup)
a. 세트-다수경로-모드 타입의 커맨드가 다수경로 그룹의 일원으로 셋업될 각 채널 경로상에서 디바이스에 의해 성공적으로 실행되어야 한다; 그렇지 않으면, 다수경로 모드의 오퍼레이션들은 서브채널에 예측할 수 없는 결과들을 가져올 수도 있다. 만일, 어떤 이유로, 디바이스에 대해서 하나 또는 그 이상의 물리적으로 이용 가능한 채널 경로들이 다수경로 그룹에 포함되지 않는다면, 이 채널 경로들은 서브채널이 다수경로 모드에서 동작하는 중에는 선택 가능해서는 안된다. 채널 경로는 MODIFY SUBCHANNEL의 실행 전에 SCHIB에서 또는 START SUBCHANNEL의 실행 전에 ORB에서 대응 LPM 비트를 0으로 세트함으로써 선택 가능하지 않게 될 수 있다.
b. 세트-다수경로-모드 타입의 커맨드가 디바이스에 전송될 때, 그 시작 펑션의 실행에 대해서 대체 채널-경로 선택을 피하기 위해 단일 채널 경로만이 논리적으로 이용 가능해야 한다; 그렇지 않으면, 디바이스-비지 조건들이 하나의 채널 경로 이상에서 채널 서브시스템에 의해 검출될 수 있으며, 이것은 후속 다수경로-모드 오퍼레이션들에 대해서 예측할 수 없는 결과들을 초래할 수 있다. 다수경로 그룹의 구성원(membership)이 변경될 때마다 이 타입의 세트 절차를 사용해야 한다.
2. 다수경로 모드 해제(Leaving the Multipath Mode)
다수경로 모드를 해제하고 단일-경로 모드에서 처리를 계속하기 위해서는, 다음의 두 절차 중 하나를 사용해야 한다:
a. 해체-다수경로-모드(disband-multipath-mode) 타입의 커맨드가 다수경로 그룹의 모든 채널 경로에 대해서 실행될 수 있다. 이 커맨드 다음에는 (1)SCHIB의 워드 1의 비트 13이 0으로 명시된 상태에서 MODIFY SUBCHANNEL의 실행, 또는 (2)단일 채널 경로만을 LPM에서 논리적으로 이용 가능한 것으로 명시, 중 하나가 뒤따라야 한다. 시작 펑션은 디바이스가 단일-경로 모드에서 동작하는 중인데 다수 채널 경로들을 선택할 수 있는 다수경로 모드에서 동작하는 서브채널에서 수행되어서는 안 된다; 그렇지 않으면, 서브채널에서 그 시작 펑션 또는 후속 시작 펑션들에 대한 예측할 수 없는 결과들이 발생할 수 있다.
b. 포기-다수경로-모드(resign-multipath-mode) 타입의 명령이 다수경로 그룹의 각 채널 경로상에서 실행된다(셋업의 역). 이 커맨드 다음에는 (1)SCHIB의 워드 1의 비트 13이 0으로 명시된 상태에서 MODIFY SUBCHANNEL의 실행, 또는 (2) 단일 채널 경로만이 LPM에서 논리적으로 이용 가능한 것으로 명시, 중 하나가 뒤따라야 한다. 시작 펑션은 디바이스가 단일-경로 모드에서 동작하는 중인데 다수 채널 경로들을 선택할 수 있는 다수경로 모드에서 동작하는 서브채널에서 수행될 수 없다; 그렇지 않으면, 서브채널에서 그 시작 펑션 또는 후속 시작 펑션들에 대한 예측할 수 없는 결과들이 발생할 수 있다.
데이터의 블록화( Blocking of Data )
I/O 디바이스에 의해 기록되는 데이터는 블록들로 분할된다. 블록의 길이는 디바이스에 달려 있다. 예를 들면, 블록은 카드(card)일 수도, 인쇄선(line of printing)일 수도, 또는 자기 테이프상의 두 연속된 공백(gap) 사이에 기록된 정보일 수도 있다.
하나의 I/O 오퍼레이션에서 전송될 수 있는 최대량의 정보가 1 블록이다. I/O 오퍼레이션은 연관된 메인-스토리지 영역이 소진되거나 블록의 끝에 도달할 때, 어느 쪽이든 먼저 발생하면, 종료된다. 자기-테이브 유닛 또는 조회용 단말기(inquiry station)에 라이트 등의 특정 오퍼레이션들에 있어서, 블록들은 정의되지 않으며 전송된 정보의 양은 오직 프로그램에 의해서만 컨트롤된다.
오퍼레이션-요청 블록( Operation - Request Block )
오퍼레이션-요청 블록(ORB)는 START SUBCHANNEL의 오퍼랜드이다. ORB는 특정한 시작 펑션을 컨트롤하는데 사용될 파라미터들을 명시한다. 이 파라미터들에는 인터럽션 파라미터, 서브채널 키, 제1 CCW 또는 TCW의 주소, 오퍼레이션-컨트롤 비트들, 우선-컨트롤 번호들, 및 지정된 디바이스에 대한 채널 경로들의 논리적 가용성의 명세가 포함된다.
ORB의 콘텐츠들은, 조건 코드 0의 세트 전에, START SUBCHANNEL의 실행 동안 지정된 서브채널에 배치된다. 상기 실행의 결과가 0이 아닌 조건 코드가 나올 것으로 예상되면, ORB의 콘텐츠들은 지정된 서브채널에 배치되지 않는다.
ORB 주소의 가장 오른쪽 두 개의 비트는 0들이 되어서, ORB를 워드 범위로 배치해야 한다; 그렇지 않으면, 명세 예외가 인지된다. 파이버-채널-확장(FCX) 퍼실리티가 설치되면, ORB의 채널-프로그램-타입 컨트롤(B)(워드1, 비트 3)은 ORB에 의해 지정되는 채널 프로그램의 타입을 명시한다. B가 0이면, ORB는 CCW 채널 프로그램을 지정한다. B가 1이면, ORB는 TCW 채널 프로그램을 지정한다. FCX를 지원하는 I/O-디바이스들만 TCW 채널 프로그램들을 인지한다.
CCW 채널 프로그램을 지정하는 ORB의 콘텐츠들이 START SUBCHANNEL의 실행 동안 지정된 서브채널에 배치되면, 서브채널은 커맨드 모드를 유지한다. 그러므로, 이러한 ORB는 또한 커맨드-모드 ORB로도 알려진다. TCW 채널 프로그램을 지정하는 ORB의 콘텐츠들이 START SUBCHANNEL의 실행 동안 지정된 서브채널에 배치되면, 서브채널은 전송 모드에 진입한다. 그러므로, 이러한 ORB는 또한 전송-모드 ORB로도 알려진다.
TEST PENDING INTERRUPTION 명령
서브채널의 펜딩 I/O 인터럽션에 대한 I/O-인터럽션 코드가 제2-오퍼랜드 주소에 의해 지정된 위치에 저장되고, 그 펜딩 I/O-인터럽션의 요청은 클리어된다.
제2-오퍼랜드 주소는, 0이 아닐 때, 워드 0과 1로 구성되는 2-워드 I/O-인터럽션 코드가 저장될 위치의 논리적 주소이다. 제2-오퍼랜드 주소는 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다.
만일 제2-오퍼랜드 주소가 0이면, 워드 0-2로 구성되는 3-워드 I/O-인터럽션 코드가 실제 위치들(real locations) 184-195에 저장된다. 이 경우에, 하위-주소 보호(low-address protection)와 키-컨트롤 보호(key-controlled protection)는 적용되지 않는다.
제2-오퍼랜드 주소가 0일 때 액세스-레지스터 모드(access-register mode)에서, 액세스-레지스터 변환(translation)이 액세스 레지스터 B2에 대해서 일어날 것인지는 예측 불가능하다. 만일 변환이 일어난다면, 결과 주소-공간-컨트롤 엘리먼트(resulting address-space-control element)는 사용되지 않는다; 즉, 인터럽션 코드는 여전히 실제 위치들 184-195에 저장된다.
펜딩 I/O-인터럽션 요청들은 상기 명령을 실행하는 CPU의 컨트롤 레지스터 6에서 I/O-인터럽션-서브클래스 마스크에 의해 허용되는 I/O-인터럽션 서브클래스들에 대해서만 수용된다. 만일 컨트롤 레지스터 6에 의해 허용되는 I/O-인터럽션 요청들이 존재하지 않는다면, I/O-인터럽션 코드는 저장되지 않고, 제2-오퍼랜드 위치는 변경되지(modified) 않으며, 그리고 조건 코드 0이 세트된다.
만일 펜딩 I/O-인터럽션 요청이 수용되면, I/O-인터럽션 코드는 저장되고, 펜딩 I/O-인터럽션 요청은 클리어되고, 그리고 조건 코드 1이 세트된다. 저장되는 I/O-인터럽션 코드는 I/O 인터럽션이 발생하면 저장될 것과 동일한 것이다. 그러나, PSW들은 I/O-인터럽션이 발생할 때와 같이 스왑되지 않는다(not swapped). 상기 명령의 실행은 다음과 같이 정의된다:
서브시스템-식별 워드(SID):
SID의 비트들 32-63은 워드 0에 배치된다.
인터럽션 파라미터: 워드 1은, 프로그램에 의해 명시되었고 ORB 또는 PMCW의 워드 0 내 서브채널에 보내진, 4-바이트 파라미터를 포함한다. 디바이스가 경보 상태를 제출하고 그 인터럽션 파라미터가 이전에 START SUBCHANNEL 또는 MODIFY SUBCHANNEL의 실행에 의해 서브채널에 보내지지 않았을 때, 이 필드는 0들을 포함한다.
인터럽션 -식별 워드: 워드 2는, 저장될 때, 인터럽션-식별 워드를 포함하며, 이것은 I/O-인터럽션의 출처(source)를 더 식별한다. 워드 2는 제2-오퍼랜드 주소가 0일 때만 저장된다.
인터럽션-식별 워드는 다음과 같이 정의된다:
A 비트(A): 인터럽션-식별 워드의 비트 0은 클리어된 펜딩 I/O-인터럽션 요청의 타입을 명시한다. 비트 0이 0일 때, I/O-인터럽션 요청은 서브채널과 연관되어 있었다.
I/O- 인터럽션 서브클래스( ISC ): 인터럽션-식별 워드의 비트 포지션들 2-4는, 펜딩 I/O-인터럽션 요청이 클리어된 서브채널과 연관된 I/O-인터럽션 서브클래스를 명시하는, 0-7 범위의, 무부호(unsigned) 2진 정수를 포함한다. 나머지 비트 포지션들은 유보되고 0들로 저장된다.
특별 조건( Special Conditions )
TEST PENDING INTERRUPTION은 아래에 기술 또는 나열된 프로그램 예외들과 만날 수 있다.
제2 오퍼랜드는 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다.
TEST PENDING INTERRUPTION의 실행은 모든 주소지정 및 보호 예외들에서 억제된다.
결과 조건 코드:
0 인터럽션 코드가 저장되지 않음
1 인터럽션 코드가 저장됨
2 ―
3 ―
프로그램 예외:
Figure pct00084
액세스 (저장, 오퍼랜드 2, 제2-오퍼랜드 주소 0이 아닌 것만)
Figure pct00085
특권 오퍼레이션
Figure pct00086
명세
프로그래밍 주석:
1. TEST PENDING INTERRUPTION은 I/O 인터럽션들이 마스크-오프(masked off)될 때 0의 제2 오퍼랜드 주소로만 실행되어야 한다. 그렇지 않으면, 상기 명령에 의해 저장된 I/O-인터럽션 코드는 I/O 인터럽션이 발생하면 유실될 수 있다. TEST PENDING INTERRUPTION에 후속하여 취해지는 I/O 인터럽션의 출처(source)를 식별하는 I/O-인터럽션 코드는 또한 실제 위치들 184-195에 저장되며, 상기 명령에 의해 저장된 I/O-인터럽션 코드를 대체한다.
2. 제2-오퍼랜드 주소가 0일 때 액세스-레지스터 모드에서, 액세스-레지스터 변환이 발생하고 액세스 레지스터가 에러에 걸리면 액세스 예외가 인지된다. 이 예외는 B2 필드를 0으로 만들거나 액세스 레지스터에 00000000 hex, 00000001 hex, 또는 임의의 다른 유효 콘텐츠들을 배치함으로써 방지될 수 있다.
STORE SUBCHANNEL 명령
지정된 서브채널에 대한 컨트롤 및 상태 정보가 지정된 SCHIB에 저장된다.
범용 레지스터 1은 서브채널을 지정하는 서브시스템-식별 워드를 포함하는데, 이 서브채널에 대한 정보가 저장될 것이다. 제2-오퍼랜드 주소는 SCHIB의 논리적 주소이며 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다.
확장-I/O-측정-블록 퍼실리티가 설치되어 있지 않을 때, SCHIB에 저장되는 정보는 경로-관리-컨트롤 워드, SCSW, 및 3개 워드의 모델-종속 정보로 구성된다. 확장-I/O-측정-블록 퍼실리티가 설치되어 있을 때, SCHIB에 저장되는 정보는 경로-관리-컨트롤 워드, SCSW, 측정-블록-주소 필드, 및 1개 워드의 모델-종속 정보로 구성된다.
STORE SUBCHANNEL의 실행은 서브채널에서 어떤 정보도 변경시키지 않는다.
조건 코드 0이 세트되어 지정된 서브채널에 대한 컨트롤 및 상태 정보가 SCHIB에 저장되었음을 표시한다. STORE SUBCHANNEL의 실행의 결과가 조건 코드 0의 세트로 나오면, SCHIB 내 정보는 서브채널의 일관성 상태(consistent state)를 표시한다.
특별 조건( Special Conditions )
지정된 서브채널이 STORE SUBCHANNEL에 대해서 오퍼레이션 불가능일 때, 조건 코드 3이 세트되고, 다른 액션은 취해지지 않는다. 서브채널이 채널 서브시스템에서 제공되지 않으면 그 서브채널은 STORE SUBCHANNEL에 대해서 오퍼레이션 불가능하다.
STORE SUBCHANNEL은 아래에 기술 또는 나열된 프로그램 예외들과 만날 수 있다.
다수-서브채널-세트 퍼실리티가 설치되어 있지 않을 때, 범용 레지스터 1의 비트들 32-47은 0001 hex를 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
다수-서브채널-세트 퍼실리티가 설치되어 있을 때, 범용 레지스터 1의 비트들 32-44는 0들을 포함해야 하고, 비트들 45-46은 유효 값을 포함해야 하고, 그리고 비트 47은 값 1을 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
제2 오퍼랜드는 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다.
결과 조건 코드:
0 SCHIB 저장됨
1 ―
2 ―
3 오퍼레이션 불가능
프로그램 예외:
Figure pct00087
액세스 (저장, 오퍼랜드 2)
Figure pct00088
오퍼랜드
Figure pct00089
특권 오퍼레이션
Figure pct00090
명세
프로그래밍 주석:
1. SCSW에 저장된 디바이스 상태는 디바이스-비지 표시, 컨트롤-유닛-비지 표시, 또는 컨트롤-유닛-종료 표시를 포함할 수 있다.
2. SCHIB에 저장되는 정보는 서브채널로부터 획득된다. STORE SUBCHANNEL 명령은 채널 서브시스템이 주소지정된 디바이스에 질의(interrogate)하게 하지 않는다.
3. STORE SUBCHANNEL은, 어떤 펜딩 상태 조건들도 클리어되게 하지 않고, 어느 때든 실행되어 서브채널에 존재하는 조건들을 샘플링할 수 있다.
4. (예를 들어, 서브채널이 언제 상태를 변경하는지를 결정하기 위해) 개입 지연(intervening delay) 없는 STORE SUBCHANNEL의 반복 실행은 피해야 하는데, 왜냐하면 CPU에 의한 서브채널의 반복 액세스는 서브채널을 업데이트하기 위해서 채널 서브시스템이 서브채널을 액세스하는 것을 지연시키거나 막을 수 있기 때문이다.
TEST SUBCHANNEL 명령
서브채널에 대한 컨트롤 및 상태 정보가 지정된 IRB에 저장된다.
범용 레지스터 1은 서브채널을 지정하는 서브시스템-식별 워드를 포함하며, 이 서브채널에 대해서 정보가 저장될 것이다. 제2-오퍼랜드 주소는 IRB의 논리적 주소이고 워드(a word) 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다.
IRB에 저장되는 정보는 SCSW, 확장-상태 워드, 및 확장-컨트롤 워드로 구성된다.
만일 서브채널이 상태 펜딩이면, 상태-컨트롤 필드의 상태-펜딩 비트가 1로 저장된다. 서브채널이 상태 펜딩인지 아닌지는 TEST SUBCHANNEL이 실행될 때 수행되는 펑션들에 영향을 준다.
서브채널이 상태 펜딩이고 TEST SUBCHANNEL이 실행될 때, 전술한 바와 같이, 정보가 IRB에 저장되며, 이어서 서브채널에 존재하는 특정 조건들과 표시들이 클리어된다. 만일 서브채널이 전송 모드에 있다면, 이 조건들의 클리어, 구체적으로 말하면 시작 펑션의 클리어는, 서브채널을 커맨드 모드에 배치한다. 만일 I/O-인터럽션 요청이 서브채널에 대해서 펜딩이면, 그 요청은 클리어된다. 조건 코드 0이 세트되어 이 액션들이 취해졌음을 표시한다.
서브채널이 상태 펜딩이 아니고 TEST SUBCHANNEL이 실행될 때, 정보가 IRB에 저장되고, 그리고 조건들 또는 표시들은 클리어되지 않는다. 조건 코드 1이 세트되어 이 액션들이 취해졌음을 표시한다.
특별 조건( Special Conditions )
서브채널이 TEST SUBCHANNEL에 대해서 오퍼레이션 불가능일 때, 조건 코드 3이 세트되고, 그리고 다른 액션은 취해지지 않는다. 만일 서브채널이 제공되지 않거나, 그와 연관된 유효 디바이스 번호를 갖고 있지 않거나, 또는 인에이블되지 않는다면, 서브채널은 TEST SUBCHANNEL에 대해서 오퍼레이션 불가능하다.
TEST SUBCHANNEL은 아래에 기술 또는 나열된 프로그램 예외들과 만날 수 있다.
다수-서브채널-세트 퍼실리티가 설치되어 있지 않을 때, 범용 레지스터 1의 비트들 32-47은 0001 hex를 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
다수-서브채널-세트 퍼실리티가 설치되어 있으면, 범용 레지스터 1의 비트들 32-44는 0들을 포함해야 하고, 비트들 45-46은 유효 값을 포함해야 하고, 그리고 비트 47은 값 1을 포함해야 한다; 그렇지 않으면, 오퍼랜드 예외가 인지된다.
제2 오퍼랜드는 워드 범위로 지정되어야 한다; 그렇지 않으면, 명세 예외가 인지된다.
TEST SUBCHANNEL의 실행이 주소지정 및 보호 예외들에서 종료될 때, 서브채널의 상태는 변경되지 않는다.
결과 조건 코드:
0 IRB 저장됨; 서브채널 상태 펜딩
1 IRB 저장됨; 서브채널 상태 펜딩 아님
2 ―
3 오퍼레이션 불가능
프로그램 예외:
Figure pct00091
액세스 (저장, 오퍼랜드 2)
Figure pct00092
오퍼랜드
Figure pct00093
특권 오퍼레이션
Figure pct00094
명세
프로그래밍 주석:
1. SCSW에 저장되는 디바이스 상태는 디바이스-비지 표시, 컨트롤-유닛-비지 표시, 또는 컨트롤-유닛-종료 표시를 포함할 수 있다.
2. IRB에 저장되는 정보는 서브채널로부터 획득된다. TEST SUBCHANNEL 명령은 채널 서브시스템이 주소지정된 디바이스에 질의하게 하지 않는다.
3. I/O 인터럽션이 발생할 때, 그것은 서브채널에서 상태-펜딩 조건의 결과이며, 그리고 통상적으로 TEST SUBCHANNEL이 실행되어 그 상태를 클리어한다. TEST SUBCHANNEL은 또한 어느 때든 실행되어 서브채널에 존재하는 조건들을 샘플링할 수 있다.
4. 언제 시작 펑션이 완료되는지를 결정하기 위한 TEST SUBCHANNEL의 반복 실행은 피해야 하는데, 왜냐하면 시작 펑션의 완료가 표시되거나 표시되지 않을 수 있는 조건들이 있기 때문이다. 예를 들면, 만일 채널 서브시스템이 인터페이스-컨트롤-검사(IFCC) 조건을 (어느 서브채널에 대해서) 중단한 상태를 유지하고 있는데 그 이유가 또 다른 서브채널이 이미 상태 펜딩이기 때문이며, 그리고 만일 TEST SUBCHANNEL에 의해 테스트 중인 시작 펑션이 선택 가능한 유일한 경로로서 IFCC 조건을 갖는 채널 경로를 가진다면, 그 시작 펑션은 다른 서브채널에서 상태-펜딩 조건이 클리어되어 IFCC 조건이 적용되는 서브채널에 표시되도록 허용할 때까지 개시되지 않을 수 있다.
5. 예를 들어, 서브채널이 언제 상태를 변경하는지를 결정하기 위해, 개입 지연(an intervening delay) 없는 TEST SUBCHANNEL의 반복 실행은 피해야 하는데, 왜냐하면 CPU에 의한 서브채널의 반복 액세스는 채널 서브시스템에 의해 서브채널의 액세스를 지연 또는 금지할 수 있기 때문이다. 거의 동시에 동일한 서브채널에 대해서 다수 CPU들에 의한 TEST SUBCHANNEL의 실행은 동일한 영향을 줄 수 있으며 또한 피해야 한다.
6. CPU에 의한 I/O-인터럽션 처리(handling)의 우선순위는 TEST SUBCHANNEL의 실행에 의해 변경될 수 있다. TEST SUBCHANNEL이 실행되고 지정된 서브채널이 I/O-인터럽션 요청 펜딩을 가지고 있을 때, 그 I/O-인터럽션 요청은 클리어되고, 그리고 이전에 확립된 우선순위와 상관없이 SCSW가 저장된다. 나머지 I/O-인터럽션 요청들의 상대적 우선순위는 변경되지 않는다.
이 기술분야에서 통상의 지식을 가진 자는 인지할 수 있는 바와 같이, 본 발명의 실시 예들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 따라서, 본 발명의 실시 예들은 전적으로 하드웨어 실시 예, 전적으로 소프트웨어 실시 예 (펌웨어, 상주 소프트웨어, 마이크로-코드 등 포함) 또는 소프트웨어와 하드웨어 실시 예들을 조합한 실시 예의 형태를 취할 수 있으며, 이들 모두는 일반적으로 여기에서 "회로", "모듈" 또는 "시스템"으로 불릴 수 있다. 또한, 본 발명의 실시 예들은 컴퓨터 리드가능 프로그램 코드가 그 안에 구현된 하나 또는 그 이상의 컴퓨터 리드가능 매체(들)에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
하나 또는 그 이상의 컴퓨터 리드가능 매체(들)의 임의 조합이 이용될 수 있다. 컴퓨터 리드가능 매체는 컴퓨터 리드가능 스토리지 매체일 수 있다. 컴퓨터 리드가능 스토리지 매체는, 예를 들면, 전자, 자기, 광학, 전자기, 적외선 또는 반도체 시스템, 장치(apparatus), 또는 디바이스, 또는 전술한 것들이 적절히 조합된 것일 수 있으나, 이에 한정되지는 않는다. 컴퓨터 리드가능 스토리지 매체의 더 구체적인 예들(비포괄적 목록)은 다음을 포함한다: 하나 또는 그 이상의 와이어들을 갖는 전기적인 연결 배선, 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM), 리드전용 메모리(ROM), 소거 및 프로그램가능 리드전용 메모리(EPROM 또는 플래시 메모리), 광섬유, 휴대용 컴팩트 디스크 리드전용 메모리(CD-ROM), 광학 스토리지 디바이스, 자기 스토리지 디바이스, 또는 전술한 것들이 적절히 조합된 것. 이 문서의 맥락에서, 컴퓨터 리드가능 스토리지 매체는 명령 실행 시스템, 장치, 또는 디바이스에 의해 또는 그와 연결하여 사용할 용도의 프로그램을 포함 또는 저장할 수 있는 모든 유형의 매체일 수 있다.
이제 도 10을 참조하면, 한 예에서, 컴퓨터 프로그램 제품(1000)은, 예를 들어, 본 발명의 하나 또는 그 이상의 실시 예들을 제공하고 용이하게 하기 위해 컴퓨터 리드가능 프로그램 코드 수단 또는 논리(1004)를 그 위에 저장하기 위한 하나 또는 그 이상의 비일시적인(non-transitory) 컴퓨터 리드가능 스토리지 매체(1002)를 포함한다.
컴퓨터 리드가능 매체상에 구현된 프로그램 코드는 무선, 유선, 광섬유 케이블, RF 등, 또는 전술한 것들이 적절히 조합된 것을 포함한 (그러나 이에 한정되지 않는) 적절한 매체를 이용하여 전송될 수 있다.
본 발명의 실시 예들에 대한 오퍼레이션들을 수행하기 위한 컴퓨터 프로그램 코드는 Java, Smalltalk, C++ 또는 그와 유사한 언어와 같은 객체 지향 로그래밍 언어와 "C" 프로그래밍 언어, 어셈블러(assembler) 또는 그와 유사한 프로그래밍 언어들과 같은 종래의 절차적 프로그래밍 언어들을 포함하여, 하나 또는 그 이상의 프로그래밍 언어들을 조합하여 작성될 수 있다. 상기 프로그램 코드는 전적으로 사용자의 컴퓨터상에서, 부분적으로 사용자의 컴퓨터 상에서, 독립형(stand-alone) 소프트웨어 패키지로서, 부분적으로는 사용자의 컴퓨터상에서 그리고 부분적으로는 원격 컴퓨터상에서 또는 전적으로 원격 컴퓨터나 서버상에서 실행될 수 있다. 위에서 마지막의 경우에, 원격 컴퓨터는 근거리 통신망 (LAN) 또는 광역 통신망 (WAN)을 포함하여 모든 유형의 네트워크를 통해서 사용자의 컴퓨터에 연결될 수 있고, 또는 그 연결이 외부 컴퓨터(예를 들면, 인터넷 서비스 제공자를 이용한 인터넷을 통해서)에 이루어질 수 있다.
본 발명은 본 발명의 실시 예들에 따른 방법들, 장치(시스템들) 및 컴퓨터 프로그램 제품들의 흐름 예시도 및/또는 블록도를 참조하여 여기에 기술된다. 흐름 예시도 및/또는 블록도의 각 블록과 흐름 예시도 및/또는 블록도 내 블록들의 조합들은 컴퓨터 프로그램 명령들에 의해 구현될 수 있다는 것을 이해할 수 있을 것이다. 이들 컴퓨터 프로그램 명령들은 범용 컴퓨터, 특수 목적 컴퓨터, 또는 기타 프로그램가능 데이터 처리 장치에 제공되어 머신(machine)을 생성하고, 그럼으로써 그 명령들이, 상기 컴퓨터 또는 기타 프로그램가능 데이터 처리 장치의 프로세서를 통해서 실행되어, 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 수단을 생성할 수 있다.
이들 컴퓨터 프로그램 명령들은 또한 컴퓨터 리드가능 매체에 저장될 수 있으며, 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 기타 디바이스들에 지시하여 컴퓨터 리드가능 매체에 저장된 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능/동작을 구현하는 명령들을 포함하는 제조품(an article of manufacture)을 생성하도록 특정한 방식으로 기능하게 할 수 있다.
컴퓨터 프로그램 명령들은 또한 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 기타 디바이스들에 로드되어 컴퓨터, 기타 프로그램가능 데이터 처리 장치, 또는 기타 디바이스들에서 수행될 일련의 오퍼레이션 단계들을 일으켜 그 명령들이 컴퓨터 또는 기타 프로그램가능 장치에서 실행되어 흐름도 및/또는 블록도의 블록 또는 블록들에 명시된 기능들/동작들을 구현하기 위한 프로세스들을 제공하도록 컴퓨터 구현 프로세스를 생성하게 할 수 있다.
도면들에 있는 흐름도 및 블록도는 본 발명의 여러 가지 실시 예들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처(architecture), 기능성(functionality), 및 오퍼레이션을 예시한다. 이러한 점에서, 흐름도 또는 블록도 내 각 블록은 명시된 논리적 기능(들)을 구현하기 위한 하나 또는 그 이상의 실행 가능한 명령들을 포함하는 모듈, 세그먼트, 또는 코드의 부분을 나타낼 수 있다. 어떤 대체 구현들에서는, 블록에 언급된 기능들이 도면들에 언급된 순서와 다르게 일어날 수도 있다는 것에 또한 주의해야 한다. 예를 들면, 연속하여 도시된 두 블록이 사실은 실질적으로 동시에 실행될 수도 있고, 또는 그 블록들은 때때로 포함된 기능성에 따라서는, 역순으로 실행될 수도 있다. 블록도 및/또는 흐름 예시도의 각 블록, 및 블록도 및/또는 흐름 예시도 내 블록도들의 조합들은 특수 목적 하드웨어 및 컴퓨터 명령들의 명시된 기능들 또는 동작들, 또는 그 조합들을 수행하는 특수 목적 하드웨어-기반 시스템들에 의해 구현될 수 있다는 것에 또한 유의한다.
위의 것에 더하여, 본 발명의 하나 또는 그 이상의 실시 예들이 고객 환경의 관리를 서비스하는 서비스 제공자에 의해 제공, 공급, 배치, 관리, 서비스 등이 될 수 있다. 예를 들어, 서비스 제공자는 하나 또는 그 이상의 고객들을 위해 본 발명의 하나 또는 그 이상의 실시 예들을 수행하는 컴퓨터 코드 및/또는 컴퓨터 인프라스트럭처를 생성, 유지, 지원 등 할 수 있다. 그 대가로, 서비스 제공자는 가입제(subscription) 및/또는 수수료 약정하에 고객으로부터 비용(payment)을 받을 수 있으며, 이는 예들이다. 추가로 또는 그와는 다르게, 서비스 제공자는 하나 또는 그 이상의 제3자들에게 광고 콘텐츠를 판매하고 비용을 받을 수 있다.
본 발명의 한 실시 예에서, 애플리케이션(an application)은 본 발명의 하나 또는 그 이상의 실시 예들을 수행하기 위해 배치될 수 있다. 한 예로서, 애플리케이션의 배치는 본 발명의 하나 또는 그 이상의 실시 예들을 수행하는데 실시 가능한 컴퓨터 인프라스트럭처를 제공하는 것을 포함한다.
본 발명의 추가 실시 예로서, 컴퓨터 리드가능 코드를 컴퓨팅 시스템으로 통합시키는 것을 포함하는 컴퓨팅 인프라스트럭처가 배치될 수 있으며, 그 컴퓨팅 시스템에서 상기 코드는 컴퓨팅 시스템과 결합하여 본 발명의 하나 또는 그 이상의 실시 예들을 수행하는 것이 가능하다.
본 발명의 추가 실시 예로서, 컴퓨터 리드가능 코드를 컴퓨터 시스템으로 통합시키는 것을 포함하는 컴퓨팅 인프라스트럭처 통합을 위한 프로세스가 제공될 수 있다. 컴퓨터 시스템은 컴퓨터 리드가능 매체를 포함하고, 컴퓨터 시스템에서 상기 컴퓨터 매체는 본 발명의 하나 또는 그 이상의 실시 예들을 포함한다. 상기 코드는 컴퓨터 시스템과 결합하여 본 발명의 하나 또는 그 이상의 실시 예들을 수행하는 것이 가능하다.
여러 가지 실시 예들이 위에서 기술되었지만, 이들은 단지 예일 뿐이다. 예를 들면, 다른 아키텍처들의 컴퓨팅 환경들이 본 발명의 하나 또는 그 이상의 실시 예들을 포함하고 사용할 수 있다. 예로서, z196 서버들 외의 서버들도 본 발명의 하나 또는 그 이상의 실시 예들을 포함, 사용 및/또는 그들로부터 이득을 얻을 수 있다. 또한 다른 명령들 및/또는 커맨드들도 사용될 수 있으며, 그 명령들/커맨드들은 여기에 기술된 것보다 추가의, 더 적은 및/또는 다른 정보를 포함할 수 있다. 많은 변경(variation)들이 가능하다.
또한, 다른 타입의 컴퓨팅 환경들이 본 발명의 하나 또는 그 이상의 실시 예들로부터 이득을 얻을 수 있다. 예로서, 프로그램 코드를 저장 및/또는 실행하는데 적합한 데이터 처리 시스템이 사용될 수 있으며, 이 시스템은 시스템 버스를 통해서 메모리 엘리먼트들에 직접적으로 또는 간접적으로 결합된 적어도 두 개의 프로세서를 포함한다. 메모리 엘리먼트들은, 예를 들어, 프로그램 코드의 실제 실행 동안 사용되는 로컬 메모리; 대용량 스토리지(bulk storage); 및 코드가 실행 동안 대용량 스토리지로부터 검색되어야 하는 횟수를 줄이기 위해 적어도 일부 프로그램 코드의 임시 저장(temporary storage)을 제공하는 캐시 메모리를 포함한다.
입력/출력 또는 I/O 디바이스들(키보드, 디스플레이, 포인팅 디바이스, DASD, 테이프, CD, DVD, 썸 드라이브(thumb drives) 및 기타 메모리 매체 등을 포함하나 이에 한정되지 않음)은 시스템에 직접 또는 중개(intervening) I/O 컨트롤러들을 통해서 결합될 수 있다. 네트워크 어댑터 또한 시스템에 결합되어 데이터 처리 시스템이 중개 사설 또는 공공 네트워크를 통해서 기타 데이터 처리 시스템 또는 원격 프린터 또는 스토리지 디바이스에 결합되는 것을 가능하게 한다. 모뎀, 케이블 모뎀, 및 이더넷 카드는 이용 가능한 네트워크 어댑터의 일부 예이다.
도 11을 참조하면, 본 발명의 하나 또는 그 이상의 실시 예들을 구현하기 위한 호스트 컴퓨터 시스템(5000)의 대표적인 컴포넌트들이 도시된다. 대표적인 호스트 컴퓨터(5000)은 컴퓨터 메모리(즉, 중앙 스토리지)(5002)와 통신하는 하나 또는 그 이상의 CPU들(5001)을 포함하고, 또한 스토리지 매체 디바이스들(5011)로 그리고 다른 컴퓨터들 또는 SAN들 등과 통신하기 위한 네트워크들(5010)로 가는 I/O 인터페이스들을 포함한다. CPU(5001)은 아키텍처화된 명령 세트((architected instruction set)와 아키텍처화된 기능성(architected functionality)을 갖는 아키텍처에 부합한다. CPU(5001)은 프로그램 주소들(가상 주소들)을 메모리의 실제 주소들로 변환하기 위한 동적 주소 변환(DAT)(5003)을 가질 수 있다. DAT는 통상적으로 컴퓨터 메모리(5002)의 블록에 나중에 액세스할 때 주소 변환의 지연이 필요없도록 변환들을 캐싱하기 위한 변환 색인 버퍼(TLB, translation lookaside buffer)(5007)를 포함한다. 통상적으로, 캐시(5009)는 컴퓨터 메모리(5002)와 프로세서(5001) 사이에서 사용된다. 캐시(5009)는 하나 이상의 CPU에 이용 가능한 큰 캐시(large cache)와 큰 캐시와 각 CPU 사이에 더 작고 더 빠른 (더 하위 레벨) 캐시들을 갖는 계층형(hierarchical)일 수 있다. 어떤 구현들에서는, 더 하위 레벨(lower level) 캐시들은 명령 페치와 데이터 액세스를 위한 별개의(separate) 하위 레벨 캐시들을 제공하기 위해 분할된다. 한 실시 예에서, 한 명령이 명령 페치 유닛(5004)에 의해 캐시(5009)를 통해서 메모리(5002)로부터 페치된다. 명령은 명령 디코드 유닛(instruction decode unit)(5006)에서 디코딩되고 (어떤 실시 예들에서는 다른 명령들과 함께) 명령 실행 유닛 또는 유닛들(5008)로 디스패치된다(dispatched). 통상적으로 몇 가지의 실행 유닛들 (5008)이 채용되며, 예를 들면 산술 실행 유닛(arithmetic execution unit), 부동 소수점 실행 유닛(floating point execution unit) 및 분기 명령 실행 유닛(branch instruction execution unit)이 있다. 명령은 실행 유닛에 의해 실행되고, 명령이 명시한 레지스터들 또는 메모로부터 필요한 만큼 오퍼랜드들에 액세스한다. 오퍼랜드가 메모리(5002)로부터 액세스(로드 또는 저장)되면, 로드/저장 유닛(load/store unit)(5005)가 통상적으로 실행되는 명령의 컨트롤 아래 액세스를 처리한다. 명령들은 하드웨어 회로들에서 또는 내부 마이크로코드(펌웨어)에서 또는 이 둘의 조합에 의해서 실행될 수 있다.
전술한 바와 같이, 컴퓨터 시스템은 로컬 (또는 메인) 스토리지에 정보를 포함하고, 또한 주소지정(addressing), 보호(protection), 그리고 참조 및 변경 기록(reference and change recording)을 포함한다. 주소지정의 몇 가지 예로는 주소의 포맷(format of addresses), 주소 공간의 개념(concept of address spaces), 주소의 여러 타입(various types of addresses), 및 한 타입의 주소가 또 다른 타입의 주소로 변환되는 방식(manner)이 있다. 메인 스토리지의 일부는 영구적으로 할당된 스토리지 위치들을 포함한다. 메인 스토리지는 시스템에 데이터의 직접 주소지정가능한 고속 액세스 스토리지(fast-access storage)를 제공한다. 데이터와 프로그램들은 모두 (입력 디바이스들로부터) 메인 스토리지로 로드된 후에 처리될 수 있다.
메인 스토리지는 때때로 캐시라고 불리는 하나 또는 그 이상의 더 작고 더 고속의 액세스 버퍼 스토리지들을 포함한다. 캐시는 통상적으로 CPU 또는 I/O 프로세서와 물리적으로 연관된다. 구별되는(distinct) 스토리지 매체의 물리적 구축과 사용의 영향들은, 수행을 제외하고는, 일반적으로 프로그램에 의해 관찰되지 않는다.
명령들에 대해서 그리고 데이터 오퍼랜드들에 대해서 별개인 캐시들이 보존될 수 있다. 캐시 내의 정보는 캐시 블록(cache block) 또는 캐시 라인(또는 줄여서 라인)이라 불리는 인테그럴 범위(integral boundary)상의 인접 바이트들에 보존된다. 어떤 모델은 캐시 라인의 사이즈를 바이트로 회신하는 EXTRACT CACHE ATTRIBUTE 명령을 제공할 수 있다. 어떤 모델은 또한 스토리지를 데이터 또는 명령 캐시로의 프리페치(prefetch) 또는 캐시로부터 데이터의 해제를 실현하는 PREFETCH DATA 명령과 PREFETCH DATA RELATIVE LONG 명령을 제공할 수 있다.
스토리지는 비트들의 긴 수평의 열(a long horizontal string of bits)로 보인다. 대부분의 오퍼레이션들에 있어서, 스토리지에 대한 액세스는 좌측-에서-우측(left-to-right) 순으로 진행된다. 비트들의 열은 8 비트의 유닛들로 세분된다. 8-비트 유닛은 바이트(byte)라 부르고, 이것은 모든 정보 포맷들의 기본적인 빌딩 블록(building block)이다. 스토리지에서 각 바이트 위치는 음이 아닌 고유한 정수로 식별되고, 이것은 그 바이트 위치의 주소, 또는, 간단히 말해서 바이트 주소(byte address)이다. 인접 바이트 위치들은 좌측 0부터 시작해서 좌측-에서-우측 순으로 진행되는 연속되는 주소들이다. 주소들은 무부호 2진 정수들이며 24, 31, 또는 64 비트이다.
정보는 스토리지와 CPU 또는 채널 서브시스템 사이에서, 1 바이트 또는 바이트들의 그룹으로, 한 번에 전송된다. 다르게 명시되지 않으면, 예를 들어, z/Architecture®에서 스토리지 내 바이트들의 그룹은 그 그룹의 제일 좌측 바이트에 의해 주소지정된다. 그룹 내 바이트의 수는 수행될 오퍼레이션에 의해 암시되거나 분명하게 명시된다. CPU 오퍼레이션에서 사용될 때, 바이트들의 그룹은 필드(field)라 불린다. 각 바이트들의 그룹 내에서, 예를 들어, z/Architecture®에서, 비트들은 좌측-에서-우측 순으로 번호가 붙는다. z/Architecture®에서, 제일 좌측 비트들은 때때로 "고위(high-order)" 비트들로 불리고 제일 우측 비트들은 "하위(low-order)" 비트들로 불린다. 그러나 비트 번호는 스토리지 주소가 아니다. 바이트만 주소지정될 수 있다. 스토리지 내 한 바이트의 개별 비트들에서 동작하기 위해서는, 전체 바이트가 액세스된다. 한 바이트 내 비트들은 (예를 들어, z/Architecture®에서) 0에서 7까지, 좌측에서 우측으로 번호가 붙는다. 한 주소 내 비트들은 24-비트 주소에서는 8-31 또는 40-63으로, 또는 31-비트 주소에서는 1-31 또는 33-63으로 번호가 붙을 수 있고; 64-비트 주소에서는 0-63으로 번호가 붙는다. 다른 고정-길이 포맷의 다수 바이트들 내에서, 그 포맷을 이루는 비트들은 0부터 시작해서 연속적으로 번호가 붙는다. 에러 검출의 목적을 위해서, 그리고 바람직하게는 교정을 위해서, 하나 또는 그 이상의 검사용 비트들이 각 바이트와 또는 바이트들의 그룹과 함께 전송된다. 이러한 검사용 비트들은 머신에 의해 자동적으로 생성되며 프로그램에 의해 직접적으로 컨트롤될 수 없다. 스토리지 용량은 바이트 수로 표시된다. 스토리지-오퍼랜드 필드의 길이가 명령의 오퍼레이션 코드에 의해 암시될 때, 그 필드는 고정 길이(fixed length)를 가졌다고 말하며, 그 길이는 1, 2, 4, 8, 또는 16 바이트일 수 있다. 어떤 명령들에는 더 큰 필드들이 암시될 수 있다. 스토리지-오퍼랜드 필드의 길이가 암시되지 않고 분명하게 언급될 때, 그 필드는 가변 길이(variable length)를 가졌다고 말한다. 가변-길이 오퍼랜드는 길이가 1 바이트의 증분들만큼씩 (또는 어떤 명령들에서는, 2 바이트의 배수로 또는 다른 배수들로) 변할 수 있다. 정보가 스토리지에 배치될 때, 비록 스토리지에 대한 물리적 경로의 폭이 저장되는 필드의 길이보다 더 클 수 있을지라도, 단지 그 지정된 필드에 포함된 그 바이트 위치들의 콘텐츠들만 대체된다.
정보의 일정 유닛들(units)은 스토리지에서 인테그럴 범위(integral boundary)에 있을 것이다. 범위(boundary)는 그 스토리지 주소가 그 유닛의 길이의 바이트 배수일 때 정보의 유닛에 대해서 인테그럴(integral)하다고 불린다. 인테그럴 범위로 2, 4, 8, 및 16 바이트의 필드들에는 특별한 명칭들이 주어진다. 하프워드(halfword)는 2-바이트 범위로 2개의 연속 바이트들의 그룹이고 명령들의 기본 빌딩 블록이다. 워드(word)는 4-바이트 범위로 4개의 연속 바이트들의 그룹이다. 더블워드(doubleword)는 8-바이트 범위로 8개의 연속 바이트들의 그룹이다. 쿼드워드(quadword)는 16-바이트 범위로 16개의 연속 바이트들의 그룹이다. 스토리지 주소들이 하프워드들, 워드들, 더블워드들, 및 쿼드워드들을 지정할 때, 그 주소의 2진 표시는 1, 2, 3, 또는 4개의 제일 우측 0 비트들을 각각 포함한다. 명령들은 2-바이트 인테그럴 범위들에 있을 것이다. 대부분의 명령들의 스토리지 오퍼랜드들은 범위-정렬(boundary-alignment) 요건들을 갖지 않는다.
명령들과 데이터 오퍼랜드들에 대한 별개의 캐시들을 구현하는 디바이스들상에서, 만일 프로그램이 어떤 캐시 라인에 저장하고 그 캐시 라인으로부터 명령들이 후속적으로 페치된다면, 그 저장이 후속적으로 페치되는 명령들을 변경하는지 여부와 상관없이, 상당한 지연을 겪게 될 것이다.
한 실시 예에서, 본 발명은 소프트웨어로 실시될 수 있다(이 소프트웨어는 때때로 라이선스된 내부 코드, 펌웨어, 마이크로-코드, 밀리-코드, 피코-코드 등으로 불리며, 이들 중 어떤 것이든 본 발명에 부합할 것이다). 도 11을 참조하면, 본 발명을 구현하는 소프트웨어 프로그램 코드는 통상적으로 CD-ROM 드라이브, 테이프 드라이브 또는 하드 드라이브와 같은 장기 스토리지(long-term storage) 매체 디바이스들(5011)로부터 호스트 시스템(5000)의 프로세서(5001)에 의해 액세스된다. 소프트웨어 프로그램 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템에 사용할 용도로 알려진 여러 가지 매체들 중 어느 하나에 구현될 수 있다. 코드는 그러한 매체상에 배포되거나, 또는 한 컴퓨터 시스템의 컴퓨터 메모리(5002) 또는 스토리지의 사용자들로부터 네트워크(5010)을 통해서 다른 컴퓨터 시스템들에, 그러한 다른 시스템들의 사용자에 의해 사용될 용도로 배포될 수 있다.
소프트웨어 프로그램 코드는 여러 가지 컴퓨터 컴포넌트들의 기능과 인터랙션 및 하나 또는 그 이상의 응용프로그램들을 콘트롤하는 운영체제를 포함한다. 프로그램 코드는 보통으로 스토리지 매체 디바이스(5011)로부터 상대적으로 더 고속의 컴퓨터 스토리지(5002) -이것은 프로세서(5001)에 의한 처리에 이용 가능함- 로 페이지된다. 메모리 내 소프트웨어 프로그램 코드를 물리적 매체상에 구현하는 기술 및 방법, 및/또는 네트워크들을 통해서 소프트웨어 코드를 배포하는 기술 및 방법은 잘 알려져 있으며 여기에서는 더 언급되지 않을 것이다. 프로그램 코드는, 유형의 매체(전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 것들로 한정되지 않음)상에 생성되고 저장될 때, 흔히 "컴퓨터 프로그램 제품"으로 불린다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해 리드가능하며, 컴퓨터 시스템에서 처리 회로에 의해 실행하기 위해 리드가능한 것이 바람직하다.
도 12는 본 발명이 실시될 수 있는 대표적인 워크스테이션 또는 서버 하드웨어 시스템을 예시한다. 도 12의 시스템(5020)은 선택적인 주변 디바이스들을 포함하여, 개인용 컴퓨터, 워크스테이션 또는 서버와 같은 대표적인 베이스 컴퓨터 시스템(5021)을 포함한다. 베이스 컴퓨터 시스템(5021)은 하나 또는 그 이상의 프로세서들(5026)과 버스를 포함하며, 버스는 알려진 기술들에 따라 프로세서(들)(5026)과 시스템(5021)의 다른 컴포넌트들 사이를 연결하여 통신을 가능하게 하기 위해 채용되는 것이다. 버스는 프로세서(5026)을 메모리(5025)와 장기 스토리지(5027)에 연결하며 롱텀 스토리지는, 예를 들어, 하드 드라이브(예를 들어, 자기 매체, CD, DVD 및 플래시 메모리를 포함함) 또는 테이프 드라이브를 포함할 수 있다. 시스템(5021)은 또한 사용자 인터페이스 어댑터를 포함할 수 있으며, 이 사용자 인터페이스 어댑터는 마이크로프로세서(5026)을 버스를 통해서 키보드(5024), 마우스(5023), 프린터/스캐너(5030) 및/또는 기타 인터페이스 디바이스들과 같은 하나 또는 그 이상의 인터페이스 디바이스들에 연결한다. 상기 기타 인터페이스 디바이스들은 터치 감응식 스크린(touch sensitive screen), 디지털 입력 패드(digitized entry pad) 등과 같은 사용자 인터페이스 디바이스일 수 있다. 버스는 또한 LCD 스크린 또는 모니터와 같은 디스플레이 디바이스(5022)를 디스플레이 어댑터를 통해서 마이크로프로세서(5026)에 연결한다.
시스템(5021)은 네트워크(5029)와 통신(5028)이 가능한 네트워크 어댑터를 경유하여 다른 컴퓨터들 또는 컴퓨터들의 네트워크들과 통신할 수 있다. 네트워크 어댑터들의 예로는 통신 채널(communications channels), 토큰 링(token ring), 이더넷(Ethernet) 또는 모뎀(modems)이 있다. 이와는 달리, 시스템(5021)은 CDPD(cellular digital packet data) card와 같은 무선 인터페이스를 사용하여 통신할 수 있다. 시스템(5021)은 근거리 통신망(LAN) 또는 광역 통신망(WAN)에서 다른 컴퓨터들과 연관될 수 있고, 또는 시스템(5021)은 또 다른 컴퓨터와 클라이언트/서버 배열방식(arrangement)에서 클라이언트가 될 수 있다. 이들 모든 구성들과 적절한 통신 하드웨어 및 소프트웨어는 이 기술분야에서 알려져 있다.
도 13은 본 발명이 실시될 수 있는 데이터 처리 네트워크(5040)을 예시한다. 데이터 처리 네트워크(5040)은 무선 네트워크와 유선 네트워크와 같은 복수의 개별 네트워크들을 포함할 수 있으며, 이들의 각각은 복수의 개별 워크스테이션들(5041, 5042, 5043, 5044)를 포함할 수 있다. 또한, 이 기술분야에서 통상의 지식을 가진 자들은 인지할 수 있는 바와 같이, 하나 또는 그 이상의 LAN들이 포함될 수 있으며, 여기에서 LAN은 호스트 프로세서에 결합된 복수의 지능형(intelligent) 워크스테이션들을 포함할 수 있다.
계속해서 도 13을 참조하면, 네트워크들은 또한 게이트웨이 컴퓨터 (클라이언트 서버 5046) 또는 애플리케이션 서버(데이터 저장소를 액세스할 수 있고 또한 워크스테이션 5045로부터 직접 액세스될 수 있는 원격 서버 5048)와 같은 메인프레임 컴퓨터들 또는 서버들을 포함할 수 있다. 게이트 웨이 컴퓨터(5046)은 각 개별 네트워크로의 진입점(a point of entry) 역할을 한다. 게이트웨이는 하나의 네트워킹 프로토콜을 또 하나의 네트워킹 프로토콜에 연결할 때 필요하다. 게이트웨이(5046)은 바람직하게는 통신 링크를 통해 또 하나의 네트워크(예를 들면 인터넷 5047)에 결합될 수 있다. 게이트웨이(5046)은 또한 통신 링크를 사용하여 하나 또는 그 이상의 워크스테이션들(5041, 5042, 5043, 5044)에 직접 결합될 수 있다. 게이트웨이 컴퓨터는 인터내셔널 비지네스 머신즈 코포레이션에서 이용 가능한 IBM eServer™ System z® 서버를 활용하여 구현될 수 있다.
도 12와 도 13을 동시에 참조하면, 본 발명을 구현할 수 있는 소프트웨어 프로그래밍 코드가 시스템(5020)의 프로세서(5026)에 의해 CD-ROM 드라이브 또는 하드 드라이브와 같은 장기 스토리지 매체(5027)로부터 액세스될 수 있다. 소프트웨어 프로그래밍 코드는 디스켓, 하드 드라이브, 또는 CD-ROM과 같은 데이터 처리 시스템과 함께 사용할 용도로 알려진 여러 가지 매체들 중 어느 하나에 구현될 수 있다. 코드는 그러한 매체상에 배포되거나, 또는 한 컴퓨터 시스템의 메모리 또는 스토리지의 사용자들(5050, 5051)로부터 네트워크를 통해서 다른 컴퓨터 시스템들에, 그러한 다른 시스템들의 사용자에 의해 사용될 용도로 배포될 수 있다.
이와는 달리, 프로그래밍 코드는 메모리(5025)에 구현되고, 프로세서 버스를 사용하여 프로세서(5026)에 의해 액세스될 수도 있다. 이러한 프로그래밍 코드는 여러 가지 컴퓨터 컴포넌트들의 기능과 인터랙션 및 하나 또는 그 이상의 응용프로그램들(5032)을 컨트롤하는 운영체제를 포함한다. 프로그램 코드는 보통으로 스토리지 매체(5027)로부터 고속의 메모리(5025) -이것은 프로세서(5026)에 의한 처리에 이용 가능함- 로 페이지된다. 메모리 내 소프트웨어 프로그래밍 코드를 물리적 매체상에 구현하는 기술 및 방법, 및/또는 네트워크들을 통해서 소프트웨어 코드를 배포하는 기술 및 방법은 잘 알려져 있으며 여기에서는 더 언급되지 않을 것이다. 프로그램 코드는, 유형의 매체(전자 메모리 모듈들(RAM), 플래시 메모리, 컴팩트 디스크(CDs), DVDs, 자기 테이프 등을 포함하나, 이러한 것들로 한정되지 않음)상에 생성되고 저장될 때, 흔히 "컴퓨터 프로그램 제품"으로 불린다. 컴퓨터 프로그램 제품 매체는 통상적으로 처리 회로에 의해 리드가능하며, 컴퓨터 시스템에서 처리 회로에 의해 실행하기 위해 리드가능한 것이 바람직하다.
프로세서가 가장 쉽게 이용 가능한 캐시(보통으로 프로세서의 다른 캐시들보다 더 빠르고 더 작음)는 가장 낮은 (L1 또는 레벨 1) 캐시이고 메인 저장소(메인 메모리)는 가장 높은 레벨의 캐시(만일 3개의 레벨이 있다면 L3)이다. 가장 낮은 레벨의 캐시는 흔히 실행될 머신 명령들을 보유하는 명령 캐시(I-캐시)와 데이터 오퍼랜드들을 보유하는 데이터 캐시(D-캐시)로 나뉜다.
도 14를 참조하면, 예시적인 프로세서 실시 예가 프로세서(5026)에 대해 도시된다. 통상적으로 하나 또는 그 이상 레벨들의 캐시(5053)이 프로세서 성능을 향상시키기 위해 메모리 블록들을 버퍼링하는데 채용된다. 캐시(5053)은 사용될 가능성이 있는 메모리 데이터의 캐시 라인들을 보유하는 고속 버퍼이다. 통상적인 캐시 라인들은 64, 128 또는 256 바이트의 메모리 데이터이다. 별개의 캐시들은 흔히 데이터를 캐싱하기 위해서보다는 명령들을 캐싱하기 위해서 채용된다. 캐시 일관성(cache coherence)(메모리 및 캐시들에서의 라인들의 사본들의 동기화(synchronization))이 흔히 이 기술분야에서 잘 알려진 "스누프(snoop)" 알고리즘들에 의해 제공된다. 프로세서 시스템의 메인 메모리 스토리지(5025)는 흔히 캐시로 불린다. 4개 레벨의 캐시(5053)을 가진 프로세서 시스템에서, 메인 스토리지(5025)는 때로 레벨 5(L5) 캐시로 불리는데, 왜냐하면 그것은 통상적으로 더 빠르며 컴퓨터 시스템이 이용 가능한 비휘발성 스토리지(DASD, 테이프 등)의 일부분만을 보유하기 때문이다. 메인 스토리지(5025)는 운영체제에 의해 메인 스토리지(5025)의 안팎으로(in and out of) 페이지되는 데이터의 페이지들을 "캐시"한다.
프로그램 카운터(명령 카운터)(5061)은 실행될 현재 명령의 주소를 추적한다. z/Architecture® 프로세서 내 프로그램 카운터는 64 비트이고 이전 주소지정 한계(addressing limits)를 지원하기 위해 31 또는 24 비트로 잘려질 수 있다. 프로그램 카운터는 통상적으로 컴퓨터의 PSW(프로그램 상태 워드)에 구현되어, 그것이 컨텍스트 전환(context switching) 동안 지속되도록 한다. 그리하여, 프로그램 카운터 값을 갖는 진행중인 프로그램은, 예를 들어, 운영체제에 의해 인터럽트될 수 있다(프로그램 환경으로부터 운영체제 환경으로의 컨텍스트 전환). 프로그램이 활성이 아닐 때, 프로그램의 PSW는 프로그램 카운터 값을 유지하고, 운영체제가 실행중일 때 운영체제의 (PSW 내) 프로그램 카운터가 사용된다. 통상적으로, 프로그램 카운터는 현재 명령의 바이트 수와 동일한 양으로 증분된다. 감소된 명령 세트 컴퓨팅(Reduced Instruction Set Computing, RISC) 명령들은 통상적으로 고정 길이이고, 한편 콤플렉스 명령 세트 컴퓨팅(Complex Instruction Set Computing, CISC) 명령들은 통상적으로 가변 길이이다. IBM z/Architecture®의 명령들은 2, 4 또는 6 바이트의 길이를 갖는 CISC 명령들이다. 프로그램 카운터(5061)은, 예를 들어, 분기 명령의 분기 채택 오퍼레이션(branch taken operation) 또는 컨텍스트 전환 오퍼레이션에 의해 변경된다. 컨텍스트 전환 오퍼레이션에서, 현재의 프로그램 카운터 값은 실행되고 있는 프로그램에 관한 상태 정보(예를 들어, 조건 코드들과 같은 것)와 함께 프로그램 상태 워드에 세이브되고(saved), 실행될 새로운 프로그램 모듈의 명령을 가리키는 새로운 프로그램 카운터 값이 로드된다. 프로그램 카운터(5061) 내에 분기 명령의 결과를 로딩함으로써 프로그램이 결정을 내리거나 그 프로그램 내에서 루프를 돌도록 허용하기 위해, 분기 채택 오퍼레이션(branch taken operation)이 수행된다.
통상적으로 명령 페치 유닛(5055)는 프로세서(5026)를 대신하여 명령들을 페치하기 위해 채용된다. 페치 유닛은 "다음 순차의 명령들"이나, 분기 채택 명령들의 타겟 명령들, 또는 컨텍스트 전환에 뒤이은 프로그램의 첫 번째 명령들을 페치한다. 현대 명령(Modern Instruction) 페치 유닛은 프리페치된(prefetched) 명령들이 사용될 수 있는 가능성에 기초하여 추론적으로 명령들을 프리페치하는 프리페치 기술들을 흔히 채용한다. 예를 들어, 페치 유닛은 16 바이트의 명령 -이는 그 다음 순차의 명령 및 그 이후 순차의 명령들의 추가 바이트들을 포함함- 을 페치할 수 있다.
그런 다음, 페치된 명령들이 프로세서(5026)에 의해 실행된다. 한 실시 예에서, 페치된 명령(들)은 페치 유닛의 디스패치 유닛(5056)으로 보내진다. 디스패치 유닛은 명령(들)을 디코딩하고, 디코딩된 명령(들)에 관한 정보를 적절한 유닛들(5057, 5058, 5060)으로 전달한다. 실행 유닛(5057)은 통상적으로 명령 페치 유닛(5055)로부터 디코딩된 산술 명령들(arithmetic instructions)에 관한 정보를 수신할 것이고, 그 명령의 오피코드(opcode)에 따라 오퍼랜드들에 대한 산술 오퍼레이션들(arithmetic operations)을 수행할 것이다. 오퍼랜드들은 바람직하게는, 메모리(5025), 아키텍처화된 레지스터들(5059)로부터 또는 실행되고 있는 명령의 즉시 필드(immediate field)로부터 실행 유닛(5057)에 제공된다. 저장될 때, 실행의 결과들은 메모리(5025), 레지스터들(5059)에 또는 다른 머신 하드웨어(예를 들어, 컨트롤 레지스터들, PSW 레지스터들 등)에 저장된다.
통상적으로 프로세서(5026)은 명령의 펑션을 실행하기 위한 하나 또는 그 이상의 유닛들(5057, 5058, 5060)을 갖는다. 도 15a를 참조하면, 실행 유닛(5057)은 인터페이싱 논리(5071)을 거쳐서 아치텍처화된 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 로드 저장 유닛(5060), 기타(5065) 프로세서 유닛들과 통신할 수 있다. 실행 유닛(5057)은, 산술 논리 유닛(arithmetic logic unit, ALU)(5066)이 오퍼레이션할 정보를 보유하기 위해 몇몇의 레지스터 회로들(5067, 5068, 5069)을 채용할 수 있다. ALU는 논리곱(AND), 논리합(OR) 및 배타논리합(XOR), 로테이트(rotate) 및 시프트(shift)와 같은 논리 함수뿐만이 아니라 더하기, 빼기, 곱하기 및 나누기와 같은 산술 오퍼레이션들을 수행한다. 바람직하게는, ALU는 설계에 종속적인 특수한 오퍼레이션들을 지원한다. 다른 회로들은, 예를 들어, 조건 코드들 및 복구 지원 논리를 포함하는 다른 아키텍처화된 퍼실리티들(5072)를 제공할 수 있다. 통상적으로, ALU 오퍼레이션의 결과는 출력 레지스터 회로(5070)에 보유(hold)되고, 이 출력 레지스터 회로(5070)는 여러 가지 다른 처리 펑션들에 그 결과를 전달할 수 있다. 많은 프로세서 유닛들의 배열방식(arrangement)은 다양하며, 본 설명은 본 발명의 한 실시 예에 관한 대표적인 이해를 제공하려는 의도일 뿐이다.
예를 들어, ADD 명령은 산술 및 논리 기능을 갖는 실행 유닛(5057)에서 실행될 것이고, 한편 예를 들어 부동 소수점(floating point) 명령은 특수한 부동 소수점 능력을 갖는 부동 소수점 실행에서 실행될 것이다. 바람직하게는, 실행 유닛은 오퍼랜드들에 관한 오피코드 정의 펑션(opcode defined function)을 수행함으로써 명령에 의해 식별된 오퍼랜드들에 관해 오퍼레이션한다. 예를 들어, ADD 명령은 그 명령의 레지스터 필드들에 의해 식별되는 두 개의 레지스터들(5059)에서 발견되는 오퍼랜드들에 관해 실행 유닛(5057)에 의해 실행될 수 있다.
실행 유닛(5057)은 두 개의 오퍼랜드들에 관해 산술 덧셈(arithmetic addition)을 수행하고 그 결과를 제3 오퍼랜드에 저장하며, 여기서, 제3 오퍼랜드는 제3 레지스터 또는 두 개의 소스 레지스터들 중 하나일 수 있다. 바람직하게는, 실행 유닛은 산술 논리 유닛(ALU)(5066)을 이용하며 이 ALU(5066)은 더하기, 빼기, 곱하기, 나누기 중 어떤 것이든지 포함하는 여러 가지 대수 펑션들(algebraic functions) 뿐만이 아니라 시프트(Shift), 로테이트(Rotate), 논리곱(And), 논리합(Or) 및 배타논리합(XOR)과 같은 여러 가지 논리 펑션들을 수행할 수 있다. 일부 ALU들(5066)은 스칼라 오퍼레이션들을 위해 설계되며 일부는 부동 소수점을 위해 설계된다. 데이터는 아키텍처에 따라 빅 엔디언(Big Endian)(여기서 최하위 바이트(least significant byte)는 가장 높은 바이트 주소에 있음) 또는 리틀 엔디언(Little Endian)(여기서 최하위 바이트는 가장 낮은 바이트 주소에 있음)일 수 있다. IBM z/Architecture®은 빅 엔디언이다. 부호달린 필드들(signed fields)은 아키텍처에 따라, 부호(sign) 및 크기, 1의 보수 또는 2의 보수일 수 있다. 2의 보수에서 음의 값 또는 양의 값은 단지 ALU 내에서 덧셈만을 필요로 하므로, ALU가 뺄셈 능력을 설계할 필요가 없다는 점에서 2의 보수가 유리하다. 숫자들은 일반적으로 속기(shorthand)로 기술되는데, 12 비트 필드는 예를 들어, 4,096 바이트 블록의 주소를 정의하고 일반적으로 4 Kbyte(Kilo-byte) 블록으로 기술된다.
도 15b를 참조하면, 분기 명령을 실행하기 위한 분기 명령 정보는 통상적으로 분기 유닛(5058)으로 보내지는데, 이 분기 유닛(5058)은 다른 조건부 오퍼레이션들(conditional operations)이 완료되기 전에 그 분기의 결과를 예측하도록 분기 이력 테이블(5082)과 같은 분기 예측 알고리즘을 흔히 채용한다. 현재 분기 명령의 타겟은, 그 조건부 오퍼레이션들이 완료되기 전에 페치되고 추론적으로 실행될 것이다. 조건부 오퍼레이션들이 완료될 때, 추론적으로 실행된 분기 명령들은 조건부 오퍼레이션 및 추론된 결과의 조건들에 기초하여 완료되거나 폐기된다. 통상적인 분기 명령은, 만일 그 조건 코드들이 분기 명령의 분기 요건을 충족한다면, 조건 코드들을 테스트하고 타겟 주소로 분기할 수 있고, 타겟 주소는, 예를 들어, 레지스터 필드들 또는 그 명령의 즉시 필드에서 발견되는 수들을 포함하는 몇 개의 수들에 기초하여 계산될 수 있다. 분기 유닛(5058)은 복수의 입력 레지스터 회로들(5075, 5075, 5077) 및 출력 레지스터 회로(5080)를 갖는 ALU(5074)를 채용할 수 있다. 분기 유닛(5058)은, 예를 들어, 범용 레지스터들(5059), 디코드 디스패치 유닛(5056) 또는 기타 회로들(5073)과 통신할 수 있다.
명령들의 그룹의 실행은 여러 가지 이유들로 인터럽트될 수 있는데, 이러한 이유들에는, 예를 들어, 운영체제에 의해 개시되는 컨텍스트 전환, 컨텍스트 전환을 초래하는 프로그램 예외 또는 에러, 컨텍스트 전환 또는 (멀티-쓰레드 환경에서) 복수의 프로그램들의 멀티-쓰레딩 활동을 초래하는 I/O 인터럽션 신호가 포함된다. 바람직하게는 컨텍스트 전환 액션은 현재 실행중인 프로그램에 관한 상태 정보(state information)를 세이브하고, 그런 다음 호출되고 있는 또 다른 프로그램에 관한 상태 정보를 로드한다. 상태 정보는, 예를 들어, 하드웨어 레지스터들 또는 메모리에 저장될 수 있다. 바람직하게는, 상태 정보는 실행될 다음 명령, 조건 코드들, 메모리 변환 정보 및 아키텍처화된 레지스터 콘텐츠를 가리키는 프로그램 카운터 값을 포함한다. 컨텍스트 전환 활동은, 하드웨어 회로들, 응용프로그램들, 운영체제 프로그램들 또는 펌웨어 코드(마이크로코드, 피코-코드 또는 라이센스된 내부 코드(LIC)) 단독으로 또는 이것들의 조합으로 실행될 수 있다.
프로세서는 명령 정의 방법들(instruction defined methods)에 따라 오퍼랜드들에 액세스한다. 명령은 명령의 일부분의 값을 사용하는 즉시 오퍼랜드(immediate operand)를 제공할 수 있고, 범용 레지스터들 또는 특수 목적용 레지스터들(예를 들어, 부동 소수점 레지스터들)을 분명하게 가리키는 하나 또는 그 이상의 레지스터 필드들을 제공할 수 있다. 명령은 오피코드 필드에 의해 오퍼랜드들로서 식별되는 암시 레지스터들(implied registers)을 이용할 수 있다. 명령은 오퍼랜드들에 대한 메모리 위치들을 이용할 수 있다. 오퍼랜드의 메모리 위치는 레지스터, 즉시 필드(immediate field), 또는 레지스터들과 즉시 필드의 조합에 의해 제공될 수 있고, 이는 z/Architecture® 장 변위(long displacement) 퍼실리티가 전형적인 예이며, 여기서 명령은 베이스 레지스터, 인덱스 레지스터 및 즉시 필드(변위 필드) -이것들은 예를 들어 메모리에서 오퍼랜드의 주소를 제공하기 위해 함께 더해짐- 를 정의한다. 만일 다르게 표시되지 않는다면, 여기서의 위치는 통상적으로 메인 메모리(메인 스토리지) 내 위치를 암시한다.
도 15c를 참조하면, 프로세서는 로드/저장 유닛(5060)을 사용하여 스토리지에 액세스한다. 로드/저장 유닛(5060)은 메모리(5053)에서 타겟 오퍼랜드의 주소를 획득하고 레지스터(5059) 또는 또 다른 메모리(5053) 위치 에 오퍼랜드를 로딩함으로써 로드 오퍼레이션을 수행할 수 있고, 또는 메모리(5053)에서 타겟 오퍼랜드의 주소를 획득하고 레지스터(5059) 또는 또 다른 메모리(5053) 위치로부터 획득된 데이터를 메모리(5053) 내 타겟 오퍼랜드 위치에 저장함으로써 저장 오퍼레이션을 수행할 수 있다. 로드/저장 유닛(5060)은 추론적(speculative)일 수 있고, 명령 순서에 비해 순서가 다른(out-of-order) 순서로 메모리에 액세스할 수 있지만, 로드/저장 유닛(5060)은 명령들이 순서대로 실행된 것으로 프로그램들에 대한 외관(appearance)을 유지할 것이다. 로드/저장 유닛(5060)은 범용 레지스터들(5059), 디코드/디스패치 유닛(5056), 캐시/메모리 인터페이스(5053) 또는 기타 엘리먼트들(5083)과 통신할 수 있고, 스토리지 주소들을 계산하기 위해 그리고 순서대로 오퍼레이션들을 유지하기 위한 파이프라인 시퀀싱을 제공하기 위해 여러 가지 레지스터 회로들, ALU들(5085) 및 컨트롤 논리(5090)을 포함한다. 일부 오퍼레이션들은 순서가 바뀔 수 있으나, 이 기술분야에서 잘 알려진 바와 같이, 로드/저장 유닛은, 순서가 바뀐 오퍼레이션들이 그 프로그램에 순서대로 수행된 것처럼 나타나도록 하는 기능을 제공한다.
바람직하게는, 응용 프로그램이 "보는(sees)" 주소들은 흔히 가상 주소들로서 불린다. 가상 주소들은 때로는 "논리적 주소들(logical addresses)" 및 "유효 주소들(effective addresses)"로 불린다. 이들 가상 주소들은 여러 가지 동적 주소 변환(DAT) 기술들 중 하나에 의해 물리적 메모리 위치로 다시 보내진다는 점에서 가상이다. 상기 여러 가지 동적 주소 변환(DAT) 기술들에는, 단순히 오프셋 값으로 가상 주소를 프리픽싱(prefixing)하는 것, 하나 또는 그 이상의 변환 테이블들을 통해 가상 주소를 변환하는 것이 포함될 수 있으나, 이러한 것들로 한정되는 것은 아니다. 바람직하게는, 변환 테이블들은 적어도 세그먼트 테이블 및 페이지 테이블만을 또는 이것들의 조합을 포함하며, 바람직하게는, 세그먼트 테이블은 페이지 테이블을 가리키는 엔트리를 갖는다. z/Architecture®에서는, 변환의 계층(hierarchy of translation)이 제공되는데, 이 변환의 계층에는 영역 제1 테이블, 영역 제2 테이블, 영역 제3 테이블, 세그먼트 테이블 및 선택적인 페이지 테이블이 포함된다. 주소 변환의 수행은 흔히 변환 색인 버퍼(TLB)를 이용하여 향상되는데, 이 변환 색인 버퍼는 연관된 물리적 메모리 위치에 가상 주소를 매핑하는 엔트리들을 포함한다. 엔트리들이, DAT가 변환 테이블들을 사용하여 가상 주소를 변환할 때, 생성된다. 그런 다음, 후속적으로 가상 주소를 사용할 때 느린 연속적인 변환 테이블 액세스들보다 오히려 빠른 TLB의 엔트리를 이용할 수 있다. TLB 콘텐츠는 LRU(Least Recently used)를 포함하는 여러 가지 대체 알고리즘들에 의해 관리될 수 있다.
프로세서가 멀티-프로세서 시스템의 프로세서인 경우, 각각의 프로세서는 I/O, 캐시들, TLB들 및 메모리와 같은 공유 리소스들(shared resources)을 일관성(coherency)을 위해 인터락(interlock)을 유지하는 역할을 한다. 통상적으로, "스누프" 기술들은 캐시 일관성을 유지하는데 이용될 것이다. 스누프 환경에서, 각각의 캐시 라인은 공유를 용이하게 하기 위해, 공유 상태(shared state), 독점 상태(exclusive state), 변경된 상태(changed state), 무효 상태(invalid state) 중 어느 하나에 있는 것으로 표시될 수 있다.
I/O 유닛들(5054, 도 14)은 프로세서에 주변 디바이스들에 연결하기 위한 수단을 제공하는데, 예를 들어, 그 수단에는 테이프, 디스크, 프린터, 디스플레이, 및 네트워크가 포함된다. I/O 유닛들은 흔히 소프트 드라이버들에 의해 컴퓨터 프로그램에 제공된다. IBM®의 System z®와 같은 메인프레임들에서, 채널 어댑터들 및 오픈 시스템 어댑터들은 운영체제와 주변 디바이스들 사이의 통신을 가능하게 하는, 메인프레임의 I/O 유닛들이다.
나아가, 다른 타입의 컴퓨팅 환경들은 본 발명의 하나 또는 그 이상의 실시 예들로부터 혜택을 받을 수 있다. 일 예로, 환경(environment)은 에뮬레이터(예, 소프트웨어 또는 다른 에뮬레이션 메커니즘들)을 포함할 수 있으며, 이 에뮬레이터에서 특정 아키텍처(예를 들어, 명령 실행, 주소 변환과 같은 아키텍처화된 펑션들, 및 아키텍처화된 레지스터들을 포함함) 또는 그것의 서브세트(subset)가 에뮬레이트된다(예를 들어, 프로세서 및 메모리를 갖는 네이티브 컴퓨터 시스템 상에서). 이러한 환경에서, 비록 그 에뮬레이터를 실행하는 컴퓨터가 에뮬레이트되고 있는 능력들과는 다른 아케텍처를 가질 수 있지만, 에뮬레이터의 하나 또는 그 이상의 에뮬레이션 펑션들은 본 발명의 하나 또는 그 이상의 실시 예들을 구현할 수 있다. 일 예로서, 에뮬레이션 모드에서, 에뮬레이트되고 있는 특정 명령 또는 오퍼레이션은 디코딩되고, 적절한 에뮬레이션 펑션이 개별 명령 또는 오퍼레이션을 구현하도록 만들어진다.
에뮬레이션 환경에서, 호스트 컴퓨터는, 예를 들어, 명령들 및 데이터를 저장하는 메모리, 메모리로부터 명령들을 페치하고 또한 선택적으로 그 페치된 명령을 위한 로컬 버퍼링을 제공하는 명령 페치 유닛, 페치된 명령들을 수신하고 페치된 명령들의 타입을 결정하는 명령 디코드 유닛, 및 명령들을 실행하는 명령 실행 유닛을 포함한다. 실행은 메모리로부터 레지스터 내에 데이터를 로딩하는 것; 레지스터로부터 메모리로 다시 데이터를 저장하는 것; 또는 디코드 유닛에 의해 결정된 바와 같이, 산술 또는 논리 오퍼레이션의 몇몇 타입을 수행하는 것을 포함할 수 있다. 한 예에서, 각각의 유닛은 소프트웨어에서 구현된다. 예를 들어, 그 유닛들에 의해 수행되고 있는 오퍼레이션들은 에뮬레이터 소프트웨어 내에서 하나 또는 그 이상의 서브루틴들로서 구현된다.
더 구체적으로는, 메인프레임에서, 아키텍처화된 머신 명령들은 프로그래머들, 대개는 오늘날의 "C" 프로그래머들에 의해, 흔히 컴파일러 어플리케이션(compiler application)을 통해 사용되고 있다. 스토리지 매체에 저장되는 이들 명령들은 원래(natively) z/Architecture® IBM® 서버에서 또는 이와는 다르게 다른 아키텍처들을 실행하는 머신들에서 실행될 수 있다. 그것들은 기존의 그리고 장래의 IBM® 메인프레임 서버들에서 그리고 IBM®의 다른 머신들(예, 파워 시스템 서버들 및 시스템 x® 서버들) 상에서 에뮬레이트될 수 있다. 그것들은 IBM®, Intel®, AMDTM 및 기타사에 의해 제조된 하드웨어를 사용하는 광범위한 머신들 상에서 리눅스를 실행하는 머신들에서 실행될 수 있다. 또한, z/Architecture® 하에서의 그 하드웨어 상에서의 실행 이외에, Hercules, UMX, 또는 FSI(Fundamental Software, Inc) -여기서 일반적으로 실행은 에뮬레이션 모드에 있음- 에 의해 에뮬레이션을 사용하는 머신들 뿐만이 아니라 리눅스도 사용될 수 있다. 에뮬레이션 모드에서, 에뮬레이션 소프트웨어는 네이티브 프로세서에 의해 실행되어 에뮬레이트된 프로세서의 아키텍처를 에뮬레이트한다.
네이티브 프로세서(native processor)는 통상적으로 에뮬레이트된 프로세서의 에뮬레이션을 수행하기 위해 펌웨어(firmware) 또는 네이티브 운영체제를 포함하는 에뮬레이션 소프트웨어를 실행한다. 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍처의 명령들을 페치하고 실행하는 역할을 한다. 에뮬레이션 소프트웨어는 명령 범위들(instruction boundaries)을 추적하기 위해 에뮬레이트된 프로그램 카운터를 유지한다. 에뮬레이션 소프트웨어는 한 번에 하나 또는 그 이상의 에뮬레이트된 머신 명령들을 페치하여, 하나 또는 그 이상의 그 에뮬레이트된 머신 명령들을 네이티브 프로세서에 의해 실행하기 위한 네이티브 머신 명령들의 대응 그룹으로 변환시킬 수 있다. 이들 변환된 명령들은 캐시되어 더 빠른 변환이 수행될 수 있도록 할 수 있다. 그럼에도 불구하고, 에뮬레이션 소프트웨어는, 운영체제들 및 에뮬레이트된 프로세서를 위해 작성된 어플리케이션들이 정확하게 동작하도록 보장하기 위해, 그 에뮬레이트된 프로세서 아키텍처의 아키텍처 규칙들을 유지해야 한다. 더 나아가, 에뮬레이션 소프트웨어는 그 에뮬레이트된 프로세서 아키텍처에 의해 식별된 리소스들을 제공해야 하며 -이 리소스들에는 컨트롤 레지스터들, 범용 레지스터들, 부동 소수점 레지스터들, 예를 들어 세그먼트 테이블들 및 페이지 테이블들을 포함하는 동적 주소 변환 펑션, 인터럽트 메커니즘들, 컨텍스트 전환 메커니즘들, TOD(Time of Day) 클록들 및 I/O 서브시스템들에 대한 아키텍처화된 인터페이스들이 포함되고- 그리하여 운영체제 또는 에뮬레이트된 프로세서 상에서 실행되도록 지정된 응용 프로그램이 에뮬레이션 소프트웨어를 갖는 네이티브 프로세서상에서 실행될 수 있도록 한다.
에뮬레이트되고 있는 특정 명령은 디코딩되고, 개별 명령의 펑션을 수행하기 위해 서브루틴이 호출(call)된다. 에뮬레이트된 프로세서의 펑션을 에뮬레이트하는 에뮬레이션 소프트웨어 펑션은, 예를 들어, "C" 서브루틴 또는 드라이버, 또는 특정 하드웨어를 위해 드라이브를 제공하는 몇몇 다른 방법들로 구현되며, 이는 바람직한 실시 예의 설명을 이해한 후 이 기술 분야에서 통상의 지식을 가진 자들이 도출해 낼 수 있을 것이다. 여러 가지 소프트웨어 및 하드웨어 에뮬레이션 특허들은 - 예를 들어, Beausoleil 외 발명의 미국 특허증(Letters Patent) 제5,551,013호 "하드웨어 에뮬레이션을 위한 멀티프로세서(Multiprocessor for Hardware Emulation)"; Scalzi 외 발명의 미국 특허증 제6,009,261호 "타겟 프로세서 상에서 호환가능하지 않은 명령들을 에뮬레이팅하기 위한 저장된 타겟 루틴들의 전처리(Preprocessing of Stored Target Routines for Emulating Incompatible Instructions on a Target Processor)"; Davidian 외 발명의 미국 특허증 제5,574,873호 "게스트 명령들을 에뮬레이트하는 직접 액세스 에뮬레이션 루틴들에 대한 게스트 명령을 디코딩하는 것(Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions)"; Gorishek 외 발명의 미국 특허증 제6,308,255호 "시스템에서 논-네이티브 코드를 실행할 수 있도록 하는 코프로세서 지원에 사용되는 대칭형 멀티프로세싱 버스 및 칩셋(Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System)"; Lethin 외 발명의 미국 특허증 제6,463,582호 "아키텍처 에뮬레이션을 위한 동적 최적화 객체 코드 변환 및 동적 최적화 객체 코드 변환 방법(Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method)"; Eric Traut 발명의 미국 특허증 제5,790,825호 "호스트 명령들의 동적 리컴파일레이션을 통해 호스트 컴퓨터 상에서 게스트 명령들을 에뮬레이트하기 위한 방법(Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions)" 등이 포함되나, 이러한 것들로 한정되는 것은 아님 - 이 기술 분야에서 통상의 지식을 가진 자들이 이용할 수 있는 타겟 머신에 대한 다른 머신을 위해 아키텍처화된 명령 포맷의 에뮬레이션을 달성하는 알려진 여러 가지 방법들을 예시하고 있다.
도 16에는, 여기서는 호스트 아키텍처의 호스트 컴퓨터 시스템(5000')를 에뮬레이트하는 에뮬레이트된 호스트 컴퓨터 시스템(5092)의 예가 제공된다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)에서, 호스트 프로세서(CPU)(5091)은 에뮬레이트된 호스트 프로세서(또는 가상 호스트 프로세서)이고 호스트 컴퓨터(5000')의 프로세서(5091)의 네이티브 명령 세트 아키텍처(native instruction set architecture)와는 다른 네이티브 명령 세트 아키텍처를 갖는 에뮬레이션 프로세서(5093)를 포함한다. 에뮬레이트된 호스트 컴퓨터 시스템(5092)은 에뮬레이션 프로세서(5093)가 액세스 가능한 메모리(5094)를 갖는다. 실시 예에서, 메모리(5094)는 호스트 컴퓨터 메모리(5096) 부분과 에뮬레이션 루틴들(5097) 부분으로 분할된다. 호스트 컴퓨터 메모리(5096)은 호스트 컴퓨터 아키텍처에 따른 에뮬레이트된 호스트 컴퓨터(5092)의 프로그램들이 이용할 수 있다. 에뮬레이션 프로세서(5093)은 에뮬레이트된 프로세서(5091)의 명령 이외의 아키텍처의 아키텍처화된 명령 세트의 네이티브 명령들, 즉 에뮬레이션 루틴들 메모리(5097)로부터 획득된 네이티브 명령들을 실행하며, 시퀀스 & 액세스/디코드 루틴 -이는 액세스되는 호스트 명령의 펑션을 에뮬레이트하기 위해 네이티브 명령 실행 루틴을 결정하기 위해 액세스되는 호스트 명령(들)을 디코딩할 수 있음- 에서 획득되는 하나 또는 그 이상의 명령(들)을 채용함으로써 호스트 컴퓨터 메모리(5096) 내 프로그램으로부터 실행하기 위한 호스트 명령을 액세스할 수 있다. 호스트 컴퓨터 시스템(5000') 아키텍처에 대하여 정의되는 다른 퍼실리티들이 아키텍처화된 퍼실리티 루틴들(architected facilities routines)에 의해 에뮬레이트될 수 있는데, 이러한 것들에는, 예를 들어, 범용 레지스터들, 컨트롤 레지스터들(control registers), 동적 주소 변환(dynamic address translation) 및 I/O 서브시스템 지원 및 프로세서 캐시 등과 같은 장치들이 포함된다. 에뮬레이션 루틴들(emulation routines)은 또한 에뮬레이션 프로세서(5093)에서 이용 가능한 펑션들(예를 들어, 범용 레지스터들 및 가상 주소들의 동적 변환)을 이용하여 에뮬레이션 루틴들의 성능을 향상시킬 수 있다. 또한 특수 하드웨어(special hardware) 및 오프-로드 엔진들(off-load engines)이 제공되어 호스트 컴퓨터(5000')의 펑션을 에뮬레이팅함에 있어서 프로세서(5093)을 도울 수 있다.
본 명세서 내에 사용되는 용어는 단지 특정 실시 예들을 기술할 목적으로 사용된 것이지 본 발명을 한정하려는 의도로 사용된 것은 아니다. 본 명세서에서 사용되는 바와 같이, 단수 형태인 "한", "일", 및 "하나" 등은 그 컨텍스트에서 그렇지 않은 것으로 명시되어 있지 않으면, 복수 형태도 또한 포함하는 것으로 의도된다. 또한, "포함하다" 및/또는 "포함하는" 이라는 용어들은 본 명세서에서 사용될 때, 언급되는 특징들, 정수들, 단계들, 오퍼레이션들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 명시하지만, 하나 또는 그 이상의 다른 특징들, 정수들, 단계들, 오퍼레이션들, 엘리먼트들, 컴포넌트들 및/또는 이것들의 그룹들의 존재 또는 부가를 배제하는 것은 아니라는 것이 이해되어야 할 것이다.
이하의 청구항들에서, 구조들, 재료들, 동작들, 및 모든 수단의 등가물들 또는 단계 플러스 기능 구성요소들은 구체적으로 청구되는 다른 청구된 구성요소들과 함께 그 기능을 수행하기 위한 구조, 재료, 또는 동작을 포함하는 것으로 의도된다. 본 발명의 설명은 예시와 설명의 목적으로 제공되는 것이며, 개시되는 형태로 본 발명의 모든 실시 예들을 빠짐없이 총 망라하거나 본 발명을 한정하려는 의도는 아니다. 이 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 범위와 정신을 벗어나지 않고서 많은 변형 예들 및 개조 예들이 있을 수 있다는 것을 알 수 있다. 실시 예는 본 발명의 원리들 및 실제 적용을 가장 잘 설명하기 위해 그리고 고려되는 구체적인 사용에 적합하게 여러 가지 변형 예들을 갖는 다양한 실시 예들에 대해 이 기술 분야에서 통상의 지식을 가진자들이 발명을 이해할 수 있도록 하기 위해, 선택되고 기술되었다.

Claims (9)

  1. 메인 스토리지와 스토리지 클래스 메모리를 포함하는 컴퓨팅 환경에서 Start Subchannel 명령을 실행하는 방법에 있어서, 상기 방법은:
    Start Subchannel 명령에 의해 식별된 서브채널이 비동기 데이터 이동기(an Asynchronous Data Mover: ADM) 서브채널임을 결정하는 것에 응답하여, 다음의 단계들을 수행하는 것: 즉,
    메인 스토리지로부터 오퍼레이션 요청 블록을 획득하는 단계 -상기 오퍼레이션 요청 블록은 오퍼레이션 블록의 주소를 포함함-;
    상기 오퍼레이션 블록의 주소에 기초하여, 메인 스토리지로부터 상기 오퍼레이션 블록을 획득하는 단계 -상기 오퍼레이션 블록은 요청 블록, 응답 블록, 및 하나 또는 그 이상의 이동 명세 블록들(move specification blocks: MSBs)로 구성되고, 상기 요청 블록은 MSB 카운트 필드를 포함하는데 상기 MSB 카운트 필드는 상기 오퍼레이션 블록에 포함되면서 그에 의해 참조되는 하나 또는 그 이상의 MSB들의 수를 표시하는 값을 가지며, 상기 응답 블록은 예외 조건들을 보유하도록 구성되고, 각 이동 명세 블록은 오퍼레이션 코드 필드, 블록 카운트 필드, 메인 스토리지 주소 필드, 스토리지 클래스 메모리 주소 필드, 블록 사이즈 필드 및 플래그들 필드를 포함하도록 구성됨-;
    상기 오퍼레이션 블록으로부터 이동 명세 블록을 획득하는 단계, 그리고:
    상기 획득된 이동 명세 블록이 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트를 획득하도록 구성됨을 상기 플래그들 필드에 기초하여 결정하는 단계 -간접 주소 워드가 데이터 전송에 사용될 메인 스토리지 위치를 지정하고, 상기 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트의 제1 간접 데이터 주소 워드는 상기 획득된 MSB의 메인 스토리지 주소 필드의 제1 메인 스토리지 주소에 위치하며, 상기 획득된 MSB는 데이터의 하나 또는 그 이상의 블록들을 명시함 -;
    상기 획득된 MSB에 의해 명시되는 데이터의 각 블록을 위해, 상기 하나 또는 그 이상의 간접 데이터 주소 워드들의 리스트로부터 제2 메인 스토리지 주소를 획득하는 단계 -블록들의 수(number)와 블록 사이즈는 상기 획득된 MSB의 블록 카운트 필드와 블록 사이즈 필드에 기초하여 결정됨-;
    상기 획득된 이동 명세 블록이 데이터의 블록들을 이동시키도록 구성됨을 상기 획득된 이동 명세 블록 내의 오퍼레이션 코드 필드의 오퍼레이션 코드에 기초하여 결정하는 단계; 및
    상기 획득된 이동 명세 블록에 기초하여, 데이터의 각 블록을 상기 메인 스토리지와 스토리지 클래스 메모리 사이에 이동시키는 단계(moving) -데이터의 블록의 이동을 위해 사용되는 메인 스토리지 위치의 주소는 각각의 제2 메인 스토리지 주소를 사용하여 획득되고 상기 이동을 위해 사용되는 스토리지 클래스 메모리의 주소는 상기 스토리지 클래스 메모리 주소 필드를 사용하여 획득됨- 를 수행하는 것을 포함하는
    방법.
  2. 제1항에 있어서, 상기 리스트 내 간접 데이터 주소 워드들의 수(number)는 상기 블록 카운트 필드에 의해 명시되는 수와 브랜치 투 넥스트(a branch to next) 간접 데이터 주소 워드를 명시하는 간접 데이터 주소 워드들의 수의 합이고, 상기 브랜치 투 넥스트 간접 데이터 주소 워드는 상기 플래그들 필드에 명시되는
    방법.
  3. 제1항에 있어서, 상기 획득된 이동 명세 블록의 오퍼레이션 코드 필드 내 오퍼레이션 코드가 제1 값으로 세트되는 것에 응답하여, 상기 오퍼레이션 코드는 리드 오퍼레이션(read operation)을 지정하고 상기 이동시키는 단계(moving)는 데이터의 각 블록을 스토리지 클래스 메모리로부터 메인 스토리지로 이동시키는 것을 포함하는
    방법.
  4. 제1항에 있어서, 상기 획득된 이동 명세 블록의 오퍼레이션 코드 필드 내 오퍼레이션 코드가 제2 값으로 세트되는 것에 응답하여, 상기 오퍼레이션 코드는 라이트 오퍼레이션(write operation)을 지정하고 상기 이동시키는 단계는 데이터의 각 블록을 메인 스토리지로부터 스토리지 클래스 메모리로 이동시키는 것을 포함하는
    방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 획득된 이동 명세 블록의 블록 사이즈 필드 내 지정된 사이즈는 4K 또는 1M인
    방법.
  6. 제1항에 있어서, 상기 이동시키는 단계의 완료에 응답하여, 하나 또는 그 이상의 상태 조건들을 생성하는 단계 -상기 하나 또는 그 이상의 상태 조건들은 상기 Start Subchannel 명령의 발행자(issuer)에게 액세스 가능함- 를 더 포함하는
    방법.
  7. 제1항에 있어서, 상기 응답 블록은 상기 이동 오퍼레이션의 실행 동안에 감지된 에러 조건에 응답하여 채워지는(populated)
    방법.
  8. 메인 스토리지와 스토리지 클래스 메모리를 포함하는 컴퓨팅 환경에서 Start Subchannel 명령을 실행하기 위한 컴퓨터 시스템에 있어서, 상기 컴퓨터 시스템은:
    메모리; 및
    상기 메모리와 통신하는 프로세서를 포함하되, 상기 컴퓨터 시스템은 제1항 내지 제7항 중 어느 한 항에 따르는 방법을 수행하도록 구성되는
    컴퓨터 시스템.
  9. 메인 스토리지와 스토리지 클래스 메모리를 포함하는 컴퓨팅 환경에서 Start Subchannel 명령을 실행하기 위한 컴퓨터 프로그램 제품에 있어서, 상기 컴퓨터 프로그램 제품은:
    컴퓨터 판독가능 스토리지 매체를 포함하되, 상기 컴퓨터 판독가능 스토리지 매체는 처리 회로에 의해 판독 가능하고 그리고 제1항 내지 제7항 중 어느 한 항에 따르는 방법을 수행하기 위한 처리 회로에 의해 실행될 명령들을 저장하는
    컴퓨터 프로그램 제품.
KR1020137015244A 2011-06-10 2012-05-25 확장 비동기 데이터 이동기 간접 데이터 주소 워드를 이용하는 방법, 컴퓨터 시스템 및 컴퓨터 프로그램 제품 KR101476077B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/157,729 2011-06-10
US13/157,729 US9116788B2 (en) 2011-06-10 2011-06-10 Using extended asynchronous data mover indirect data address words
PCT/EP2012/059859 WO2012168099A1 (en) 2011-06-10 2012-05-25 Using extended asynchronous data mover indirect data address words

Publications (2)

Publication Number Publication Date
KR20130101565A true KR20130101565A (ko) 2013-09-13
KR101476077B1 KR101476077B1 (ko) 2014-12-23

Family

ID=

Also Published As

Publication number Publication date
US20130111173A1 (en) 2013-05-02
CA2819160A1 (en) 2012-12-13
AU2012266572A1 (en) 2013-05-02
US9116788B2 (en) 2015-08-25
EP2601586B1 (en) 2019-01-09
RU2559765C2 (ru) 2015-08-10
AU2012266572B2 (en) 2015-09-10
RU2012150102A (ru) 2014-05-27
ES2710887T3 (es) 2019-04-29
SG194601A1 (en) 2013-12-30
CN103597459B (zh) 2016-08-17
DK2601586T3 (en) 2019-03-11
CA2819160C (en) 2020-08-04
JP2014517408A (ja) 2014-07-17
IL224382A (en) 2016-11-30
WO2012168099A1 (en) 2012-12-13
US9122573B2 (en) 2015-09-01
CN103597459A (zh) 2014-02-19
US20120317350A1 (en) 2012-12-13
JP5980317B2 (ja) 2016-09-07
EP2601586A1 (en) 2013-06-12

Similar Documents

Publication Publication Date Title
US11163444B2 (en) Configure storage class memory command
US9418006B2 (en) Moving blocks of data between main memory and storage class memory
US9037785B2 (en) Store storage class memory information command
DK2601586T3 (en) USING INDIRECT DATA ADDRESS FOR EXTENDED ASYNCHRONOUS DATA MOVER
US9164882B2 (en) Chaining move specification blocks
US9411737B2 (en) Clearing blocks of storage class memory
US20130117642A1 (en) Data returned responsive to executing a start subchannel instruction
US9058243B2 (en) Releasing blocks of storage class memory
US20130111178A1 (en) Deconfigure storage class memory command
KR101476077B1 (ko) 확장 비동기 데이터 이동기 간접 데이터 주소 워드를 이용하는 방법, 컴퓨터 시스템 및 컴퓨터 프로그램 제품
KR101476078B1 (ko) 명령을 실행하는 것에 응답하여 회신된 데이터

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

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20181127

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20191126

Year of fee payment: 6