{{위키데이터 속성 추적}}
[[파일:VAX 11-780 intero.jpg|섬네일|VAX-11/780.]]
'''VAX'''는 [[디지털 이큅먼트 코퍼레이션]](DEC)이 1970년대 중반에 개발한 [[명령어 집합|명령어 집합 아키텍처]](ISA)이다.

== 명칭 ==
"VAX"는 가상 주소 확장(virtual address extension)의 준말인데, 그 이유는 VAX가 오래된 16비트 [[PDP-11]]의 32비트 확장으로 간주되었고 ([[프라임 컴퓨터]] 이후) [[가상 메모리]]를 처음 채택하여 더 넓은 주소 공간을 관리하였기 때문이다. 초기 버전의 VAX 프로세서는 호환성 모드를 구현하여 PDP-11 명령의 다수를 에뮬레이트하였기에 실제로 이러한 호환성을 강조하여 VAX-11로 불렸다.

== 운영 체제 ==
네이티브 VAX [[운영 체제]]는 디지털의 VAX/VMS였다. (1991년~1992년 초반에 [[OpenVMS]]로 이름이 바뀜. 당시 [[DEC 알파|알파]]에 포팅되어 [[POSIX]] 표준에 맞게 수정되어 [[X/Open]] 컨소시엄의 [[XPG4]]와 호환된다고 하여 그렇게 정해짐.)<ref name="vaxvmsat20">{{웹 인용 | url=http://h71000.www7.hp.com/openvms/20th/ | title=VAX/VMS at 20 | editor-first=Jim | editor-last=Rainville | editor2-first=Karen | editor2-last=Howard | publisher=Digital Equipment Corporation | year=1997 | accessdate=2009-07-27 | 보존url=https://web.archive.org/web/20090706091233/http://h71000.www7.hp.com/openvms/20th/ | 보존날짜=2009-07-06 | url-status=dead }}</ref>

== 역사 ==
1977년 10월 25일에 [[디지털 이큅먼트 코퍼레이션]](DEC)가 선보인 [[VAX-11|VAX-11/780]]이 이 아키텍처를 구현한 영향력 있는 [[컴퓨터]]들 가운데 최초의 것이다.<ref>{{웹 인용|url=http://www.old-computers.com/history/detail.asp?n=20&t=3|title=VAX 11/780, The First VAX System (October 1977)|확인날짜=2016-08-20|보존url=https://web.archive.org/web/20191003074921/http://www.old-computers.com/history/detail.asp?n=20&t=3|보존날짜=2019-10-03|url-status=dead}}</ref> [[카네기 멜런 대학교]]의 [[고든 벨|C. 고든 벨]]의 박사 과정의 학생인 빌 스트레커(Bill Strecker)가 이 아키텍처를 맡았다.<ref>{{서적 인용 | url=http://books.google.com/?id=aWTtMyYmKhUC&dq=%22Bill+Strecker%22+vax+designer | title=Portraits in Silicon | last= Slater | first=Robert | publisher=MIT Press | year=1987 | page=[http://books.google.com/books?id=aWTtMyYmKhUC&pg=PA213&lpg=PA213&dq=%22Bill+Strecker%22+vax+designer 213] | isbn=978-0-262-69131-4 }}</ref> 가격, 성능 수준, 용량이 각기 다른 수많은 모델들이 차후에 만들어졌다. VAX [[슈퍼미니컴퓨터]]는 1980년대 초에 매우 인기를 끌었다.

== 프로세서 구조 ==
[[파일:Microvax 3600 (2).jpg|섬네일|MicroVAX 3600 (왼쪽). 이와 함께 있는 프린터 (오른쪽)]]
=== 가상 메모리 맵 ===
{| class="infobox" style="font-size:88%"
|-
|align="center" |DEC VAX 레지스터
|-
|
{| style="font-size:88%"
|-
| style="width:10px; text-align:left"| <sup>3</sup><sub>1</sub>
| style="width:60px; text-align:center"| . . .
| style="width:10px; text-align:right"| <sup>2</sup><sub>3</sub>
| style="width:60px; text-align:center"| . . .
| style="width:10px; text-align:center"| <sup>1</sup><sub>5</sub>
| style="width:10px; text-align:center"| <sup>1</sup><sub>4</sub>
| style="width:10px; text-align:center"| <sup>1</sup><sub>3</sub>
| style="width:10px; text-align:center"| <sup>1</sup><sub>2</sub>
| style="width:10px; text-align:center"| <sup>1</sup><sub>1</sub>
| style="width:10px; text-align:center"| <sup>1</sup><sub>0</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>9</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>8</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>7</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>6</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>5</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>4</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>3</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>2</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>1</sub>
| style="width:10px; text-align:center"| <sup>0</sup><sub>0</sub>
| style="width:auto; background:white; color:black" | ''(bit position)''
|-
! colspan="21" | General registers
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R0
| style="background:white; color:black"| Register 0
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R1
| style="background:white; color:black"| Register 1
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R2
| style="background:white; color:black"| Register 2
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R3
| style="background:white; color:black"| Register 3
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R4
| style="background:white; color:black"| Register 4
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R5
| style="background:white; color:black"| Register 5
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R6
| style="background:white; color:black"| Register 6
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R7
| style="background:white; color:black"| Register 7
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R8
| style="background:white; color:black"| Register 8
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R9
| style="background:white; color:black"| Register 9
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R10
| style="background:white; color:black"| Register 10
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R11
| style="background:white; color:black"| Register 11
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R12 / AP
| style="background:white; color:black"| Register 12  / Argument Pointer
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R13 / FP
| style="background:white; color:black"| Register 13 / Frame Pointer
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R14 / SP
| style="background:white; color:black"| Register 14 / Stack Pointer
|- style="background:silver;color:black"
| style="text-align:center" colspan="20"| R15 / PC
| style="background:white; color:black"| Register 15 / Program Counter
|-
! colspan="21" | Status flags
|- style="background:silver;color:black"
| style="text-align:center" colspan="16"| 
| style="text-align:center"| [[사인 플래그|N]]
| style="text-align:center"| [[제로 플래그|Z]]
| style="text-align:center"| [[오버플로 플래그|V]]
| style="text-align:center"| [[캐리 플래그|C]]
| style="background:white; color:black" | Condition Code Register
|}
|}

VAX 가상 메모리는 4개의 부분으로 나뉘는데, 크기는 각각 1 기가바이트(어드레싱 문맥에 따라 2<sup>30</sup> 바이트)이다:
{| class="wikitable"
! 구분
! 주소 범위
|-
|P0
| <code>0x00000000</code> - <code>0x3fffffff</code>
|-
|P1
| <code>0x40000000</code> - <code>0x7fffffff</code>
|-
|S0
| <code>0x80000000</code> - <code>0xbfffffff</code>
|-
|S1
| <code>0xc0000000</code> - <code>0xffffffff</code>
|}
VMS의 경우, 사용자 프로세스 공간을 위해 P0을, 프로세스 스택을 위해 P1을, 운영 체제를 위해 S0을 사용하였으며 S1은 예비로 남겨두었다.

=== 권한 모드 ===
VAX는 4개의 하드웨어 구현 권한 모드가 있다.

{| class="wikitable"
! 번호
! 모드
! VMS 사용
! 참고
|-
| 0
| 커널
| OS 커널
| 최고 수준의 권한 단계
|-
| 1
| 실행
| 파일 시스템
| 
|-
| 2
| 수퍼바이저
| 셸 (DCL)
| 
|-
| 3
| 사용자
| 일반 프로그램
| 최저 수준의 권한 단계
|-
|}

=== 프로세서 상태 레지스터 ===
{| class="wikitable"
! width=3% | CM
! width=3% | TP
! width=6% | MBZ
! width=3% | FD
! width=3% | IS
! width=6% | cmod
! width=6% | pmod
! width=3% | MBZ
! width="15%" |IPL
! width="24%" |MBZ
! width=3% | DV
! width=3% | FU
! width=3% | IV
! width=3% | T
! width=3% | N
! width=3% | Z
! width=3% | V
! width=3% | C
|-
|31
|30
|29
|27
|26
|25
|23
|21
|20
|15
|7
|6
|5
|4
|3
|2
|1
|0
|}

{| class="wikitable"
! 비트
! 의미
|-
| 31
| PDP-11 호환 모드
|-
| 30
| 트레이스 보류
|-
| 29:28
| MBZ (0이어야 함)
|-
| 27
| 첫 부분 완료 (인터럽트 명령)
|-
| 26
| 인터럽트 스택
|-
| 25:24
| 현재의 권한 모드
|-
| 23:22
| 이전 권한 모드
|-
| 21
| MBZ (0이어야 함)
|-
| 20:16
| IPL (인터럽트 우선 순위 수준)
|-
| 15:8
| MBZ (0이어야 함)
|-
| 7
| 10진 오버플로 트랩 활성화
|-
| 6
| 부동소수점 언더플로 트랩 활성화
|-
| 5
| 정수 오버플로 트랩 활성화
|-
| 4
| 트레이스
|-
| 3
| 부정
|-
| 2
| 영(0)
|-
| 1
| 오버플로
|-
| 0
| 캐리
|}

== 각주 ==
{{각주}}

== 외부 링크 ==
{{위키공용분류}}
* {{언어링크|en}} [https://web.archive.org/web/20041207213429/http://h18002.www1.hp.com/alphaserver/vax/ HP: VAX Systems]
* {{언어링크|en}} [http://simh.trailing-edge.com/dsarchive.html DEC Microprocessors]
* {{언어링크|en}} [http://simh.trailing-edge.com/ SimH VAX] Open source emulator that supports VAX architecture

[[분류:1997년 도입된 제품]]
[[분류:미니컴퓨터]]
[[분류:32비트 컴퓨터]]
[[분류:명령어 집합 구조]]
[[분류:DEC의 마이크로프로세서]]