Buscar

Sistemas Operacionais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Princípios
	Sistema Operacional é uma camada de software localizada entre aplicativos e o hardware.
SHELL conecta usuários ao SO
APIs conecta APLICATIVOS ao SO
SO comunica com o HARDWARE via Drivers de dispositivo.
Monotarefa > Executa UMA TAREFA DE CADA VEZ;
Multitarefa > Processos podem ser executados SIMULTANEAMENTE/PARALELAMENTE.
Simultâneo X Concorrente (1º: 2 processadores; 2º: 1 processador)
Monousuário 
Multiusuário
Monoprocessamento > SO que trabalha com UM NÚCLEO de processador;
Multiprocessamento > Trabalha com VÁRIOS NÚCLEOS de processador.
MODO NÚCLEO
Manipula diretamente o hardware (REGISTRADORES, PORTAS I/O, MEMÓRIA);
Todas as instruções do processador podem ser executadas.
MODO USUÁRIO
Não tem privilégio com o hardware;
Interage com o KERNEL;
TRAP ou EXCEÇÃO (Interrupção de software) >> alterna entre MODO NÚCLEO x MODO USUÁRIO 
Tipos de KERNEL
Monolítico
Todas as funções privativas estão no MODO NÚCLEO
KERNEL é compilado e vai para a RAM como bloco único (Aquilo que esta na memória é todo o KERNEL. Não consegue fracionar em peças menores)
DETECÇÃO DE ERROS é mais difícil, pois não tem peças menores. É MONOBLOCO.
Grande desempenho
Não existe mudança de modo (USUÁRIO/NÚCLEO)
SOs vulnerável a programas mal comportados. 
Micronúcleo
Somente o mínimo roda com privilégios elevados
Outras funcionalidades são oferecidas através de programas chamados SERVIDORES
Funções de GERÊNCIA DE MEMÓRIA, THREADS e COMUNICAÇÕES entre processos IPC.
A maioria dos serviços roda em MODO USUÁRIO
Muitas funções do KERNEL ficam liberadas no MODO USUÁRIO para acesso aos aplicativos
Alto custo nas transições entre MODO NÚCLEO e MODO USUÁRIO.
Exonúcleo
Um núcleo faz GERÊNCIA DE RECURSOS DO SISTEMA e um conjunto de bibliotecas IMPLEMENTAM A ABSTRAÇÃO de um SO.
Aplicativo pode utilizar diretamente os recursos dos dispositivos do sistema ou pode utilizar bibliotecas de software e são capazes de compartilhar o mesmo hardware simultaneamente, similarmente a uma MÁQUINA VIRTUAL.
O Hardware é alocado previamente, não podendo ocorrer o acesso indevido de outro sistema.
Não oferece abstração de hardware.
Controles de E/S
Controlada por Programa
Modo Bloqueado: CPU dedicada ao periférico do início ao fim de toda a operação de E/S. PERDE MUITO TEMPO.
Pooling: certo grau de paralelismo. FLIP-FLOP associado a cada dispositivo de E/S. EXISTE A NECESSIDADE DE TESTES. FICA PERGUNTANDO SE ACABOU.
Interjeição: POOLING aprimorado. GRUPO DE DISPOSITIVOS PERGUNTANDO SE ACABOU.
Controlada por Interrupção
Dispositivo envia sinal a CPU. CPU interrompe o processamento e desvia a execução para a rotina de atendimento ao dispositivo que enviou a interrupção.
DMA (Acesso Direto a Memória)
Permite que os dados sejam transferidos entre memória e periféricos sem a intervenção da CPU, exceto no início e no final da transferência.
Buffer de E/S
Área de memória utilizada pelo controlador para DMA
No momento da transferência DMA, controlador assume controle do barramento e não gera uma interrupção. CPU pode realizar tarefas sem utilização do barramento.
Processos
	É uma abstração de programa em execução.
	O mesmo programa pode estar em execução duas vezes, neste caso, dois processos estão criados na máquina.
	É apenas um programa em execução, acompanhado dos valores atuais do CONTADOR DE PROGRAMA (é um registrador da CPU que indica qual é a posição atual na sequência de execução de um computador), dos REGISTRADORES e das VARIÁVEIS.
	A ideia principal: um processo constitui uma atividade. Ele possui PROGRAMA, ENTRADA, SAÍDA e um ESTADO. Um único processador pode ser compartilhado entre os vários processos, com algum algoritmo de escalonamento usado para determinar quando parar o trabalho sobre um processo e servir outro.
	Quanto ao uso de CPU, um processo pode ser:
