Z/아키텍처

**z/아키텍처**(z/Architecture)는 초기에는 짧게 **[[ESA/390|ESA]] 모달 확장** (**ESAME**)이라 불렸으며, IBM의 64비트 복잡 명령어 집합 컴퓨터 (CISC) 명령어 집합으로, 메인프레임에서 구현된다. IBM은 2000년 후반에 최초의 z/아키텍처 기반 시스템인 z900을 출시했다. 이후의 z/아키텍처 시스템으로는 IBM z800, z990, z890, 시스템 z9, 시스템 z10, zEnterprise 196, zEnterprise 114, zEC12, zBC12, z13, z14, z15, z16, z17 등이 있다.

z/아키텍처는 이전 32비트 데이터/31비트 주소 지정 아키텍처인 ESA/390 및 32비트 데이터/24비트 주소 지정 IBM 시스템/360까지의 선행 아키텍처와 하위 호환성을 유지한다. IBM z13은 ESA/390 아키텍처 모드에서 운영 체제를 실행하는 것을 지원하는 마지막 z 시스템 서버이다. 그러나 원래 ESA/390 아키텍처에서 실행되도록 작성된 모든 24비트 및 31비트 문제 상태 애플리케이션 프로그램은 이 변경의 영향을 받지 않는다.

## 특징
z/아키텍처는 ESA/390의 거의 모든 기능을 포함하며, 몇 가지 새로운 기능을 추가한다. z/아키텍처의 기능 중에는 다음이 있다.
:S/370-XA에서 도입된 아키텍처를 가진 채널 서브시스템
:ESA/390에서 도입된 브랜치 상대 명령어
:트라이모달 (24/31/64비트) 주소
:ESA/370에서 도입된 16개의 32비트 접근 레지스터 (AR)
:16개의 64비트 범용 레지스터 (GR), 이전 아키텍처에서는 32비트
:System/370에서 32비트로 도입된 16개의 64비트 제어 레지스터 (CR)
:16개의 64비트 부동소수점 레지스터 (FPR)
:32개의 128비트 벡터 레지스터 (VR); VR0–VR15의 비트 0–63에는 FPR0–FPR15가 포함된다
:1개의 32비트 부동소수점 제어 (FPC) 레지스터
:1개의 128비트 프로그램 상태 워드 (PSW), 64비트 명령어 주소 포함
:8KiB 접두사 스토리지 영역 (PSA)
:암호화 기능
:ESA/390에서 추가된 IEEE 이진 부동소수점 명령어
:IEEE 10진 부동소수점 명령어
각 기능이 언제 도입되었는지에 대한 정보는 작동 원칙을 참조한다.

### 벡터 기능
z13은 z/아키텍처용 벡터 기능을 도입했다. 이는 각각 128비트 너비의 32개 벡터 레지스터를 추가한다. 기존의 16개 부동소수점 레지스터는 새로운 벡터 레지스터 위에 오버레이된다. 새로운 아키텍처는 정수, 부동소수점, 문자열 데이터 유형을 포함하여 벡터 레지스터의 데이터를 처리하기 위한 150개 이상의 새로운 명령어를 추가한다. z13 구현에는 벡터 데이터를 처리하기 위한 두 개의 독립적인 SIMD 장치가 포함된다.

### 신경망 처리 보조 기능
z16은 신경망 처리 보조 기능을 도입하여 모델 종속 데이터 유형에 대한 작업을 수행하는 여러 명령어를 도입한다. z16의 경우 이는 16비트 NNP-데이터 유형-1 형식이다.

새로운 명령어는 AI 및 신경망 애플리케이션에 유용한 텐서 연산을 포함한다.

## 레지스터

각 프로세서에는 다음 레지스터가 있다.

* 접근 레지스터
* 브레이킹 이벤트 주소 레지스터 (BEAR)
* 제어 레지스터
* 부동소수점 제어 (FPC) 레지스터
* 부동소수점 레지스터
* 범용 레지스터
* 접두사 레지스터
* 프로그램 상태 워드 (PSW)
* 벡터 레지스터

### 접근 레지스터
각 CPU에는 16개의 32비트 접근 레지스터가 있다. AR 모드에서 실행되는 프로그램이 레지스터 1-15를 기본 레지스터 또는 주소를 포함하는 레지스터 피연산자로 지정하면, CPU는 주소 변환 중에 관련 접근 레지스터를 사용한다.

