IBM 시스템/360 아키텍처

**IBM 시스템/360 아키텍처**(IBM System/360 architecture)는 명령어 집합 아키텍처를 포함하지만 이에 국한되지 않는 S/360 메인프레임 컴퓨터 라인 전체의 모델 독립적인 아키텍처이다. 아키텍처의 요소들은 IBM 시스템/360 동작 원리 및 IBM 시스템/360 I/O 인터페이스 채널-제어 장치 원본 장비 제조업체 정보 매뉴얼에 문서화되어 있다.

## 특징

시스템/360 아키텍처는 다음 기능을 제공한다:
* 16개의 32비트 범용 레지스터
* 4개의 64비트 부동소수점 레지스터
* 24비트 명령어 주소를 포함하는 64비트 프로세서 상태 레지스터(PSW)
* 24비트 (16&nbsp;MB) 바이트 주소 지정 가능 메모리 공간
* 빅 엔디언 바이트/워드 순서
* 모든 시스템/360 모델(아래 참조, 모델 20 제외)에 존재하는 고정 소수점 이진 산술 및 논리 명령어를 포함하는 표준 명령어 집합.
** 십진수 산술 명령어를 추가하는 상용 명령어 집합은 일부 모델에서 선택 사항이며, 부동소수점 명령어를 추가하는 과학 명령어 집합도 마찬가지이다. 범용 명령어 집합은 위의 모든 것을 포함하며 저장 보호 명령어도 포함하며 일부 모델에서는 표준이다.
** 모델 44는 데이터 획득 및 실시간 처리를 위한 몇 가지 고유한 명령어를 제공하며 저장 대 저장 명령어는 없다. 그러나 IBM은 누락된 명령어를 범프 저장소에서 실행하고 시뮬레이션하는 **상업용 명령어 집합** 기능을 제공했다.
** 모델 20은 표준 명령어 집합의 간소화된 버전을 제공하며, 하프워드(16비트) 명령어만 있는 8개의 범용 레지스터로 제한되며, 상업용 명령어 집합과 입출력용 고유 명령어가 포함되어 있다.
** 모델 67에는 32비트 주소 및 "동적 주소 변환"을 처리하는 일부 명령어가 포함되어 있으며, 가상 메모리를 제공하는 추가 특권 명령어도 포함되어 있다.

## 메모리
시스템/360의 메모리('저장')는 8비트 바이트 단위로 주소 지정된다. 다양한 명령어는 '하프워드'(2바이트), '풀워드'(4바이트), '더블워드'(8바이트), '쿼드 워드'(16바이트) 및 2048바이트 저장 블록과 같은 더 큰 단위에서 작동하며, 단위의 가장 왼쪽(가장 낮은 주소)을 지정한다. 하프워드, 풀워드, 더블워드 또는 쿼드워드 내에서 낮은 번호의 바이트는 높은 번호의 바이트보다 더 중요하다. 이는 때때로 빅 엔디언으로 불린다. 이러한 단위의 많은 용도는 해당 경계에 정렬되어야 한다. 이 문서에서 한정되지 않은 용어 '워드'는 '풀워드'를 의미한다.

시스템/360의 원래 아키텍처는 최대 224 = 16,777,216바이트의 메모리를 제공했다. 후기 모델 67은 아키텍처를 확장하여 최대 232 = 4,294,967,296바이트의 가상 메모리를 허용했다.

## 주소 지정
시스템/360은 유니백 III의 주소 지정 방식과 유사한 잘린 주소 지정을 사용한다. 즉, 명령어는 완전한 주소를 포함하지 않고, 대신 베이스 레지스터와 베이스 레지스터의 주소로부터의 양수 오프셋을 지정한다. 시스템/360의 경우 베이스 주소는 15개 범용 레지스터 중 하나에 포함된다. 시프트와 같은 일부 명령어에서는 주소가 아닌 32비트 값에 대해 동일한 계산이 수행된다.

## 데이터 형식
S/360 아키텍처는 문자, 정수, 십진 정수 및 16진수 부동 소수점 숫자에 대한 형식을 정의한다. 문자 및 정수 명령어는 필수이지만, 십진수 및 부동 소수점 명령어는 십진수 산술 및 부동소수점 기능의 일부이다.

* **문자**는 8비트 바이트로 저장된다.
* **정수**는 2의 보수 이진 하프워드 또는 풀워드 값으로 저장된다.
* **[[팩 십진수]]** 숫자는 1에서 16개의 8비트 바이트로 저장되며, 홀수 개의 십진수 숫자와 4비트 부호가 뒤따른다. 16진수 A, C, E, F의 부호 값은 양수이고, 16진수 B, D의 부호 값은 음수이다. 16진수 A-F의 숫자 값과 0-9의 부호 값은 유효하지 않지만, PACK 및 UNPK 명령어는 유효성을 검사하지 않는다.
* **[[존 십진수]]** 숫자는 1에서 16개의 8비트 바이트로 저장되며, 각 바이트는 비트 0-3에 존을 포함하고 비트 4-7에 숫자를 포함한다. 가장 오른쪽 바이트의 존은 부호로 해석된다.
* **[[IBM 16진 부동소수점|부동 소수점]]** 숫자는 구형 모델에서 풀워드 또는 더블워드 값으로만 저장된다. 360/85 및 360/195에서는 쿼드워드로 저장되는 확장 정밀도 부동 소수점 숫자도 있다. 세 가지 형식 모두에서 비트 0은 부호이고 비트 0-7은 특성(지수, 64로 편향됨)이다. 비트 8-31(8-63)은 16진수 소수 부분이다. 확장 정밀도의 경우, 하위 더블워드는 자체 부호와 특성을 가지며, 이는 입력 시 무시되고 출력 시 생성된다.

