Buenas, me quedaron algunas dudas respecto a E\S que agradeceria si me las pudieran aclarar:
a) No me quedo clara la diferencia entre controlador de E\S, bridge, interfaz y adaptador
b) El bus interno de un sistema es siempre simple?
c) La forma de tomar control de un bus (o sea si es un sistema slave-master, o bus inteligente, o el tipo de arbitraje que se aplica) es algo que es parte de la especificacion del bus o de la CPU? Es algo decidido por hardware (esta construido para que sea asi) o por software (se programan rutinas pàra que el bus se comporte de esa forma)
d) Supongamos que tengo un controlador de E\S con el que se interactua a travez de la direccion 0x00FFF, y en un programa en C tengo un puntero que desreferencia ese lugar de memoria, tendria un core dump porque no es un lugar de memoria al que pueda acceder? No voy a poder usar de ninguna forma esa direccion de memoria para, por ejemplo, una variable de mi programa? Cambia en algo si la CPU tiene espacio de memoria propio o compartido?
e) Cual es la diferencia entre "memoria compartida" (lo que se usa en tarjetas graficas) con la modalidad de "registros de E\S"? Es solo el espacio?
f) Como afectan las distintas topologias que puede tener un periferico a como programo una rutina que interactue con el?
Desde ya muchas gracias,
Saludos,
Rafael.
a) El controlador es la parte que dota de inteligencia al dispositivo de E/S. Por ejemplo el controlador de una impresora logra que esta convierta letras y números representados en ASCII en sus respectivas representaciones gráficas impresas con tinta sobre una hoja de papel. Bridge, adaptador e interfaz se refieren básicamente a lo mismo: la frontera de vinculación entre un bus de comunicación y otro. La "interfaz" es el caso donde la adaptación requerida es muy simple. En el caso del adaptador la conversión es compleja. El bridge es un adaptador de buses internos.
b) En términos generales la respuesta es no, ya que pueden haber buses internos complejos (ej: PCI). Lo que sí ocurre es que el bus de memoria es simple y está presente siempre.
c) Es parte de la especificación del bus y está resuelto a nivel del hardware y del "firmware" (rutinas de software que pueden formar parte de los elementos que conforman el controlador del bus.
d) Si estás usando E/S mapeada a memoria (espacio compartido) en una computadora sin protección de memoria (concepto que van a estudiar en Sistemas Operativos), puedes acceder perfectamente a ese registro de E/S mediante un puntero de C. Claramente el compilador no podrá alocar una variable en ese lugar (porque no es memoria física), pero los compiladores poseen, según la arquitectura la máquina para la cual compilan, un "mapa de memoria" que les dice que tipo de elementos hay en cada región del espacio de direcciones. Los registros que estén ubicados en el espacio de direcciones propio de E/S (en el caso de una CPU que tenga esa característica) solo podrán ser accedidos mediante las funciones in(dirección) y out(dirección, valor).
e) Sí, es solo la forma de acceso. Las CPUs x86 tienen un diseño de E/S con espacio propio de direcciones, pero al diseñar el PC se dieron cuenta que esa característica es muy mala a la hora de mover grandes volúmenes de datos como es el caso de las tarjetas gráficas, de allí que decidieron introducir un especio de E/S mapeado a memoria en el diseño de la arquitectura del PC.
f) Nosotros solo estudiamos en el curso el caso de controladores de E/S conectados directamente al bus interno de la CPU. En el caso que haya un bus inteligente de por medio, la programación deberá utilizar un conjunto de funciones de biblioteca apropiadas para el bus, o trabajar directamente con los registros de E/S del controlador del bus para lograr que transfiera datos hacia y desde el controlador de E/S que pretendo acceder el cual tendrá asignado un ID específico dentro del bus.
Espero que te haya quedado más claro.
Saludos.
Sergio.
b) En términos generales la respuesta es no, ya que pueden haber buses internos complejos (ej: PCI). Lo que sí ocurre es que el bus de memoria es simple y está presente siempre.
c) Es parte de la especificación del bus y está resuelto a nivel del hardware y del "firmware" (rutinas de software que pueden formar parte de los elementos que conforman el controlador del bus.
d) Si estás usando E/S mapeada a memoria (espacio compartido) en una computadora sin protección de memoria (concepto que van a estudiar en Sistemas Operativos), puedes acceder perfectamente a ese registro de E/S mediante un puntero de C. Claramente el compilador no podrá alocar una variable en ese lugar (porque no es memoria física), pero los compiladores poseen, según la arquitectura la máquina para la cual compilan, un "mapa de memoria" que les dice que tipo de elementos hay en cada región del espacio de direcciones. Los registros que estén ubicados en el espacio de direcciones propio de E/S (en el caso de una CPU que tenga esa característica) solo podrán ser accedidos mediante las funciones in(dirección) y out(dirección, valor).
e) Sí, es solo la forma de acceso. Las CPUs x86 tienen un diseño de E/S con espacio propio de direcciones, pero al diseñar el PC se dieron cuenta que esa característica es muy mala a la hora de mover grandes volúmenes de datos como es el caso de las tarjetas gráficas, de allí que decidieron introducir un especio de E/S mapeado a memoria en el diseño de la arquitectura del PC.
f) Nosotros solo estudiamos en el curso el caso de controladores de E/S conectados directamente al bus interno de la CPU. En el caso que haya un bus inteligente de por medio, la programación deberá utilizar un conjunto de funciones de biblioteca apropiadas para el bus, o trabajar directamente con los registros de E/S del controlador del bus para lograr que transfiera datos hacia y desde el controlador de E/S que pretendo acceder el cual tendrá asignado un ID específico dentro del bus.
Espero que te haya quedado más claro.
Saludos.
Sergio.