CPU BOUND: Gasta mais tempo em CPU e pouco tempo de I/O.
I/O BOUND: Gasta mais tempo consumindo recursos de I/O e pouco tempo executando processamento em CPU.
Criação de Processo	
	A solicitação de criação de um novo processo ao sistema operacional gera a criação de um novo PCB (Bloco de Controle de Processo) e um novo espaço de endereçamento em memóri para o novo processo.
	Quatro eventos que fazem com que processos sejam criados:
Início do sistema
FOREGROUND (Primeiro plano. Interativo);
BACKGROUND (Segundo plano. DAEMONS. Não interativo);
Execução de uma chamada de sistema de criação de processo por um processo em execução;
Uma requisição do usuário para criar um novo processo;
Início de uma tarefa em lote (Batch Job).
TECNICAMENTE, um novo processo (PROCESSO FILHO) é criado por um processo existente (PROCESSO PAI) executando uma chamada de sistema para a criação de processo. Esse processo (PAI) pode ser um processo de usuário que está executando, um processo de sistema invocando a partir do teclado ou do mouse ou um processo gerenciador de lote. O que o processo (PAI) faz é executar uma chamada de sistema para criar um novo processo (FILHO) e assim indica, direta ou indiretamente, qual programa executar nele.
Depois que o processo é criado (UNIX/WINDOWS), o pai e o filho têm seus próprios ESPAÇOS DE ENDEREÇAMENTO DISTINTOS. Se um dos dois processos alterar uma palavra em seu espaço de endereçamento, a mudança não será visível ao outro processo. 
No UNIX, o espaço de endereçamento inicial do FILHO é uma CÓPIA do espaço de endereçamento do PAI. No WINDOWS, os espaços de endereçamento do PAI e do FILHO são DIFERENTES desde o início. 
No UNIX, um processo, todos os seus filhos e descendentes formam um grupo de processos.
No WINDOWS não apresenta nenhum conceito de hierarquia de processos.
Término de processos
O processo terminará pelas seguintes razões:
Saída Normal (Voluntária);
Terminou a tarefa
BOTÃO “X”
UNIX = EXIT
WINDOWS = ExitProcess.
Saída por Erro (Voluntária);
Fornecimento de parâmetros errados.
Calculadora que soma símbolos que não estão no universo dos números
Erro fatal (Involuntário);
Execução de instrução ilegal;
Referência à memória inexistente.
Divisão por zero
Cancelamento por outro processo (Involuntário).
UNIX = KILL;
WINDOWS = TerminateProcess.
Estados de processos
Ocorre quando o SO descobre que um processo não pode prosseguir;
Ocorre quando o ESCALONADOR decide que o processo em execução já teve tempo suficiente de CPU e é o momento de deixar outro processo ocupar o tempo da CPU.
Ocorre quando todos os outros processos já compartilharam a CPU, de uma maneira justa, e é hora de o primeiro processo obter novamente a CPU.
Ocorre quando acontece um evento externo pelo qual um processo estava aguardando (Como a chegada de alguma entrada).
ESCALONADOR >>SELECIONA UM PROCESSO PARA EXECUTAR, USANDO UM ALGORITMO DE ESCALONAMENTO.
Em Execução: realmente usando a CPU naquele instante.
Bloqueado: incapaz de executar enquanto não ocorrer um evento externo.
Pronto: Processo está na memória principal esperando para executar na CPU. 
Todas as INTERRUPÇÕES começam salvando os REGISTRADORES, muitas vezes na entrada da tabela de processos referente ao processo corrente. Então a informação colocada na pilha pela INTERRUPÇÃO é removida e o ponteiro da pilha é alterado para que aponte para uma pilha temporária usada pelo manipulador dos processos.
TROCA DE CONTEXTO - Quando um processo deixa a CPU antes de seu fim para que outro execute em seu lugar. Ao interromper a execução, o estado do processo é salvo em seu PCB (Bloco de Controle de Processo), a fim de recomeçar do mesmo estado quando voltar a executar.
Implementação do modelo de processos
	O SO mantém uma tabela chama de TABELA DE PROCESSOS (Registra em cada linha, contendo referência a cada um dos processos que estão em execução, os que estão aguardando para executar e os bloqueados). 
	Uma entrada (linha) para cada processo. Em cada coluna tem:
