stringtranslate.com

pagina cero

La página cero o página base es el bloque de memoria al comienzo del espacio de direcciones de una computadora ; 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 cero páginas frente a la memoria con mayor dirección 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, [1] mientras que muchos otros procesadores no lo hacen.

A diferencia del hardware más moderno, en la década de 1970 la RAM de las computadoras era tan rápida como la CPU. [ cita necesaria ] 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 , calcular una dirección en la memoria podría llevar varios ciclos. La dirección de un byte de la página cero era más pequeña y, por lo tanto, más rápida de leer y calcular que otras ubicaciones, lo que hacía que la página cero fuera útil para código de alto rendimiento.

El direccionamiento de página cero ahora tiene un significado principalmente histórico, 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 que las operaciones de la CPU sean 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, suele ser 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, como la PDP-8 , la página cero tenía un modo especial de direccionamiento rápido , lo que facilitaba su uso para el almacenamiento temporal de datos y compensaba la escasez de registros de la CPU . El PDP-8 tenía un solo registro, por lo que el direccionamiento de página cero era esencial. En los modelos PDP-10 KA-10 originales, los registros disponibles son simplemente las primeras 16 palabras, de 36 bits de longitud, de la memoria principal. Se puede acceder a esas ubicaciones como registros y ubicaciones de memoria.

A diferencia del hardware más moderno, la RAM de las computadoras de la década de 1970 era tan rápida como la CPU. Por lo tanto, tenía sentido tener pocos registros y utilizar la memoria principal como un conjunto extendido de registros adicionales. En máquinas con un bus de direcciones de 16 bits y un bus de datos de 8 bits , 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 podrían abordarse mediante un solo byte , las instrucciones para acceder a ellas podrían ser más cortas y, por lo tanto, cargarse más rápido.

Por ejemplo, la familia MOS Technology 6502 tiene un solo registro de propósito general: el acumulador. Para compensar esta limitación y obtener una ventaja de rendimiento, el 6502 está diseñado para hacer un uso especial de la página cero, proporcionando instrucciones cuyos operandos son de ocho bits, en lugar de 16, lo que requiere menos ciclos de recuperación de memoria. Muchas instrucciones están codificadas de manera diferente para direcciones de página cero y direcciones de página distintas de cero; esto se llama direccionamiento de página cero en la terminología 6502 (se llama direccionamiento directo en la terminología de Motorola 6800 ; el Western Design Center 65C816 también se refiere al direccionamiento de página cero como direccionamiento directo de página ):

 LDA $ 12 ; página cero con dirección LDA $ 0012 ; direccionamiento absoluto     

En el lenguaje ensamblador 6502, las dos instrucciones anteriores logran lo mismo: cargan el valor de la ubicación de la memoria $12en el .Aregistro (acumulador) ( $es la notación del lenguaje ensamblador de tecnología Motorola/MOS para un número hexadecimal). Sin embargo, la primera instrucción tiene sólo 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.

Algunos procesadores, como el Motorola 6809 y el ya mencionado WDC 65C816, implementan un “registro de página directa” ( DP) que le dice al procesador la dirección inicial en la RAM de lo que se considera página cero. En este contexto, el direccionamiento de página cero es teórico; el acceso real no sería a la página física cero si DPestá cargada con alguna dirección distinta a $00(o $0000en el caso de 65C816).

punteros nulos

Contrariamente al uso preferencial original de la página cero, algunos sistemas operativos modernos como FreeBSD , Linux y Microsoft Windows [2] 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 defectuoso 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 violación de acceso a la memoria .

Vectores de interrupción

Sin embargo, algunas arquitecturas informáticas todavía reservan el comienzo del espacio de direcciones para otros fines; por ejemplo, los sistemas Intel x86 reservan las primeras 256 palabras dobles del 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 utilizar la página cero para vectores relacionados con el hardware. En programas mal escritos, esto podría llevar 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 utiliza para almacenar vectores de salto del sistema y se engaña al firmware para que los sobrescriba. [3]

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 las páginas , 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 recomiendan unas pocas instrucciones para saltar entre páginas. [4]

Ver también

Referencias

  1. ^ Sjödin, Tomás; Jonsson, Johan (2006). Artículos de estudiantes en arquitectura informática (PDF) . Umeå, Suecia. pag. 29. S2CID  14355431. Archivado desde el original (PDF) el 9 de marzo de 2019 . Consultado el 21 de agosto de 2019 .{{cite book}}: Mantenimiento CS1: falta el editor de la ubicación ( enlace )
  2. ^ "Gestión de la memoria virtual". Microsoft . 2014-12-05 . Consultado el 5 de diciembre de 2014 .
  3. ^ "El 'agujero de seguridad' de ARM es nuestro primo". drobe.co.uk. 2007-04-24 . Consultado el 22 de octubre de 2008 .
  4. ^ "4.1 Cruzar los límites de las páginas". Manual de programación en lenguaje ensamblador MCS-4: manual de programación del sistema de microcomputadora INTELLEC 4 (PDF) (edición preliminar). Santa Clara, California, Estados Unidos: Intel Corporation . Diciembre de 1973. págs. 2-4, 2-14, 3-41, 4-1. MCS-030-1273-1. Archivado (PDF) desde el original el 1 de marzo de 2020 . Consultado el 2 de marzo de 2020 . […] ciertas instrucciones funcionan de manera diferente cuando se encuentran en el último byte (o bytes) de una página que cuando se encuentran en otro lugar. […] Dos direcciones están en la misma página si el dígito hexadecimal de orden más alto de sus direcciones es igual. […] Si la instrucción JIN está ubicada en la última ubicación de una página en la memoria, los 4 bits más altos del contador del programa se incrementan en uno, lo que hace que el control se transfiera a la ubicación correspondiente en la página siguiente. […] Si […] el JIN hubiera estado ubicado en la dirección 255 decimal (0FF hexadecimal), el control se habría transferido a la dirección 115 hexadecimal, no a 015 hexadecimal. Esta es una práctica de programación peligrosa y debe evitarse siempre que sea posible. […] los programas se guardan en la ROM o en la RAM del programa, los cuales están divididos en páginas. Cada página consta de 256 ubicaciones de 8 bits. Las direcciones 0 a 255 comprenden la primera página, 256-511 comprenden la segunda página, y así sucesivamente. En general, es una buena práctica de programación no permitir nunca que el flujo del programa cruce el límite de una página, excepto mediante el uso de una instrucción JUN o JMS. […]

Otras lecturas