IBM 시스템/360 아키텍처

fpr = 4× 64-bit IBM 메인프레임 IBM 시스템/360 **IBM 시스템/360 아키텍처**(IBM System/360 architecture)는 명령어 집합 아키텍처를 포함하지만 이에 국한되지 않는 S/360 메인프레임 컴퓨터 라인 전체의 모델 독립적인 아키텍처이다. 아키텍처의 요소들은 IBM 시스템/360 동작 원리 및 IBM 시스템/360 I/O 인터페이스 채널-제어 장치 원본 장비 제조업체 정보 매뉴얼에 문서화되어 있다.
# 특징
{| class="infobox" |- |+ align="center" | IBM S/360 레지스터 |- | | {| class="wikitable" |+ 범용 레지스터 0-15 |- | colspan=34 |
|- | | | colspan=32 | 2의 보수 값 | | |- | | | | 0 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 31 | | |} |- | | {| class="wikitable" |+ 부동소수점 레지스터 0-6 |- | colspan=34 |
|- | | | S | colspan=7 | 편향 지수 | colspan=24 | 가수 | | |- | | | | 0 | | 1 | | | | | | | | | | | | 7 | | 8 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 31 | | |- | colspan=34 |
|- | | | colspan=32 | 가수 (계속) | | |- | | | | 32 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 63 | | |} |- | | {| class="wikitable" |+ S/360 PSWp=15 |- | colspan=34 |
|- | | | colspan=6 |Chan.
Mask | I
O | E
X | colspan=4 | Key | A | M | W | P | colspan=16 | Interruption Code | | |- | | | | 0 | | 1 | | 2 | | | | 4 | | 5 | | 6 | | 7 | | 8 | | | | | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 31 | | |- | colspan=34 |
|- | | | colspan=2 | ILC | colspan=2 | CC | colspan=4 | Program
Mask | colspan=24 | Instruction Address | | |- | | | | 32 | | 33 | | 34 | | 35 | | 36 | | | | | | 39 | | 40 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 63 | | |- | colspan="34" | {| class="wikitable mw-collapsible autocollapse" |+ S/360 PSW 약어 |- ! | 비트 ! | 필드 ! | 의미 |- | 0-5 | | 채널 0-5용 채널 마스크 |- | 6 | IO | 채널 > 5용 I/O 마스크 |- | 7 | EX | 외부 마스크 |- | 8-11 | Key | PSW 키 |- | 12 | A | 십진수 연산용 **A**SCII 모드 |- | 13 | M | 머신 체크 마스크 |- | 14 | W | 대기 상태 |- | 15 | P | 문제 상태 |- | 16-31 | IC | 인터럽트 코드pp=15snd16 |- | 32-33 | ILC | 명령어 길이 코드p=77 |- | 34-35 | CC | 조건 코드 |- | 36-39 | PM | {| class="wikitable mw-collapsible autocollapse" |+ | 프로그램 마스크 ! 비트 ! 의미 |- | 36 | 고정 소수점 오버플로 |- | 37 | 십진수 오버플로 |- | 38 | 지수 언더플로 |- | 39 | 유의성 |} |- | 40-63 | IA | 명령어 주소 |} |} * IBM 문서는 비트를 높은 자리에서 낮은 자리로 번호 매기며, 최상위 (가장 왼쪽) 비트는 비트 번호 0으로 지정된다. |} 시스템/360 아키텍처는 다음 기능을 제공한다: * 16개의 32비트 범용 레지스터 * 4개의 64비트 부동소수점 레지스터 * 24비트 명령어 주소를 포함하는 64비트 프로세서 상태 레지스터(PSW) * 24비트 (16 MB) 바이트 주소 지정 가능 메모리 공간 * 빅 엔디언 바이트/워드 순서 * 모든 시스템/360 모델(아래 참조, 모델 20 제외)에 존재하는 고정 소수점 이진 산술 및 논리 명령어를 포함하는 표준 명령어 집합. ** 십진수 산술 명령어를 추가하는 상용 명령어 집합은 일부 모델에서 선택 사항이며, 부동소수점 명령어를 추가하는 과학 명령어 집합도 마찬가지이다. 범용 명령어 집합은 위의 모든 것을 포함하며 저장 보호 명령어도 포함하며 일부 모델에서는 표준이다. ** 모델 44는 데이터 획득 및 실시간 처리를 위한 몇 가지 고유한 명령어를 제공하며 저장 대 저장 명령어는 없다. 그러나 IBM은 누락된 명령어를 범프 저장소에서 실행하고 시뮬레이션하는 **상업용 명령어 집합** 기능을 제공했다. ** 모델 20은 표준 명령어 집합의 간소화된 버전을 제공하며, 하프워드(16비트) 명령어만 있는 8개의 범용 레지스터로 제한되며, 상업용 명령어 집합과 입출력용 고유 명령어가 포함되어 있다. ** 모델 67에는 32비트 주소 및 "동적 주소 변환"을 처리하는 일부 명령어가 포함되어 있으며, 가상 메모리를 제공하는 추가 특권 명령어도 포함되어 있다.access-date=July 16, 2017
# 메모리
시스템/360의 메모리('저장')는 8비트 바이트 단위로 주소 지정된다. 다양한 명령어는 '하프워드'(2바이트), '풀워드'(4바이트), '더블워드'(8바이트), '쿼드 워드'(16바이트) 및 2048바이트 저장 블록과 같은 더 큰 단위에서 작동하며, 단위의 가장 왼쪽(가장 낮은 주소)을 지정한다. 하프워드, 풀워드, 더블워드 또는 쿼드워드 내에서 낮은 번호의 바이트는 높은 번호의 바이트보다 더 중요하다. 이는 때때로 빅 엔디언으로 불린다. 이러한 단위의 많은 용도는 해당 경계에 정렬되어야 한다. 이 문서에서 한정되지 않은 용어 '워드'는 '풀워드'를 의미한다. 시스템/360의 원래 아키텍처는 최대 224 = 16,777,216바이트의 메모리를 제공했다. 후기 모델 67은 아키텍처를 확장하여 최대 232 = 4,294,967,296후기 System/370의 두 배 크기바이트의 가상 메모리를 허용했다.
# 주소 지정
시스템/360은 유니백 III의 주소 지정 방식과 유사한 잘린 주소 지정을 사용한다. 즉, 명령어는 완전한 주소를 포함하지 않고, 대신 베이스 레지스터와 베이스 레지스터의 주소로부터의 양수 오프셋을 지정한다. 시스템/360의 경우 베이스 주소는 15개범용 레지스터 0을 지정하면 레지스터 내용 대신 베이스 주소가 0이 된다. 범용 레지스터 중 하나에 포함된다. 시프트와 같은 일부 명령어에서는 주소가 아닌 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에 숫자를 포함한다. 가장 오른쪽 바이트의 존은 부호로 해석된다. * **부동 소수점** 숫자는 구형 모델에서 풀워드 또는 더블워드 값으로만 저장된다. 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**)pages=71–72는 현재 실행 중인 프로그램에 대한 다양한 제어 정보를 담고 있다. 64비트 PSW는 (다른 것들 중에서도) 현재 실행 중인 명령어의 주소, 조건 코드 및 인터럽트 마스크를 설명한다. {| class="wikitable collapsible" |+ PSW 형식 |- ! align=center valign=bottom | 비트 ! align=center valign=bottom | 내용 ! align=left valign=bottom | 설명 |- | align=center valign=top | 0-7 | valign=top | System_Mask시스템 마스크 | valign=top | 비트 0-5: 채널 0-5 활성화, 비트 6: 나머지 모든 채널 활성화,name=ChanNum 비트 7: 외부 인터럽트 활성화(타이머, 인터럽트 키 및 외부 신호page=71 |- | align=center valign=top | 8-11 | 보호 키Key | CPU 보호 키를 저장 보호 키와 비교 |- | align=center valign=top | 12AMWP | valign=top | ASCII 모드 | 팩 십진 명령어용 ASCII 모드 활성화, IBM 소프트웨어에서는 사용되지 않음S/360 설계가 ASCII 개발과 동시에 이루어졌기 때문에 IBM의 ASCII 지원은 최종적으로 채택된 표준과 일치하지 않았다. |- | align=center valign=top | 13 | valign=top | 머신 체크 | 머신 체크 인터럽트 활성화 |- | align=center valign=top | 14 | valign=top | 대기 상태 | 프로세서가 중지됨, 활성화된 경우 인터럽트 발생 시 프로세서가 명령어 실행 재개 |- | align=center valign=top | 15 | valign=top | 문제 상태 | 감시자 상태에 예약된 명령어 사용 방지 활성화 |- | align=center valign=top | 16-31 | valign=top | Interruption_Code인터럽트 코드 | 인터럽트 유형을 나타내는 코드, PSW 저장 시 삽입, IPLoad 중에는 프로그램이 로드된 장치의 주소p=77 |- | align=center valign=top | 32-33 | InstructionLengthCode명령어 길이 코드 | 하프워드 단위 길이 또는 사용 불가능 시 0 |- | align=center valign=top | 34-35 | ConditionCode조건 코드 | 인코딩은 개별 명령어 참조 |- | align=center valign=top | 36-39 | valign=top | Program_Mask프로그램 마스크 | 비트 36: 고정 소수점 오버플로 활성화, 비트 37: 십진수 오버플로, 비트 38: 지수 언더플로, 비트 39: 유의성p=71 |- | align=center valign=top|40-63 | valign=top | Instruction_Address명령어 주소 | valign=top | 다음 명령어의 주소, ILC가 0인 프로그램 인터럽트 제외 |} LPSW**프로그램 상태 워드 로드** (**LPSW**)는 프로그램 모드, 보호 키 및 다음에 실행될 명령어의 주소를 포함하여 프로그램 상태 워드(PSW)를 로드하는 특권 명령어이다. LPSW는 종종 인터럽트 클래스와 관련된 "이전" PSW를 로드하여 인터럽트에서 "반환"하는 데 사용된다. 다른 특권 명령어(예: SSM, STNSM, STOSM, SPKA 등)는 인터럽트를 발생시키거나 PSW를 로드하지 않고 PSW의 하위 집합을 조작하는 데 사용할 수 있으며, 하나의 비특권 명령어(SPM)는 프로그램 마스크를 조작하는 데 사용할 수 있다.
# 인터럽트 시스템
아키텍처pages=77–83는 5가지 종류의 인터럽트를 정의한다. 인터럽트는 프로그램 상태를 자동으로 변경하는 메커니즘이며, 동기S/360 문헌에서는 오류 또는 트랩이라는 용어를 사용하지 않는다. 및 비동기 이벤트 모두에 사용된다. {| class="wikitable" |- ! rowspan="2" | 인터럽트 종류 !! colspan="2" | 이전 PSW !! colspan="2" | 새 PSW ! rowspan="2" | 우선순위 |- ! 16진수 !! 10진수 !! 16진수 !! 10진수 |- | 입출력pp=78-79 || 38 || 56 || 78 || 120 || 4 |- | 프로그램pp=79–80.1 || 28 || 40 || 68 || 104 || 2 |- | 관리자 호출pp=80.1–81 || 20 || 32 || 60 || 96 || 2 |- | 외부pp=81–82 || 18 || 24 || 58 || 88 || 3 |- | 머신 체크pp=82–83 || 30 || 48 || 70 || 112 || 1 |} S/360의 각 인터럽트 클래스에는 두 개의 저장 필드가 할당된다. 이전 PSW 더블워드와 새 PSW 더블워드이다. 프로세서는 인터럽트 코드가 삽입된 PSW를 이전 PSW 위치에 저장한 다음 새 PSW 위치에서 PSW를 로드한다. 이는 일반적으로 명령어 주소를 교체하여 분기를 발생시키고, (선택적으로) PSW 내의 다른 필드를 설정하거나 재설정하여 모드 변경을 발생시킨다. S/360 아키텍처는 각 인터럽트 클래스에 우선 순위를 정의하지만, 이는 두 인터럽트가 동시에 발생할 때만 관련이 있다. 인터럽트 루틴은 초기 인터럽트의 다른 발생을 포함하여 다른 활성화된 인터럽트에 의해 중단될 수 있다. 이러한 이유로 "1단계" 인터럽트 핸들러의 경우 머신 체크 마스크 비트를 제외한 모든 마스크 비트를 0으로 지정하는 것이 일반적이다. "2단계" 인터럽트 핸들러는 일반적으로 스택형 인터럽트(동일한 인터럽트 클래스의 인터럽트가 여러 번 발생하는 경우)를 위해 설계된다.
## 입출력 인터럽트
I/O 인터럽트pp=78–79는 채널 프로그램이 완료될 때, PCI 비트가 설정된 CCW를 가져온 후, 그리고 장치, 제어 장치 또는 채널에 의해 감지된 비동기 이벤트(예: 기계적 이동 완료)에 대해 발생한다. 시스템은 장치 주소를 인터럽트 코드에 저장하고 채널 상태를 위치 64 ('40'X)의 CSW에 저장한다.
## 프로그램 인터럽트
프로그램 인터럽트pages=16,79–80.1는 명령어가 15개의name=NotArchExc 예외 중 하나name=multimpr를 만났을 때 발생한다. 그러나 예외에 해당하는 프로그램 마스크 비트가 0이면 해당 예외에 대한 인터럽트는 발생하지 않는다. 360/65,page=12 360/67page=46 및 360/85page=12에서는 보호 예외 및 주소 지정 예외 인터럽트가 부정확할 수 있으며, 이 경우 명령어 길이 코드 0을 저장한다. 인터럽트 코드는 다음 중 하나일 수 있다. {| class="wikitable collapsible" |+ 프로그램 인터럽트에 대한 인터럽트 코드
이전 PSW 비트 26-31 |- ! | 16진수
비트 26-31 ! 10진수 ! | 예외 |- | align=right valign=top | 0 | align=right valign=top | 0 | 360/91,page=15 360/95 또는 360/195page=14의 부정확한 인터럽트name=multimpr {| class="wikitable collapsible collapsed" |+ 여러 부정확한 인터럽트 코드에 대한 이전 PSW 비트 |- ! | 비트 ! 예외 |- | 16 | 보호 |- | 17 | 주소 지정 |- | 18 | 사양사양 비트는 360/195에서 부정확한 인터럽트에는 사용되지 않는다. |- | 19 | 데이터 |- | 20 | 고정 소수점 오버플로 |- | 21 | 고정 소수점 나누기 |- | 22 | 지수 오버플로 |- | 23 | 지수 언더플로 |- | 24 | 유의성 |- | 25 | 부동 소수점 나누기 |- | 26 | 십진수 오버플로360/91에서는 사용되지 않음 |- | 27 | 십진수 나누기name=NoDec |} |- | align=right | 1 | align=right | 1 | 연산p=79 |- | align=right | 2 | align=right | 2 | 특권 연산p=79 |- | align=right | 3 | align=right | 3 | 실행p=79 |- | align=right | 4 | align=right | 4 | 보호p=79 |- | align=right | 5 | align=right | 5 | 주소 지정pp=79–80 |- | align=right | 6 | align=right | 6 | 사양p=80 |- | align=right | 7 | align=right | 7 | 데이터p=80 |- | align=right | 8 | align=right | 8 | 고정 소수점 오버플로p=80 |- | align=right | 9 | align=right | 9 | 고정 소수점 나누기p=80 |- | align=right | A | align=right | 10 | 십진수 오버플로p=80 |- | align=right | B | align=right | 11 | 십진수 나누기p=80 |- | align=right | C | align=right | 12 | 지수 오버플로p=80 |- | align=right | D | align=right | 13 | 지수 언더플로p=80 |- | align=right | E | align=right | 14 | 유의성p=80 |- | align=right | F | align=right | 15 | 부동 소수점 나누기p=80.1 |- | align=right | 10 | align=right | 16 | 세그먼트 변환page=17name=NotArchExc |- | align=right | 11 | align=right | 17 | 페이지 변환page=17name=NotArchExc |- | align=right | 12 | align=right | 18 | SSM 예외name=NotArchExc |} * **연산 예외**p=79는 프로그램이 컴퓨터가 구현하지 않는 연산 코드를 가진 명령어를 실행하려고 할 때 인식된다. 특히, 프로그램이 설치되지 않은 선택적 기능(예: 부동 소수점)을 위해 작성된 경우 연산 예외가 인식된다. * **특권 연산 예외**p=79는 프로그램이 PSW의 문제 상태 비트가 1일 때 특권 명령어를 실행하려고 할 때 인식된다. * **실행 예외**p=79는 EXECUTE 명령어(EX)의 피연산자가 다른 EXECUTE 명령어일 때 인식된다. * **보호 예외**p=79는 프로그램이 저장 보호 키가 PSW 키와 일치하지 않는PSW 키 0은 모든 저장 키와 일치한다. 위치에 저장하려고 하거나, 저장 보호 키가 PSW 키와 일치하지 않는 페치 보호 위치에서 가져오려고 할 때 인식된다. * **주소 지정 예외**pp=79–80는 프로그램이 현재 사용할 수 없는 저장 위치에 접근하려고 할 때 인식된다. 이는 일반적으로 시스템 용량을 초과하는 주소에서 발생하지만, 저장 블록을 오프라인으로 전환할 수 있는 시스템에서도 발생할 수 있다. ***사양 예외**p=80는 명령어가 허용되지 않는 길이 또는 레지스터 필드 값을 가질 때, 또는 연산 코드의 정렬 요구 사항을 충족하지 않는 피연산자 주소를 가질 때(예: 바이트 정렬 기능이 없는 시스템에서 홀수 피연산자 주소를 가진 LH 명령어) 인식된다. * **데이터 예외**p=80는 십진수 명령어가 유효하지 않은 피연산자(예: 유효하지 않은 데이터, 유효하지 않은 오버랩)를 지정할 때 인식된다. * **고정 소수점 오버플로 예외**p=80는 나누기를 제외한 고정 소수점 산술 또는 시프트 명령어에서 유효 비트가 손실될 때 인식된다. * **고정 소수점 나누기 예외**p=80는 고정 소수점 나누기 또는 이진 변환 명령어에서 유효 비트가 손실될 때 인식된다. 목적지는 변경되지 않는다. * **십진수 오버플로 예외**p=80는 나누기를 제외한 십진수 산술 명령어에서 유효 숫자가 손실될 때 인식된다. * **십진수 나누기 예외**p=80는 십진수 나누기 명령어에서 유효 비트가 손실될 때 인식된다. 목적지는 변경되지 않는다. * **지수 오버플로 예외**p=80는 부동 소수점 산술 연산에서 특성이 127을 초과하고 소수 부분이 0이 아닐 때 인식된다. * **지수 언더플로 예외**p=80는 부동 소수점 산술 연산에서 특성이 음수이고 소수 부분이 0이 아닐 때 인식된다. * **유의성 예외**p=80는 부동 소수점 덧셈 또는 뺄셈 연산에서 소수 부분이 0일 때 인식된다. * **부동 소수점 나누기 예외**p=80.1는 부동 소수점 나누기 연산에서 제수의 소수 부분이 0일 때 인식된다.
## 관리자 호출 인터럽트
관리자 호출 인터럽트pp=80.1–81는 관리자 호출 명령어의 결과로 발생한다. 시스템은 SVC 명령어의 비트 8-15를 인터럽트 코드로 저장한다.
## 외부 인터럽트
외부p=81타이머 만료는 내부 이벤트이지만 외부 인터럽트를 발생시키며, 이 때문에 이 인터럽트는 일반적으로 타이머/외부 인터럽트라고 불린다. 인터럽트는 특정 비동기 이벤트의 결과로 발생한다. 외부 이전 PSW의 비트 16-24는 0으로 설정되고, 비트 24-31 중 하나 이상이 1로 설정된다. {| class="wikitable collapsible" |+ 외부 인터럽트 코드 |- ! valign=top | PSW 비트 ! 외부 인터럽트 유형 |- | align=right | 24 | 타이머 |- | align=right | 25 | 인터럽트 키 |- | align=right valign=top | 26 || 외부 신호 2
다중 시스템 모드에서 360/65의 오작동 경고 |- | align=right valign=top | 27 | 외부 신호 3
다중 시스템 모드에서 360/65의 시스템 호출 |- | align=right | 28 | 외부 신호 4 |- | align=right | 29 | 외부 신호 5 |- | align=right | 30 | 외부 신호 6 |- | align=right | 31 | 외부 신호 7 |}
## 머신 체크 인터럽트
머신 체크 인터럽트pp=82–83는 채널 또는 CPU와 관련된 다른 종류의 인터럽트로 보고될 수 없는 특이한 상태를 보고하기 위해 발생한다. 머신 체크를 유발하는 가장 중요한 조건은 레지스터나 저장 장치에서 발견되는 패리티 오류와 같은 하드웨어 오류이지만, 일부 모델에서는 덜 심각한 상태를 보고하는 데 사용될 수 있다. 인터럽트 코드와 '80'x(128진수) 스캔아웃 영역에 저장된 데이터는 모델에 따라 다르다.
# 입출력
버스 앤 태그 이 문서는 CPU 관점에서 I/O를 설명한다. 채널 케이블 또는 커넥터는 별도의 문서인 버스 앤 태그에서 다루며, 요약은 다른 곳에 있고 자세한 내용은 IBM 문헌 및 FIPS PUB 60-2에서 찾을 수 있다.access-date = May 18, 2023 I/O는 개념적으로 별도의 프로세서인 채널에 의해 수행된다. 채널은 자체 명령어 집합을 가지며, CPU에서 실행되는 프로그램과는 독립적으로 메모리에 접근한다. 소형 모델(360/50까지)에서는 단일 마이크로코드 엔진이 CPU 프로그램과 채널 프로그램을 모두 실행한다. 대형 모델에서는 채널이 별도의 캐비닛에 있으며 자체 메모리 인터페이스를 갖는다. 채널은 여러 **서브채널**을 포함할 수 있으며, 각 서브채널은 개별 채널 프로그램의 상태를 포함한다. 채널 프로그램을 동시에 가질 수 없는 여러 장치와 관련된 서브채널을 **공유**라고 하며, 단일 장치를 나타내는 서브채널을 **비공유**라고 한다. S/360에는 세 가지 유형의 채널이 있다: * IBM_Byte_Mux**바이트 멀티플렉서 채널**은 여러 **CCW**를 동시에 실행할 수 있다. 일반적으로 카드 리더나 통신선과 같은 느린 장치를 연결하는 데 사용된다. 바이트 멀티플렉서 채널은 여러 개의 선택기 서브채널을 가질 수 있으며, 각 서브채널은 단일 서브채널만 가지며 저속 선택기 채널처럼 동작한다. * IBM_Sel**선택기 채널**은 단일 서브채널만 가지므로 한 번에 하나의 채널 명령만 실행할 수 있다. 일반적으로 마그네틱 테이프 드라이브와 같이 블록 멀티플렉서 채널을 사용하여 연결을 일시 중단할 수 없는 빠른 장치를 연결하는 데 사용된다. * IBM_Blk_Mux**블록 멀티플렉서 채널**은 여러 채널 프로그램을 동시에 실행할 수 있지만, 한 번에 하나만 활성화될 수 있다. 제어 장치는 채널 명령 완료 시 일시 중단을 요청할 수 있으며 나중에 재개를 요청할 수 있다. 이는 데이터 전송 완료 후 기계적 지연이 있는 장치(예: 이동 헤드 DASD의 탐색)를 위한 것이다. 블록 멀티플렉서 채널은 시스템/360 아키텍처에 늦게 추가되었다. 초기 시스템에는 바이트 멀티플렉서 채널과 선택기 채널만 있었다. 블록 멀티플렉서 채널은 모델 85 및 195에서만 선택적 기능이다. 블록 멀티플렉서 채널은 후기 시스템/370 컴퓨터에서도 사용할 수 있다. 개념적으로 주변 장비는 '제어 장치'를 통해 S/360에 연결되며, 제어 장치는 다시 채널을 통해 연결된다. 그러나 아키텍처는 제어 장치가 물리적으로 분리되어야 한다고 요구하지 않으며, 실제로는 제어 장치가 제어하는 장치와 통합되는 경우도 있다. 마찬가지로 아키텍처는 채널이 프로세서와 물리적으로 분리되어야 한다고 요구하지 않으며, 소형 S/360 모델(360/50까지)은 프로세서에서 사이클을 훔치는 통합 채널을 가지고 있다. 주변 장치는 16비트채널 번호의 제한으로 인해 S/360 및 초기 S/370 소프트웨어는 장치 주소를 저장하는 데 12비트만 사용했다. 주소로 주소 지정된다.page=89 'cua' 또는 'cuu'로 불리며, 이 문서에서는 'cuu'라는 용어를 사용한다. 상위 8비트는 0에서 6까지의 채널을 식별하고,name=ChanNum 하위 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에 표시된다.pp=116–118 * PCI status**프로그램 제어 인터럽트**pp=116–117는 채널이 PCI 비트가 설정된 CCW를 가져왔음을 나타낸다. 채널은 계속 처리하며, 이 인터럽트는 단순히 채널의 진행 상황을 CPU에 알린다. 프로그램 제어 인터럽트의 사용 예는 내용 감시의 "프로그램 가져오기" 기능에서 찾을 수 있다. 이를 통해 제어 프로그램은 제어/재배치 레코드가 읽혔음을 통보받는다. 이 레코드가 메인 저장소에 완전히 읽혔는지 확인하기 위해 제어 프로그램에 남아있는 몇 안 되는 "비활성화된 비트 스핀" 중 하나가 시작된다. 스핀이 만족되면 제어/재배치 레코드가 메인 저장소에 완전히 들어왔고 바로 이전 텍스트 레코드가 재배치될 수 있음을 나타낸다. 재배치 후 NOP CCW는 TIC로 변경되고 채널 프로그램은 계속된다. 이런 방식으로 전체 로드 모듈이 하나의 EXCP를 사용하여, 그리고 가능하면 디스크 드라이브의 한 번의 회전만으로 읽고 재배치될 수 있다. PCI는 또한 통신 처리 액세스 방식 버퍼 관리에도 적용된다. * IL**길이 불일치**p=117는 Count가 소진되기 전에 명령에 대한 데이터 전송이 완료되었음을 나타낸다. 이 표시는 CCW의 길이 표시 억제 비트가 설정된 경우 억제된다. * **프로그램 검사**p=117는 다음 오류 중 하나를 나타낸다. ** 0이 필요한 곳에 0이 아닌 비트 ** 유효하지 않은 데이터 또는 CCW 주소 ** CAW 또는 TIC가 TIC를 참조함 * Protection check**보호 검사**pp=117–118는 CAW의 보호 키가 0이 아니고 저장 보호 키와 일치하지 않음을 나타낸다. * CDC**채널 데이터 검사**p=118는 데이터 전송 중 패리티 오류를 나타낸다. * CCC**채널 제어 검사**p=118는 채널 데이터 검사 또는 인터페이스 제어 검사 외의 채널 오작동을 나타낸다. * ICC**인터페이스 제어 검사**p=118는 채널-제어 장치 인터페이스의 유효하지 않은 신호를 나타낸다. * Chaining check**체인 검사**p=118는 데이터 체인 중 데이터 손실을 나타낸다.
## 단위 상태
이러한 조건은 제어 장치 또는 장치에 의해 채널에 제시된다.pp=113–116 어떤 경우에는 채널에 의해 처리되고 다른 경우에는 CSW에 표시된다. 제어 장치에 의해 감지된 조건과 장치에 의해 감지된 조건 사이에는 구분이 없다. * Attention**주의**p=113는 진행 중인 채널 프로그램과 관련 없는 특이한 상태를 나타낸다. 이는 종종 입력을 요청하는 것과 같은 어떤 종류의 조작자 동작을 나타내며, 이 경우 CPU는 추가 정보를 추론할 수 있는 읽기 유형 명령, 가장 일반적으로 감지 명령(04h)을 발행하여 응답한다. 주의는 특수 조건이며, 특정 운영 체제 지원이 필요하고, 운영 체제는 반드시 항목 수가 제한된 특수 주의 테이블OS는 장치 제어 블록 (UCB)의 주의 인덱스를 주의 테이블의 인덱스로 사용한다.을 가지고 있다. * SM**상태 수정자**pp=113–114 (SM)는 다음 세 가지 특이한 조건 중 하나를 나타낸다. ** 지원하지 않는 장치에 테스트 I/O 명령을 발행했다. ** 바쁨 상태는 장치 대신 제어 장치를 참조한다. ** 장치가 CCW를 건너뛰어야 하는 상태를 감지했다. 상태 수정자가 가능한 명령이 있는 CCW는 일반적으로 명령 체인을 지정하며, 이 경우 SM은 채널에 의해 처리되며 인터럽트를 발생시키지 않는다. ::SM이 발생하는 일반적인 채널 프로그램은 다음과 같다. ... Search Id Equal TIC *-8 Read Data ::여기서 TIC는 장치가 SM을 발생시켜 성공적인 검색을 나타낼 때까지 채널이 검색을 다시 가져오도록 한다. * Control unit end**제어 장치 종료**p=114는 이전 제어 장치 바쁨 상태가 지워졌음을 나타낸다. * Busy**바쁨**pp=114–115는 장치(SM=0) 또는 제어 장치(SM=1)가 바쁨을 나타낸다. * CE**채널 종료**p=115는 장치가 채널 명령에 대한 데이터 전송을 완료했음을 나타낸다. 길이 표시 억제 비트 값에 따라 CCW의 카운트 필드가 소진된 경우 길이 불일치 표시가 있을 수도 있다. * DE**장치 종료**p=115는 장치가 작업을 완료하고 다른 작업을 수락할 준비가 되었음을 나타낸다. DE는 CE와 동시에 신호될 수도 있고 지연될 수도 있다. * UC**단위 검사**pp=115–116는 장치 또는 제어 장치가 특이한 상태를 감지했으며, Sense 명령을 발행하여 자세한 정보를 얻을 수 있음을 나타낸다. * UE**단위 예외**p=116는 장치가 특이한 상태(예: 파일 끝)를 감지했음을 나타낸다.
## 채널 주소 워드
풀워드 '채널 주소 워드'page=99 (CAW)는 4비트 저장 보호 키와 시작할 채널 프로그램의 24비트 주소를 포함한다.
## 채널 명령 워드
'채널 명령 워드'는 다음을 포함하는 더블워드이다. * 8비트 채널 명령 코드p=100 * 24비트 주소pp=100–101 * 5비트 플래그 필드pp=99–100,101–105 * 부호 없는 하프워드 카운트 필드pp=100–101
### CCW 명령 코드
하위 2 또는 4비트는 채널이 수행하는 6가지 유형의 작업을 결정한다.pages=100,105 인코딩은 다음과 같다. {| class="wikitable collapsible" |+ CCW 명령 코드 |- ! | 비트 ! 명령 |- | | **** 0000 | CCW에서 유효하지 않음, 프로세서의 테스트 I/O(TIO) 명령으로 시뮬레이션됨 |- | | MMMM 0100 | 감지pp=106–107 |- | | **** 1000 | 채널 내 전송(TIC)pp=107–108 |- | | MMMM 1100 | 역방향 읽기pp=105–106 |- | | MMMM MM01 | 쓰기p=105 |- | | MMMM MM10 | 읽기p=105 |- | | MMMM MM11 | 제어pp=106–107 |} 위 표에서 상위 6 또는 4비트, 즉 수정자 비트 **M**의 의미는 연결된 I/O 장치 유형에 따라 다르다. 예를 들어, DASD CKD CCW를 참조하라. 8개 비트 모두 관련 제어 장치(또는 그 기능적 등가물)로 전송되어 해석된다. 제어는 장치나 제어 장치의 상태를 변경하는 데 사용되며, 종종 되감기, 탐색과 같은 기계적 움직임과 관련된다. 감지는 장치 상태를 설명하는 데이터를 읽는 데 사용된다. 가장 중요한 경우는 명령이 단위 검사로 종료될 때 특정 원인은 감지를 수행하고 반환된 데이터를 검사해야만 확인할 수 있다는 것이다. 수정자 비트가 모두 0인 감지 명령은 항상 유효하다. 아키텍처의 주목할 만한 편차는 DASD가 제어를 사용하는 대신 예약 및 해제에 Sense 명령 코드를 사용한다는 점이다.
### CCW 플래그
CCW의 플래그는 실행 및 종료 방식에 영향을 미친다. {| class="wikitable collapsible" |+ CCW 플래그 |- ! align=right valign=top | 비트 ! ! 플래그 ! 효과 |- | align=right valign=top | 32 | valign=top | CCW-CDCD | valign=top | CCW-ChainData데이터 체인 | 다음 CCW로 정의된 저장 영역을 사용하여 작업을 계속한다.pp=101–103 |- |- | align=right valign=top | 33 | valign=top | CCW-CCCC | valign=top | CCW-ChainCommand명령 체인 | 다음 CCW의 명령으로 계속한다.pp=101,103 |- | align=right valign=top | 34 | valign=top | CCW-SLISLISuppress Incorrect Length Indication (SILI)로도 알려져 있다. | valign=top | CCW-SuppressLengthindication길이 표시 억제 | 카운트 불일치 후 채널 프로그램 계속.pp=99–100 |- | align=right valign=top | 35 | valign=top | CCW-SKIPSKIP | valign=top | 건너뛰기 | 저장소에서 읽거나 쓰지 않는다.| 저장소에서 읽거나 쓰지 않는다.pp=103–104 |- | align=right valign=top | 36 | valign=top | CCW-PCIPCI | valign=top | CCW-ProgramControlledInterupt프로그램 제어 인터럽트 | CCW 가져올 때 인터럽트 요청.pp=104–105 |}
## 채널 상태 워드
'채널 상태 워드' (CSW)pages=113–121는 I/O 인터럽트와 관련된 데이터를 제공한다. {| class="wikitable collapsible" |+ CSW 형식 |- ! align=right valign=top | 비트 ! 필드 |- | align=right | 0-3 | 키p=119 |- | align=right | 4-7 | 0000 |- | align=right | 8-31 | 명령 주소p=119 |- | align=right | 32-47 | 상태pp=113–118 |- | align=right valign=top | 32-39 | valign=top | : 단위 상태 조건pp=113–116 : 장치 또는 제어 장치에 의해 감지됨 |- | align=right | CSW_Attention32 | : 주의p=113 |- | align=right | CSW_Status_modifier33 | : 상태 수정자pp=113–114 |- | align=right | CSW_Control_unit_end34 | : 제어 장치 종료p=114 |- | align=right | CSW_Busy35 | : 바쁨pp=114–115 |- | align=right | CSW_Channel_end36 | : 채널 종료p=115 |- | align=right | CSW_Device_end37 | : 장치 종료p=115 |- | align=right | CSW_Unit_check38 | : 단위 검사pp=115–116 |- | align=right | CSW_Unit_exception39 | : 단위 예외p=116 |- | align=right valign=top | 40-47 | valign=top | : 채널 상태 조건pp=116–118 : 채널에 의해 감지됨. |- | align=right | CSW_Program-controlled_interruption_status40 | : 프로그램 제어 인터럽트pp=116–117 |- | align=right | CSW_Incorrect_length41 | : 길이 불일치p=117 |- | align=right | CSW_Program_check42 | : 프로그램 검사p=117 |- | align=right | CSW_Protection_check43 | : 보호 검사pp=117–118 |- | align=right | CSW_Channel_data_check44 | : 채널 데이터 검사p=118 |- | align=right | CSW_Channel_control_check45 | : 채널 제어 검사p=118 |- | align=right | CSW_Interface_control_check46 | : 인터페이스 제어 검사p=118 |- | align=right | CSW_Chaining_check47 | : 체인 검사p=118 |- | align=right | 48-63 | 카운트p=120 |} * **보호 키** 필드에는 I/O 작업이 시작될 때 I/O 완료 또는 PCI 인터럽트에 대한 CAW의 보호 키가 포함된다.p=119 * **명령 주소** 필드는 I/O 완료 또는 PCI 인터럽트에 대해 마지막으로 가져온 CCW의 주소+8을 포함한다. 그러나 9가지 예외가 있다.p=119 * **상태** 필드는 채널에 의해 감지된 조건pp=116–118을 나타내는 1바이트 채널 상태 비트와 I/O 장치에 의해 감지된 조건pp=113–116을 나타내는 1바이트 단위 상태 비트를 포함한다. 제어 장치에 의해 감지된 조건과 장치에 의해 감지된 조건 사이에는 구분이 없다. * **잔여 카운트**는 CCW에 의해 설명된 영역에서 채널로 또는 채널에서 전송되지 않은 바이트 수를 나타내는 하프워드이다.p=120 CCW의 카운트와 잔여 카운트의 차이는 전송된 바이트 수를 나타낸다.
## I/O 명령어
S/360에는 4개의pp=93-98 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)
SIOpp=94-95는 CAW에 있는 저장 보호 키를 사용하여 CAW가 가리키는 채널 프로그램을 시작하려고 시도한다.
### Test I/O (TIO)
TIOpp=95-96는 채널과 장치의 상태를 테스트한다. 또한 CSW를 저장할 수도 있으며, 이 경우 조건 코드 1로 완료된다.
### Halt I/O (HIO)
HIOpp=96-98는 활성 채널 프로그램을 종료하려고 시도한다. 또한 CSW를 저장할 수도 있으며, 이 경우 조건 코드 1로 완료된다.
### Test Channel (TCH)
TCHp=98는 채널의 상태를 테스트한다. 활성 채널 프로그램의 상태에 영향을 미치지 않으며 CSW를 저장하지 않는다.
# 운영자 제어
운영자 제어 시스템/360 아키텍처는 여러 공통 기능의 존재를 명시했지만, 구현 수단을 명시하지 않았다. 이를 통해 IBM은 다른 프로세서에서 기능 및 값 선택에 다이얼, 키보드, 푸시버튼, 롤러, CRT의 이미지 또는 텍스트와 같은 다양한 물리적 수단을 사용할 수 있었다. '키' 또는 '스위치'에 대한 모든 언급은 예를 들어 라이트펜 선택, 동등한 키보드 시퀀스에 적용되는 것으로 읽어야 한다. * **시스템 재설정**은 모든 I/O 채널에 재설정 신호를 보내고 프로세서 상태를 지운다. 보류 중인 모든 인터럽트는 취소된다. 시스템 재설정은 범용 레지스터, 부동 소수점 레지스터 또는 저장소의 패리티 오류를 반드시 수정하지 않는다. 시스템 재설정은 공유 I/O 장치의 상태를 재설정하지 않는다. * **Initial_Program_Load초기 프로그램 로드** (IPL)p=123는 저장소에 로더가 없을 때, 보통 기계의 전원이 켜졌거나 대체 운영 체제를 로드하기 위해 프로그램을 로드하는 프로세스이다.page=123 이 프로세스는 때때로 부팅이라고도 알려져 있다. :: IPL 기능의 일부로 운영자는 12비트name=ChanNum 장치 주소를 지정하는 수단을 갖는다. 일반적으로 운영자 제어 도면에서와 같이 세 개의 다이얼로 지정된다. 운영자또는 동등한 자동화 시설.가 '로드' 기능을 선택하면 시스템은 '시스템 재설정'을 수행하고, 선택된 장치에 Read IPL모든 수정자 비트가 0인 읽기 채널 명령을 보내 위치 0-23으로 24바이트를 읽어들이고, 채널이 위치 8에서 'CCW'를 가져오기 시작하도록 한다. 그 효과는 채널이 위치 0에서 24의 길이, 0의 주소, 명령 체인 + 길이 표시 억제를 포함하는 플래그를 가진 CCW를 가져온 것과 같다. 작업 완료 시 시스템은 위치 2의 하프워드에 I/O 주소를 저장하고 위치 0에서 PSW를 로드한다. :: 초기 프로그램 로딩은 일반적으로 테이프, 카드 판독기 또는 디스크 드라이브에서 수행된다. 일반적으로 운영 체제는 디스크 드라이브에서 로드되었으며, 테이프나 카드에서 IPL은 진단용으로 또는 새 컴퓨터에 운영 체제를 설치할 때만 사용되었다. * **비상 당김 스위치**p=124 (비상 전원 끄기, EPO)는 모든 I/O 채널에 EPO 신호를 보낸 다음 프로세서 복합체의 전원을 끈다. EPO는 정상적인 전원 차단 시퀀스를 우회하므로 손상이 발생할 수 있으며, EPO 제어 장치에는 고객 엔지니어가 장비 전원을 다시 켜기 전에 장비를 검사하도록 보장하는 기계적 래치가 있다. * **전원 켜기**p=124는 프로세서 복합체의 모든 구성 요소에 전원을 공급하고 시스템 재설정을 수행한다. * **전원 끄기**p=124는 순서적인 전원 끄기 시퀀스를 시작한다. 저장소의 내용은 보존되지만, 관련 저장 키는 손실될 수 있다. * **인터럽트** 키p=124는 외부 이전 PSW에서 비트 25가 설정된 외부 인터럽트를 발생시킨다. * **대기 표시등**p=124은 PSW에 비트 14 (대기)가 설정되었음을 나타낸다. 프로세서는 일시적으로 중지되지만 인터럽트 조건이 발생하면 작업을 다시 시작한다. * **수동 표시등**p=124은 CPU가 정지 상태임을 나타낸다. * **시스템 표시등**p=124은 CPU 활동 또는 I/O 채널 활동으로 인해 미터가 작동 중임을 나타낸다. * **테스트 표시등**p=124은 특정 운영자 제어가 활성화되어 있거나, INSTRUCTION STEP과 같은 특정 시설이 Diagnose 명령으로 사용되었거나, 비정상적인 열 조건이 존재할 때를 나타낸다. 자세한 내용은 모델에 따라 다르다. * **로드 표시등**p=124은 IPL 및 외부 시작에 의해 켜진다. 로드 프로세스 완료 시 위치 0에서 PSW를 로드하여 꺼진다. * **로드 단위**pp=124–125 제어는 IPL을 수행할 장치의 가장 오른쪽 11개p=121.4는 더 많은 채널을 허용한다. 비트를 제공한다. * **로드 키**p=125는 IPL 시퀀스를 시작한다. * **프리픽스 선택 키 스위치**p=125는 IPL이 주 프리픽스를 사용할지 대체 프리픽스를 사용할지 선택한다. * **시스템 재설정 키**p=125는 시스템 재설정을 시작한다. * **중지 키**p=125는 CPU를 정지 상태로 만든다. 채널 프로그램은 계속 실행되며 인터럽트 조건은 보류 상태로 유지된다. * **속도 스위치**p=125는 프로세서가 명령어를 가져오는 모드를 결정한다. 아키텍처에 의해 정의된 두 가지 모드는 다음과 같다. ** PROCESS ** INSTRUCTION STEP * **시작 키**p=125는 속도 스위치 설정에 따라 명령어 가져오기를 시작한다. * **저장소 선택 스위치**p=126는 저장 키 및 표시 키에 의해 접근되는 자원 유형을 결정한다. 아키텍처에 의해 정의된 세 가지 선택 항목은 다음과 같다. ** 주 저장소 ** 범용 레지스터 ** 부동 소수점 레지스터 * **주소 스위치**p=126는 저장 키, 표시 키 및 일부 모델에서는 IC 설정 키에 대한 주소 또는 레지스터 번호를 지정한다. * **데이터 스위치**p=126는 저장 키 및 일부 모델에서는 IC 설정 키에 대한 데이터를 지정한다. * **저장 키**p=126는 저장소 선택 스위치 및 주소 스위치에 의해 지정된 대로 데이터 스위치의 값을 저장한다. * **표시 키**p=126는 저장소 선택 스위치 및 주소 스위치에 의해 지정된 값을 표시한다. * **IC 설정=**p=126는 모델에 따라 데이터 스위치 또는 주소 스위치에서 PSW의 명령어 주소 부분을 설정한다. * **주소 비교 스위치**p=126는 비교 모드와 비교 대상을 선택한다. 명령어 주소 비교 시 중지는 모든 모델에 존재하지만, 데이터 주소 비교 시 중지는 일부 모델에만 존재한다. * **대체 접두어 표시등**p=126은 접두어 트리거가 대체 상태에 있을 때 켜진다.
# 선택적 기능

