En la arquitectura de la computadora , los números enteros de 31 bits , las direcciones de memoria u otras unidades de datos son aquellos que tienen 31 bits de ancho.
En 1983, IBM introdujo el direccionamiento de 31 bits en la arquitectura de mainframe System / 370 -XA como una actualización de los físicos y virtuales de 24 bits, [1] y los físicos de transición de 24 bits virtuales / 26 bits , [2] [ 3] direccionamiento de modelos anteriores. [4] [5] Esta mejora permitió que los espacios de direcciones fueran 128 veces más grandes, permitiendo que los programas se dirigieran a la memoria por encima de los 16 MB (denominada "por encima de la línea"). [6] [1] Se incluyó soporte para COBOL , FORTRAN y posteriores Linux / 390 .
A principios de la década de 1980, se introdujo el Motorola 68012 ; tenía registros de direcciones y datos de 32 bits, como lo hizo el Motorola 68010 , pero en lugar de proporcionar los 24 bits inferiores de una dirección en los pines de dirección, proporcionó todos menos el bit 30 en los pines de dirección. [7]
Mainframes IBM de 31 bits
Arquitectura
En las arquitecturas System / 360 , además de 360/67 y las primeras arquitecturas System / 370 , los registros de propósito general tenían 32 bits de ancho, la máquina realizaba operaciones aritméticas de 32 bits y las direcciones siempre se almacenaban en palabras de 32 bits, por lo que la arquitectura se consideró de 32 bits , pero las máquinas ignoraron los 8 bits superiores de la dirección, lo que resultó en un direccionamiento de 24 bits. Con la extensión XA, solo se ignoró para el direccionamiento el bit de orden superior (bit 0) de la palabra. Una excepción es que las instrucciones de cambio de modo también usaron el bit 0. Hubo al menos dos razones por las que IBM no implementó el direccionamiento de 32 bits de 360/67.
- Las instrucciones de control de bucle BXH y BXLE hicieron comparaciones firmadas.
- Gran parte del software existente utilizaba el bit 0 como indicador de fin de lista. [8]
Transición
La transición fue complicada: los programadores de lenguaje ensamblador, incluidos los arquitectos y desarrolladores de sistemas operativos de IBM, habían estado utilizando el byte de repuesto en la parte superior de las direcciones para los indicadores durante casi veinte años. [9] IBM eligió proporcionar dos formas de direccionamiento para minimizar el dolor: si el bit más significativo (bit 0) de una dirección de 32 bits estaba activado, los siguientes 31 bits se interpretaron como la dirección virtual. Si el bit más significativo estaba desactivado, solo los 24 bits inferiores se trataron como dirección virtual (al igual que con los sistemas anteriores a XA). Por lo tanto, los programas podrían continuar usando los siete bits de orden inferior del byte superior para otros fines siempre que dejen el bit superior desactivado. Los únicos programas que requerían modificación eran los que configuraban el bit superior (más a la izquierda) de una palabra que contenía una dirección. Esto también afectó las comparaciones de direcciones: el bit más a la izquierda de una palabra también se interpreta como un bit de signo en la aritmética de complemento a 2, lo que indica un número negativo si el bit 0 está activado. Los programas que utilizan instrucciones de comparación aritmética con signo podrían obtener resultados revertidos. Dos direcciones equivalentes podrían compararse como no iguales si una de ellas tuviera el bit de signo activado incluso si los bits restantes fueran idénticos. La mayor parte de esto era invisible para los programadores que usaban lenguajes de alto nivel como COBOL [10] o FORTRAN , [3] [11] e IBM ayudó a la transición con hardware de modo dual durante un período de tiempo.
Ciertas instrucciones de la máquina en este modo de direccionamiento de 31 bits alteran el bit del modo de direccionamiento como un posible efecto secundario intencional. Por ejemplo, las instrucciones de llamada de subrutina originales BAL, Branch and Link, y su equivalente registro-registro, BALR, Branch and Link Register, almacenan cierta información de estado, el código de longitud de la instrucción, [12] el código de condición y la máscara del programa, en el byte superior de la dirección de devolución. Se agregó una instrucción BAS, Branch and Save, para permitir direcciones de retorno de 31 bits. BAS, y su equivalente registro-registro, BASR, Branch and Save Register, era parte del conjunto de instrucciones del System / 360 Modelo 67 , que era el único modelo System / 360 que permitía direcciones de más de 24 bits. Estas instrucciones se mantuvieron, pero se modificaron y ampliaron para direccionamiento de 31 bits.
Las instrucciones adicionales en apoyo del direccionamiento de 24/31 bits incluyen dos nuevas instrucciones de llamada / devolución de registro-registro que también efectúan un cambio de modo de direccionamiento (por ejemplo, Modo de bifurcación y almacenamiento y configuración, BASSM, [13] la versión de 24/31 bits de llamada donde se guarda la dirección de enlace, incluido el modo, y se toma una rama a una dirección en un modo posiblemente diferente, y BSM, Branch and Set Mode, la versión de 24/31 bits de una devolución, donde la devolución es directamente a la anterior dirección de vinculación guardada y en su modo anterior). En conjunto, BASSM y BSM permiten llamadas de 24 bits a 31 bits (y volver a 24 bits), llamadas de 31 bits a 24 bits (y volver a 31 bits), llamadas de 24 bits a 24 bits ( y volver a 24 bits) y llamadas de 31 bits a 31 bits (y volver a 31 bits).
Al igual que BALR 14,15 (la forma de una llamada de solo 24 bits), BASSM se usa como BASSM 14,15, donde la dirección y el modo de enlace se guardan en el registro 14, y se toma una rama a la dirección y el modo de la subrutina. especificado en el registro 15. Algo similar a BCR 15,14 (la forma de un retorno incondicional de solo 24 bits), BSM se usa como BSM 0,14, donde 0 indica que el modo actual no se guarda (el programa está saliendo la subrutina, de todos modos), y se debe volver a la persona que llama en la dirección y el modo especificados en el registro 14. Consulte la publicación de IBM MVS / Biblioteca de programación del sistema de arquitectura extendida: Direccionamiento de 31 bits, GC28-1158-1, para ver ejemplos extensos del uso de BAS, BASR, BASSM y BSM, en particular, págs. 29–30.
Arquitectura 370 / ESA
En la década de 1990, IBM introdujo la arquitectura 370 / ESA (más tarde denominada 390 / ESA y finalmente ESA / 390 o System / 390, en resumen S / 390), completando la evolución al direccionamiento virtual completo de 31 bits y manteniendo este indicador de modo de direccionamiento. Estas arquitecturas posteriores permiten más de 2 GB de memoria física y permiten múltiples espacios de direcciones simultáneos de hasta 2 GB de tamaño cada uno. A mediados de 2006, había demasiados programas indebidamente limitados por este modo de direccionamiento múltiple de 31 bits. [ cita requerida ]
z / Arquitectura
IBM rompió la barrera del direccionamiento lineal de 2 GB ("la barra") en 2000 con la introducción del primer sistema z / Architecture de 64 bits , el IBM zSeries Model 900. [1] [14] A diferencia de la transición XA, z / Architecture no reserva un bit superior para identificar el código anterior. z / Architecture mantiene la compatibilidad con el código de 24 y 31 bits, incluso el código más antiguo se ejecuta al mismo tiempo que el código más nuevo de 64 bits.
Linux / 390
Desde que Linux / 390 se lanzó por primera vez para el hardware de direccionamiento de 31 bits / datos de 32 bits existente en 1999, las aplicaciones Linux de mainframe iniciales compiladas en modo pre-z / Architecture también están limitadas al direccionamiento de 31 bits. Esta limitación desapareció con hardware de 64 bits, Linux de 64 bits en IBM Z y aplicaciones Linux de 64 bits. Las distribuciones de Linux de 64 bits aún ejecutan programas de direccionamiento de datos de 32 bits / 31 bits. El direccionamiento de 31 bits de IBM permite que el código de 31 bits utilice memoria adicional. Sin embargo, en cualquier instante, hay un máximo de 2 GB en cada espacio de direcciones de trabajo. Para Linux que no es de 64 bits en procesadores con direccionamiento de 31 bits, es posible asignar memoria por encima de la barra de 2 GB como un disco RAM. La compatibilidad con el kernel de Linux de 31 bits (no con el espacio de usuario) se eliminó en la versión 4.1. [15]
Ruby y Smalltalk
Los intérpretes de los lenguajes Ruby y Smalltalk utilizan el bit más bajo para saber si un valor es un entero sin caja o no. Esto significa que en máquinas de 32 bits (o máquinas de 16 bits con punteros de 32 bits), los números enteros de 31 bits se desempaquetan. En caso de desbordamiento, el resultado se ajusta a un objeto en caja, lo que significa que debe asignarse y recolectarse la basura. Por lo tanto, si tiene valores de 32 bits que no encajan en el formato con signo de 31 bits, serán muy ineficientes en esos intérpretes. Lo mismo ocurre con los enteros sin caja de 63 bits en computadoras de 64 bits. Se pueden encontrar diseños similares en LISP y algunos de los otros lenguajes cuyas variables pueden tomar valores de cualquier tipo. En algunos casos, hubo soporte de hardware para este tipo de diseño: consulte Arquitectura etiquetada y máquina Lisp .
Referencias
- ^ a b c "Breve historia del almacenamiento virtual y direccionabilidad de 64 bits" .
- ^ "con soporte de transición para 26 bits"
- ^ a b KE Plambeck (2002). "Desarrollo y atributos de z / Architecture " " (PDF) .
- ^ Robert T. Fertig (mayo de 1983). "XA: la vista desde las trincheras (pp.122-136)". Datamación .
- ^ Ronald L. Bond (mayo de 1983). "XA: La vista desde White Plains (pp.139-152)". Datamación .
- ^ "... para ejecutar en el área de 31 bits por encima de la línea, ... "Reescritura para ejecutar en un área de 31 bits" . Computerworld . 27 de octubre de 1986. p. 13.
- ^ Microprocesadores de memoria virtual MC68010 / MC68012 de 16/32 bits (PDF) . Semiconductor de Motorola. Mayo de 1985.
- ^ "... el bit de orden superior en la última palabra completa debe establecerse en uno para indicar el final de la lista". "WAIT - Espere uno o más eventos" .
- ^ De hecho, en una lista de direcciones de parámetros de longitud variable, la última entrada de dirección tradicionalmente tenía su bit más significativo establecido en 1, mientras que las otras entradas de dirección debían tener su bit más significativo establecido en 0.
- ^ "VS Cobol II compila programas Cobol en 31 bits" . 1988-02-08.
- ^ "para acomodar matrices grandes en FORTRAN".
- ^ Debido a que el código de longitud de la instrucción es 00b para un BALR y 01b para un BAL, siempre se garantiza que el bit de orden superior se establezca en 0, lo que indica el modo de 24 bits, para BALR y BAL en XA y sistemas posteriores.
- ^ "BASSM (bifurcar y guardar y configurar modo)" "Uso de las instrucciones de BASSM y BSM" .
- ^ "La dirección de 2 gigabytes del área privada del usuario se llama barra" "Introducción al nuevo mainframe: conceptos básicos de z / OS" (PDF) .
- ^ "4.1 Ventana de fusión, parte 1" . LWN. 15 de abril de 2015.