1. Estados
1.1. Pronto
1.2. Executando
1.3. Bloqueado
1.4. Finalizado
2. Segurança e recuperação de erro
2.1. Tipos de Estruturação
2.1.1. Hierarquia
2.1.1.1. Nível pai usa serviços do nível filho
2.1.2. MV
2.1.2.1. SO's diferentes rodando no mesmo PC
2.1.3. SO Multiprocessado
2.1.3.1. 1) Arquitetura fortemente acoplada: processadores dividem 1 memória e io. É gerenciado por 1 SO
2.1.3.2. 2) Arquitetura fracamente acoplada: sistemas computacionais são independentes e usam seus próprios SO's com memória, io, eoscarai
2.1.4. SO distribuído
2.1.4.1. Mestre-escravo, simétrico, eoscarai. A presença da rede é transparente
2.1.5. SO OO
2.1.5.1. Servidores excluem e criam novos objetos. O kernel faz escalonamento e comunicação entre processos. Quem faz o resto são os objetos
2.2. Existe geralmente uma matriz de acesso de permissões
3. Escalonamento de processos
3.1. Define processo a ser executado no momento
3.2. Algoritmos
3.2.1. Time-slice
3.2.1.1. Quando o processo que está na fila entra no estado ~executando~, ele tem um tempo de intervalo (time-slice) para ser executado, pra não ocorrer Starvation
3.2.2. Round-robin
3.2.2.1. Faz o mesmo que o time-slice, mas a fila de processos é circular e sem uso de prioridades.
3.2.3. Prioridades
3.2.3.1. O escalonamento de processo pode executar em ordem de prioridade, mas pra evitar starvation, ele pode aumentar a prioridade do processo quanto maior é sua espera na fila de prontos
3.2.4. COMO EVITAR DEADLOCK :
3.2.4.1. Ocorre quando tem: exclusão mútua && espera por recurso && espera circular && não-preempção (um proc não tem poder de roubar recurso)
3.3. COMO EVITAR STARVATION : time-slice
4. Tratamento de interrupções
4.1. Interrompe funcionamento do programa; podem ser assíncronas;
4.2. Cada interrupção tem um nível de prioridade
5. Gerência de memória
5.1. Gerência de mem. virtual
5.1.1. Pode ser maior que memória real
5.1.2. Dificulta a proteção do código
5.2. Gerencia de mem. real
5.2.1. Dividida em blocos de tam. fixos
5.2.1.1. Sem fragmentação (pq cada prog. tem tamanho fixo. Pode ter desperdício de memória)
5.2.2. Dividida em blocos da tam. variáveis
5.2.2.1. Com fragmentação (cada prog. aloca o espaço que ele precisa apenas)
5.2.2.2. Combate de fragmentação: realocação de memória
5.2.2.3. Facilita proteção do código
5.3. 1) Contígua + Monoprog
5.4. 2) Não-contígua + Monoprog
5.4.1. Overlay
5.4.1.1. Ocorre quando o tamanho do programa é maior que a memória. A solução é dividir o programa em fases (fixas e móveis), e alocar e desalocar da área de overlay sempre que precisar
5.5. 3) Contígua + Multiprog
5.5.1. Partição
5.5.1.1. 1) Cada programa tem um tamanho fixo na memória. Pode gastar memória sem precisar
5.5.1.2. 2) Cada programa tem alocado só a memória que vai precisar. Pode ter fragmentação da memória
5.5.2. Relocação dinâmica
5.5.2.1. Cálculo +simples de endereço feito por tradutor dinâmico: Endereço real = endereço lógico + registrador base
5.5.3. Swapping(time-slice)
5.5.3.1. Troca processos via interrupção para parecer que eles estão sendo executados ao mesmo tempo. Escalona pro prioridades
5.6. 4) Não-contígua + Multiprog
5.6.1. Paginação
5.6.1.1. Utiliza memória virtual para dividir programa em páginas que são armazenadas não necessariamente na ordem
5.6.1.2. Quando o programa é maior que a memória, precisa usar LRU (least recently used) pra armazenas as páginas em momória.
5.6.1.3. Endereço virtual é +complexo e feito pela DAT tbm.
5.6.1.3.1. Endereço real [ p ][ d ] p = endereço em memória d = depende do tamanho da memória
5.6.1.3.2. Tabela de mapeamento de pag. [ r ][ s ][ p ] r = bit que diz se tá em mem s = endereço em disco
5.6.1.3.3. Endereço lógica [ e-d ][ d ] e (+) RegBase = p
5.6.2. Segmentação
5.6.2.1. Divide o programa ainda mais: em segmentos, entaõ os blocos tem tamanhos variados
5.6.2.2. Maior proteção
5.6.3. Paginação + Segmentação
5.6.3.1. Usa os dois mapas de paginação e segmentação
5.6.3.2. Endereço lógico tem 3 níveis: segmento, página, deslocamento na página