## 명령어 형식
S/360의 명령어는 2, 4 또는 6바이트 길이를 가지며, 0바이트에 연산 코드가 있다. 명령어는 다음 형식 중 하나를 가진다:
* **RR** (2바이트). 일반적으로 1바이트는 두 개의 4비트 레지스터 번호를 지정하지만, SVC와 같은 일부 경우에는 1바이트가 단일 8비트 즉시 필드이다.
* **RS** (4바이트). 1바이트는 두 개의 레지스터 번호를 지정하고, 2-3바이트는 베이스 및 변위를 지정한다.
* **RX** (4바이트). 1바이트의 비트 0-3은 레지스터 번호 또는 수정자를 지정하고, 1바이트의 비트 4-7은 인덱스로 사용할 범용 레지스터의 번호를 지정하며, 2-3바이트는 베이스 및 변위를 지정한다.
* **SI** (4바이트). 1바이트는 즉시 필드를 지정하고, 2-3바이트는 베이스 및 변위를 지정한다.
* **SS** (6바이트). 1바이트는 두 개의 4비트 길이 필드 또는 하나의 8비트 길이 필드를 지정하고, 2-3바이트와 4-5바이트는 각각 베이스 및 변위를 지정한다. 길이 필드의 인코딩은 길이-1이다.

명령어는 메모리에서 2바이트 경계에 있어야 한다. 따라서 명령어 주소의 최하위 비트는 항상 0이다.

## 프로그램 상태 워드 (PSW)

**프로그램 상태 워드** (**PSW**)는 현재 실행 중인 프로그램에 대한 다양한 제어 정보를 담고 있다. 64비트 PSW는 (다른 것들 중에서도) 현재 실행 중인 명령어의 주소, 조건 코드 및 인터럽트 마스크를 설명한다.

**프로그램 상태 워드 로드** (**LPSW**)는 프로그램 모드, 보호 키 및 다음에 실행될 명령어의 주소를 포함하여 프로그램 상태 워드(PSW)를 로드하는 특권 명령어이다. LPSW는 종종 인터럽트 클래스와 관련된 "이전" PSW를 로드하여 인터럽트에서 "반환"하는 데 사용된다. 다른 특권 명령어(예: SSM, STNSM, STOSM, SPKA 등)는 인터럽트를 발생시키거나 PSW를 로드하지 않고 PSW의 하위 집합을 조작하는 데 사용할 수 있으며, 하나의 비특권 명령어(SPM)는 프로그램 마스크를 조작하는 데 사용할 수 있다.

## 인터럽트 시스템
아키텍처는 5가지 종류의 인터럽트를 정의한다. 인터럽트는 프로그램 상태를 자동으로 변경하는 메커니즘이며, 동기 및 비동기 이벤트 모두에 사용된다.

S/360의 각 인터럽트 클래스에는 두 개의 저장 필드가 할당된다. 이전 PSW 더블워드와 새 PSW 더블워드이다. 프로세서는 인터럽트 코드가 삽입된 PSW를 이전 PSW 위치에 저장한 다음 새 PSW 위치에서 PSW를 로드한다. 이는 일반적으로 명령어 주소를 교체하여 분기를 발생시키고, (선택적으로) PSW 내의 다른 필드를 설정하거나 재설정하여 모드 변경을 발생시킨다.

S/360 아키텍처는 각 인터럽트 클래스에 우선 순위를 정의하지만, 이는 두 인터럽트가 동시에 발생할 때만 관련이 있다. 인터럽트 루틴은 초기 인터럽트의 다른 발생을 포함하여 다른 활성화된 인터럽트에 의해 중단될 수 있다. 이러한 이유로 "1단계" 인터럽트 핸들러의 경우 머신 체크 마스크 비트를 제외한 모든 마스크 비트를 0으로 지정하는 것이 일반적이다. "2단계" 인터럽트 핸들러는 일반적으로 스택형 인터럽트(동일한 인터럽트 클래스의 인터럽트가 여러 번 발생하는 경우)를 위해 설계된다.

### 입출력 인터럽트
I/O 인터럽트는 채널 프로그램이 완료될 때, PCI 비트가 설정된 CCW를 가져온 후, 그리고 장치, 제어 장치 또는 채널에 의해 감지된 비동기 이벤트(예: 기계적 이동 완료)에 대해 발생한다. 시스템은 장치 주소를 인터럽트 코드에 저장하고 채널 상태를 위치 64 ('40'X)의 CSW에 저장한다.

### 프로그램 인터럽트
프로그램 인터럽트는 명령어가 15개의 예외 중 하나를 만났을 때 발생한다. 그러나 예외에 해당하는 프로그램 마스크 비트가 0이면 해당 예외에 대한 인터럽트는 발생하지 않는다.

360/65, 360/67 및 360/85에서는 보호 예외 및 주소 지정 예외 인터럽트가 부정확할 수 있으며, 이 경우 명령어 길이 코드 0을 저장한다.

인터럽트 코드는 다음 중 하나일 수 있다.

