La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Base de la biblioteca de threads a nivel usuario del proyecto SODIUM.

Presentaciones similares


Presentación del tema: "Base de la biblioteca de threads a nivel usuario del proyecto SODIUM."— Transcripción de la presentación:

1 Base de la biblioteca de threads a nivel usuario del proyecto SODIUM

2 Descripción: La biblioteca permitirá crear hilos de manera de árbol jerárquico donde el proceso principal ejecutara normalmente, inicializara los hilos necesarios y luego cederá la ejecución a los mismos solo regresando al momento de finalizar. Cada thread podrá crear a su vez nuevos threads los cuales lo verán como padre. Un padre tendrá la capacidad de eliminar o suspender/resumir a cualquiera de su descendencia. Para ello la biblioteca creara y administrara estructuras de control (TCB) ubicadas en áreas de memoria del proceso.

3 Consideraciones: La biblioteca funcionara para arquitecturas INTEL de 32 bits de palabra. El máximo número de threads por proceso es de 4095. Al superar el límite se aborta el proceso. Para su desarrollo básico se utilizara un modelo FIFO non-preemptive. Para futuras ampliaciones se prevé prioridades y round robin. Primeramente solo se contemplaran funciones de creación y manejo básico de threads. Señales y sincronismo avanzado queda a futuras implementaciones.

4 La biblioteca deberá enmascarar las funciones de la familia exec y el clone ya que causarían comportamientos indeterminados. Si un proceso que haya inicializado la biblioteca invoca alguna de las mencionadas, debe ser abortado de inmediato. El nombre de la biblioteca será Numero de proceso + THLIB, donde el numero de proceso es el PID del mismo. Deberá existir un thread propio de la librería para motivos de administración de la misma. La biblioteca no podrá comenzar a menos que exista al menos un thread creado explícitamente por el proceso pesado. Si todos los threads se encuentran suspendidos o en espera, ejecutara el thread administrativo

5 TCB: -TID -> identificador único del thread en el proceso. -PARENT_TID -> identificador del thread progenitor, estará en blanco cuando el thread sea creado directamente por el proceso pesado. -PARENT_PROCESS -> PID del proceso al que pertenece el thread. -NEXT_TCB -> puntero a una estructura TCB que permitirá la formación de listas.

6 -STATUS -> estado actual del thread (ejecución, esperando, suspendido, listo) -MACHINE_CONTEXT -> registros de la CPU, puntero al stack y program counter del thread -TIMESTAMP -> día y hora de creación del thread. -PRIORITY -> prioridad del thread. Inmutable desde el mismo thread.

7 Modelo de estados de los threads: EjecutandoEsperandoSuspendidoListo

8 Listado de funciones basicas: Funciones para los procesos Funciones internas a la biblioteca (invisibles a los programas)

9 Funciones para los procesos

10 Bool thlibInit() Función que inicializa la biblioteca permitiendo la creación de nuevos threads por parte del proceso pesado. En caso de falla devolverá false.

11 Bool thlibStart() Función que, al ser invocada por el proceso, conduce a la planificación y ejecución del los threads creados previamente. Esta función solo podrá invocarse exitosamente una vez por un proceso llevando a un error abortivo cualquier invocación extra. Retorna false en caso de falla (Ej.: no existen threads en para el proceso).

12 TID createThread( (void *) startPoint, (void* ) args) Esta función crea un nuevo thread para el proceso. En principio, la prioridad, el tamaño y posición del stack serán valores por defecto, completándose luego al convertirse en parámetros para esta función. Como es habitual, la función en si devuelve el identificador del thread (puede que sea una estructura con el timestamp, etc.) y toma como parámetros la función que será el cuerpo del thread y la lista de argumentos para dicha función. Un thread se crea por defecto en el estado de listo/activo.

13 Bool cancelThread( TID ) Esta función permite la eliminación completa de un thread. Solo podrá eliminar un thread el padre del mismo proporcionando tu identificador. Si el thread no existe al momento de intentar eliminarlo se devolverá false, de lo contrario trae. Los threads podrán ser eliminados sin importar su estado actual, siendo quitados de la cola en que se encuentren y programados para limpieza.

14 Void yield() Esta función cambia el estado del thread de ejecutando a listo, permitiendo a otro (o el mismo) thread para ser planificado a la cpu.

15 Void exitThread() La función termina el thread que la invoca, quitándolo de ejecución y colocándolo en una lista de pendientes para limpieza.

16 void suspendThread () Suspende el thread que la invoque colocándolo en el estado de suspendido del que no saldrá hasta que otro thread lo resuma.

17 Bool resumeThread (TID) Resume el thread cuyo identificador se pasa como parámetro y lo coloca en estado de listo. Si el thread no se encontraba suspendido la función retorna false.

18 Unsigned long threadSleep (unsigned long time) Coloca el thread en estado de espera por, al menos, el tiempo pasado como parámetro. La unidad para el tiempo debe ajustarse a lo estándar del proyecto SODIUM. Como la biblioteca no será preemptive en un comienzo, el tiempo que el thread espera podría ser mayor al indicado. Retorna el valor real esperado por el thread.

19 TID getTid() Retorna el identificador del thread que la invoca. TID getParentTid() Retorna el identificador del thread padre del que la invoca. Si el thread fue creado directamente por el proceso pesado retorna NULL o equivalente.

20 bool joinThread( TID ) Como el estandar, esta funcion cambia el estado del thread a esperando hasta que el thread cuyo identificador es pasado como parámetro finalice. Este mecanismo debe implementarse con variables globales u algún otro mecanismo que no involucre al SO. Un thread no debe poder hacer join a si mismo.

21 Funciones internas a la biblioteca (invisibles a los programas)

22 Void cleanThreads() Elimina las estructuras y libera el stack de los threads en la cola de pendientes de limpieza.

23 Void wakeThread ( TID ) Despierta un thread en estado de espera cuando su tiempo ya se ah cumplido.

24 Void dispatch ( TID ) Mueve un thread del estado listo a ejecutando cargando su contexto.

25 Void sortQueue ( TID ) Reordena la cola de listos según el algoritmo de planificación actual.


Descargar ppt "Base de la biblioteca de threads a nivel usuario del proyecto SODIUM."

Presentaciones similares


Anuncios Google