Ponteiros
Estado do processo
Nome do processo
Prioridade do processo
RegistradoresLimites de memória
Lista de arquivos abertos
Quando o PROCESSO vai do HD para a MP:
HD
MP
Range de endereços = lista de posições de memória. Varia entre uma quantidade mínima e máxima em que o processo pode ler e escrever.
Threads
Com várias THREADS, um processo pode executar mais de uma tarefa concorrentemente (porém não paralelamente, execeto se a arquitetura for MULTIPROCESSADA!!) e ainda compartilhar os recursos do processo dentre estas execuções.
São mais fáceis de criar e destruir que os processos, pois não têm quaisquer recursos associados a eles.
Não resulta em ganho de desempenho quando eles são CPU-BOUND (limitados pela CPU, isso é, muito processamento com pouca E/S). No entanto, quando há grande quantidade de computação e de E/S IO-BOUND, os threads permitem que essas atividades se sobreponham e, desse modo, aceleram a aplicação (GANHO DE DESEMPENHO).
Um Thread interage com o usuário; o segundo Thread faz a reformatação em segundo plano; e o terceiro Thread pode fazer os backups em disco sem interferir nos outros dois.
Três processos separados não funcionariam no exemplo dado, pois todos os três threads precisam operar sobre o documento. Em vez de três processos, são TRÊS THREADS que compartilham uma memória comum e, desse modo, têm todo o acesso ao documento que está sendo editado.
O Modelo de Thread Clássico
	O modelo de processo é baseado em dois conceitos importantes: AGRUPAMENTO DE RECURSOS e EXECUÇÃO.
Agrupamento de Recursos: um processo apresenta um espaço de endereçamento que contém o código e os dados do programa, bem como outros recursos, por exemplo, arquivos abertos, processos filhos, alarmes pendentes, SIGNAL HANDLERS (Manipulação de Sinais).
Execução: Contador de programa que mantém o controle de qual instrução ele deve executar em seguida.
	Apesar de um Thread ter de executar em um processo, ambos – o Thread e seu Processo – são diferentes.
	PROCESSOS são usados para agrupar recursos. Compartilham um espaço físico de memória, discos, impressoras e outros recursos.
	THREADS são as entidades escalonadas para a execução sobre a CPU. Permitem que múltiplas execuções ocorram ao mesmo ambiente do processo. Compartilham um mesmo espaço de endereçamentos e outros recursos.
Seria usado quando os três processos fossem essencialmente descorrelacionados;
Seria apropriada quando os três threads fizessem realmente parte da mesma tarefa e cooperassem ativa e intimamente uns com os outros.
Espaço do Usuário e do Núcleo
	Há dois modos principais de implementar um pacote de Threads: no espaço do USUÁRIO e no NÚCLEO.
Espaço do usuário: cada processo precisa de sua própria TABELA DE THREADS para manter o controle dos threads naquele processo. A TABELA DE THREADS é gerenciada pelo sistema de tempo de execução (RUNTIME). 
		THREAD-YIELD > Permite que uma THREAD desista voluntariamente da CPU para deixar outra THREAD executar. Essa chamada é importante porque não há uma interrupção de relógio para forçar um tempo compartilhado, como existem em processos.
	SISTEMA OPERACIONAL não escalona as THREADS, apenas os PROCESSOS
	
	Thread bloqueante paralisa outros Threads do processo.
	O Núcleo só conhece os processos, desconhece as Threads.
	Não há necessidade de CHAVEAMENTO DE CONTEXTO (Troca do processo A para o processo B, ou vice-versa), o que facilita seu escalonamento.
Espaço do núcleo: não é necessário um sistema de tempo e execução (RUNTIME); não há nenhuma TABELA DE THREADS em cada processo. Em vez disso, o núcleo tem uma tabela de threads que acompanha todos os threads no sistema. Quando um thread quer criar um novo thread ou destruir um já existente, ele faz uma chamada ao núcleo, que realiza então a criação ou a destruição atualizando a tabela de threads no núcleo.
	Quando um thread é bloqueado, é opção do núcleo executar outro thread do mesmo processo ou um thread de outro processo.
O núcleo conhece a existência dos Threads e gerencia.
Necessidades de chamada de sistemas/chaveamento de modos (USUÁRIO e NÚCLEO).
O núcleo possui tabela de processos e de thread.
Ativações do Escalonador
	Servem para imitar a funcionalidade dos threads de núcleo – porém com melhor desempenho e maior flexibilidade.
	O núcleo atribui certo número de processadores virtuais a cada processo e deixa o sistema de tempo de execução (ESPAÇO DO USUÁRIO) alocar os threads ao processador.
