Página cero - Zero page

La página de cero o página base es el bloque de memoria en el principio de un equipo 's espacio de direcciones ; es decir, la página cuya dirección inicial es cero. El tamaño de una página depende del contexto, y la importancia de la memoria de página cero frente a la memoria con direcciones más altas depende en gran medida de la arquitectura de la máquina. Por ejemplo, las familias de procesadores Motorola 6800 y MOS Technology 6502 tratan los primeros 256 bytes de memoria de manera especial, mientras que muchos otros procesadores no lo hacen.

A diferencia del hardware más moderno, en la década de 1970 la RAM de la computadora era tan rápida o más rápida que la CPU. Por lo tanto, tenía sentido tener pocos registros y usar la memoria principal como un grupo extendido de registros adicionales. En máquinas con un bus de direcciones de 16 bits relativamente ancho y un bus de datos de 8 bits comparativamente estrecho , acceder a ubicaciones de página cero podría ser más rápido que acceder a otras ubicaciones.

El direccionamiento de página cero ahora tiene mayor importancia histórica, ya que los desarrollos en la tecnología de circuitos integrados han hecho que agregar más registros a una CPU sea menos costoso y las operaciones de la CPU mucho más rápidas que los accesos a la RAM.

Tamaño

El tamaño real de la página cero en bytes está determinado por el diseño del microprocesador y, en diseños más antiguos, a menudo es igual al valor más grande al que pueden hacer referencia los registros de indexación del procesador. Por ejemplo, los procesadores de 8 bits antes mencionados tienen registros de índice de 8 bits y un tamaño de página de 256 bytes. Por lo tanto, su página cero se extiende desde la dirección 0 hasta la dirección 255.

Computadoras con pocos registros de CPU

En las primeras computadoras, incluida la PDP-8 , la página cero tenía un modo de direccionamiento rápido especial , que facilitaba su uso para el almacenamiento temporal de datos y compensaba la relativa escasez de registros de CPU . El PDP-8 tenía un solo registro, por lo que el direccionamiento de página cero era esencial.

A diferencia del hardware más moderno, en la década de 1970 la RAM de la computadora era tan rápida o más rápida que la CPU. Por lo tanto, tenía sentido tener pocos registros y usar la memoria principal como un grupo extendido de registros adicionales. En máquinas con un bus de direcciones de 16 bits relativamente ancho y un bus de datos de 8 bits comparativamente estrecho , acceder a ubicaciones de página cero podría ser más rápido que acceder a otras ubicaciones. Dado que las ubicaciones de cero páginas se pueden direccionar con un solo byte , las instrucciones para acceder a ellas podrían ser de carga más pequeña y rápida.

Por ejemplo, MOS Technology 6502 tiene solo un registro de propósito general (el acumulador). Para compensar esta debilidad y obtener una ventaja de rendimiento, se diseñó para hacer un uso especial de la página cero, proporcionando instrucciones especiales que son más pequeñas, lo que requiere menos ciclos de recuperación de memoria y se ejecuta más rápido. Muchas instrucciones se codifican de forma diferente para direcciones de página cero y páginas distintas de cero:

 LDA $00            ; zero page
 LDA $0000          ; non-zero page

Las dos instrucciones anteriores logran lo mismo: cargan el valor de la ubicación de memoria $ 00 en el registro .A (acumulador). Sin embargo, la primera instrucción tiene solo dos bytes de longitud y requiere tres ciclos de reloj para completarse. La segunda instrucción tiene una longitud de tres bytes y requiere cuatro ciclos de reloj para ejecutarse. Esta diferencia en el tiempo de ejecución podría volverse significativa en código repetitivo.

Punteros nulos

Contrariamente al uso preferencial original de la página cero, algunos sistemas operativos modernos como FreeBSD , Linux y Microsoft Windows en realidad hacen que la página cero sea inaccesible para atrapar usos de punteros nulos . Dichos valores de puntero pueden indicar legítimamente valores no inicializados o nodos centinela , pero no apuntan a objetos válidos. El código con errores puede intentar acceder a un objeto a través de un puntero nulo, y esto puede quedar atrapado en el nivel del sistema operativo como una infracción de acceso a la memoria .

Vectores de interrumpir

Sin embargo, algunas arquitecturas de computadora aún reservan el comienzo del espacio de direcciones para otros propósitos; por ejemplo, los sistemas Intel x86 reservan las primeras 256 palabras dobles de espacio de direcciones para la tabla de vectores de interrupción (IVT) si se ejecutan en modo real .

En la arquitectura ARM se empleó una técnica similar de usar la página cero para vectores relacionados con el hardware. En programas mal escritos, esto podría conducir a un comportamiento "ofla", donde un programa intenta leer información de un área de memoria no deseada y trata el código ejecutable como datos o viceversa. Esto es especialmente problemático si el área de página cero se usa para almacenar vectores de salto del sistema y se engaña al firmware para que los sobrescriba.

CP / M

En CP / M de 8 bits , la página cero se utiliza para la comunicación entre el programa en ejecución y el sistema operativo.

Direccionamiento de página

En algunas arquitecturas de procesador, como la del procesador Intel 4004 de 4 bits, la memoria se dividía en páginas (256 bytes) y se debían tomar precauciones especiales cuando el flujo de control cruzaba los límites de la página , ya que algunas instrucciones de la máquina mostraban un comportamiento diferente si se ubicaban en las últimas instrucciones de una página, por lo que solo se recomendaron unas pocas instrucciones para saltar entre páginas.

Ver también

Referencias

Otras lecturas