sisoputnfrba / foro

Foro de consultas para el trabajo práctico
149 stars 7 forks source link

Sobre la generación de interfaces IO #3638

Closed nicolasvultaggio closed 5 months ago

nicolasvultaggio commented 5 months ago

Tengo unas preguntas sobre el funcionamiento general de las interfaces a lo largo de todo el tp:

Yo tengo entendido que, tienen que haber varias interfaces disponibles para que los distintos procesos puedan trabajar, y entiendo que en general, cada vez que se "inicia" una interfaz, se debe conocer el nombre (ID) y su archivo de configuración, y entonces toda interfaz debe primero leer ese archivo para obtener el tipo de interfaz que será, y a partir de eso, obtener el resto de datos necesarios del archivo de configuración.

También entiendo que, cada interfaz recibe operaciones del kernel, y que por lo tanto, cada una tiene que comunicarse con el kernel desde distintas conexiones, para que:

Yo tenía pensado, hasta ahora, que a cada interfaz le sea asignado un hilo, que esté constantemente esperando instrucciones desde kernel, y que el proceso "main" del modulo interfaz pueda manejar esos hilos, por ejemplo, con una lista de hilos.

Pero entonces, como se generan estas interfaces? en ningún momento el kernel tiene una funcionalidad para crear una interfaz, como sabemos cuantas interfaces se deberán crear? Además "en todo momento al kernel podrán conectarse nuevas interfaces", como sería esto? porque en la consola no hay nada para crear una interfaz nueva así de la nada, en medio de la ejecución de otro proceso en CPU, por ejemplo. O, en realidad, el kernel tiene que estas escuchando todo el tiempo nuevas conexiones de distintas interfaces, (creo que va mas por este lado) pero donde se crean estas interfaces, como se indican? en el MAIN del modulo INTERFAZ?

La idea mas o menos la entiendo, que el MAIN del modulo interfaz pueda crear nuevas interfaces, las añada a la lista de hilos que mencioné previamente, y estas se conecten al kernel, para quedarse esperando sus operaciones.

En resumen, quería las respuestas a estas preguntas y además saber si estoy mas o menos lejos de entender el funcionamiento de las interfaces, o si entendí mal alguna parte de como debería ser, en general, la forma de trabajar.

nicolasvultaggio commented 5 months ago

O sea, entiendo bien todo lo que hace cada tipo de interfaz, o sea, sus operaciones (excepto las de dialFS, no entendí nada eso), lo que no entiendo es lo que sería el "ESQUELETO", de como funcionan las interfaces, como se conectan, no lo que hacen en sí.

LeandroCarbajales commented 5 months ago

Buenas! Paso a responder en general ya que veo algunos pre-conceptos erróneos sobre lo que se espera del sistema y luego en particular algunas preguntas:

Como se muestra en el diagrama de arquitectura del enunciado, cada interfaz es un Proceso (real) aparte (al igual que CPU, Kernel y Memoria), es decir, ejecutarán (en una terminal o desde el IDE) el módulo "Interfaz I/O" tantas veces como Interfaces quieran tener. Dicho esto, queda más clara la parte de "en todo momento al kernel podrán conectarse nuevas interfaces", en cualquier momento del sistema podemos ejecutar una Interfaz nueva para que se conecte al Kernel. De esta manera, te confirmo tu suposición de"el kernel tiene que estar escuchando todo el tiempo nuevas conexiones de distintas interfaces".

La idea mas o menos la entiendo, que el MAIN del modulo interfaz pueda crear nuevas interfaces, las añada a la lista de hilos que mencioné previamente, y estas se conecten al kernel, para quedarse esperando sus operaciones.

Con lo mencionado anteriormente, este no sería el caso, el módulo tranquilamente puede funcionar con un solo hilo, la forma de "multiplexarlos" no es con muchos hilos sino ejecutando varias instancias del módulo :)

Te resuelve las preguntas? Saludos! Lean

nicolasvultaggio commented 5 months ago

PERFECTO, me cierra completamente, eso de que se ejecuta varias veces el mismo modulo (es tan simple como ejecutar el archivo en otra consola entonces?) resuelve la mayoría de preguntas que tenía. Digamos, la única idea que mencioné, entonces, que sí tiene sentido, es que cada interfaz, al ser procesos distintos, se conecta al kernel desde distintos sockets. Muchas gracias!! me sirvió mucho, buena semana!

LeandroCarbajales commented 5 months ago

(es tan simple como ejecutar el archivo en otra consola entonces?)

Exactamente! Podés ejecutar una, y luego en otra terminal ejecutar otra (el mismo ejecutable, aunque quizás con otro archivo de configuración)

cada interfaz, al ser procesos distintos, se conecta al kernel desde distintos sockets

Claro! Cada vez que una interfaz se conecta al Kernel deberías guardarte ese socket para luego poder comunicarte con cada una por separado.

nicolasvultaggio commented 5 months ago

perfecto, me queda clarísimo ahora, muchas gracias!!!

nicolasvultaggio commented 5 months ago

perdon, me surgio otra duda, estos archivos de configuracion, van a depender de las pruebas del tp no? y como nos aseguramos que el archivo sea capaz de obtenerlos, porque cuando se inicia una interfaz, esta solo conoce el string del path del archivo, pero habra que ingresar manualmente el archivo de la prueba en el modulo para que este pueda conseguirlo?

iago64 commented 5 months ago

Buenas! Cómo va?

Efectivamente las configs van a ir dependiendo de las diferentes pruebas. Pra resolver el problema tienen 2 opciones:

  1. La mas fiaca, es ir editando el archivo de config ante cada prueba
  2. La mas amigable, es tener todos los archivos de config creados y pasarlos como parámetro del programa, tienen en el sitio de docs como pasarle argumentos al main.

Saludos.-

nicolasvultaggio commented 5 months ago

muchísimas gracias MAESTRO, buen día.