Quando o núcleo sabe que um thread bloqueou (por exemplo, tendo executado uma chamada de sistema como bloqueio ou ocorrendo uma falta de página), ele avisa o sistema de tempo de execução do processo, passando como parâmetros na pilha o número do thread em questão e uma descrição do evento ocorrido. Uma vez ativado, o sistema de tempo de execução pode reescalonar seus threads, geralmente marcando o thread atual como bloqueado e tomando outro da lista de prontos, configurando seus registradores e reiniciando-o. Depois, quando o núcleo descobrir que o thread original pode executar novamente (por exemplo, o PIPE do qual estava tentando ler agora contém dados, ou a página foi trazida do disco), o núcleo faz um outro UPCALL (quando o núcleo ativa o sistema de tempo de execução em um endereço inicial) para o sistema de tempo de execução para informá-lo sobre esse evento. O sistema de tempo de execução, por conta própria, pode reinicializar o thread bloqueado ou colocá-lo na lista de prontos.
Comunicação entre Processos (IPC)
Condições de Corrida: em alguns sistemas operacionais, processos que trabalham juntos (1 processo e vários processos consumidores) podem compartilhar algum armazenamento comum, a partir do qual cada um seja capaz de ler e escrever. O armazenamento compartilhado pode estar em MEMÓRIA PRINCIPAL ou em um ARQUIVO COMPARTILHADO.
	Situações como essa – nas quais dois ou mais processos estão lendo ou escrevendo algum dado compartilhado e cujo resultado final depende de quem e quando executa a operação – são chamadas de CONDIÇÕES DE CORRIDA.
Regiões Críticas: durante uma parte do tempo um processo está ocupado fazendo computações internas e outras coisas que não levam a condições de disputa. Contudo, algumas vezes um processo precisa ter acesso à memória ou a arquivos compartilhados ou tem de fazer outras coisas importantes que podem ocasionar disputas. Aquela parte do programa em que há acesso à memória compartilhada é chamada de REGIÃO CRÍTICA.
	EXCLUSÃO MÚTUA, isto é, impedir que mais de um processo leia e escreva ao mesmo tempo na memória compartilhada (Região Crítica).
Dois processos nunca podem estar simultaneamente em suas regiões críticas;
Nada pode ser afirmado sobre a velocidade ou sobre o número de CPUs;
Nenhum processo executando fora de sua região crítica pode bloquear outros processos;
Nenhum processo deve esperar externamente para entrar em sua região crítica.
Exclusão Mútua com Espera Ociosa (SOLUÇÃO EM HARDWARE)
Desabilitando Interrupções: consiste em desabilitar as interrupções todas vez que um processo entra na Região Crítica e reabilitando-as logo após sair dela.
Test and Set Lock (TSL): considere que haja uma única variável compartilhada (TRAVA), inicialmente contendo o valor 0. Para entrar em sua região crítica, um processo testa antes se há TRAVA, verificando o valor da variável TRAVA. Se a TRAVA for 0, o processo altera essa variável para 1 e entra na região crítica. Se a TRAVA já estiver com o valor 1, o processo simplesmente aguardará até que ela se torne 0.
nenhum processo está em sua região crítica;
algum processo está em sua região crítica.
Dormir e Acordar: SLEEP é uma chamada de sistema que faz com que o processo que a chama durma, isto é, fique suspenso até que um outro processo o desperte. A chamada WAKEUP tem um parâmetro, o processo a ser despertado. Por outro lado, tanto o SLEEP quanto WAKEUP podem ter outro parâmetro, um endereço de memória usado para equiparar o WAKEUPs a seus respectivos SLEEPs.
Semáforos (SOLUÇÃO EM SOFTWARE)(Variável Incremental): Serve para comunicações entre processos. 
SINAIS >> Interrupções de software para notificar ocorrência de eventos.
Mutexes (É um SEMÁFORO Binário = Só aceita dois valores): são adequadas apenas para gerenciar a EXCLUSÃO MÚTUA de algum recurso ou parte de código compartilhado. Pode estar em dois estados: DESIMPEDIDO ou IMPEDIDO.
	Quando um thread precisa ter acesso a uma região crítica, ela chama MUTEX-LOCK. Se o MUTEX estiver DESIMPEDIDO (indicando que a região crítica está disponível), a chamada prosseguirá e o thread que chamou MUTEX-LOCK ficará livre para entrar na região crítica.
	Por outro lado, se o Mutex já estiver IMPEDIDO, o thread que chamou MUTEX-LOCK permanecerá bloqueado até que o thread na região crítica termine e chame MUTEX-UNLOCK. Se múltiplos threads estiverem bloqueados sobre o Mutex, um deles será escolhido aleatoriamente e liberado para adquirir a TRAVA.
Monitores (SOLUÇÃO EM SOFTWARE) (Procedimento que troca parâmetros entre processos): Unidade básica de sincronização de alto nível. É uma coleção de ROTINAS, VARIÁVEIS e ESTRUTURA DE DADOS, tudo isso agrupado em um tipo especial de módulo ou pacote. Os processos podem chamar as rotinas em um monitor quando quiserem, mas não podem ter acesso direto às estruturas internas de dados ao monitor a partir de rotinas declaradas fora dele.
	Os monitores apresentam uma propriedade importante que os torna úteis para realizar a EXCLUSÃO MÚTUA: somente um processo pode estar ativo em um monitor em um dado momento.
	Cada processo em estado de PRONTO chama o monitor. Garante a execução da REGIÃO CRÍTICA de cada processo.