* **연산 예외**는 프로그램이 컴퓨터가 구현하지 않는 연산 코드를 가진 명령어를 실행하려고 할 때 인식된다. 특히, 프로그램이 설치되지 않은 선택적 기능(예: 부동 소수점)을 위해 작성된 경우 연산 예외가 인식된다.
* **특권 연산 예외**는 프로그램이 PSW의 문제 상태 비트가 1일 때 특권 명령어를 실행하려고 할 때 인식된다.
* **실행 예외**는 EXECUTE 명령어(EX)의 피연산자가 다른 EXECUTE 명령어일 때 인식된다.
* **보호 예외**는 프로그램이 저장 보호 키가 PSW 키와 일치하지 않는 위치에 저장하려고 하거나, 저장 보호 키가 PSW 키와 일치하지 않는 페치 보호 위치에서 가져오려고 할 때 인식된다.
* **주소 지정 예외**는 프로그램이 현재 사용할 수 없는 저장 위치에 접근하려고 할 때 인식된다. 이는 일반적으로 시스템 용량을 초과하는 주소에서 발생하지만, 저장 블록을 오프라인으로 전환할 수 있는 시스템에서도 발생할 수 있다.
***사양 예외**는 명령어가 허용되지 않는 길이 또는 레지스터 필드 값을 가질 때, 또는 연산 코드의 정렬 요구 사항을 충족하지 않는 피연산자 주소를 가질 때(예: 바이트 정렬 기능이 없는 시스템에서 홀수 피연산자 주소를 가진 LH 명령어) 인식된다.
* **데이터 예외**는 십진수 명령어가 유효하지 않은 피연산자(예: 유효하지 않은 데이터, 유효하지 않은 오버랩)를 지정할 때 인식된다.
* **고정 소수점 오버플로 예외**는 나누기를 제외한 고정 소수점 산술 또는 시프트 명령어에서 유효 비트가 손실될 때 인식된다.
* **고정 소수점 나누기 예외**는 고정 소수점 나누기 또는 이진 변환 명령어에서 유효 비트가 손실될 때 인식된다. 목적지는 변경되지 않는다.
* **십진수 오버플로 예외**는 나누기를 제외한 십진수 산술 명령어에서 유효 숫자가 손실될 때 인식된다.
* **십진수 나누기 예외**는 십진수 나누기 명령어에서 유효 비트가 손실될 때 인식된다. 목적지는 변경되지 않는다.
* **지수 오버플로 예외**는 부동 소수점 산술 연산에서 특성이 127을 초과하고 소수 부분이 0이 아닐 때 인식된다.
* **지수 언더플로 예외**는 부동 소수점 산술 연산에서 특성이 음수이고 소수 부분이 0이 아닐 때 인식된다.
* **유의성 예외**는 부동 소수점 덧셈 또는 뺄셈 연산에서 소수 부분이 0일 때 인식된다.
* **부동 소수점 나누기 예외**는 부동 소수점 나누기 연산에서 제수의 소수 부분이 0일 때 인식된다.

### 관리자 호출 인터럽트
관리자 호출 인터럽트는 관리자 호출 명령어의 결과로 발생한다. 시스템은 SVC 명령어의 비트 8-15를 인터럽트 코드로 저장한다.

### 외부 인터럽트
외부 인터럽트는 특정 비동기 이벤트의 결과로 발생한다. 외부 이전 PSW의 비트 16-24는 0으로 설정되고, 비트 24-31 중 하나 이상이 1로 설정된다.

### 머신 체크 인터럽트
머신 체크 인터럽트는 채널 또는 CPU와 관련된 다른 종류의 인터럽트로 보고될 수 없는 특이한 상태를 보고하기 위해 발생한다. 머신 체크를 유발하는 가장 중요한 조건은 레지스터나 저장 장치에서 발견되는 패리티 오류와 같은 하드웨어 오류이지만, 일부 모델에서는 덜 심각한 상태를 보고하는 데 사용될 수 있다. 인터럽트 코드와 '80'x(128진수) 스캔아웃 영역에 저장된 데이터는 모델에 따라 다르다.

## 입출력

이 문서는 CPU 관점에서 I/O를 설명한다. 채널 케이블 또는 커넥터는 별도의 문서인 버스 앤 태그에서 다루며, 요약은 다른 곳에 있고 자세한 내용은 IBM 문헌 및 FIPS PUB 60-2에서 찾을 수 있다.

I/O는 개념적으로 별도의 프로세서인 채널에 의해 수행된다. 채널은 자체 명령어 집합을 가지며, CPU에서 실행되는 프로그램과는 독립적으로 메모리에 접근한다. 소형 모델(360/50까지)에서는 단일 마이크로코드 엔진이 CPU 프로그램과 채널 프로그램을 모두 실행한다. 대형 모델에서는 채널이 별도의 캐비닛에 있으며 자체 메모리 인터페이스를 갖는다. 채널은 여러 **서브채널**을 포함할 수 있으며, 각 서브채널은 개별 채널 프로그램의 상태를 포함한다. 채널 프로그램을 동시에 가질 수 없는 여러 장치와 관련된 서브채널을 **공유**라고 하며, 단일 장치를 나타내는 서브채널을 **비공유**라고 한다.

S/360에는 세 가지 유형의 채널이 있다:

