Está en la página 1de 4

Parcial I, ITT328.

Subir archivo de word.

I Preguntas 20pts
I.A Describa los siguientes algoritmos para scheduling: round robin, priority, y
cooperative
Round Robin: Es un algoritmo que se usa para seleccionar todos los abstactos en un
grupo de manera equitativa comenzando por el primer elemento
Priority: Es lo que usa el scheduler para decidir que task se realizara primero, los que
tengan prioridad mas alta se realizan primero.
Cooperative: Es un tipo de multitasking en el que el OS no inicializa el context switch
de un proceso que esta corriendo a otro, en su lugar lo que hace es que para correr
varias tasks al mismo tiempo los procesos se van cediendo el control
periodicamente cuando estan logically idle o blocked
I.B ¿Qué es un thread? ¿Cómo se diferencia de un programa o task?
Un thread es una secuencia de tasks encadenadas que puede ser ejecutada al mismo
tiempo que otra task.
La diferencia que tiene con una task es que la task seria el proceso principal y el
thread la realiza. Y la diferencia que tiene con un programa es que ya el programa
son las tasks ya realizadas
I.C ¿Cuál es el contexto de un thread?
El contexto incluye toda la informacion que necesita el mismo para realizar la
ejecucion.
I.D ¿Describa el mecanismo para ejecutar threads de forma concurrente?
El thread principal corre normal mientras que los demas threads corren por prioridad
y van tomando turnos para ejecutarse
I.E En la tarjeta núcleo usada en la clase ¿Cuántos thread corren en paralelo?

I.F Defina cada uno de los posibles estados de un Main Thread y cómo un thread
llega a un estado en específico?

Running: Cuando esta listo para correr o ya esta corriendo


Ready: Cuando el thread no esta running pero no tiene cpu donde correr peor esta
listo para ejecutarse
Blocked: Cuando el thread esta inactivo temporalmente, no se puede ejecutar
hasta que llegue a runnable
Terminated: Cuando el thread deja de ejecutarse ya sea porque termino de
ejecutarse o porque ocurrion un error
II Asuma un escenario donde se quieren ejecutar cuatro tareas, y además a cada tarea se le
asigna un thread. La tarea 1 tarda un máximo de 1 ms en ejecutarse y se ejecuta cada 5
milisegundos. La tarea 2 tarda un máximo de 0,5 ms en ejecutarse y se ejecuta cada 2 ms.
La tarea 3 requiere máximo de 1 ms para ejecutar y se ejecuta cada 20 ms. La tarea 4
tarda un máximo de 6 ms para ejecutarse y se ejecuta cada 10 ms. ¿Es posible ejecutar
dichas tareas de manera concurrente? De ser posible explique cómo el scheduler podría
agendar la ejecución de dichas tareas. En caso contrario explique porque no es posible.
20Pts

task1 -> thread1 -> tarda 1ms -> y se ejecuta cada 5ms
task2 -> thread2 -> tarda 0.5 ms -> y se ejecuta cada 2ms
task3 -> thread3 -> tarda 1ms -> y se ejecuta cada 20ms
task4 -> thread4 -> tarda 6ms -> y se ejecuta cada 10ms

Creo que si es posible, y se ejecutarian por prioridad:


La primera que se ejecutaria (Active) seria la task 2 (blocked), (Active) despues la task 1
(Blocked), (Active) luego la 3 (Blocked) y (Active) por ultimo la 4 (Blocked)

Task 2 Task 1 Task 3 Task 4

III Asuma un microcontrolador con un CPU, con las siguientes especificaciones. 20pts

Registros Funcionalidad

SP Stack pointer

PC Program counter

R0-R31 Registros de propósito general

ACC Almacena resultados de operaciones del


ALU

SREG Estado del procesador

a Defina una estructura en C, para almacenar el contexto de un thread, el cual se


ejecuta en dicho CPU
struct thread
{
bool SP[5];
int PC [6];
int GPR;
int ACC;
bool sreg[7];
}

b Escriba el pseudocódigo, para hacer un context switch en dicho CPU

IV Los semáforos se pueden usar para limitar el acceso a los recursos. En el siguiente
ejemplo ambos threads necesitan acceso a una impresora y un puerto SPI. El semáforo
binario sPrint proporciona acceso exclusivo y mutuo a la impresora y al semáforo binario
sSPI proporciona acceso exclusivo y mutuo al puerto SPI. Considere el siguiente
escenario y determine si existe algún error. 20pts

Ambos ejecutan sus funciones de forma concurrente la unica diferencia es que el thread 1
invoca primero el print y el thread 2 invoca primero el bus, en el thread 1 puede ser que
esto no sea effectivo ya que no imprimira nada.

V Considere el problema de ejecutar tres threads utilizando un pre-emptive scheduler y


sincronización mediantes semáforos. Cada thread tiene un cuerpo body(), el cual
contiene el código que debe ejecutarse. La implementación básica de este sistema está
dado más abajo. Defina uno o más semáforos, para implementar un three-thread
rendezvous. Básicamente, cada vez que un thread ejecuta el bucle while, los dos
primeros thread en terminar su código start () esperarán a que el último thread termine su
código start (). Una vez todos los threads terminan la ejecución de start(), estos estarán
activos para ejecutar el body(). Para resolver este problema puede agregar todos los
semáforos que necesite y llamar funciones relacionadas a semáforos. Sin embargo
no puede modificar la estructura del código. 20pts

También podría gustarte