Barreiras: é dirigido ao Grupo de Processos em vez de situações que envolvem dois processos do tipo produtor-consumidor.
	Algumas aplicações são divididas em fases e têm como regra que nenhum processo pode avançar para a próxima fase até que todos os processos estejam prontos a fazê-lo. Isso pode ser conseguido por meio da colocação de uma BARREIRA no final de cada fase. QUANDO ALCANÇA A BARREIRA, UM PROCESSO PERMANECE BLOQUEADO ATÉ QUE TODOS OS PROCESSOS ALCANCEM A BARREIRA.
Escalonamento
	É a parte do SO que faz a escolha. Além de escolher o processo certo para executar, o escalonador também deve se preocupar em fazer o uso eficiente da CPU, pois chavear processos é muito custoso.
	Alguns processos gastam a maior parte do tempo computando. LIMITADOS PELA CPU, em geral, apresentam longos surtos de uso da CPU e esporádicas esperas por E/S.
	Já outros processos passaram a maior parte de seu tempo esperando E/S. LIMITADOS PELA E/S, em geral, apresentam pequenos surtos da CPU e esperas frequentes por E/S.
Quando Escalonar?
Ambos os processos estão no estado PRONTO. Pode escolher um ou outro, isto é, o escalonador pode escolher para executar o PAI ou o FILHO.
Como o processo não pode executar mais, algum outro processo deve ser escolhido entre os processos PRONTOS. Se nenhum estiver PRONTO, é executado um processo ocioso gerado pelo sistema.
Quando um processo bloqueia para E/S, sobre um SEMAFORO ou por alguma outra razão, outro processo precisa ser selecionado para executar.
Quando ocorre uma INTERRUPÇÃO de E/S, pode-se tomar uma decisão de escalonamento. É o escalonador quem decide se executa o processo que acabou de ficar PRONTO, o processo que estava executando no momento da INTERRUPÇÃO ou algum terceiro processo.
Escalonamento NÃO PREEMPTIVO>> processo executa até BLOQUEAR, até que VOLUNTARIAMENTE libere a CPU.  Ex: Scanner, tem que terminar de scanear para perder a prioridade.
FIFO >> O processo que chega primeiro ao estado de PRONTO é colocado em execução e só perde o uso do processador quando termina seu processamento ou quando executa instruções do próprio código que ocasionam uma mudança para o estado de ESPERA.
		
Escalonamento PREEMPTIVO>> escolhe o processo e o deixa em execução por um tempo máximo fixado (QUANTUM DE TEMPO). Se ainda estiver executando ao final desse intervalo de tempo, o processo será suspenso e o escalonador escolherá outro processo para executar.
		Possibilidade de o SO interromper um processo em EXECUÇÃO e passá-lo para o estado de PRONTO.
Escalonamento em sistema de TEMPO REAL
Sofrem restrições de tempo (Tempo de aplicação)
Programa executa o tempo que for necessário
Ambientes de MISSÃO CRÍTICA
Não podem parar
Escalonamento em sistema de LOTE	
FCFS/FIFO (Primeiro a chegar, Primeiro a ser servido) (Algoritmo NÃO PREEMPTIVO) (IMPEDE STARVATION)
	Basicamente, há uma fila única de PROCESSOS PRONTOS. Quando a primeira tarefa entra no sistema, logo quando chega de manhã, é iniciado imediatamente e autorizado a executar por quanto tempo queira.
	À medida que chegam as outras tarefas, eles são encaminhados para o fim da fila.
	Quando um processo BLOQUEADO fica PRONTO – assim como uma tarefa que acabou de chegar -, ele é posto no fim da fila.
	O processo que chega primeiro ao estado de PRONTO é colocado em execução e só perde o uso do processador quando termina seu processamento ou quando executa instruções do próprio código que ocasionam uma mudança para o estado de ESPERA.
SJF (Tarefa mais curto primeiro) (Algoritmo NÃO PREEMPTIVO) (PROPORCIONA STARVATION)
	Escalona o processo com o menor tempo estimado até o término.
	O SJF 	costuma ser usado no escalonamento de longo-prazo em sistemas BATCH, pois o usuário especificava a duração máxima do processo.
 
SRT (Próximo de menor tempo restante) (Versão PREEMPTIVA da SJF) (PROPORCIONA STARVATION)
	O escalonador sempre escolhe o processo cujo tempo de execução restante seja o menor.