### 브레이킹 이벤트 주소 레지스터 (BEAR)
64비트 BEAR는 명령어의 순차적 실행을 중단시킨 마지막 명령어의 주소를 포함한다. 인터럽트는 실제 주소 272 ()의 이중 워드에 BEAR를 저장한다. 분기 실행 후 BEAR는 분기의 주소가 아닌 실행의 주소를 포함한다.

### 제어 레지스터
16개의 64비트 제어 레지스터는 PSW에 포함된 정보를 제외하고 CPU의 제어 및 상태를 제공한다. 이들은 이전 S/390 프로세서의 ESA/390 제어 레지스터의 진화적인 개선 사항이다. 특정 기능에 따라 어떤 필드가 의존적인지에 대한 자세한 내용은 작동 원칙을 참조한다.
z/아키텍처는 제어 레지스터를 32비트에서 64비트로 확장하므로, 비트 번호 지정이 ESA/390과 다르다.

### 부동소수점 제어 (FPC) 레지스터
FPC 레지스터에는 인터럽트 마스크 (IM), 상태 플래그 (SF), 데이터 예외 코드 (DXC), 십진 반올림 모드 (DRM), 이진 반올림 모드 (BRM)가 포함된다. AFP 레지스터 (추가 부동소수점 레지스터) 제어 비트인 제어 레지스터 0의 비트 13이 1인 경우에만 인터럽트가 FPC 레지스터에 DXC를 저장한다. 또한 DXC의 개별 비트가 일반적으로 의미를 가지지만, 프로그램은 일반적으로 개별 비트를 조회하는 대신 8비트 정수로 처리해야 한다.

### 부동소수점 레지스터
각 CPU에는 16개의 64비트 부동소수점 레지스터가 있었으며, FP0–15는 VR0–15의 비트 0–63을 차지한다.

### 범용 레지스터
각 CPU에는 16개의 64비트 범용 레지스터가 있으며, 이는 누산기, 기본 레지스터 및 인덱스 레지스터로 사용된다. "그랑데"로 지정된 명령어는 모든 64비트에서 작동하며, 확장 즉시 기능을 통해 추가된 일부 명령어는 레지스터 내의 모든 하프워드 또는 워드에서 작동한다. 다른 대부분의 명령어는 비트 0–31을 변경하거나 사용하지 않는다.

### 접두사 레지스터
접두사 레지스터는 실제 주소를 절대 주소로 변환하는 데 사용된다. z/아키텍처 모드에서 PSA는 2페이지 (8KiB)이다. 비트 0–32와 51–63은 항상 0이다. 실제 주소의 비트 0–50이 0이면 접두사 레지스터의 비트 0–50으로 대체된다. 실제 주소의 비트 0–50이 접두사 레지스터의 비트 0–50과 같으면 0으로 대체된다.

### 프로그램 상태 워드 (PSW)
PSW는 명령어 주소와 현재 CPU에서 실행 중인 프로그램의 상태를 반영하는 다른 필드를 포함한다. 프로그램의 상태는 제어 레지스터의 내용에도 영향을 받는다.

### 벡터 레지스터
각 CPU에는 32개의 128비트 벡터 레지스터가 있다. VR0–15의 비트 0–63은 또한 FPR0–15이다. 벡터 레지스터는 16개의 8비트 필드, 8개의 16비트 필드, 4개의 32비트 필드, 2개의 64비트 필드 또는 1개의 128비트 필드를 포함할 수 있다.

## 메모리
IBM은 z/아키텍처의 메모리를 **메인 스토리지**와 **확장 스토리지**로 분류한다.

메인 스토리지는 8비트 바이트 (옥텟) 단위로 주소 지정되며, 더 큰 정렬된 그룹화가 있다.
;하프워드
:2바이트
:16비트
;워드
:4바이트
:32비트
;더블워드
:8바이트
:64비트
;쿼드워드
:16바이트
:128비트
;페이지
:4096바이트

z/아키텍처는 0부터 264-1까지의 실제 및 가상 주소를 허용하지만, 엔지니어링 제약으로 인해 현재 및 계획된 모델은 훨씬 적은 용량으로 제한된다.

확장 스토리지는 4KiB 블록 단위로 주소 지정되며, 블록 번호는 0부터 232까지이다.

