31비트 컴퓨팅

컴퓨터 구조에서 31비트 정수, 메모리 주소 또는 기타 데이터 단위는 너비가 31 비트이다.

1983년 IBM은 IBM 시스템/370의 24비트 물리 및 가상 주소 지정 방식과 전환기인 24비트 가상/26비트 물리 주소 지정 방식의 업그레이드로 System/370-XA 메인프레임 아키텍처에 31비트 주소 지정을 도입했다."with transitional support for 26-bit" 이 개선으로 주소 공간이 128배 더 커져 프로그램이 16 MB 이상의 메모리에 주소를 지정할 수 있게 되었다("라인 위"라고 함)."...to run in the 31-bit area above the line,...  코볼, 포트란, 그리고 나중에는 리눅스/390에 대한 지원이 포함되었다.

1980년대 초에 모토로라 68012가 도입되었다. 이 프로세서는 모토로라 68010과 마찬가지로 32비트 데이터 및 주소 레지스터를 가지고 있었지만, 주소 핀에서 하위 24비트의 주소를 제공하는 대신 비트 30을 제외한 모든 비트의 주소를 제공했다.

31비트 컴퓨터
섬네일|리브라스코프 LGP-30은 31비트 고정 소수점 숫자를 지원했다.

리브라스코프 LGP-30은 초기 상용 컴퓨터였다. LGP-30은 1956년에 처음 제조되었으며, 소매 가격은 47,000달러였다. .

이것은 이진, 31비트 워드 컴퓨터였으며 4096워드 드럼 메모리를 가지고 있었다. 드럼 워드당 32비트 위치가 있었지만 31개만 사용되었고, 32번째 비트 시간에 "헤드의 자기 플럭스를 복원"할 수 있었다. 진공관의 수는 고체 다이오드 논리, 비트 직렬 아키텍처 및 15개 플립플롭 각각의 다중 사용을 통해 최소화되었다.

LGP-30은 일반적으로 데스크톱 컴퓨터로 불렸다. 타자기 선반을 제외한 높이, 너비 및 깊이는 33 x 44 x 26인치 (84 x 112 x 66cm)였다. 무게는 약 800파운드 (360kg)였으며, 견고한 바퀴에 장착되어 장치 이동을 용이하게 했다.

31비트 주소 지정 방식의 IBM 메인프레임
360/67을 제외한 IBM System/360과 초기 IBM 시스템/370 아키텍처에서는 범용 레지스터가 32비트 폭이었고, 기계는 32비트 산술 연산을 수행했으며, 주소는 항상 32비트 워드에 저장되었으므로 아키텍처는 32비트로 간주되었지만, 기계는 주소의 상위 8비트를 무시하여 24비트 주소 지정을 초래했다.

System/370-XA 아키텍처와 IBM 엔터프라이즈 시스템즈 아키텍처에서는 이전 애플리케이션과의 호환성을 위한 24비트 주소 지정 모드 외에, 워드에서 최상위 비트(비트 0)만 주소 지정에 무시되는 31비트 주소 지정 모드가 있다. 단, 모드 전환 명령어는 비트 0도 사용한다. IBM이 360/67의 32비트 주소 지정을 구현하지 않은 이유가 적어도 두 가지 있었다.
 루프 제어 명령어 BXH와 BXLE는 부호 있는 비교를 수행했다.
 기존 소프트웨어의 상당 부분이 비트 0을 목록의 끝 표시기로 사용했다."... the high order bit in the last fullword must be set to one to indicate the end of the list." 

64비트 z/Architecture는 이전 애플리케이션과의 호환성을 위해 24비트 및 31비트 주소 지정 모드도 지원한다.

루비와 스몰토크
루비와 스몰토크 언어 인터프리터는 최하위 비트를 사용하여 값이 언박싱된 정수인지 아닌지를 알려준다. 이는 32비트 머신(또는 32비트 포인터를 가진 16비트 머신)에서 31비트 정수가 언박싱된다는 것을 의미한다. 오버플로가 발생하면 결과는 박싱된 객체에 맞춰지므로 할당 및 가비지 컬렉션이 필요하다. 따라서 31비트 부호 있는 형식에 맞지 않는 32비트 값을 가지고 있다면 해당 인터프리터에서 매우 비효율적이다. 64비트 컴퓨터에서 63비트 언박싱된 정수도 마찬가지이다. 리스프 및 변수가 어떤 유형의 값도 취할 수 있는 다른 언어에서도 유사한 설계를 찾을 수 있다. 경우에 따라 이러한 종류의 설계를 위한 하드웨어 지원이 있었다: 태그 아키텍처 및 리스프 머신을 참조하라.

 각주 

분류:데이터 단위