Escalonador em sistemas interativos
Interação com o ser humano ou outro sistema. Expectativa de retorno.
Escalonamento por chaveamento circular = FIFO(ROUND-ROBIN) ) (Algoritmo PREEMPTIVO)
	A cada processo é atribuído um intervalor de tempo, o seu QUANTUM.
	Se, ao final do QUANTUM, o processo ainda estiver executando, a CPU sofrerá PREEMPÇÃO e será dada a outro processo. Se o processo foi bloqueado ou terminou antes que o QUANTUM tenha decorrido, a CPU é chaveada para outro processo.
	Quando o processo usa todo o seu QUANTUM, ele é colocado no final da lista.
Escalonamento por prioridades (PODE OU NÃO TER PREEMPÇÃO) (PROPORCIONA STARVATION)
	A cada processo é atribuída uma prioridade, e ao processo executável com a prioridade mais alta é permitido executar.
	O escalonador por reduzir a prioridade do processo em execução a cada tique de relógio (isto é, a cada INTERRUPÇÃO de relógio). Se isso fizer com que sua prioridade caia abaixo da prioridade do próximo processo com prioridade mais alta, então ocorrerá um CHAVEAMENTO DO PROCESSO.
Escalonamento por loteria
	A ideia é dar bilhetes de loteria aos processos, cujos prêmios são vários recursos do sistema, como TEMPO DE CPU. Se houver uma decisão de escalonamento, um bilhete de loteria será escolhido aleatoriamente e o processo que tem o bilhete conseguirá o recurso.
Escalonamento de THREADS
THREADS de usuário
	Como o núcleo não sabe da existência de THREADS, ele opera como sempre faz, escolhendo um processo – por exemplo, A – e dando-lhe o controle de seu QUANTUM. O escalonador do THREAD A decide qual THREAD deve executar – por exemplo, A1. Como não há interrupções de relógio para multiprogramas THREADS, esse THREAD pode continuar executando enquanto quiser. Se ele usar todo o QUANTUM do processo, o núcleo selecionará outro processo para executar.
THREAD de núcleo
 	O núcleo escolher um THREAD para executar. Ele não precisa levar em conta a qual processo o THREAD pertence, mas, se quiser, pode considerar esse fato. Ao THREAD é dado um QUANTUM, e ele será compulsoriamente suspenso se exceder o QUANTUM.
	Um THREAD BLOQUEADO pela E/S não suspende o processo inteiro, como ocorre nos THREADS de usuário.
Deadlock (Impasse)
	Onde os processo ficam BLOQUEADOS indefinido. Só os processos externos podem interferir em um DEADLOCK.
	A tentativa de dois processos usarem a mesma entrada databela do sistema de arquivos, inevitavelmente conduzirá a um sistema de arquivos corrompido.
	Ocorre no HARDWARE e SOFTWARE.
STARVATION: Quando um processo com prioridade baixa, que nunca vai ter acesso ao recursos que ele precisa, pois outros processos com prioridade alta vai passando à frente.
Nunca obtém o serviço
Não está necessariamente em DEADLOCK
	
	No DEADLOCK os processos estão BLOQUEADOS, já no STARVATION estão em EXECUÇÃO ou PRONTOS.
DEADLOCK x LIVELOCK
A diferença é o estado do processo
Paralisção x Ação
	Condições necessárias para a ocorrência: Só ocorre DEADLOCK com a presença dos 4:
Exclusão Mútua (USAR SPOOL EM TUDO): Recurso que não pode ser usado para mais de um processo de cada vez.
Posse e Espera (REQUISITAR INICIALMENTE TODOS OS RECURSOS NECESSÁRIOS): Processos que retêm recursos, podem solicitar novos antes da liberação.
Não Preempção (RETOMAR OS RECURSOS ALOCADOS): Nenhum recurso pode ser retirado à força de um processo, os recursos podem ser liberados pela ação explícita do processo.
Espera Circular (ORDENAR NUMERICAMENTE OS RECURSOS): Dois ou mais processos formam uma cadeia circula, cujo cada processo espera por um recurso que o próximo processo na cadeia detém.
	Estratégias usadas para lidar com o DEADLOCK:
Ignorar por completo: Se você ignorar, talvez ele ignore você.
Detecção e recuperação: Deixar os deadlocks (impasses) ocorrerem, detectá-los e agir.
Anulação dinâmica por meio de uma alocação cuidadosa de recursos.
Prevenção: Negando, estruturalmente uma das quatro condições necessárias para gerar um impasse.
Combater o DEADLOCK:
Estratégia Preventiva: 
Negar uma das 4 condições: Exclusão Mútua, Posse Espera, Não Preempção ou Espera Circular
Estratégia Corretiva:
Detectar quando o DEADLOCK acontece, pois muita vezes a prevenção não pode ser usada.
Não evita DEADLOCK, mas RECUPERA DO DEADLOCK. Encerrando um dos processos e consquente ROLLBACK.
	