## 주소 지정
### 메인 스토리지 주소 유형
z/아키텍처에는 세 가지 유형의 메인 스토리지 주소가 있다.
;가상 주소
:애플리케이션 프로그램이 보는 주소. 주소 공간에 대한 오프셋이며 페이지 및 세그먼트 테이블을 통한 주소 변환이 적용된다.
;실제 주소
:주소 변환 후의 주소, 또는 변환이 꺼진 상태에서 OS 구성 요소가 보는 주소. 접두사가 적용된다.
;절대 주소
:접두사 레지스터를 통해 처음 두 페이지에 대한 참조에 접두사 지정 후의 주소.

### 주소 인코딩
z/아키텍처는 ESA와 동일한 잘린 주소 지정 방식을 사용하며, 몇 가지 추가 명령어 형식이 있다. ESA와 마찬가지로 AR 모드에서는 0이 아닌 각 기본 레지스터가 주소 공간을 지정하는 기본 레지스터와 연결된다. 명령어에 따라 주소는 여러 다른 형식으로 제공될 수 있다.
;R
:주소가 범용 레지스터에 포함됨
;상대
:현재 명령어로부터의 부호 있는 16비트 하프워드 오프셋
;상대 롱
:현재 명령어로부터의 부호 있는 32비트 하프워드 오프셋
;RS
:기본 레지스터와 12비트 변위
;RX
:기본 레지스터, 인덱스 레지스터 및 12비트 변위
;Y
:기본 레지스터, 인덱스 레지스터 및 20비트 변위; 비공식적으로 "Yonder"로 알려짐

### 주소 지정 모드
S/370-XA 및 ESA에서 지원하는 두 가지 주소 지정 모드 외에도, z/아키텍처는 64비트 가상 주소를 가진 확장 주소 지정 모드를 제공한다. 주소 지정 모드는 PSW의 EA (비트 31) 및 BA (비트 32) 비트에 의해 제어된다. 유효한 조합은 다음과 같다.
* 00 24비트 주소 지정
* 01 31비트 주소 지정
* 11 64비트 주소 지정

### 변환 모드
z/아키텍처는 PSW의 비트 5, DAT 모드 비트, 비트 16–17, 주소 공간 제어 (AS) 비트에 의해 제어되는 4가지 가상 변환 모드를 지원한다.

;기본 공간 모드
:모든 스토리지 참조는 기본 주소 공간의 변환 테이블을 사용한다.
;액세스 레지스터 모드
:모든 스토리지 참조는 기본 레지스터와 관련된 액세스 레지스터에 의해 지정된 변환 테이블을 사용한다.
;보조 공간 모드
:모든 스토리지 참조는 보조 주소 공간의 변환 테이블을 사용한다.
;홈 공간 모드
:모든 스토리지 참조는 홈 주소 공간의 변환 테이블을 사용한다.

## 운영체제 지원
IBM의 운영체제인 z/OS, z/VSE, z/TPF, z/VM은 각각 MVS, VSE, 트랜잭션 처리 기능 (TPF), VM의 버전으로 z/아키텍처를 지원한다. z/OS, z/VSE, z/VM의 이전 버전은 32비트 시스템을 계속 지원했다. z/OS 버전 1.6 이상, z/VSE 버전 4 이상, z/VM 버전 5 이상은 z/아키텍처를 필요로 한다.

리눅스도 리눅스 온 IBM Z와 함께 z/아키텍처를 지원한다.

z/아키텍처는 서로 다른 주소 크기를 사용하는 경우에도 여러 개의 동시 운영 체제와 애플리케이션을 실행할 수 있도록 지원한다. 이를 통해 소프트웨어 개발자는 애플리케이션 및 데이터 구조에 가장 유리한 주소 크기를 선택할 수 있다.

2009년 7월 7일, IBM은 새로운 운영 체제 버전 발표와 함께 **아키텍처 레벨 세트 4** (**ALS 4**)가 존재하며 System z10 및 이후 머신에 구현된다고 암시적으로 밝혔다. ALS 4는 LOADxx에서도 **ARCHLVL 3**으로 지정되어 있으며, 이전 z900, z800, z990, z890, System z9는 ARCHLVL 2로 지정되었다. System z10의 이전 발표에서는 단순히 z/아키텍처에 일부 추가 기능, 즉 50개 이상의 새로운 기계 명령어, 1MB 페이지 프레임, 하드웨어 십진 부동소수점 장치(HDFU)를 구현한다고 명시했다.

