Beneficio de bus de memoria y E/S separados (lógicamente/virtualmente)

En mi curso sobre sistemas integrados, se explica que las entradas de memoria se pueden separar de las entradas de E/S usando un "bit de modo" para el decodificador de direcciones. La ventaja más obvia de esto es que la cantidad de líneas de dirección que deben decodificarse se puede reducir si tiene un sistema de direccionamiento separado para su memoria y su E/S. ¿Hay beneficios adicionales? ¿Tener estos separados lógicamente tiene otros beneficios, como poder usar diferentes velocidades de reloj o lógica de transferencia?

Pregunta relevante de stackoverflow con una respuesta larga: stackoverflow.com/questions/3215878/…

Respuestas (3)

Mi interpretación de lo que está describiendo es simplemente subdividir el espacio de direcciones en dos mitades: una mitad para IO y otra mitad para memoria. No está creando dos buses separados allí, sino solo uno que se usa para dos tareas lógicamente diferentes.

Si bien eso puede simplificar la decodificación del bus de direcciones, no mejora el rendimiento en absoluto.

Muchos microcontroladores integrados utilizan una arquitectura conocida como Arquitectura Harvard Modificada. En esto, tiene varios buses físicos diferentes, cada uno con su propio propósito: uno para RAM, uno para ROM, tal vez uno para IO. Estos tienen la gran ventaja de que es posible acceder a diferentes cosas al mismo tiempo que no se puede con un solo bus subdividido. Sin embargo, hace que la programación sea más compleja.

Creo que está preguntando sobre los buses de E/S y de memoria en los procesadores x86. En realidad, son espacios de direcciones diferentes y tienen instrucciones de acceso independientes.
Pero sigue siendo sólo un único autobús físico. No hay una diferencia real más que simplemente nominar el bit de dirección más significativo como un diferenciador de memoria/IO.
Pueden usar las mismas líneas, pero el bus de E/S es de 16 bits y el bus de memoria es de 20, por lo que el espacio de direcciones combinado no es contiguo ni tiene el mismo tamaño. Además, las instrucciones no son intercambiables, por lo que la separación es impuesta por el diseño de la CPU. Tal vez hubiera tenido más sentido usar ese pin como bit de dirección número 21, pero eso es historia.
@Austin También dice "En mi curso sobre sistemas integrados", por lo que es más probable que sea 8051 no x86. Sí, viven en el pasado en estos cursos.
En realidad, solo pregunto en general desde un punto de vista teórico. En realidad, no estudia ningún sistema informático en particular.

Esto es lo que hace la arquitectura X86 con las instrucciones IN/OUT, que se dirigen a los periféricos en lugar de a la memoria.

Puede ser útil una lógica de transferencia diferente. Por ejemplo, no almacenar en caché el acceso a los periféricos. O tener un comportamiento diferente para lecturas no alineadas. También le brinda un bit 17 "gratuito" en una arquitectura de 16 bits, que es cuando se introdujo la técnica. La velocidad del reloj debe permanecer igual, pero potencialmente puede tener un número diferente de "estados de espera".

Sin embargo, en estos días se considera mejor simplemente hacer que la MMU sea más inteligente y permitirle manejar estos efectos.

O, para usar diferentes palabras para lo mismo: el reloj de E/S puede tener una velocidad diferente a la del reloj de la memoria. El reloj del procesador "debe permanecer igual".

Según mi instructor, hay muchos beneficios potenciales, porque diseñar los autobuses de esta manera permite parámetros de configuración totalmente diferentes. Esto significa que puede tener diferentes anchos de datos/direcciones, así como diferentes velocidades de reloj.