1. Sincronização e comunicação entre processos
1.1. Aplicações Concorrentes
1.1.1. pode ser necessário que os processos comuniquem-se entre si.
1.2. Especificação de Concorrência em Programas
1.2.1. Técnicas mais recentes tentam expressar a concorrência no código dos programas de uma forma mais clara e estruturada.
1.3. Problemas de Compartilhamento de Recursos
1.3.1. Para melhor compreensão da importância da sincronização entre processos concorrentes, são apresentados alguns exemplos-problema de compartilhamento de recursos.
1.4. Exclusão Mútua
1.4.1. A exclusão mútua deverá agir apenas sobre os processos que estão concorrendo em um determinado recurso
1.5. Starvation
1.5.1. Quem determina as prioridades dos processos é o sistema operacional. Neste caso existem duas formas do sistema operacional determinar qual será a vez de quem. Ou por escolha aleatória ou por prioridades
1.6. Sincronização condicional
1.6.1. é uma situação onde o acesso a um recurso compartilhado exige a sincronização de processos vinculada a uma condição de acesso.
1.7. Soluções de Hardware
1.7.1. Desabilitação de interrupções
1.7.2. Instrução test-and-set
1.8. Soluções de software
1.8.1. Diversos algoritmos foram propostos na tentativa de implementar a exclusão mútua através de soluções de software.
1.9. Semáforos
1.9.1. O semáforo é uma variável que fica associada a um recurso compartilhado, indicando quando este está sendo acessado por um outro processo
1.10. Monitores
1.10.1. são mecanismos de sincronização de alto nível que tornam mais simples o desenvolvimento de aplicações concorrentes
1.11. Deadlock
1.11.1. O Deadlock existe em qualquer sistema multiprogramável
1.11.1.1. Dizemos que um processo está em Deadlock quando este para de responder porque está esperando por um evento que nunca ocorrerá.
1.11.2. Detecção de Deadlock
1.11.2.1. A Detecção do Deadlock é um mecanismo que determina a existência deste e identifica os recursos envolvidos no problema
1.11.3. Correção do Deadlock
1.11.3.1. Geralmente o problema é resolvido eliminando os processos envolvidos e desalojando os recursos para ele já garantidos
2. Gerência do processador
2.1. Funções
2.1.1. onde múltiplos processos poderiam permanecer na memória e disputar o uso de um único processador, a gerência do processador tornou-se uma das atividades mais importantes em um sistema operacional.
2.2. Critérios de escalonamento
2.2.1. Utilização do processador
2.2.1.1. corresponde a uma taxa de utilização, que na maioria dos sistemas varia entre 30 e 90%.
2.2.2. Throughput:
2.2.2.1. : é o número de processos executados em um determinado intervalo de tempo
2.2.3. Tempo de Processador
2.2.3.1. é o tempo que um processo leva no estado de execução, durante seu processamento
2.2.4. Tempo de Espera (pela CPU)
2.2.4.1. : é todo o tempo que o processo permanece na fila de pronto, aguardando a liberação da CPU para ser executado.
2.2.5. Tempo de Turnaround
2.2.5.1. : é o tempo total que o processo permaneceu no sistema, desde sua criação até o momento em que é encerrado
2.2.6. Tempo de Resposta
2.2.6.1. é o tempo decorrido entre uma requisição ao sistema e o instante em que a resposta começa a ser exibida.
2.3. Escalonamentos Não-Preemptivos e Preemptivos
2.3.1. não-preemptivos
2.3.1.1. são aqueles onde o sistema operacional não pode interromper o processo em execução para retirá-lo da CPU
2.3.1.1.1. São escalonamentos não-preemptivos
2.3.2. preemptivos
2.3.2.1. são caracterizados pela possibilidade de o sistema operacional interromper o processo em execução para retirá-lo da CPU e dar lugar a outro.
2.3.2.1.1. São escalonamentos preemptivos
3. Gerência de memória / Memória Virtaul
3.1. Alocação Contígua Simples
3.1.1. Este tipo de alocação foi implementado nos primeiros sistemas operacionais, embora ainda nos dias de hoje esteja presente em alguns sistemas monoprogramáveis
3.2. Segmentação de Programas
3.2.1. Na alocação contígua simples todos os programas estão limitados ao tamanho da memória principal disponível para o usuário
3.3. Alocação Particionada Estática
3.3.1. Os sistemas operacionais evoluíram para proporcionar melhor aproveitamento dos recursos. Nos sistemas monoprogramáveis o processador fica grande parte do tempo ocioso e a MP é sub-utilizada.
3.4. Alocação Particionada Dinâmica
3.4.1. foi eliminado o conceito de partições de tamanho fixo. Nesse esquema, cada programa, ao ser carregado, utilizaria o espaço necessário à sua execução, tornando esse espaço a sua partição
3.5. Estratégias de Alocação de Partição
3.5.1. Os sistemas operacionais implementam basicamente três estratégias para determinar em qual área livre um programa será alocado para execução.
3.6. Swapping
3.6.1. É uma técnica aplicada à gerência de memória que visa dar maior taxa de utilização à memória principal, melhorando seu compartilhamento. Visa também resolver o problema da falta de memória principal num sistema.
3.7. Memória Virtual
3.7.1. é uma técnica sofisticada e poderosa de gerência de memória onde as memórias principal e secundária são combinadas, dando ao usuário a impressão de que existe muito mais memória do que a capacidade real de memória principal.
3.8. Algoritmos de substituição de páginas
3.8.1. O maior problema na gerência de memória virtual por paginação não é decidir quais páginas carregar para a memória real, mas sim quais páginas liberar.
4. Gerência de sistemas de arquivos
4.1. Estrutura de Diretórios
4.1.1. Nível único
4.1.1.1. é a implementação mais simples de uma estrutura de diretórios, onde existe um único diretório contendo todos os arquivos do disco
4.1.2. Diretório pessoal
4.1.2.1. Evolução do modelo anterior, permite a cada usuário ter ser “diretório” particular, sem a preocupação de conhecer os outros arquivos do disco.
4.1.3. Múltiplos níveis (ÁRVORE)
4.1.3.1. É o modelo utilizado hoje em dia em quase todos os Sistemas Operacionais.
4.2. Sistemas de alocação de arquivos
4.2.1. FAT
4.2.1.1. sistema criado no MS-DOS e depois utilizado no Windows.
4.2.2. FAT32
4.2.2.1. igual ao FAT no que diz respeito a organização e desempenho, mas pode trabalhar com partições de até 2TB.
4.2.3. NTFS
4.2.3.1. NT File System, original da plataforma Windows NT/2000/XP
4.2.4. UNIX
4.2.4.1. Usa diretório hierárquico, com um raiz e outros diretórios subordinados
4.3. Gerência de espaço livre
4.3.1. Alocação contígua
4.3.1.1. armazena o arquivo em blocos seqüencialmente dispostos no disco
4.3.2. Alocação encadeada
4.3.2.1. nesta modalidade o arquivo é organizado como um conjunto de blocos ligados logicamente no disco, independente de sua localização física, onde cada bloco possui um ponteiro para o bloco seguinte.
4.3.3. Alocação indexada
4.3.3.1. esta técnica soluciona a limitação da alocação encadeada, no que diz respeito ao acesso, pois permite acesso direto aos blocos do arquivo.
4.4. Proteção de acesso
4.4.1. Considerando-se que os meios de armazenamento são compartilhados por vários usuários, é fundamental que mecanismos de proteção sejam implementados para garantir a integridade e proteção individual dos arquivos e diretórios
4.4.1.1. Senha de acesso
4.4.1.1.1. mecanismo de simples implementação
4.4.1.2. Grupos de usuário
4.4.1.2.1. é muito utilizada em muitos Sistemas Operacionais
4.4.1.3. Lista de controle de acesso
4.4.1.3.1. é uma lista associada ao arquivo onde são especificados quais os usuários e os tipos de acesso permitidos.
5. Introdução : Um sistema operacional é um conjunto de rotinas executadas pelo processador, de forma semelhante aos outros programas utilizados
5.1. Funções Básicas
5.1.1. Fornecer uma interface com o usuário
5.1.2. Gerenciar a operação dos dispositivos de hardware do computador
5.1.3. Gerenciar e manter o sistema de arquivos;
5.1.4. Dar suporte aos programas que são executados.
6. Evolução
6.1. O Início da Computação
6.1.1. A Primeira Geração (1945-1955): Válvulas e Painéis com Plugs
6.1.2. A Segunda Geração (1955 - 1965): Transistores e Sistemas Batch
6.1.3. A Terceira Geração (1965 - 1980): CIs e Multiprogramação
6.1.4. A Quarta Geração (1980-1990): Computadores Pessoais
7. Concorrência
7.1. Sistemas Operacionais podem ser vistos como um conjunto de rotinas executadas de forma concorrente e ordenada
7.1.1. Sistemas Monoprogramáveis X Multiprogramaveis
7.1.1.1. Monoprogamavél :sistema monoprogramavel, existe bastante desperdício de processador
7.1.1.2. Multiprogramaveis: vários programas podem estar residentes em memória, concorrendo pela utilização do processador
7.2. Interrupções e Exceções
7.2.1. Durante a execução de um programa podem ocorrer alguns eventos inesperados, ocasionado um desvio forçado no seu fluxo de execução.
7.3. Operações de Entrada/Saída
7.3.1. Um canal de E/S pode controlar múltiplos dispositivos através de diversos controladores. Cada dispositivo, ou conjunto de dispositivos, é manipulado por um único controlador. O canal atua como um elo de ligação entre a UCP e o controlador
7.4. Buffering
7.4.1. A técnica de buffering consiste na utilização de uma área de memória para a transferência de dados entre os periféricos e a memória principal denominada buffer.
7.5. Spooling
7.5.1. foi introduzida no final dos anos 50 para aumentar a produtividade e a eficiência dos sistemas operacionais.
7.5.1.1. A solução foi armazenar os vários programas e seus dados, também chamados de jobs, em uma fita magnética e, em seguida, submetê-los a processamento.
7.6. Reentrância
7.6.1. a é a capacidade de um código de programa (código reentrante) poder ser compartilhado por diversos usuários, exigindo que apenas uma cópia do programa esteja na memória.
8. Estrutura Dos Sistemas Operacionais
8.1. System Calls
8.2. Modos de Acesso
8.3. Arquiteturas do núcleo
8.4. Sistemas Monolíticos
8.5. Sistemas em Camadas
8.6. Máquinas Virtuais
8.7. Arquitetura Microkernel
9. Processo
9.1. O processo é a base para implantação de um sistema operacional multiprogramável
9.2. Estrutura do Processo
9.2.1. O processador foi projetado para executar as instruções a partir do ciclo de busca e execução
9.3. Contexto de hardware
9.3.1. O contexto de hardware guarda o conteúdo dos registradores do processador
9.4. Contexto de software
9.4.1. Identificação
9.4.1.1. Cada processo criado pelo sistema recebe uma identificação única (chamada de PID – Process IDentification)
9.4.2. Quotas
9.4.2.1. As quotas são os limites de cada recurso do sistema que um processo pode alocar
9.4.3. Privilégios
9.4.3.1. Os privilégios ou direitos definem as ações que um processo pode fazer em ralação a ele mesmo, aos demais processos e ao sistema operacional
9.5. Espaço de endereçamento
9.5.1. O espaço de endereçamento é a área de memória pertencente ao processo onde as instruções e dados do programa são armazenados para execução
9.6. Bloco de controle do proceso
9.6.1. processo é implementado pelo SO através de uma estrutura de dados chamada Bloco de controle de processos (Process Control Block – PCB)
9.7. Estados do Proceso
9.7.1. um proceso não deve alocar o processador com exclusividade, de forma que possa ser compartilhado
9.7.1.1. Execução (running
9.7.1.2. Pronto (ready)
9.7.1.3. Espera (wait)
9.8. Mudanças de Estado de Proceso
9.8.1. Pronto → Execução
9.8.2. Execução → Espera
9.8.3. Espera → Pronto
9.8.4. Execução → Pronto
9.9. Criação e Eliminação de Procesos
9.9.1. Processos são criados e eliminados por diversas razões. A criação de um processo ocorre quando o sistema operacional adiciona um novo PCB à sua estrutura e reserva espaço na memória para uso
9.9.1.1. Criação (new)
9.9.1.2. Terminado (exit)
9.10. Processos Independentes, Subprocesos e Threads
9.10.1. Subprocessos
9.10.1.1. são criados dentro de uma estrutura hierárquica. E neste caso, o processo criador é denominado processo pai e o novo processo é chamado de subprocesso ou processo filho.
9.10.2. thread
9.10.2.1. foi estabelecido com a intenção de reduzir o tempo gasto na criação, eliminação e troca de contexto de processos nas aplicações concorrentes, bem como economizar recursos do sistema como um todo
9.11. Processos Foreground e Background
9.11.1. processo possui sempre associado à sua estrutura, pelo menos dois canais de comunicação por onde são realizadas todas as entradas e saídas de dados ao longo do seu processamento
9.12. Processos do Sistema Operacional
9.12.1. auditoria e segurança;
9.12.2. serviços de rede;
9.12.3. contabilização do uso de recursos;
9.12.4. contabilização de erros;
9.12.5. gerência de impressão;
9.12.6. gerência de jobs match;
9.12.7. temporização;
9.12.8. comunicação de eventos;
9.12.9. interface de comandos.
9.13. Processos CPU-Bound e I/O-Bound
9.13.1. CPU-Bound
9.13.1.1. quando passa a maior parte do tempo no estado de execução, ou seja, utilizando o processador. Este tipo de processo realiza poucas operações de leitura e gravação e é encontrado em aplicações científicas que efetuam muitos cálculos
9.13.2. I/O-Bound
9.13.2.1. passa a maior parte do empo no estado de espera, pois realiza grande número de operações de E/S.
9.14. Sinais
9.14.1. são mecanismos que permitem notificar processos de eventos gerados pelo sistema operacional ou por outros processos