z/OS를 포함한 z/아키텍처용 대부분의 운영체제는 효율성과 호환성 때문에 각 가상 주소 공간의 첫 2GB(31비트 주소, 즉 231개의 주소 지정 가능한 바이트)로 코드 실행을 제한하며, 이는 아키텍처적 제한 때문이 아니다. Linux on IBM Z는 코드가 64비트 주소 범위 내에서 실행될 수 있도록 한다.

### z/OS
각 z/OS 주소 공간은 64비트 주소 공간이라고 불리며, 크기는 16 엑사바이트이다.

#### 코드 (또는 혼합) 공간
자바 프로그래밍 언어의 z/OS 구현은 예외이다. z/OS 가상 메모리 구현은 여러 2GB 주소 공간을 지원하여 2GB 이상의 동시 상주 프로그램 코드를 허용한다.

#### 데이터 전용 공간
데이터 전용 공간은 읽고 쓸 수는 있지만 실행 가능한 코드로 사용할 수 없는 메모리 영역이다. (다른 최신 프로세서의 NX 비트와 유사하다.)
기본적으로 z/아키텍처 메모리 공간은 64비트 포인터로 인덱싱되어 실행 중인 프로그램에 최대 16엑사바이트의 메모리를 표시할 수 있다.

##### 데이터 공간과 하이퍼 공간
16 엑사바이트 이상의 데이터 주소 공간이 필요한 애플리케이션은 추가 주소 공간 또는 데이터 전용 공간을 사용하여 확장된 주소 지정 기술을 사용할 수 있다. 사용자 프로그램에 사용 가능한 데이터 전용 공간은 다음과 같다.
* **데이터 공간** (때로는 "data spaces"라고도 함) 및
* **하이퍼 공간** (High performance space).

이러한 공간은 프로그램이 생성할 수 있는 가상 스토리지 영역이라는 점에서 비슷하며, 최대 2 기가바이트에 달할 수 있다. 주소 공간과 달리 데이터 공간 또는 하이퍼 공간은 사용자 데이터만 포함하며, 시스템 제어 블록이나 공통 영역을 포함하지 않는다. 프로그램 코드는 데이터 공간이나 하이퍼 공간에서 실행될 수 없다.

데이터 공간은 바이트 주소 지정이 가능한 반면, 하이퍼 공간은 페이지 주소 지정이 가능하다는 점에서 다르다.

### IBM 메인프레임 확장 스토리지
전통적으로 IBM 메인프레임 메모리는 바이트 주소 지정이 가능했다. 이러한 종류의 메모리는 "중앙 스토리지"라고 불린다. IBM 메인프레임 프로세서는 1980년대와 1990년대 대부분 동안 또 다른 종류의 메모리인 확장 스토리지를 지원했다. 이는 1985년 IBM 3090 고급 메인프레임 시리즈와 함께 처음 도입되었다.

확장 스토리지는 4KB 페이지 주소 지정이 가능하다. 애플리케이션이 확장 스토리지의 데이터에 액세스하려면 먼저 중앙 스토리지로 이동해야 한다. 마찬가지로 중앙 스토리지에서 확장 스토리지로의 데이터 이동은 4KB 페이지 단위로 수행된다. 초기에는 페이지 이동이 상대적으로 비용이 많이 드는 명령어, 즉 페이징 서브시스템 코드를 사용하여 수행되었다.

중앙 스토리지와 확장 스토리지 간의 단일 및 그룹 페이지 이동 오버헤드는 MVPG (페이지 이동) 명령어 및 ADMF (비동기 데이터 이동기 기능) 기능의 도입으로 줄어들었다.

MVPG 명령어와 ADMF는 일반적으로 z/OS 또는 z/VM (및 ACP?)의 미들웨어에 의해 확장 스토리지의 데이터에 액세스하기 위해 명시적으로 호출된다. 일부 사용 사례는 다음과 같다.
* MVPG는 VSAM 로컬 공유 리소스(LSR) 버퍼 풀 관리에서 확장 스토리지의 하이퍼 공간에 있는 버퍼에 액세스하는 데 사용된다.
* MVPG와 ADMF는 모두 IBM Db2에서 하이퍼풀에 액세스하는 데 사용된다. 하이퍼풀은 하이퍼 공간에 위치한 버퍼 풀의 일부이다.
* VM 미니디스크 캐싱.

