stringtranslate.com

Contador de programas

Panel frontal de una computadora IBM 701 presentada en 1952. Las luces en el medio muestran el contenido de varios registros. El contador de instrucciones está en la parte inferior izquierda.

El contador de programa ( PC ), [1] comúnmente llamado puntero de instrucciones ( IP ) en los microprocesadores Intel x86 e Itanium , y a veces llamado registro de dirección de instrucciones ( IAR ), [2] [1] el contador de instrucciones , [3] o simplemente parte del secuenciador de instrucciones, [4] es un registro del procesador que indica dónde se encuentra una computadora en su secuencia de programa . [5] [nb 1]

Generalmente, la PC se incrementa después de obtener una instrucción y contiene la dirección de memoria de (" apunta a") la siguiente instrucción que se ejecutará. [6] [nb 2]

Los procesadores suelen obtener instrucciones de la memoria de forma secuencial, pero las instrucciones de transferencia de control cambian la secuencia colocando un nuevo valor en la computadora. Estas incluyen bifurcaciones (a veces llamadas saltos), llamadas a subrutinas y retornos . Una transferencia que está condicionada a la verdad de alguna afirmación permite que la computadora siga una secuencia diferente en diferentes condiciones.

Una bifurcación permite que la siguiente instrucción se obtenga de otra parte de la memoria. Una llamada a una subrutina no solo se bifurca, sino que también guarda el contenido anterior de la PC en algún lugar. Un retorno recupera el contenido guardado de la PC y lo vuelve a colocar en la PC, reanudando la ejecución secuencial con la instrucción que sigue a la llamada a la subrutina.

Implementación de hardware

En una unidad central de procesamiento (CPU) simple, el PC es un contador digital (que es el origen del término "contador de programa") que puede ser uno de varios registros de hardware . El ciclo de instrucción [8] comienza con una búsqueda , en la que la CPU coloca el valor del PC en el bus de direcciones para enviarlo a la memoria. La memoria responde enviando el contenido de esa ubicación de memoria en el bus de datos . (Este es el modelo de computadora de programa almacenado , en el que un solo espacio de memoria contiene tanto instrucciones ejecutables como datos ordinarios. [9] ) Después de la búsqueda, la CPU procede a la ejecución , tomando alguna acción basada en el contenido de memoria que obtuvo. En algún punto de este ciclo, el PC se modificará para que la próxima instrucción ejecutada sea una diferente (típicamente, se incrementará para que la próxima instrucción sea la que comience en la dirección de memoria inmediatamente posterior a la última ubicación de memoria de la instrucción actual).

Al igual que otros registros de procesador, el PC puede ser un banco de pestillos binarios, cada uno de los cuales representa un bit del valor del PC. [10] La cantidad de bits (el ancho del PC) se relaciona con la arquitectura del procesador. Por ejemplo, una CPU de “32 bits” puede utilizar 32 bits para poder direccionar 2 32 unidades de memoria. En algunos procesadores, el ancho del contador de programa depende en cambio de la memoria direccionable; por ejemplo, algunos microcontroladores AVR tienen un PC que se reinicia después de 12 bits. [11]

Si la PC es un contador binario, puede incrementarse cuando se aplica un pulso a su entrada COUNT UP, o la CPU puede calcular algún otro valor y cargarlo en la PC mediante un pulso a su entrada LOAD. [12]

Para identificar la instrucción actual, el PC puede combinarse con otros registros que identifican un segmento o una página . Este enfoque permite un PC con menos bits al suponer que la mayoría de las unidades de memoria de interés se encuentran en las proximidades actuales.

Consecuencias en la arquitectura de la máquina

El uso de un PC que normalmente incrementa supone que lo que hace un ordenador es ejecutar una secuencia de instrucciones normalmente lineal. Un PC de este tipo es fundamental para la arquitectura de von Neumann . Por tanto, los programadores escriben un flujo de control secuencial incluso para algoritmos que no tienen que ser secuenciales. El “ cuello de botella de von Neumann ” resultante condujo a la investigación en computación paralela , [13] incluidos modelos no von Neumann o de flujo de datos que no utilizaban un PC; por ejemplo, en lugar de especificar pasos secuenciales, el programador de alto nivel podría especificar la función deseada y el programador de bajo nivel podría especificar esto utilizando lógica combinatoria .

Esta investigación también condujo a formas de hacer que las CPU convencionales basadas en PC funcionen más rápido, incluyendo:

Consecuencias en la programación de alto nivel

Los lenguajes de programación de alto nivel modernos siguen el modelo de ejecución secuencial y, de hecho, una forma habitual de identificar errores de programación es mediante una “ejecución de procedimiento” en la que el dedo del programador identifica el punto de ejecución como lo haría un PC. El lenguaje de alto nivel es esencialmente el lenguaje de máquina de una máquina virtual, [14] demasiado complejo para ser construido como hardware, sino emulado o interpretado por software.