* **바이트 멀티플렉서 채널**은 여러 **CCW**를 동시에 실행할 수 있다. 일반적으로 카드 리더나 통신선과 같은 느린 장치를 연결하는 데 사용된다. 바이트 멀티플렉서 채널은 여러 개의 선택기 서브채널을 가질 수 있으며, 각 서브채널은 단일 서브채널만 가지며 저속 선택기 채널처럼 동작한다.
* **선택기 채널**은 단일 서브채널만 가지므로 한 번에 하나의 채널 명령만 실행할 수 있다. 일반적으로 마그네틱 테이프 드라이브와 같이 블록 멀티플렉서 채널을 사용하여 연결을 일시 중단할 수 없는 빠른 장치를 연결하는 데 사용된다.
* **블록 멀티플렉서 채널**은 여러 채널 프로그램을 동시에 실행할 수 있지만, 한 번에 하나만 활성화될 수 있다. 제어 장치는 채널 명령 완료 시 일시 중단을 요청할 수 있으며 나중에 재개를 요청할 수 있다. 이는 데이터 전송 완료 후 기계적 지연이 있는 장치(예: 이동 헤드 DASD의 탐색)를 위한 것이다. 블록 멀티플렉서 채널은 시스템/360 아키텍처에 늦게 추가되었다. 초기 시스템에는 바이트 멀티플렉서 채널과 선택기 채널만 있었다. 블록 멀티플렉서 채널은 모델 85 및 195에서만 선택적 기능이다. 블록 멀티플렉서 채널은 후기 시스템/370 컴퓨터에서도 사용할 수 있다.

개념적으로 주변 장비는 '제어 장치'를 통해 S/360에 연결되며, 제어 장치는 다시 채널을 통해 연결된다. 그러나 아키텍처는 제어 장치가 물리적으로 분리되어야 한다고 요구하지 않으며, 실제로는 제어 장치가 제어하는 장치와 통합되는 경우도 있다. 마찬가지로 아키텍처는 채널이 프로세서와 물리적으로 분리되어야 한다고 요구하지 않으며, 소형 S/360 모델(360/50까지)은 프로세서에서 사이클을 훔치는 통합 채널을 가지고 있다.

주변 장치는 16비트 주소로 주소 지정된다. 'cua' 또는 'cuu'로 불리며, 이 문서에서는 'cuu'라는 용어를 사용한다. 상위 8비트는 0에서 6까지의 채널을 식별하고, 하위 8비트는 해당 채널의 장치를 식별한다. 장치는 여러 'cuu' 주소를 가질 수 있다.

제어 장치에는 주소 "캡처" 범위가 할당된다. 예를 들어, CU는 20-2F 또는 40-7F 범위를 할당받을 수 있다. 이는 여러 제어 장치를 채널에 연결하고 우선순위를 지정하는 데 도움이 된다. 예를 들어, 채널에는 20-2F, 50-5F, 80-8F에 세 개의 디스크 제어 장치가 있을 수 있다. 캡처된 모든 주소에 할당된 물리적 장치가 있을 필요는 없다. 각 제어 장치는 채널에서 높은 우선순위 또는 낮은 우선순위로 표시된다.

장치 선택은 채널에서 각 제어 장치로 물리적으로 연결된 순서대로 진행된다. 체인 끝에서 선택 프로세스는 채널 방향으로 역순으로 계속된다. 선택이 채널로 돌아가면 어떤 제어 장치도 명령을 수락하지 않았으므로 SIO는 조건 코드 3을 반환한다. 높은 우선순위로 표시된 제어 장치는 나가는 CUU가 범위 내에 있는지 확인한다. 그렇다면 I/O가 처리된다. 그렇지 않다면 선택은 다음 나가는 CU로 전달된다. 낮은 우선순위로 표시된 제어 장치는 들어오는 (반환하는) CUU가 범위 내에 있는지 확인한다. 그렇다면 I/O가 처리된다. 그렇지 않다면 선택은 다음 들어오는 CU(또는 채널)로 전달된다. 세 개의 제어 장치를 채널에 연결하는 것은 물리적으로 -A-B-C일 수 있으며, 모두 높은 우선순위로 표시된 경우 우선순위는 ABC가 된다. 모두 낮은 우선순위로 표시된 경우 우선순위는 CBA가 된다. B가 높은 우선순위로 표시되고 AC가 낮은 우선순위로 표시된 경우 순서는 BCA가 된다. 이러한 추론을 확장하면 N개의 컨트롤러 중 첫 번째는 우선순위 1(높음) 또는 2N-1(낮음)이 되고, 두 번째는 우선순위 2 또는 2N-2, 세 번째는 우선순위 3 또는 2N-3 등이 된다. 마지막으로 물리적으로 연결된 것은 항상 우선순위 N이 된다.

I/O에 예약된 세 개의 저장 필드가 있다. 더블워드 I/O 이전 PSW, 더블워드 I/O 새 PSW 및 풀워드 '채널 주소 워드' (**CAW**)이다. I/O를 수행하려면 일반적으로 다음이 필요하다.
* 저장 키와 첫 번째 CCW의 주소로 **CAW** 초기화
* 작업에 대한 'cuu'를 지정하는 'Start I/O' (**SIO**) 명령어 발행
* I/O 인터럽트를 기다림
* '채널 상태 워드' (**CSW**)에 표시된 특이한 조건 처리

채널 프로그램은 일련의 '채널 제어 워드' (**CCW**)로 구성되며 서로 연결되어 있다(아래 참조). 일반적으로 채널은 연속적인 더블워드에서 **CCW**를 가져오지만, 제어 장치는 채널이 CCW를 건너뛰도록 지시할 수 있으며 '채널 내 전송' (**TIC**) **CCW**는 채널이 새 위치에서 **CCW**를 가져오기 시작하도록 지시할 수 있다.

채널 명령을 완료하는 몇 가지 정의된 방법이 있다. 이 중 일부는 채널이 CCW를 계속 가져올 수 있도록 허용하는 반면, 다른 일부는 채널 프로그램을 종료한다. 일반적으로 CCW에 체인 명령 비트가 설정되어 있지 않고 TIC가 아니면 명령이 완료될 때 채널은 I/O 작업을 종료하고 I/O 인터럽트를 발생시킨다. 제어 장치의 특정 상태 비트는 체인을 억제한다.

