Pregunta

Sé un poco acerca de la asamblea, y que hay 4 o 8 o así de registros de propósito general.¿Cómo todos los programas en un equipo de trabajo, con sólo esa cantidad de registros, especialmente con el multithreading y de todo?

¿Fue útil?

Solución

El subproceso múltiple en sí no afecta el número de registros en uso. Cuando se cambia un hilo, generalmente tiene sus registros guardados en la memoria y el siguiente hilo para ejecutar tiene esos registros cargados de su guardado anterior.

Un ejemplo es un sistema que tiene una estructura de bloque de control de hilo (TCB). Esta estructura contendría (mientras el hilo no se estaba ejecutando), el puntero de instrucciones guardado, el puntero de pila, los registros de propósito general, los registros de puntos flotantes, las estadísticas de hilo, etc. En resumen, todo lo necesario para restaurar totalmente el hilo en el estado en el que estaba cuando se cambió para que se ejecute otro hilo.

Y no todo lo que sucede en una computadora se hace en registros. Los compiladores modernos pueden optimizar el código para que los elementos de datos utilizados se mantengan en los registros, pero la gran mayoría de los datos se mantienen en la memoria y solo se compran en registros cuando es necesario.

El mejor libro que he leído sobre el tema es Tanenbaum's "Organización de informática estructurada" que examina las computadoras en términos de capas, desde el nivel de lógica digital hasta el nivel del sistema operativo, y cada nivel se basa en el anterior.

           alt text

Aparte: Mi sueño es escribir algún día un libro como este que cubre todo, desde el nivel de quark hasta emacs :-)

Otros consejos

Las otras variables y las pilas de hilos generalmente se almacenan en el espacio de memoria protegido, donde se pueden llamar a los registros cuando sea necesario.

Es posible que desee ver el libro Los elementos de los sistemas informáticos Para una buena comprensión de cómo funciona la CPU de su computadora. El libro está configurado como una serie de proyectos en los que trabaja desde una puerta NAND a una CPU, ensamblador, compilador simple y en un pequeño sistema operativo. Es invaluable para comprender cómo se ajustan todas las piezas de su computadora.

Cada vez que un hilo (o proceso) swaps, todos los registros se insertan en la pila por el kernel del sistema operativo en una estructura de datos que generalmente se llama el Bloque de Control de Proceso.Entonces, cuando el hilo de/proceso de swaps de nuevo, el registro de los datos se leen de PCB, y se extrae de la pila a los registros.


También hay registros internos y una tabla de asignación que el x86 ha internamente ese tipo de configurar un virtual registro de la tabla a preservar el IA32 conjunto de instrucciones de la arquitectura a pesar de tener una mayor flexibilidad para el diseño de superscalar arquitecturas y sofisticado instrucción de algoritmos de programación.

Además, los conjuntos de instrucciones suelen tener un carga y tienda la instrucción, que se utiliza en conjunción con punteros a memoria, que permite almacenar los datos de los registros en la memoria.Que es donde el término de la Carga de la Tienda de máquina viene, es decir, un equipo que no tiene instrucciones que operan directamente en la memoria.

Algunos equipos tienen instrucciones que operan sobre la memoria;algunos están basado en la pila.Depende de los diseñadores y de las limitaciones que se coloca en el hardware.

Debe darse cuenta de que miles de millones de instrucciones de ensamblaje se ejecutan incluso para cosas simples. Esos registros están obteniendo sus valores a menudo.

En realidad, es bastante interesante cómo la computadora es capaz de usar tan pocos registros para lograr todo lo que hace.

Es una programación realmente inteligente a nivel de ensamblaje (generalmente debido a compiladores terriblemente inteligentes) lo que permite que tan pocos registros se usen de manera tan eficiente.

Si un problema es imposible de completar solo con los pocos registros proporcionados, el programa generalmente "derramará" sus registros en la pila de memoria principal. Al recordar en qué parte de la pila colocamos nuestros registros derramados, podemos recuperarlos fácilmente.

Cuando nos quedamos sin registros, necesitamos simplemente almacenarlos en la pila, lo que nos da LEJOS Más espacio del que la mayoría de nosotros necesitamos para nuestros programas.

En el caso específico de múltiples subprocesos, simplemente guardamos todos nuestros registros en la memoria, luego tenemos una pizarra limpia para los otros hilos.

Esa es una de las cosas para las que se utiliza el otro almacenamiento de la computadora, particularmente RAM, para guardar y restaurar bits de datos dentro y fuera de los registros.

Cuando se cambia un hilo para que se ejecute otro hilo. El primer estado de registro de hilos se guarda en algún lugar (en la pila o en alguna otra estructura de datos), y el estado de registro de segundos de hilo se restaura desde donde se guardó antes. Ram es lo suficientemente rápido como para que miles de estos interruptores puedan ocurrir en un segundo, pero toma suficiente tiempo que si está cambiando los hilos innecesariamente, puede afectar el rendimiento.

Otra ocurrencia muy, muy común son las variables locales: si se usa una variable local durante un período de tiempo lo suficientemente corto, es posible que nunca existiera fuera de un registro. Sin embargo, en muchos casos, es posible que una variable local sea necesario guardar el registro a una ubicación de memoria para que se pueda cargar y manipular algún otro valor en un registro. Lo mismo ocurre en realidad para casi cualquier variable, no solo a los lugareños (sino que es mucho más probable que un local nunca tenga una existencia en la memoria).

Esa es una pregunta bastante involucrada y la respuesta depende de la arquitectura de su CPU.

En los buenos días, tenías razón, de hecho, solo había unos pocos registros de propósito general. Hoy en día, la CPU y el compilador juegan un juego de "Tres tarjetas"Con su propósito general registrados a través de técnicas como Registrar el cambio de nombre.

Aunque en arquitecturas simples es cierto que los registros se copian a la memoria [caché] cuando ocurre un interruptor de contexto, técnicas como Smt "Tonto" el sistema operativo para que piense que hay más núcleos de lo que realmente son.

Pero la respuesta más general a su pregunta es que los datos se mueven hacia los registros mucho. Y es por eso que una gran cantidad de las instrucciones que ve en cualquier programa de ensamblaje son las instrucciones de "moves". Los diseñadores de CPU y compiladores gastan mucho tiempo y dinero optimizando sus diseños para que no mueva los datos de la memoria principal (lenta) a los registros: intentan mantener los datos en caché tanto como sea posible. Esta gran cantidad de instrucciones de "moves" es la razón por la cual la latencia de memoria y la velocidad del bus son tan cruciales para el rendimiento de la computadora en general.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top