1990년대 중반까지 중앙 스토리지와 확장 스토리지는 프로세서의 물리적으로 다른 메모리 영역이었다. 1990년대 중반부터 중앙 스토리지와 확장 스토리지는 단순히 기본 프로세서 메모리에 대한 할당 선택이었다.
이러한 선택은 특정 예상 사용 사례를 기반으로 이루어졌다.
예를 들어, 하이퍼배치 기능(하이퍼 공간에 액세스하기 위해 MVPG 명령어를 사용함)에는 확장 스토리지가 필요하다.

위에 언급된 하이퍼 공간 및 페이징 사례 외에도 확장 스토리지를 사용하는 다른 용도가 있다.
* 확장 스토리지로의 가상 I/O (VIO)는 시뮬레이션된 장치에 임시 데이터 세트를 저장했다. (이 기능은 중앙 스토리지의 VIO로 대체되었다.)
* VM 미니디스크 캐싱.

z/OS는 확장 스토리지에 대한 지원을 제거했다. z/OS의 모든 메모리는 이제 중앙 스토리지이다. z/VM 6.4는 확장 스토리지의 모든 사용에 대한 지원을 중단하라는 방향성 선언을 이행한다.

### MVPG 및 ADMF

#### MVPG
IBM은 **MVPG**를 "단일 페이지를 이동하며 페이지 이동이 완료될 때까지 중앙 프로세서는 다른 명령어를 실행할 수 없습니다."라고 설명했다.

MVPG 메인프레임 명령어 (**M**o**V**e **P**a**G**e, opcode X'B254')는 **MVCL** (**M**o**V**e **C**haracter **L**ong) 명령어와 비교되었으며, 둘 다 단일 명령어로 주 메모리 내에서 256바이트 이상을 이동할 수 있다. 이 명령어들은 원자성의 정의를 준수하지 않지만, 문서화된 타이밍 및 비중첩 제한 내에서 단일 명령어로 사용될 수 있다.

주 메모리 내에서 256바이트 이상을 이동해야 하는 필요성은 역사적으로 소프트웨어 (MVC 루프), 1970년 System/370 발표와 함께 도입된 MVCL, 그리고 1989년 IBM이 특허를 내고 발표한 MVPG를 통해 해결되었으며, 각각 장점이 있다.

#### ADMF
1992년에 도입된 **ADMF** (비동기 데이터 이동기 기능)는 단일 페이지로 제한되는 MVPG (페이지 이동) 명령어의 기능을 넘어 중앙 스토리지와 확장 스토리지 사이에서 페이지 그룹을 이동할 수 있다.

IOSADMF라는 매크로 명령어는 "ADMF의 직접적이고 저수준 사용"을 피하는 API로 묘사되었으며, 하이퍼 공간에서 데이터를 읽거나 쓸 수 있다. 하이퍼 공간은 DSPSERV CREATE를 사용하여 생성된다.

재진입성을 제공하기 위해 IOSADMF는 "List form" 및 "Execute form"과 함께 사용된다.

## 비IBM 구현
플랫폼 솔루션즈 주식회사(PSI)는 이전에 z/아키텍처와 호환되는 아이테니엄 기반 서버를 판매했다. IBM은 2008년 7월에 PSI를 인수했으며, PSI 시스템은 더 이상 제공되지 않는다. FLEX-ES, zPDT 및 Hercules emulator도 z/아키텍처를 구현한다. 히타치 메인프레임은 최신 버전의 VOS3 운영 체제를 실행하며, 몇 가지 64비트 명령어를 포함한 ESA/390과 히타치 고유의 CPU 명령어를 구현한다. 히타치는 2002년 출시된 z900-G2/z800 CPU에 대해 IBM과 공식적으로 협력했지만, 히타치의 기기는 z/아키텍처와 호환되지 않는다.

## 같이 보기

## 각주
;z 
:

## 외부 링크
* Preshing on Programming – Atomic vs. Non-Atomic Operations
* Principles of Computer Design – Atomicity

분류:명령어 집합 구조
분류:64비트 컴퓨터