명령이 완료되는 가장 일반적인 방법은 체인 데이터가 설정되지 않았을 때 카운트가 소진되는 경우와 제어 장치가 더 이상 데이터 전송을 하지 말아야 함을 알리는 경우이다. Suppress-Length-Indication (SLI)이 설정되지 않고 이 중 하나가 다른 하나 없이 발생하면 체인이 허용되지 않는다. 체인을 억제하는 가장 일반적인 상황은 단위 예외 및 단위 검사이다. 그러나 단위 검사와 상태 수정자의 조합은 체인을 억제하지 않는다. 오히려 채널이 명령 재시도를 수행하여 동일한 CCW를 재처리하게 한다.

I/O 작업 완료 시 CPU로 전송되는 인터럽트 신호 외에도, 채널은 작업 종료 없이 채널 프로그램이 실행 중일 때 CPU에 프로그램 제어 인터럽트(PCI)를 보낼 수 있으며, I/O 완료 인터럽트 후에 지연된 장치 종료 인터럽트를 보낼 수 있다.

### 채널 상태
이러한 조건은 채널에 의해 감지되어 CSW에 표시된다.

* **[[#CSW_Program-controlled_interruption status|프로그램 제어 인터럽트]]**는 채널이 PCI 비트가 설정된 CCW를 가져왔음을 나타낸다. 채널은 계속 처리하며, 이 인터럽트는 단순히 채널의 진행 상황을 CPU에 알린다. 프로그램 제어 인터럽트의 사용 예는 내용 감시의 "프로그램 가져오기" 기능에서 찾을 수 있다. 이를 통해 제어 프로그램은 제어/재배치 레코드가 읽혔음을 통보받는다. 이 레코드가 메인 저장소에 완전히 읽혔는지 확인하기 위해 제어 프로그램에 남아있는 몇 안 되는 "비활성화된 비트 스핀" 중 하나가 시작된다. 스핀이 만족되면 제어/재배치 레코드가 메인 저장소에 완전히 들어왔고 바로 이전 텍스트 레코드가 재배치될 수 있음을 나타낸다. 재배치 후 NOP CCW는 TIC로 변경되고 채널 프로그램은 계속된다. 이런 방식으로 전체 로드 모듈이 하나의 EXCP를 사용하여, 그리고 가능하면 디스크 드라이브의 한 번의 회전만으로 읽고 재배치될 수 있다. PCI는 또한 통신 처리 액세스 방식 버퍼 관리에도 적용된다.
* **[[#CSW_Incorrect_length|길이 불일치]]**는 Count가 소진되기 전에 명령에 대한 데이터 전송이 완료되었음을 나타낸다. 이 표시는 CCW의 길이 표시 억제 비트가 설정된 경우 억제된다.
* **[[#CSW_Program_check|프로그램 검사]]**는 다음 오류 중 하나를 나타낸다.
** 0이 필요한 곳에 0이 아닌 비트
** 유효하지 않은 데이터 또는 CCW 주소
** CAW 또는 TIC가 TIC를 참조함
* **[[#CSW_Protection_check|보호 검사]]**는 CAW의 보호 키가 0이 아니고 저장 보호 키와 일치하지 않음을 나타낸다.
* **[[#CSW_Channel_data_check|채널 데이터 검사]]**는 데이터 전송 중 패리티 오류를 나타낸다.
* **[[#CSW_Channel_control_check|채널 제어 검사]]**는 채널 데이터 검사 또는 인터페이스 제어 검사 외의 채널 오작동을 나타낸다.
* **[[#CSW_Interface_control_check|인터페이스 제어 검사]]**는 채널-제어 장치 인터페이스의 유효하지 않은 신호를 나타낸다.
* **[[#CSW_Chaining_check|체인 검사]]**는 데이터 체인 중 데이터 손실을 나타낸다.

### 단위 상태
이러한 조건은 제어 장치 또는 장치에 의해 채널에 제시된다. 어떤 경우에는 채널에 의해 처리되고 다른 경우에는 CSW에 표시된다. 제어 장치에 의해 감지된 조건과 장치에 의해 감지된 조건 사이에는 구분이 없다.

* **[[#CSW_Attention|주의]]**는 진행 중인 채널 프로그램과 관련 없는 특이한 상태를 나타낸다. 이는 종종 입력을 요청하는 것과 같은 어떤 종류의 조작자 동작을 나타내며, 이 경우 CPU는 추가 정보를 추론할 수 있는 읽기 유형 명령, 가장 일반적으로 감지 명령(04h)을 발행하여 응답한다. 주의는 특수 조건이며, 특정 운영 체제 지원이 필요하고, 운영 체제는 반드시 항목 수가 제한된 특수 주의 테이블을 가지고 있다.
* **[[#CSW_Status_modifier|상태 수정자]]** (SM)는 다음 세 가지 특이한 조건 중 하나를 나타낸다.
** 지원하지 않는 장치에 테스트 I/O 명령을 발행했다.
** 바쁨 상태는 장치 대신 제어 장치를 참조한다.
** 장치가 CCW를 건너뛰어야 하는 상태를 감지했다. 상태 수정자가 가능한 명령이 있는 CCW는 일반적으로 명령 체인을 지정하며, 이 경우 SM은 채널에 의해 처리되며 인터럽트를 발생시키지 않는다.

::SM이 발생하는 일반적인 채널 프로그램은 다음과 같다.

     ...
     Search Id Equal
     TIC           *-8
     Read Data

::여기서 TIC는 장치가 SM을 발생시켜 성공적인 검색을 나타낼 때까지 채널이 검색을 다시 가져오도록 한다.

* **[[#CSW_Control_unit_end|제어 장치 종료]]**는 이전 제어 장치 바쁨 상태가 지워졌음을 나타낸다.
* **[[#CSW_Busy|바쁨]]**는 장치(SM=0) 또는 제어 장치(SM=1)가 바쁨을 나타낸다.
* **[[#CSW_Channel_end|채널 종료]]**는 장치가 채널 명령에 대한 데이터 전송을 완료했음을 나타낸다. 길이 표시 억제 비트 값에 따라 CCW의 카운트 필드가 소진된 경우 길이 불일치 표시가 있을 수도 있다.
* **[[#CSW_Device_end|장치 종료]]**는 장치가 작업을 완료하고 다른 작업을 수락할 준비가 되었음을 나타낸다. DE는 CE와 동시에 신호될 수도 있고 지연될 수도 있다.
* **[[#CSW_Unit_check|단위 검사]]**는 장치 또는 제어 장치가 특이한 상태를 감지했으며, Sense 명령을 발행하여 자세한 정보를 얻을 수 있음을 나타낸다.
* **[[#CSW_Unit_exception|단위 예외]]**는 장치가 특이한 상태(예: 파일 끝)를 감지했음을 나타낸다.

### 채널 주소 워드
풀워드 '채널 주소 워드' (CAW)는 4비트 저장 보호 키와 시작할 채널 프로그램의 24비트 주소를 포함한다.

### 채널 명령 워드
'채널 명령 워드'는 다음을 포함하는 더블워드이다.
* 8비트 채널 명령 코드
* 24비트 주소
* 5비트 플래그 필드
* 부호 없는 하프워드 카운트 필드

#### CCW 명령 코드
하위 2 또는 4비트는 채널이 수행하는 6가지 유형의 작업을 결정한다. 인코딩은 다음과 같다.

위 표에서 상위 6 또는 4비트, 즉 수정자 비트 **M**의 의미는 연결된 I/O 장치 유형에 따라 다르다. 예를 들어, DASD CKD CCW를 참조하라. 8개 비트 모두 관련 제어 장치(또는 그 기능적 등가물)로 전송되어 해석된다.

제어는 장치나 제어 장치의 상태를 변경하는 데 사용되며, 종종 되감기, 탐색과 같은 기계적 움직임과 관련된다.

감지는 장치 상태를 설명하는 데이터를 읽는 데 사용된다. 가장 중요한 경우는 명령이 단위 검사로 종료될 때 특정 원인은 감지를 수행하고 반환된 데이터를 검사해야만 확인할 수 있다는 것이다. 수정자 비트가 모두 0인 감지 명령은 항상 유효하다.

아키텍처의 주목할 만한 편차는 DASD가 제어를 사용하는 대신 예약 및 해제에 Sense 명령 코드를 사용한다는 점이다.

#### CCW 플래그
CCW의 플래그는 실행 및 종료 방식에 영향을 미친다.

### 채널 상태 워드
'채널 상태 워드' (CSW)는 I/O 인터럽트와 관련된 데이터를 제공한다.

* **보호 키** 필드에는 I/O 작업이 시작될 때 I/O 완료 또는 PCI 인터럽트에 대한 CAW의 보호 키가 포함된다.
* **명령 주소** 필드는 I/O 완료 또는 PCI 인터럽트에 대해 마지막으로 가져온 CCW의 주소+8을 포함한다. 그러나 9가지 예외가 있다.
* **상태** 필드는 채널에 의해 감지된 조건을 나타내는 1바이트 채널 상태 비트와 I/O 장치에 의해 감지된 조건을 나타내는 1바이트 단위 상태 비트를 포함한다. 제어 장치에 의해 감지된 조건과 장치에 의해 감지된 조건 사이에는 구분이 없다.
* **잔여 카운트**는 CCW에 의해 설명된 영역에서 채널로 또는 채널에서 전송되지 않은 바이트 수를 나타내는 하프워드이다. CCW의 카운트와 잔여 카운트의 차이는 전송된 바이트 수를 나타낸다.

### I/O 명령어
S/360에는 4개의 I/O 명령어가 있다: Start I/O (SIO), Test I/O (TIO), Halt I/O (HIO) 및 Test Channel (TCH). 이 네 가지 모두 특권 명령어이므로 문제 상태에서 사용하면 특권 연산 프로그램 인터럽트를 발생시킨다. B1 (베이스) 및 D1 (변위) 필드는 cuu (채널 및 장치 번호)를 계산하는 데 사용되며, 명령어의 비트 8-15는 사용되지 않으며 S/370과의 호환성을 위해 0이어야 한다.

#### Start I/O (SIO)
SIO는 CAW에 있는 저장 보호 키를 사용하여 CAW가 가리키는 채널 프로그램을 시작하려고 시도한다.

#### Test I/O (TIO)
TIO는 채널과 장치의 상태를 테스트한다. 또한 CSW를 저장할 수도 있으며, 이 경우 조건 코드 1로 완료된다.

#### Halt I/O (HIO)
HIO는 활성 채널 프로그램을 종료하려고 시도한다. 또한 CSW를 저장할 수도 있으며, 이 경우 조건 코드 1로 완료된다.

#### Test Channel (TCH)
TCH는 채널의 상태를 테스트한다. 활성 채널 프로그램의 상태에 영향을 미치지 않으며 CSW를 저장하지 않는다.

## 운영자 제어
200px|섬네일|right|운영자 제어

시스템/360 아키텍처는 여러 공통 기능의 존재를 명시했지만, 구현 수단을 명시하지 않았다. 이를 통해 IBM은 다른 프로세서에서 기능 및 값 선택에 다이얼, 키보드, 푸시버튼, 롤러, CRT의 이미지 또는 텍스트와 같은 다양한 물리적 수단을 사용할 수 있었다. '키' 또는 '스위치'에 대한 모든 언급은 예를 들어 라이트펜 선택, 동등한 키보드 시퀀스에 적용되는 것으로 읽어야 한다.

* **시스템 재설정**은 모든 I/O 채널에 재설정 신호를 보내고 프로세서 상태를 지운다. 보류 중인 모든 인터럽트는 취소된다. 시스템 재설정은 범용 레지스터, 부동 소수점 레지스터 또는 저장소의 패리티 오류를 반드시 수정하지 않는다. 시스템 재설정은 공유 I/O 장치의 상태를 재설정하지 않는다.
* **초기 프로그램 로드** (IPL)는 저장소에 로더가 없을 때, 보통 기계의 전원이 켜졌거나 대체 운영 체제를 로드하기 위해 프로그램을 로드하는 프로세스이다. 이 프로세스는 때때로 부팅이라고도 알려져 있다.

:: IPL 기능의 일부로 운영자는 12비트 장치 주소를 지정하는 수단을 갖는다. 일반적으로 운영자 제어 도면에서와 같이 세 개의 다이얼로 지정된다. 운영자가 '로드' 기능을 선택하면 시스템은 '시스템 재설정'을 수행하고, 선택된 장치에 Read IPL 채널 명령을 보내 위치 0-23으로 24바이트를 읽어들이고, 채널이 위치 8에서 'CCW'를 가져오기 시작하도록 한다. 그 효과는 채널이 위치 0에서 24의 길이, 0의 주소, 명령 체인 + 길이 표시 억제를 포함하는 플래그를 가진 CCW를 가져온 것과 같다. 작업 완료 시 시스템은 위치 2의 하프워드에 I/O 주소를 저장하고 위치 0에서 PSW를 로드한다.

:: 초기 프로그램 로딩은 일반적으로 테이프, 카드 판독기 또는 디스크 드라이브에서 수행된다. 일반적으로 운영 체제는 디스크 드라이브에서 로드되었으며, 테이프나 카드에서 IPL은 진단용으로 또는 새 컴퓨터에 운영 체제를 설치할 때만 사용되었다.
* **비상 당김 스위치** (비상 전원 끄기, EPO)는 모든 I/O 채널에 EPO 신호를 보낸 다음 프로세서 복합체의 전원을 끈다. EPO는 정상적인 전원 차단 시퀀스를 우회하므로 손상이 발생할 수 있으며, EPO 제어 장치에는 고객 엔지니어가 장비 전원을 다시 켜기 전에 장비를 검사하도록 보장하는 기계적 래치가 있다.
* **전원 켜기**는 프로세서 복합체의 모든 구성 요소에 전원을 공급하고 시스템 재설정을 수행한다.
* **전원 끄기**는 순서적인 전원 끄기 시퀀스를 시작한다. 저장소의 내용은 보존되지만, 관련 저장 키는 손실될 수 있다.
* **인터럽트** 키는 외부 이전 PSW에서 비트 25가 설정된 외부 인터럽트를 발생시킨다.
* **대기 표시등**은 PSW에 비트 14 (대기)가 설정되었음을 나타낸다. 프로세서는 일시적으로 중지되지만 인터럽트 조건이 발생하면 작업을 다시 시작한다.
* **수동 표시등**은 CPU가 정지 상태임을 나타낸다.
* **시스템 표시등**은 CPU 활동 또는 I/O 채널 활동으로 인해 미터가 작동 중임을 나타낸다.
* **테스트 표시등**은 특정 운영자 제어가 활성화되어 있거나, INSTRUCTION STEP과 같은 특정 시설이 Diagnose 명령으로 사용되었거나, 비정상적인 열 조건이 존재할 때를 나타낸다. 자세한 내용은 모델에 따라 다르다.
* **로드 표시등**은 IPL 및 외부 시작에 의해 켜진다. 로드 프로세스 완료 시 위치 0에서 PSW를 로드하여 꺼진다.
* **로드 단위** 제어는 IPL을 수행할 장치의 가장 오른쪽 11개 비트를 제공한다.
* **로드 키**는 IPL 시퀀스를 시작한다.
* **프리픽스 선택 키 스위치**는 IPL이 주 프리픽스를 사용할지 대체 프리픽스를 사용할지 선택한다.
* **시스템 재설정 키**는 시스템 재설정을 시작한다.
* **중지 키**는 CPU를 정지 상태로 만든다. 채널 프로그램은 계속 실행되며 인터럽트 조건은 보류 상태로 유지된다.
* **속도 스위치**는 프로세서가 명령어를 가져오는 모드를 결정한다. 아키텍처에 의해 정의된 두 가지 모드는 다음과 같다.
** PROCESS
** INSTRUCTION STEP
* **시작 키**는 속도 스위치 설정에 따라 명령어 가져오기를 시작한다.
* **저장소 선택 스위치**는 저장 키 및 표시 키에 의해 접근되는 자원 유형을 결정한다. 아키텍처에 의해 정의된 세 가지 선택 항목은 다음과 같다.
** 주 저장소
** 범용 레지스터
** 부동 소수점 레지스터
* **주소 스위치**는 저장 키, 표시 키 및 일부 모델에서는 IC 설정 키에 대한 주소 또는 레지스터 번호를 지정한다.
* **데이터 스위치**는 저장 키 및 일부 모델에서는 IC 설정 키에 대한 데이터를 지정한다.
* **저장 키**는 저장소 선택 스위치 및 주소 스위치에 의해 지정된 대로 데이터 스위치의 값을 저장한다.
* **표시 키**는 저장소 선택 스위치 및 주소 스위치에 의해 지정된 값을 표시한다.
* **IC 설정=**는 모델에 따라 데이터 스위치 또는 주소 스위치에서 PSW의 명령어 주소 부분을 설정한다.
* **주소 비교 스위치**는 비교 모드와 비교 대상을 선택한다. 명령어 주소 비교 시 중지는 모든 모델에 존재하지만, 데이터 주소 비교 시 중지는 일부 모델에만 존재한다.
* **대체 접두어 표시등**은 접두어 트리거가 대체 상태에 있을 때 켜진다.

## 선택적 기능
### 바이트 정렬 피연산자
일부 모델, 예를 들어 S/360-85,에서는 일부 문제 상태 명령어에 대한 정렬 요구 사항이 완화되었다. 이 기능을 끄는 메커니즘은 없으며, 해당 명령어에서 프로그램 검사 유형 6(정렬)을 받는 데 의존하는 프로그램은 수정해야 한다.

### 십진수 산술
십진수 산술 기능은 팩 십진수 데이터에서 작동하는 명령어를 제공한다. 팩 십진수 숫자는 1-31개의 십진수 숫자 뒤에 4비트 부호가 온다. PACK 및 UNPACK을 제외한 모든 십진수 산술 명령어는 숫자가 0-9 범위를 벗어나거나 부호가 A-F 범위를 벗어날 경우 데이터 예외를 발생시킨다.

### 직접 제어
'직접 제어' 기능은 6개의 외부 신호선과 저장소로/부터의 8비트 데이터 경로를 제공한다.

### 부동 소수점 산술
부동 소수점 산술 기능은 4개의 64비트 부동 소수점 레지스터와 32비트 및 64비트 16진 부동 소수점 숫자에서 작동하는 명령어를 제공한다. 360/85 및 360/195는 128비트 확장 정밀도 부동 소수점 숫자도 지원한다.

### 인터벌 타이머
인터벌 타이머 기능이 설치된 경우, 프로세서는 위치 80 ('50'X)의 워드를 일정한 간격으로 감소시킨다. 아키텍처는 간격을 지정하지 않지만, 1초당 300회 비트 23에서 1을 뺀 것처럼 보이도록 값을 빼야 한다고 요구한다. 소형 모델은 AC 전원 공급 장치와 동일한 주파수(50Hz 또는 60Hz)로 감소시켰지만, 대형 모델은 고해상도 타이머 기능을 가지고 있었다. 타이머가 0이 되면 프로세서는 외부 인터럽트를 발생시킨다.

### 다중 시스템 작동
'다중 시스템 작동'은 직접 제어, 직접 주소 재배치(프리픽싱)와 같은 다중 프로세서 시스템을 지원하는 기능 세트이다.

### 저장소 보호
저장소 보호 기능이 설치된 경우, 모든 2,048바이트 저장 블록에는 4비트 저장 키가 연결되며, CPU 또는 I/O 채널이 해당 블록의 주소에 저장할 때 해당 키가 확인된다. CPU 또는 채널 키가 0이면 확인이 비활성화된다. 0이 아닌 CPU 또는 채널 키는 일치하는 키가 있는 블록에만 데이터를 저장할 수 있도록 허용한다.

저장소 보호는 결함 있는 애플리케이션이 운영 체제 또는 다른 애플리케이션에 속한 저장소를 덮어쓰는 것을 방지하는 데 사용되었다. 이를 통해 생산과 함께 테스트를 수행할 수 있었다. 키의 길이가 4비트에 불과했기 때문에 동시에 실행할 수 있는 다른 애플리케이션의 최대 수는 15개였다.

일부 모델에서 사용할 수 있는 추가 옵션은 페치 보호였다. 이를 통해 운영 체제는 블록이 저장 뿐만 아니라 페치로부터도 보호되도록 지정할 수 있었다.

## 편차 및 확장
시스템/360 모델 20은 근본적으로 다르므로 S/360으로 간주해서는 안 된다.

시스템/360 모델 44에는 특정 명령어가 없지만, 숨겨진 메모리에서 누락된 명령어를 시뮬레이션할 수 있는 기능이 있어 표준 S/360 운영 체제 및 애플리케이션을 사용할 수 있었다.

일부 모델은 에뮬레이션 명령어, 페이징 등 아키텍처를 확장한 기능을 가지고 있으며, 일부 모델은 아키텍처에서 사소한 편차를 보인다. 예를 들면 다음과 같다.
* S/360-65의 멀티시스템 기능은 직접 제어 기능과 Set System Mask (SSM) 명령어의 동작을 수정한다.
* 시스템/360 모델 67-2는 유사하지만 호환되지 않는 변경 사항을 가졌다.

일부 편차는 S/370 아키텍처 기능의 프로토타입 역할을 했다.

## 같이 보기
* 메모리 보호 키

## 내용주

## 각주
;**S360**
:

## 추가 자료
*   3장 (pp.&nbsp;41110)은 System/360 아키텍처를 설명한다.
* 

## 외부 링크
* IBM System/360 아키텍처 소개 (학생용 텍스트)

분류:컴퓨터 구조
분류:컴퓨팅 플랫폼