## 바이트 정렬 피연산자
일부 모델, 예를 들어 S/360-85,에서는 일부 문제 상태 명령어에 대한 정렬 요구 사항이 완화되었다. 이 기능을 끄는 메커니즘은 없으며, 해당 명령어에서 프로그램 검사 유형 6(정렬)을 받는 데 의존하는 프로그램은 수정해야 한다.
## 십진수 산술
십진수 산술 기능은 팩 십진수 데이터에서 작동하는 명령어를 제공한다. 팩 십진수 숫자는 1-31개의 십진수 숫자 뒤에 4비트 부호가 온다. PACK 및 UNPACK을 제외한 모든 십진수 산술 명령어는 숫자가 0-9 범위를 벗어나거나 부호가 A-F 범위를 벗어날 경우 데이터 예외를 발생시킨다.
## 직접 제어
'직접 제어'p=17.1 기능은 6개의 외부 신호선과 저장소로/부터의 8비트 데이터 경로를 제공한다.
## 부동 소수점 산술
부동 소수점 산술 기능은 4개의 64비트 부동 소수점 레지스터와 32비트 및 64비트 16진 부동 소수점 숫자에서 작동하는 명령어를 제공한다. 360/85 및 360/195는 128비트 확장 정밀도 부동 소수점 숫자도 지원한다.
## 인터벌 타이머
인터벌 타이머 기능page=17.1이 설치된 경우, 프로세서는 위치 80 ('50'X)의 워드를 일정한 간격으로 감소시킨다. 아키텍처는 간격을 지정하지 않지만, 1초당 300회 비트 23에서 1을 뺀 것처럼 보이도록 값을 빼야 한다고 요구한다. 소형 모델은 AC 전원 공급 장치와 동일한 주파수(50Hz 또는 60Hz)로 감소시켰지만, 대형 모델은 고해상도 타이머 기능을 가지고 있었다. 타이머가 0이 되면 프로세서는 외부 인터럽트를 발생시킨다.
## 다중 시스템 작동
'다중 시스템 작동'pp=17.1–18은 직접 제어, 직접 주소 재배치(프리픽싱)와 같은 다중 프로세서 시스템을 지원하는 기능 세트이다.
## 저장소 보호
저장소 보호 기능pages=17-17.1이 설치된 경우, 모든 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 아키텍처 기능의 프로토타입 역할을 했다.
# 내용주
Notelist
# 추가 자료
* url = https://archive.org/details/ibmmainframesarc00pras 엠 대시 3장 (pp. 41엔 대시110)은 System/360 아키텍처를 설명한다. * access-date = 2023년 2월 7일