Gestión de memoria (VII)

Registros de la CPU


Como se ha mencionado en posts anteriores de esta serie de artículos dedicados a la gestión eficiente de la memoria, los registros de la CPU son espacios de memoria de acceso rápido integrados en el microprocesador, típicamente del tamaño de una palabra (64 bits en la arquitectura x86-64). En ellos pueden almacenarse copias tanto de instrucciones como de datos contenidos en la memoria física de la computadora.

Así, el contador de programa (program counter, o PC, en Inglés) contiene en todo momento la dirección en memoria principal de la instrucción que se esté ejecutando en ese momento. Ésta puede consistir, por ejemplo, en la lectura de una palabra o byte desde la memoria principal hasta la CPU, la escritura de una palabra o byte desde la CPU hasta la memoria principal o la realización de una operación aritmética sobre dos datos almacenados en el procesador. La CPU completará dichas operaciones sirviéndose de otros registros de datos, así como de la unidad aritmético-lógica del procesador (ALU en sus siglas inglesas).

En la arquitectura x86-64 se dispone de un total de dieciséis registros de propósito general con nombres especiales, a saber: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %rbp, %rsp, así como los numerados de %r8 a %r15. Como ya sabemos, el puntero de pila %rsp se utiliza exclusivamente para referenciar la cima de la pila del usuario. El elevado número de registros permite que, durante la ejecución de una llamada a función, algunas variables locales puedan almacenarse en ellos y no en la pila del usuario, como es habitual en la arquitectura x86.

Algunos ejemplos: la instrucción movq 8(%rsp), %r10 copia el bloque de 64 bits con inicio en la dirección (%rsp + 8) dentro del registro %r10. Por su parte, una instrucción como addq %rax, %rdi suma los valores contenidos en los registros involucrados en la operación y almacena el resultado en el segundo.
Una vez terminada la ejecución de una instrucción, el contador de programa será incrementado automáticamente para acceder secuencialmente a la siguiente instrucción, o bien su valor será sustituido por otro distinto a través de una operación de salto.


Referencias bibliográficas:
  • Bryant R. E. and O'Hallaron D. R., Computer Systems: A Programmer's Perspective. Second edition. Addison-Wesley, 2010.

No hay comentarios:

Publicar un comentario