Gerência de Memória
Volátil (Info não resiste)
MP
 SWAPPING
 
I3
HD
	Manter na RAM a maior quantidade de processos possíveis, menos acesso fará ao HD.
OVERLAY: programas maiores que a memória disponível. Dividida em camadas e colocava os módulos para execução na memória.
REENTRÂNCIA: capacidade de carregar o código uma única vez e compartilhá-lo por diversos processos/usuários.
Caso os programas não estejam na RAM, realizar uma BUSCA (Quando/Como transferir um processo, ou parte dele, do HD > HD).
Por demanda: Transferência de páginas para memória somente as referenciadas.
Por previsibilidade: Além da página referenciada, são carregadas outras páginas que também podem (ou não) ser referenciadas futuramente.
Técnicas para a transferência das informações:
Paginação (partição fixa/estáticas)
	Espaço real e virtual são divididos em blocos de MESMO TAMANHO. Permite que o programa seja separado em áreas contiguas. O programa será fatiado.
Cada processo tem sua TABELA DE PÁGINAS
Tamanho de página pode ser escolhido pelo SO
Memória Associativa ou TLB (CACHE DA TABELA DE PÁGS): Mapeia endereços 
VIRTUAIS FÍSICOS sem passar pela TABELA DE PÁGS
THRASHING: ocorre quando existem mais processos competindo por memória do que o espaço disponível. Excessiva transferência de página entre a MP e HD.
Fragmentação Interna (fragmentação que vai acontecer dentro da página)
Política de substituição de PÁGINA
	Quando ocorre uma falta de página, o S.O precisa escolher uma página a ser removida da memória a fim de liberar espaço para uma nova página a ser trazida para a memória. Se a página a ser removida tiver sido modificada enquanto estava na memória, ela deverá ser reescrita no disco com o propósito de atualizar a cópia virtual lá existente.
Segmentação (partição variável/dinâmica)
	Programa é dividio em segmentos de tamahnos variados, cada um com o seu próprio espaço de endereçamento. Vai receber na memória a área necessária para que o programa trabalhe tranquilamente.
	Os espaços de endereçamento de cada processo tem que ser menor ou igual ao limite da arquitetura.
Tabela de Mapeamento de Segmentos (igual na Paginação, Tabela de Pág)
Podem crescer ou reduzir independentemente
Compartilhamento de procedimentos ou dados entre vários processos.
Fragmentação Externa (memória dividida em regiões com segmentos e regiões com lacunas)
Segmentação paginada
		MEMÓRIA dividida em SEGMENTOS.
		SEGMENTOS divididos em PÁGINAS
Hardware envolvido na Gerência de Memória
		MMU: Mapeia endereços VIRTUAIS > FÍSICA. Manipula TABELA DE PÁGINAS (consegue amarrar qual espaço de endereçamento de memoria viruta, estao em que poscicao da memoria física).
 
Controlando os espaços LIVRES
Gerenciamento em mapa de bits: Memória divida em unidades de alocação, sendo cada unidade associada a um bit no mapa de bits.
Gerenciamento com lista encadeada: Mantém uma lista de segmentos de memória alocados e disponíveis. LISTA SIMPLES/DUPLAMENTE ENCADEADA. 
Algoritmo de esolha de espaço
FISRT FIT (primeiro que couber): Varre a tabela de spços livres até encontrar a lacuna. Pesquisa ao longo da lista um segmento livre que acomode o processo, ou seja, MAIOR OU IGUAL AO PROCESSO.
NEXT FIT (próximo que couber): Similar ao FIRST FIT. Memoriza a posição do segmento encontrado, recomeça busca a partir desta posição.
BEST FIT (melhor que couber): Varre toda a tabela de espaços livres. Percorre a lista inteira e escolhe o menor semento livre de memória possível > AQUELE QUE MELHOR AJUSTA.
WORST FIT (pior que couber): Varre toda a tabela de espaços livres. Escolhe maior segmento disponível.
QUICK FIT (o que mais rápido couber): Os tamanhos mais solicitados. Mantém listas separadas para alguns tamanhos de segmentos disponíveis.
Endereçamento Virtual
	O espaço de endereçamento virtual é dividido em unidades denominadas PÁGINAS. 
	O espaço de endereçamento físico é dividido em unidades denominadas MOLDURAS DE PÁGINAS.
	As PÁGINAS e MOLDURAS DE PÁGINAS são sempre do mesmo tamanho.
	
