Você está na página 1de 3

Prova SO 2016.

1 Suponha que exista um processador P5, 5x mais poderoso que um processador P1. Em
principio poderamos usar 5 processadores P1 ou um processador P5, com sistema operacional
para executar as mesmas 5 tarefas distintas. Explique, em ambos os casos como seriam
resolvidos dois problemas:

a) Uma tarefa precisa se comunicar com outra


b) Considerando escalonamento RR preemptivo com q = 5ms, uma tarefa recebe eventos
com intervalo de 8 ms.

Resposta:

a) P5 necessrio rea de memoria compartilhada. P1 necessrio ligao fsica para os


outros processadores, jumper.
b) P1 - Cada processador atua em tarefas distintas, no havendo necessidade de
tratamento, porm necessidade que cada processador receba seu respectivo evento.
P5 problema de sincronizao de eventos no escalonamento

0|P1|5|P2|10|P3|15|P4|20|P5|25
8 16 24
Utilizar um hardware de memoria (latch) para armazenar evento e quando tarefa
rodar novamente, liberar evento para tratamento.

2 Regio critica / deadlocks

Na prtica do jantar dos filsofos, uma equipe relatou que o sistema inteiro entrava em
deadlock. Considerar o cdigo ao lado e estabelecer as condies para que isto ocorra.
medita e come so funes cujo parmetro n representa seu tempo de execuo em ms.
As condies podem envolver a escolha do tipo de escalonamento, quantum (q) se
necessrio e ajuste separado ou conjunto de m e n.
01 #define N 5
02 sem_t garfo[5];//5 semforos iniciados em 1
03 void filosofo (int i){
04 while(1){
05 medita (int n);
06 sem_down (garfo [i]) ;
07 sem_down (garfo [(i+1) % N]) ;
08 come (int m);
09 sem_up (garfo [(i+1) % N]) ;
10 sem_up (garfo [i]) ;
11 }
12 }

Resposta:
Para que ocorra um deadlock, necessitamos:
diminuir o quantum, para que no seja possvel que o mesmo filosofo pegue dois garfos
consecutivos.
aumentar m, para numero absurdamente grande.
3) Processos / Threads: a) O que chaveamento de contexto? Descreva as aces executadas
pelo kernel para realizar o chaveamento de contexto entre processos (1,0)
O kernel recebe um comando, normalmente uma interrupo de timer, para que analise qual
programa atualmente no estado de PRONTO deva tomar conta da CPU. Escolhido o programa,
o kernel salva o contexto (registradores, PC, SP e outras informaes do estado do programa
em uma rea especfica). Da ele restaura nos regs. as informaes desta mesma rea, porm
do programa que passar a rodar, e promove um salto (jump ou branch) para o novo PC.

RESPOSTA:
Chaveamento de contexto, o processo pelo qual o sistema operacional salva o contexto do
atual programa antes de troca-lo, repassando registradores PC, PSW, para que ao retornar a
esse programa no haja perda de dados.

4) processos / threads
Considerando o diagrama de estados dos processos apresentado na figura ao lado:
a) complete o diagrama com a transio de estado que est faltando - t6 (0.3).
b) Identifique os estados: NEW, READY, TERMINATED, BLOCKED, RUNNING (0.5).
c) Apresente o significado de cada um dos estados (0.5) e transies (1.2).

resposta:
a) Desenhar o T6 ao lado de T4, porm sentido oposto. E6 = run -> ready
b) e1 = NEW, e2 = TERM., e3 = RUN, e4 = BLOCKED, e5 = READY
c) E1 novo processo a ser escalonado
E2 terminou execuo
E3 processo atualmente escalonado
E4 processo bloqueado enquanto executava
E5 processo preparado e na fila para ser excalonado

T1 finalizando o processo, desalocando memoria utilizado


T2 bloqueio do processo devido a interrupo espera de flay
T3 desbloqueio do processo, chegou sinal de I/o necessrio. Alocado na fila de
processos a serem escalonados
T4 escalonamento do processo, carrega contexto do novo processo escalonado,
retira da fila de processos a serem escalonados
T5 inicializao do processo novo, verificao de parmetro, alocao de memoria
inserir na fila de processos a serem alocados
T6 processo pode ter estourado tempo de quantum, salvar contexto, inserir na fila
de processos a serem alocado

5) Escalonamento de CPU:
Esquematize um sistema que possua trs tasks:
T1: processa os elementos de um buffer de N elementos (unsigned 8). Este processamento
simples e consiste em somar todos os elementos do buffer em uma varivel sem sinal de 8
bits. Quando este clculo terminar T1 manda uma mensagem para T2 e bloqueia.
T2: permanece bloqueada at que a recepo de uma mensagem ocorra. Quando a mensagem
recebida contabiliza o pacote recebido, imprime mensagem sobre o evento e devolve o
controle ao S.O (Yield()).
Handler de interrupo: Este handler chamado pelo controlador de recepo de dados
quando um pacote de N dados recebido. Neste momento o handler manda uma mensagem
para T1, que a desbloqueia.
Montar um diagrama explicativo usando o diagrama abaixo para situar T1, T2 e o handler de
interrupo.
Rotinas existentes:
send(TaskId, dados_tx): Dados_tx um Unsigned de 32 bits.
recv(TaskId): recebe um unsigned 32.
A funo de inicializao das taks create_task (int ID, *void func(void *)).
(3,0)
Pede-se:
a) Fragmentos de cdigo em C com a inicializao das tasks T1 e T2 e eventualmente algum
trecho para o handler de interrupo.
b) Parte dos cdigos que ficaro em loop para cada task T1 e T2. No caso do handler de
interrupo, este trecho de cdigo o que chamado quando a interrupo de HW ocorre e
termina quando o trabalho do handler terminado.

Resposta:
Int cont=0
Uint dados_tx
#define N 32
Uint_8_t buffer [N]

Void T1 (int Task id)


{
For (int i=0, i<32, j=i+1)
{
Dados_tx = dados_tx + buffer[i];
}
Send (T2, dados_tx);
}
Void T2 (int z)
{
If(recv(-1)!=0)
{
Cont = cont + 1;
Printf(evento n=%i, recebe=%u; cont, recv(1));
Yield();
}
}

Você também pode gostar