¿Cuál es la diferencia entre un registro de hardware y un registro asignado en memoria?

7

Esto ha sido desconcertante, así que lo pondré todo aquí. Al parecer, a través de MMIO , puede acceder a dispositivos externos utilizando una determinada dirección asignada en memoria, que luego se redireccionará a ese dispositivo (mediante una escritura, un paquete de comandos, etc.). Sin embargo, he estado escuchando descripciones mixtas de ambos registros de hardware (por ejemplo, como un registro de CPU / GPU, o incluso chips de sonido), y los registros mapeados en memoria se usan indistintamente. ¿Son la misma cosa?

Cuando dice un "registro mapeado en memoria", ¿no está refiriéndose a la dirección desde la cual un byte de datos se redirecciona a una dirección específica dentro de ese dispositivo (por ejemplo, la dirección 0x500 de GPU es para el registro TEXTURE_BUFFER). Sin embargo, un dispositivo asignado en memoria no puede asignar un registro físico dentro de la RAM.

Básicamente, ¿cuál es la diferencia entre un registro mapeado en memoria y solo un registro de hardware?


fuente
Si es el caso que esta pregunta no es adecuada, sugiero migrar esto a cs.stackexchange.com o que el cartel lo publique allí.
barlop

Respuestas:

2

La E / S asignada en memoria y los registros asignados en memoria no son lo mismo y no están tan estrechamente relacionados.

Se utilizó la E / S asignada en memoria, por ejemplo, en las primeras PC, donde parte del espacio de direcciones de la RAM se asignó al búfer de pantalla. (Y en algunos productos se usaba realmente la RAM normal para el búfer de pantalla, en lugar de tener el búfer en la tarjeta adaptadora de pantalla). En otros casos, un dispositivo de hardware, como un controlador de unidad de disco, usaría el direccionamiento mapeado en memoria para configurar / leer su control registros (Y supongo que las tarjetas gráficas modernas todavía asignan la memoria de visualización al espacio de direcciones del procesador de gráficos, aunque no sé que esto sea un hecho).

Los "registros mapeados en memoria" pueden significar varias cosas. Uno sería el ejemplo anterior del controlador de la unidad de disco con registros de control asignados en memoria. Otro caso completamente diferente sería un procesador que realmente tenga sus registros en la RAM. Esto fue bastante común con los procesadores de principios (50 a principios de los 70), ya que redujo considerablemente el número de piezas y también permitió algunas prácticas de programación "inteligentes". En algunos casos, el procesador estaba disponible en dos modelos, uno con registros asignados en memoria y el otro con registros "hardware" (más rápidos).

Y en algunos casos fue ambiguo en cuanto a qué era un registro y qué no, como en las máquinas de "pila" de Burroughs, donde se usaba una "pila" en lugar de registros estándar (con, IIRC, varios esquemas diferentes para " siguiendo "los registros en la memoria RAM).

Daniel R Hicks
fuente
2

Los registros de hardware mapeados en memoria se acceden como RAM. Todas las CPU tienen instrucciones específicas para leer / escribir RAM y estas mismas instrucciones se utilizan para acceder a los registros asignados en memoria.

Los registros de hardware en general no tienen que estar asignados a la memoria, esto es simplemente una convención común.

x86 proporciona dos espacios de direcciones en los que se utilizan dos grupos separados de instrucciones para leer y escribir: el primero es RAM o espacio de memoria (todos los MOV instrucciones), el segundo es el espacio de E / S (utilizando el IN y OUT instrucciones). En x86, los registros de hardware pueden aparecer en cualquier espacio.

También es posible que deba pasar por un nivel de direccionamiento indirecto para llegar realmente a un registro de hardware. Un dispositivo solo puede exponer un "puerto" en la memoria o en el espacio de E / S. Luego debe escribir un número de registro en la dirección y luego los datos que desea escribir en otra dirección. La escritura entonces ocurre. El antiguo 8563 VDC en el Commodore 128 funcionaba así. El CMOS RAM y algunos registros PCI también funcionan así.

Por supuesto, los registros de hardware de la CPU no están asignados a la memoria (no en x86 o en cualquier CPU común), es otro ejemplo de un registro de hardware.

Las CPU modernas tienen "registros específicos del modelo" (MSR) y estos se leen / escriben usando sus propias instrucciones ( RDMSR, WRMSR ). Otros registros de CPU tienen su propia instrucción ( LGDT, MOV xx, CR2, el EAX / RAX básico, etc.)

LawrenceC
fuente
-1

Mi conjetura basada en algo nos dijo un profesor de ciencias informáticas de un libro básico, pero coincide con lo que dice la página de wikipedia en MMIO. La CPU no sabe en qué dispositivo está escribiendo. En lo que se refiere, puede ser también memoria RAM. Algunos dispositivos usan una ubicación particular de memoria RAM. Supongo que eso sería lo que significa hardware mapeado. Pero puede haber una ubicación de memoria en el dispositivo de hardware, de hecho, probablemente debe haber ... para transferir los datos. La CPU no tiene que esperar, escribe en la ubicación en la memoria RAM que está asignada a un registro en el dispositivo. Un registro es una ubicación de memoria en la CPU o en un dispositivo de hardware. no en ram

Para ser más específico a tu pregunta. Un registro está en la CPU o en un dispositivo periférico de hardware. No en RAM / memoria principal. La ubicación en la memoria RAM / memoria principal, se llama simplemente una ubicación, nunca un registro. Una ubicación en la CPU o un dispositivo periférico generalmente no se llama ubicación o ubicación de memoria, y siempre se llama registro, ese es su nombre especial y propio. Si un registro se asigna a la memoria como sin duda hay muchos registros de dispositivos periféricos de hardware, entonces estaría bastante seguro de que se trata de un registro asignado en memoria.

Por lo tanto, si un registro de hardware no se asigna a la memoria ... por ejemplo, Si la CPU lo escribe directamente, entonces no se asigna la memoria. Parece que de ese artículo de wikipedia, tal vez si esas direcciones están ubicadas en un espacio especial y requieren pines especiales o un bus especial, las ubicaciones pueden estar en la memoria, pero no en MMIO, no en la memoria asignada.

Mirando esa página de wikipedia ... PMIO es decir, se considera que no está mapeado en memoria. Es cuando los registros de la CPU no se asignan a ubicaciones de memoria normales, sino a un espacio de direcciones especial. Así que en lugar de un registro de CPU de propósito general que puede escribir en un dispositivo o memoria, dependiendo de qué dirección se pone en el bus de direcciones. Con PMIO, (es decir, no un registro asignado en memoria), el registro se asigna a una ubicación de memoria específica del dispositivo que supongo que están llamando a un puerto.

barlop
fuente