Articulo de referencia

Página cero

La página cero o página base es el bloque de memoria que se encuentra al inicio del espacio de direcciones de una computadora ; es decir, la página cuya dirección de inicio es c...

La página cero o página base es el bloque de memoria que se encuentra al inicio del espacio de direcciones de una computadora ; es decir, la página cuya dirección de inicio es cero. El tamaño de una página depende del contexto, y la importancia de la memoria de la 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 forma especial, [ 1 ] mientras que muchos otros procesadores no lo hacen.

A diferencia del hardware más moderno, en la década de 1970 la velocidad de la RAM de las computadoras era similar a la de las CPU. Por lo tanto, tenía sentido tener pocos registros y usar la memoria principal como un conjunto extendido de registros adicionales. En máquinas con un bus de direcciones de 16 bits relativamente amplio y un bus de datos de 8 bits comparativamente estrecho , calcular una dirección en la memoria podí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 principalmente una importancia histórica, ya que los avances 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 viene determinado por el diseño del microprocesador y, en diseños más antiguos, suele ser igual al valor máximo al que pueden acceder los registros de indexación del procesador. Por ejemplo, los procesadores de 8 bits mencionados anteriormente tienen registros de índice de 8 bits y un tamaño de página de 256 bytes. Por lo tanto, su página cero abarca desde la dirección 0 hasta la dirección 255.

Computadoras con pocos registros de CPU

En los primeros ordenadores, como el 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 escasez de registros de la CPU . El PDP-8 solo tenía un registro, por lo que el direccionamiento de la página cero era esencial. En los modelos originales PDP-10 KA-10, los registros disponibles son simplemente las primeras 16 palabras de memoria principal, de 36 bits de longitud. Se puede acceder a estas ubicaciones tanto como registros como direcciones de memoria.

A diferencia del hardware más moderno, la memoria 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 usar 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 las ubicaciones de página cero podía ser más rápido que acceder a otras ubicaciones. Dado que las ubicaciones de página cero podían direccionarse con un solo byte , las instrucciones que accedían a ellas podían ser más cortas y, por lo tanto, de carga más rápida.

Por ejemplo, la familia MOS Technology 6502 tiene un único 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 búsqueda de memoria. Muchas instrucciones se codifican de forma diferente para direcciones de página cero y páginas distintas de cero; esto se denomina direccionamiento de página cero en la terminología del 6502 (se denomina direccionamiento directo en la terminología del Motorola 6800 ; el Western Design Center 65C816 también se refiere al direccionamiento de página cero como direccionamiento de página directo ):

LDA $ 12 ; direccionamiento de página cero LDA $ 0012 ; direccionamiento absoluto

En lenguaje ensamblador 6502, las dos instrucciones anteriores realizan la misma función: cargan el valor de una ubicación de memoria $12en el .Aregistro acumulador ( $donde es la notación en lenguaje ensamblador de Motorola/MOS Technology para un número hexadecimal). Sin embargo, la primera instrucción ocupa solo dos bytes y requiere tres ciclos de reloj para completarse. La segunda instrucción ocupa tres bytes y requiere cuatro ciclos de reloj para ejecutarse. Esta diferencia en el tiempo de ejecución podría ser significativa en código repetitivo.

Algunos procesadores, como el Motorola 6809 y el mencionado WDC 65C816, implementan un "registro de página directa" ( DP) que le indica al procesador la dirección de inicio en la RAM de lo que se considera la página cero. En este contexto, el direccionamiento de la página cero es conceptual; el acceso real no sería a la página cero física si DPse carga con alguna dirección distinta de $00(o $0000en el caso del 65C816).

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 que utilizaba la página cero para vectores relacionados con el hardware. En programas mal escritos, esto podía provocar un comportamiento "ofla", en el que un programa intentaba leer información de un área de memoria no prevista y trataba el código ejecutable como datos, o viceversa. Esto resulta especialmente problemático si la página cero se utilizaba para almacenar vectores de salto del sistema y se engañaba al firmware para que los sobrescribiera. [ 2 ]

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.

Dirección de página

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

Punteros nulos

Contrariamente al uso preferencial original de la página cero, algunos sistemas operativos modernos como FreeBSD , Linux , Solaris , macOS y Microsoft Windows [ 4 ] hacen que la página cero sea inaccesible para interceptar el uso 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 ser interceptado a nivel del sistema operativo como una violación de acceso a memoria . Al invalidar toda la página, en lugar de solo el singular puntero nulo de valor cero, el sistema operativo puede interceptar el código que, por ejemplo, tiene un puntero nulo apuntando a una estructura y accede a un miembro de la estructura en un desplazamiento del puntero nulo.

Véase también

Referencias

  1. Sjödin, Tomas; Jonsson, Johan (2006). Student Papers in Computer Architecture (PDF) . Umeå, Suecia. pág.  29. S2CID 14355431. Archivado del original (PDF) el 9 de marzo de 2019. Consultado el 21 de agosto de 2019 . {{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace )
  2. "El 'agujero de seguridad' del ARM es primo de Ofla" . drobe.co.uk. 24 de abril de 2007. Archivado del original el 14 de mayo de 2011. Consultado el 22 de octubre de 2008 .
  3. "4.1 Cruzando límites de página". Manual de programación en lenguaje ensamblador MCS-4 - Manual de programación del sistema de microcomputadora INTELLEC 4 (PDF) (ed. preliminar ). Santa Clara, California, EE. UU.: Intel Corporation . Diciembre de 1973. págs. 2-4, 2-14, 3-41, 4-1. MCS-030-1273-1. Archivado ( PDF) del original el 1 de marzo de 2020. Recuperado 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 se encuentra en la última ubicación de una página en la memoria, los 4 bits más altos del contador de 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 se hubiera ubicado en la dirección decimal 255 (0FF hexadecimal), el control se habría transferido a la dirección hexadecimal 115, no a la hexadecimal 015. Esta es una práctica de programación peligrosa y debe evitarse siempre que sea posible. […] Los programas se almacenan en la ROM o en la RAM de programa, ambas divididas en páginas. Cada página consta de 256 ubicaciones de 8 bits. Las direcciones de 0 a 255 comprenden la primera página, de 256 a 511 la segunda, 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. […]  
  4. "Administración de memoria virtual" . Microsoft . 5 de diciembre de 2014. Consultado el 5 de diciembre de 2014 .

Lecturas adicionales

  • Bray, Andrew C.; Dickens, Adrian C.; Holmes, Mark A. (1983). Guía avanzada del usuario para el microordenador BBC (3.ª  ed.). Centro de Microordenadores de Cambridge. ISBN 0-946827-00-1.
  • Roth, Richard L. (febrero de 1978) [1977]. «La reubicación no es solo trasladar programas» . Dr. Dobb's . Vol.  3, n.º  2. Ridgefield, CA, EE. UU.: People's Computer Company . págs.  14-20 (70-76). ISBN 0-8104-5490-4. #22. Archivado del original el 20/04/2019 . Consultado el 19/04/2019 .
  • "1. Introducción: Alineación de segmentos". Utilidades de la familia 8086 - Guía del usuario para sistemas de desarrollo basados ​​en 8080/8085 (PDF) . Revisión E (ed. A620/5821 6K DD  ). Santa Clara, California, EE. UU.: Intel Corporation . Mayo de 1982 [1980, 1978]. pág.  1-6. Número de pedido: 9800639-04. Archivado (PDF) del original el 29/02/2020 . Recuperado el 29/02/2020 .