UTNianos

Versión completa: Planificacion de Hilos de Usuario
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Hola!!
Tengo unas dudas con SO, por favor si alguien me ayuda!!!

- Si tengo un proceso con 2 hilos de usuario (ult1 y ult2), cuando por ejemplo ult1 se va a io (bloquea todo el proceso ese),
luego al salir del io, ¿como sigue?

¿el utl1 que recien salio de io sigue ejecutando antes que ult2? (sin importar la biblioteca de hilos de usuario)
(si fuera así, la biblioteca de hilos de usuario ¿sólo la usaré para decidir que hilo ejecutar cuando los 2 hilos ult lleguen al mismo tiempo?

¿o el utl1 va a la cola de listos y se "reordena" segun la biblioteca de hilos de usuario que diga el enunciado?


Gracias!
Tengo las mismas dudas, estoy realmente en bolas con la parte de planificación de hilos, justo falte a esa clase.

Gracias
Cuando un ULT pide IO bloquea todo el proceso. Por lo tanto, la biblioteca de hilos no se entera de qué pasó. El SO hace el context switch, pasa a ejecutar cualquier otro y cuando le toque de nuevo al que tenía ULT sigue como estaba.

Creo que era así Carucha
es como dice dios.
Si no me equivoco:

Un KLT pidiendo una operación bloqueante (I/O, Disco,etc) bloquea ese hilo.
Un ULT pidiendo una operación bloqueante bloquea todo el proceso (bloquea el unico hilo de kernel de ese proceso).
Aca en el campus virtual Adro contesto esta misma pregunta
http://www.campusvirtual.frba.utn.edu.ar...hp?d=29863

Suerte!
Gracias chicos
(29-09-2014 08:49)SilvinaG escribió: [ -> ]Aca en el campus virtual Adro contesto esta misma pregunta
http://www.campusvirtual.frba.utn.edu.ar...hp?d=29863

Suerte!

Che, tenés pinta de ayudante vos =)




La idea de los ULTs es que el sistema operativo no sabe que existen. Como los hilos esos existen a nivel de usuario, el SO sólo ve que hay un proceso. ¿Y qué hace el SO cuando un proceso hace una IO bloqueante? Buen, lo bloquea =)

Entonces, como el SO bloquea a ese proceso, y todos los ULTs pertenecen a ese proceso... Se bloquean todos =)



Siempre existe la excepción del Jacketing y esas magias locas: la biblioteca de hilos de usuario sabe todo esto, y entonces en lugar de hacer la IO bloqueante, la efectúa en modo no bloqueante. La mayoría de las operaciones bloqueantes tienen su contraparte no-bloqueante. En lugar de decirle al SO "escribime esto en disco y bloqueame hasta que termines" le dice "escribime esto en disco y yo sigo con la mía". Dentro de un rato le pregunta "che, ya terminaste la escritura?", y el SO contesta.

Al programar la biblioteca de hilos de usuario podemos hacer eso: cuando el programa me pide IO bloqueante, yo se la pido al SO como no-bloqueante, y "bloqueo internamente" (o sea, no le doy turno de ejecución) al hilo **de usuario** que me lo pidió. Y, cada tanto (cuando termina la ráfaga de ejecución de otro hilo de usuario, por ejemplo), vuelvo a preguntarle al SO si esa operación terminó o no. Si terminó, lo "desbloqueo". Si no, reintento después.

Entonces, de ese modo, como el proceso **no se bloquea** (la IO es no-bloqueante), los hilos se bloquean sólo cuando piden la IO.

Pero para eso la biblioteca tiene que dar soporte y toda la bola. Por default, no pasa esto, sino que decimos que al bloquearse un ULT bloqueamos a todo el proceso.
(29-09-2014 13:50)Desert69 escribió: [ -> ]Che, tenés pinta de ayudante vos =)

Callese la boca!
Pregunta,

Como ve el SO la ráfaga de un proceso que tiene dos hilos de usuario si tengo que planificar con SJF? Como la sumatoria de las ráfagas de los hilos o estoy flasheando cualquiera?

Gracias
El SO no ve nada de los ULT. No tiene acceso, no existen.
Podríamos definir "longitud de la ráfaga" como "quantums que ejecuta el proceso hasta liberar la CPU".

¿Cómo la calcularías vos?
Yo sumaria las ráfagas de cada hilo pero no se, por eso pregunto
Pensalo asi. La biblioteca maneja un algoritmo. Ese algoritmo te dice que ULT va a ejecutar. Lo que ve el SO entonces seria la rafaga del proximo ULT a ejecutar...

Ahora............................................... todo lo que dije arriba seria en un mundo ideal y teorico. Si vamos a la realidad, no podes saber de antemano la proxima rafaga de un proceso, con lo cual deberias estimarla. Y ese seria el valor que deberias tomar para tomar la decision (y aca no hay ULTs que valgan, la estimacion es a nivel KLT o proceso).

Espero que haya quedado claro!
Entonces para ejemplificar, si yo tengo el SO que planifica por SJF y la biblioteca de hilos que planifica también por SJF... y tengo lo siguiente:

KLT1 -> ULT (3)
-> ULT (5)

KLT2 (6)

KLT3 (3)


Podria optaar por elegir ejecutar KLT1 o KLT3, es asi?
Páginas: 1 2
URLs de referencia