operating-system - sistemas - software independiente del dispositivo
Memoria mapeada IO-¿cómo se hace? (3)
¿Está preguntando acerca de los archivos asignados en memoria, o la asignación de memoria de puerto-IO?
Los archivos asignados en memoria se realizan mediante la paginación de las páginas e interceptando fallas de página en esas direcciones. Todo esto lo hace el sistema operativo mediante la negociación entre el administrador del sistema de archivos y el manejador de fallas de página.
El puerto-IO asignado en la memoria se realiza a nivel de la CPU mediante la sobrecarga de las líneas de dirección como las líneas del puerto-IO que permiten que las escrituras en la memoria se traduzcan en las líneas del bus QPI como puerto-IO. Todo esto se hace mediante la interacción del procesador con la placa base. La única otra cosa que el sistema operativo debe hacer es decirle a la MMU que no combine las lecturas y las escrituras a través de los bits de no-caché de escritura obligatoria y de PAE.
He leído sobre la diferencia entre la IO asignada en el puerto y la IO asignada en la memoria, pero no puedo entender cómo se implementa la Io asignada en la memoria en los sistemas operativos modernos (Windows o Linux)
Lo que sé es que una parte de la memoria física está reservada para comunicarse con el hardware y hay una Unidad MMIO involucrada en el cuidado de la comunicación del bus y otras cosas relacionadas con la memoria
¿Cómo se comunicaría un controlador con el hardware subyacente? ¿Cuáles son las funciones que el conductor usaría? ¿Se han corregido las direcciones para comunicarse con una tarjeta de video o hay algún tipo de "acuerdo" antes de usarlas?
Todavía estoy bastante confundido
La siguiente declaración en su pregunta es incorrecta:
What I know is that a part of the physical memory is reserved to communicate with the hardware
Una parte de la memoria física no está reservada para la comunicación con el hardware. Una parte del espacio de direcciones físicas, a la que se asignan la memoria física y la memoria asignada IO, es. Este diseño de memoria es permanente, pero los programas de usuario no lo ven directamente; en su lugar, se ejecutan en su propio espacio de direcciones virtuales al que el núcleo puede decidir asignar, donde quiera, memoria física y rangos de E / S.
Puede leer los siguientes artículos que creo que contienen respuestas a la mayoría de sus preguntas:
http://en.wikipedia.org/wiki/Memory-mapped_I/O
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/IO/mapped.html
Esencialmente es solo una forma de acceder a los datos, como si estuviera guardando / leyendo desde la memoria. Pero el hardware se detendrá en el bus de direcciones, y cuando vea la dirección que le corresponde, solo recibirá los datos en el bus de datos.