Closed fernandodanielmaqueda closed 4 weeks ago
Buenas Fernando!
I. a. Si, porque como decís generarías condiciones de carrera si mandas solicitudes concurrentemente. I. b. Esto quedaría más a criterio del equipo ya que son decisiones de código que no afectan los logs obligatorios. Lo que no les recomendaría es en hacerse líos con hilos extra. II. a. Se podría hacer de forma concurrente, ya que ahora sí no habría condición de carrera entre los hilos por liberar memoria. II. b. Para hacertelo simple, no es algo que vayamos a probar y de paso metiendome a las consultas de liberación de procesos, ninguno de los casos se probaría por lo que no me enroscaría mucho con esa parte de la implementación ;)
Saludos.
¡Buenas Fede!
Gracias por tu respuesta.
Creación de procesos Se tendrá una cola NEW que será administrada estrictamente por FIFO para la creación de procesos. Al llegar un nuevo proceso a esta cola y la misma esté vacía se enviará un pedido a Memoria para inicializar el mismo,
si la respuesta es positiva se crea el TID 0 de ese proceso y se lo pasa al estado READY
y se sigue la misma lógica con el proceso que sigue. Si la respuesta es negativa (ya que la Memoria no tiene espacio suficiente para inicializarlo) se deberá esperar la finalización de otro proceso para volver a intentar inicializarlo. Al llegar un proceso a esta cola y haya otros esperando, el mismo simplemente se encola.
Por cómo está redactado, uno podría entender que a lo que se refiere es a) crear ahí la estructura correspondiente al TCB (con TID 0) o b) enviarle la solicitud a Memoria (enviándole PID, TID 0 y el archivo de pseudocódiggo) para que cree el TID 0 del proceso en memoria.
Pero después también se establece:
PROCESS_CREATE, esta syscall recibirá 3 parámetros de la CPU, el primero será el nombre del archivo de pseudocódigo que deberá ejecutar el proceso, el segundo parámetro es el tamaño del proceso en Memoria y el tercer parámetro es la prioridad del hilo main (TID 0).
El Kernel creará un nuevo PCB y un TCB asociado con TID 0 y lo dejará en estado NEW.
Aclarando que el TCB del proceso llegaría ya creado estando el PCB en NEW, la única posibilidad de las anteriores sería la b). Entonces lo que concluyo con todo eso es que a Memoria se le realizan dos solicitudes, una después de la otra: una para que cree el proceso (reservando una partición para el mismo), y la otra para que cree el hilo con TID 0 (abriendo el archivo de pseudocódigo e inicializando su contexto de ejecución). Por lo que de las 4 posibles soluciones que se nos ocurrieron en I) b., la 4- quedaría descartada, ¿correcto? De las tres restantes, nos quedaríamos con la 2- (aunque no sea lo mejor porque cerraríamos el socket anterior e inmediatamente volveríamos a abrir otro), si es que cumplimos con lo esperado.
Saludos.
Perfecto, muchas gracias. Ahí quedó más claro. ¡Saludos!
Lenguaje
C
Descripción
¡Buenas! ¿Cómo va? En nuestro grupo en Kernel para la Planificación de Largo Plazo, planteamos tener dos hilos persistentes (o sea, que se mantienen durante toda la ejecución del programa), sobre los cuales nos fueron surgiendo algunas dudas más que nada en relación con lo de las conexiones efímeras con Memoria:
I) Hilo Planificador de Largo Plazo (en NEW): Se encarga de desencolar los PCBs de los procesos a crear de la cola de NEW y hacer las peticiones a memoria correspondientes.
II) Hilo Planificador de Largo Plazo (en EXIT): Se encarga de desencolar los TCBs de los hilos a finalizar de la cola de EXIT y hacer las peticiones a memoria correspondientes.
También tenemos algunas consultas más en relación con la finalización de procesos:
📔 Citas del enunciado/videos
💭 Soluciones posibles
Se nos ocurrieron varias soluciones posible para cada una, pero quisiéramos confirmar qué es lo esperado.
📝 Normas del foro