Sin embargo, los nuevos modelos de programación trascienden la programación de ejecución secuencial:

Véase también

Notas

  1. ^ Para los procesadores modernos, el concepto de "dónde está en su secuencia" es demasiado simplista, ya que pueden producirse paralelismos a nivel de instrucción y ejecución fuera de orden .
  2. ^ En un procesador donde el incremento precede a la búsqueda, el PC apunta a la instrucción actual que se está ejecutando. En algunos procesadores, el PC apunta a cierta distancia más allá de la instrucción actual; por ejemplo, en el ARM7 , el valor de PC visible para el programador apunta más allá de la instrucción actual y más allá de la ranura de retardo . [7]

Referencias

  1. ^ ab Hayes, John P. (1978). Arquitectura y organización de computadoras . McGraw-Hill. pág. 245. ISBN 0-07-027363-4.
  2. ^ Mead, Carver ; Conway, Lynn (1980). Introducción a los sistemas VLSI . Reading, EE. UU.: Addison-Wesley . ISBN 0-201-04358-0.
  3. ^ Principios de funcionamiento, tipo 701 y equipo asociado (PDF) . IBM . 1953.
  4. ^ Harry Katzan (1971), Organización de computadoras y el sistema/370 , Van Nostrand Reinhold Company , Nueva York, EE. UU., LCCCN 72-153191
  5. ^ Bates, Martin (2011). "Funcionamiento de microcontroladores". Microcontroladores PIC . Elsevier. págs. 27–44. doi :10.1016/b978-0-08-096911-4.10002-3. ISBN . 978-0-08-096911-4El contador de programa (PC) es un registro que lleva un registro de la secuencia del programa, almacenando la dirección de la instrucción que se está ejecutando en ese momento. Se carga automáticamente con cero cuando se enciende o reinicia el chip. A medida que se ejecuta cada instrucción, el PC se incrementa (se incrementa en uno) para indicar la siguiente instrucción.
  6. ^ Silberschatz, Abraham ; Gagne, Greg; Galvin, Peter B. (abril de 2018). Conceptos de sistemas operativos. Estados Unidos: Wiley . págs. 27, G-29. ISBN 978-1-119-32091-3.
  7. ^ "ARM Developer Suite, Assembler Guide. Versión 1.2". ARM Limited . 2001. Consultado el 18 de octubre de 2019 .
  8. ^ John L. Hennessy y David A. Patterson (1990), Arquitectura informática: un enfoque cuantitativo , Morgan Kaufmann Publishers , Palo Alto, EE. UU., ISBN 1-55860-069-8 
  9. ^ B. Randall (1982), Los orígenes de las computadoras digitales , Springer-Verlag , Berlín, D
  10. ^ C. Gordon Bell y Allen Newell (1971), Estructuras informáticas: lecturas y ejemplos , McGraw-Hill Book Company , Nueva York, EE. UU.
  11. ^ Arnold, Alfred (2020) [1996, 1989]. "E. Símbolos predefinidos". Macro Assembler AS – Manual del usuario. V1.42. Traducido por Arnold, Alfred; Hilse, Stefan; Kanthak, Stephan; Sellke, Oliver; De Tomasi, Vittorio. p. Tabla E.3: Símbolos predefinidos – Parte 3. Archivado desde el original el 28 de febrero de 2020. Consultado el 28 de febrero de 2020. 3.2.12. WRAPMODE […] AS asumirá que el contador de programa del procesador no tiene la longitud completa de 16 bits dada por la arquitectura, sino una longitud que es exactamente suficiente para direccionar la ROM interna. Por ejemplo, en el caso del AT90S8515 , esto significa 12 bits, correspondientes a 4 Kwords u 8 Kbytes. Esta suposición permite saltos relativos desde el principio de la ROM hasta el final y viceversa, lo que daría como resultado un error de salto fuera de rama al utilizar aritmética estricta. En este caso, funcionan porque se descartan los bits de acarreo resultantes del cálculo de la dirección de destino. […] En el caso del AT90S8515 mencionado anteriormente, esta opción es incluso necesaria porque es la única forma de realizar un salto directo a través del espacio de direcciones completo […]
  12. ^ Walker, BS (1967). Introducción a la ingeniería informática . Londres, Reino Unido: University of London Press . ISBN 0-340-06831-0.
  13. ^ FB Chambers, DA Duce y GP Jones (1984), Computación distribuida , Academic Press , Orlando, EE. UU., ISBN 0-12-167350-2 
  14. ^ Douglas Hofstadter (1980), Gödel, Escher, Bach: una eterna trenza dorada , Penguin Books , Harmondsworth, Reino Unido, ISBN 0-14-005579-7