Permite programas (CÓDIGO + DADOS + PILHA) maiores que a memória disponível.
RAM + DISCO
Não existe tamanho, apenas capacidade de enderaçamento
Solução em Hardware: MMU
Solução em Software: SO toma conta
SWAPPING: troca entre MP HD
THRASHING: ocorre quando existem mais processos competindo por memória do que o espaço disponível. Excessiva transferência de página entre a MP e HD.
SWAP OUT (MP > HD)
SWAP IN (HD > MP)
Escalonadores
SWAPPER (médio prazo): RAM HD
SCHEDULER (longo prazo): RAM FILA DE PRONTO
DISPATCHER (curto prazo): PRONTO CPU 
		
Sistemas de Arquivos
SMB/CIFS (WINDOWS)
 Primordialmente tem como funcionalidade o de compartilhamento de arquivos, mas é possível também o compartilhamento de impressoras e definir níveis de segurança e autenticação
 Um protocolo de redes cujo o uso mais comum como foi dito anteriormente é o compartilhamento de arquivos em uma LAN. Este protocolo permite que o cliente manipule arquivos como se estes estivessem em sua máquina local. Operações como leitura, escrita, criação, apagamento e renomeação são suportadas, sendo a única diferença de que os arquivos manipulados não estão no computador local e sim em um servidor remoto.
NFS (LINUX/UNIX)
	Usado em todos os sistema LINUXs modernos para ajuntar os sistemas de arquivos localizados em computadores separados em um sistema logicamente unificado.
 É um sistema de arquivos distribuídos, a fim de compartilhar arquivos e diretórios entre computadores conectados em rede, formando assim um diretório virtual. 
 Um exemplo da utilização do NFS é a disponibilização das áreas de trabalho dos usuários em toda a rede e, quando este efetua o login, seu diretório de trabalho pode ser acessado via NFS. Supondo que o usuário mude de estação detrabalho, o seu diretório pode ser disponibilizado novamente nesta estação e sem que nenhuma configuração adicional seja realizada.
	NFS permite que cada máquina seja CLIENTE e SERVIDOR ao mesmo tempo.
NTFS (WINDOWS NT)
	Usa endereços de disco de 64 bits. É um sistema de arquivo HIERÁRQUICO.
	Foi projetado para incluir muitos recursos, entre eles:
Recuperação de dados
Segurança
Tolerancia a falhas
Arquivos e sistema de arquivos grandes
Múltiplos fluxos de dados
Nomes UNICODE
Arquivos dispersos
Codificação criptográfica
Criação de diário
Cópias de sombra de volume
Compressão de arquivos
	A entidade fundamental do NTFS é o VOLUME. Um volume é criado pelo utilitário de gerenciamento lógico de discos e é baseado em uma partição lógica de disco. O volume pode ocupar uma porção de um disco, um disco inteiro ou estender-se por vários discos. Cada volume é organizado como uma sequência linear de blocos (CLUSTERs).
	A principal estrutura de dados de cada volume é a MFT (TABELA MESTRE DE ARQUIVOS), que é uma sequência linear de registros com tamanho fixo de 1KB. A MFT é, em si, um arquivo e, como tal, pode ser colocada em qualquer lugar de um volume.
EXT3 (UNIX)
	Sua principal vantagem sobre ext2 é o JOURNALING (DIÁRIO), que melhora a confiabilidade e elimina a necessidade de verificar o sistema de arquivos após um desligamento.
	JOURNALING consiste em um registro (log) de transações cuja finalidade é recuperar o sistema em caso de desligamento não programado.
	
EXT4 (LINUX)
	As novas funcionalidades são:
Alocação tardia: melhor a alocação de blocos, decisão com base no tamanho do arquivo; 
Verificação de integridade do JOURNAL (JOURNAL CHECKSUM): melhora a confiabilidade, já que um dos arquivos mais utilizados do disco.
Suporte para temanhos maiores de volumes e arquivos
Extensões: conjunto de blocos contíguos físico, melhorando o desempenho de muitos arquivos e redução de fragmentação.
Compatibilidade com versões anteriores
Pré-alocação: permite pré-alocação de espaço em disco para um arquivo. 
O mais rápido sistema de arquivos de VERIFICAÇÃO
ALOCAR MULTIBLOCO
 Melhor TIMESTAMPS	
XFS
Usa JOURNALING
Compatível em sistema de 64 e 32 bits.
Efetua alocação por extensões em vez de alocação por blocos
Usa alocação dinâmica de nós-i

Outros materiais