Ciências da computação dia 261
Sistemas Operacionais
Tratamento de interrupção
- empilha o contador de programa atual
- carrega o novo contador de programa
- procedimento em assembly salva os registradores
- procedimento em assembly configura uma nova pilha
- executa serviço de interrupção escrito em C (lê e armazena a entrada)
- procedimento em C volta para o procedimento em asm
- procedimento em assembly inicia o novo processo
Classificação de processos
- CPU Bound
- I/O Bound
- Sabendo o tipo do processo, é possível implementar rotinas no escalonador para otimizar o tempo ocioso
- Para otimizar é possível utilizar: buffer, paralelismo real, etc.
CPU Bound
- utiliza muita CPU
- tempo de execução é dado por ciclos da CPU que foram(serão) usados
- tem sensibilidade ao escalonador (performance depende dele, já que ele dirá quando o processo pode usar a CPU)
I/O Bound
- realiza muito I/O
- tempo de execução dado pela operação de Entrada e saída
- é menos afetado pelo escalonador
- tempo de espera da entrada ou saída é o limitante
- Banco de dados, web server, etc.
Escalonador
- sua função é não deixar a CPU ociosa
- mudança de contexto (processo) → tarefa custosa
- o escalonamento é necessário quando → um processo é criado, bloqueado e terminou a execução.
- quando há um bloqueio, o escalonador pode decidir continuar esperando pelo I/O ou seguir para outro processo mais rápido
Tipos de algoritmos do Escalonador
- Preemptivo → suspende o processo que está sendo executado
- Não preemptivo → executa tudo até o programa acabar ou houver um bloqueio
Preemptivo
- muita troca de contexto
- suporta melhor a responsividade
- processos com prioridade são executados na hora
- fila prioritária
- bom para sistemas em tempo real
Não preemptivo
- era usado em sistemas uni-core
- há menos tempo desperdiçado devido a menor troca de contexto
- mais previsível o tempo de execução
Características para um Escalonador
- justiça → cada processo tem uma parcela de tempo justa para usar a CPU
- balanceamento → diminuir a ociosidade do sistema
- cumprimento da política do sistema → uso da prioridade, etc.
- deve ser encaixar ao tipo de ambiente (batch, interativo, etc.)
Sistemas BATCH
- vários dados ao mesmo tempo para processar
- sem muito I/O
- necessário maximizar o uso da CPU
- não precisa de respostas rápidas
- pouca troca de contexto
- escalonador vai para aquele com menor tempo de execução ou menor uso de memória
- escalonador também pode seguir a ordem do user ou através da pilha de tarefas
Sistemas Interativos
- alta interação com o user
- alta troca de contexto
- responsividade para o user
- escalonador precisa se adaptar a carga de trabalho e manter equilíbrio entre responsividade e uso de CPU
- escalonador deve ter baixo tempo de resposta (fatias de tempo menor pra cada um), preempção (dar chance para outro processo executar), prioridade para processos interativos, aumentar a prioridade para processo a muito tempo na fila
Sistemas de tempo real
- tarefas precisam ser executadas dentro do deadline
- maior tempo para cada processo
Jitter
- variação entre o tempo de resposta e o tempo ideal
Overhead
- tempo não utilizado
- troca de contexto
Algoritmos de escalonador para sistemas BATCH
- three level
- FIFO
- Shortest job first
- shortest remaining time next
Three Level
- 3 escalonadores (CPU, memória e admissão)
- admissão → processos menores primeiro; leva em consideração menor acesso a CPU e maior uso de I/O
- memória → verifica quanto tempo está esperando, tempo de CPU, tamanho, importância
- CPU → executa o próximo
FIFO
- segue a ordem de requisição dos processos
- não preemptivo
- vai empilhando os processos
Shortest Job First
- menor é executado primeiro
- não preemptivo
- menor turnaround médio
Turnaround médio é o tempo médio de execução de todos os processos. Nesse método, vê-se a combinação de processos que minimizam o tempo.
ex:
job 1--10t
job 2--20t
job 3--5t
job 4--2t
A:
Job1 → job2 → job3 → job4
10 + (20 + 10) + (20 + 10 + 5) + (20 + 10 + 5 + 2) →112/4 →28
B:
job4 → job3 → job1 → job2
2 + (2+5) + (2+5+10) + (2+5+10+20) → 63/4 → 15.75
Dessa forma, colocando os jobs em ordem crescente de tempo, temos o melhor turnaround médio
Shortest remaining time next
- preemptivo
- da prioridade para processos com menor tempo de execução restante
- processos longos vão demorar muito para serem escolhidos para usar a CPU