1. Um sistema operacional é um conjunto de rotinas executadas pelo processador, de forma semelhante aos outros programas utilizados
1.1. A principal função de um sistema
1.2. operacional é controlar o funcionamento do computador, gerenciando a utilização e o
1.3. compartilhamento de forma organizada os diversos recursos, como processadores, memórias
1.4. e dispositivos de entrada e saída.
2. A diferença entre o sistema operacional e os outros programas, é a maneira como suas rotinas são executadas em função do tempo
2.1. Um sistema operacional não é executado
2.2. de forma linear como a maioria dos programas, com início, meio e fim
3. FUNÇÕES BÁSICAS
3.1. Fornecer uma interface com o usuário;
3.2. Gerenciar a operação dos dispositivos de hardware do computador;
3.3. Gerenciar e manter o sistema de arquivos;
3.4. Dar suporte aos programas que são executados.
4. MÁQUINA DE CAMADAS
4.1. O sistema computacional composto somente de hardware, tem pouca utilidade. É
4.2. através do software que o usuário interage com a máquina.
4.3. Uma operação efetuada pelo software pode ser implementada no hardware,
4.4. enquanto uma instrução executada pelo hardware pode ser simulada via software. Tanto o
4.5. hardware quanto o software são logicamente equivalentes, interagindo de uma forma única
4.6. para o usuário
5. O Início da Computação
5.1. A evolução dos sistemas operacionais está ligada ao desenvolvimento dos computadores.
5.1.1. Antes da década de 40, foram feitos muitos esforços para desenvolver uma
5.1.2. máquina que pudesse realizar cálculos de forma rápida e precisa. Foi em 1642 que Blaise
5.1.3. Pascal inventou a máquina de somar para ajudar seu pai no processo de arrecadação de
5.1.4. impostos.
6. A Primeira Geração (1945-1955): Válvulas e Painéis com Plugs
6.1. A máquina é
6.2. considerada de fato o primeiro computador da história. Desenvolvido pelos engenheiros na universidade da Pensilvânia. Foi desenvolvido para
6.3. calcular trajetórias balísticas.
7. A Segunda Geração (1955 - 1965): Transistores e Sistemas Batch
7.1. A introdução do transistor em meados dos anos 50 mudou o quadro radicalmente.
7.2. Os computadores tornaram-se bastante confiáveis e puderam ser produzidos e vendidos
7.3. comercialmente na expectativa de que eles continuassem a funcionar por bastante tempo
7.4. para realizar algumas tarefas usuais.
8. Essas máquinas eram alocadas em salas especialmente preparadas com refrigeração e apoio de operadores profissionais.
8.1. Devido ao alto custo do equipamento, era de se esperar que as pessoas tentassem
8.2. reduzir o tempo desperdiçado. A solução geralmente adotada era o sistema em "batch"
9. A Terceira Geração (1965 - 1980): CIs e Multiprogramação
9.1. Nos anos 60, muitos fabricantes de computadores tinham duas linhas de produto
9.2. distintas e totalmente incompatíveis.
10. 5 A Quarta Geração (1980-1990): Computadores Pessoais
10.1. Com o desenvolvimento de circuitos LSI (Large Scale Integration), chips
10.2. contendo milhares de transistores em um centímetro quadrado de silício, a era do
10.3. computador pessoal começava
11. Interrupções e Exceções
11.1. Durante a execução de um programa podem ocorrer alguns eventos inesperados,
11.2. ocasionado um desvio forçado no seu fluxo de execução. Estes tipos de eventos, são
11.3. conhecidos por Interrupção ou Exceção e pode ser consequência da sinalização de algum
11.4. dispositivo de hardware externo ao processador ou da execução de instruções do próprio
11.5. programa. A diferença entre interrupção e exceção é dada pelo tipo de evento ocorrido.
12. Operações de Entrada/Saída
12.1. Em sistemas mais primitivos, a comunicação entre a UCP e os periféricos era
12.2. controlada por um conjunto de instruções especiais, denominadas instruções de entrada /
12.3. saída, executadas pela própria UCP. Essas instruções continham detalhes específicos de cada
12.4. periférico, como quais trilhas e setores de um disco deveriam ser lidos ou gravados em
12.5. determinado bloco de dados
13. Buffering
13.1. A técnica de buffering consiste na utilização de uma área de memória para a
13.2. transferência de dados entre os periféricos e a memória principal denominada buffer
14. Reentrância
14.1. É comum, em sistemas multiprogramáveis, vários usuários executarem os
14.2. mesmos utilitários do sistema operacional simultaneamente, como, por exemplo, um editor
14.3. de textos. Se cada usuário que utilizasse o editor trouxesse o código do utilitário para a
14.4. memória, haveria diversas cópias de um mesmo programa na memória principal, o que
14.5. ocasionaria um desperdício de espaço.
15. ESTRUTURA DOS SISTEMAS OPERACIONAIS
15.1. Existe uma grande dificuldade em compreender a estrutura e o funcionamento de
15.2. um sistema operacional, pois ele não é executado como uma aplicação tipicamente
15.2.1. ➢tratamento de interrupções;
15.2.2. ➢criação e eliminação de processos;
15.2.3. ➢sincronização e comunicação de processos;
15.2.4. ➢escalonamento e controle dos processos;
15.2.5. ➢gerência de memória;
15.2.6. ➢gerência do sistema de arquivos;
15.2.7. ➢operações de entrada e saída;
15.2.8. ➢contabilização e segurança do sistema
15.3. sequencial, com início, meio e fim.
16. System Calls
16.1. Uma preocupação que surge na grande maioria dos projetos de sistemas
16.2. operacionais é a implementação de mecanismos de proteção ao núcleo do sistema e de
16.3. acesso aos seus serviços. Caso uma aplicação, que tenha acesso ao núcleo, realize uma
16.4. operação que o danifique, todo o sistema poderá ficar comprometido e inoperante.
17. Modos de Acesso
17.1. Existem certas instruções que não podem ser colocadas diretamente à disposição
17.2. das aplicações, pois a sua utilização indevida ocasionaria sérios problemas à integridade do
17.3. sistema. Suponha que uma aplicação deseja atualizar um arquivo em disco
18. Arquiteturas do núcleo
18.1. A arquitetura do sistema é bastante complexa e deve atender aos requisitos de
18.2. confiabilidade, portabilidade, fácil manutenção, flexibilidade e desempenho.
19. Sistemas Monolíticos
20. PROCESSO
20.1. O processo é a base para implantação de um sistema operacional
20.1.1. Estrutura do Processo
20.1.1.1. O processador foi projetado para executar as instruções a partir do ciclo de busca
20.1.1.2. e execução. Imaginemos como os sistemas operacionais multiprogramáveis atendem os
20.1.1.3. diversos usuários e ainda mantém informações a respeito dos vários programas executados
20.1.1.4. ao mesmo tempo
20.2. multiprogramável.
21. Identificação
21.1. Cada processo criado pelo sistema recebe uma identificação única (chamada
21.2. de PID – Process IDentification), representada por um número e em alguns
21.3. casos também através de um nome.
22. Quotas
22.1. As quotas são os limites de cada recurso do sistema que um processo pode
22.2. alocar. Caso uma quota seja insuficiente, o processo poderá ser executado
22.3. lentamente, interrompido ou mesmo não ser executado
23. Privilégios
23.1. Os privilégios ou direitos definem as ações que um processo pode fazer em
23.2. ralação a ele mesmo, aos demais processos e ao sistema operacional.
24. Espaço de endereçamento
24.1. O espaço de endereçamento é a área de memória pertencente ao processo onde as
24.2. instruções e dados do programa são armazenados para execução. Cada processo possui seu
24.3. próprio espaço de endereçamento, que deve ser devidamente protegido do acesso dos demais
24.4. processos, conforme é mostrado na figura abaixo
25. Bloco de controle do processo
25.1. O processo é implementado pelo SO através de uma estrutura de dados chamada
25.2. Bloco de controle de processos (Process Control Block – PCB
26. ESTRUTURA DOS SISTEMAS OPERACIONAIS
26.1. Existe uma grande dificuldade em compreender a estrutura e o funcionamento de um sistema operacional, pois ele não é executado como uma aplicação tipicamente sequencial, com início, meio e fim.
26.1.1. O sistema operacional é formado por um conjunto de rotinas (procedimentos) que
26.1.2. oferecem serviços aos usuários do sistema e suas aplicações, bem como a outras rotinas do
26.1.3. próprio sistema
27. As principais funções do núcleo
27.1. tratamento de interrupções;
27.2. criação e eliminação de processos;
27.3. sincronização e comunicação de processos;
27.4. escalonamento e controle dos processos;
27.5. gerência de memória;
27.6. gerência do sistema de arquivos;
27.7. operações de entrada e saída;
27.8. contabilização e segurança do sistema
28. System Calls
28.1. Uma preocupação que surge na grande maioria dos projetos de sistemas
28.2. operacionais é a implementação de mecanismos de proteção ao núcleo do sistema e de
28.3. acesso aos seus serviços. Caso uma aplicação, que tenha acesso ao núcleo, realize uma
28.3.1. Modos de Acesso
28.3.1.1. Existem certas instruções que não podem ser colocadas diretamente à disposição
28.3.1.2. das aplicações, pois a sua utilização indevida ocasionaria sérios problemas à integridade do
28.3.1.3. sistema. Suponha que uma aplicação deseja atualizar um arquivo em disco
28.4. operação que o danifique, todo o sistema poderá ficar comprometido e inoperante
29. Arquiteturas do núcleo
29.1. A arquitetura do sistema é bastante complexa e deve atender aos requisitos de
29.2. confiabilidade, portabilidade, fácil manutenção, flexibilidade e desempenho.
29.2.1. Sistemas Monolíticos
29.2.1.1. Essa arquitetura pode ser comparada com uma aplicação formada por vários
29.2.1.2. módulos que são compilados separadamentee depois unidos por links, formando um único
29.2.1.3. programa, onde os módulos podem interagir livremente
30. Sistemas em Camadas
30.1. Um sistema em camadas divide o sistema operacional em camadas sobrepostas.
30.2. Cada módulo oferece um conjunto de funções que podem ser utilizadas por outros módulos.
30.3. Módulos de uma camada podem fazer referência apenas a módulos das camadas inferiores
31. Mudanças de Estado de Processo
31.1. . Existem quatro mudanças de estados que podem ocorrer:
31.1.1. Pronto → Execução – Após a criação de um processo, o sistema o coloca em
31.1.2. uma lista de processos no estado de pronto, aguardando para ser executado.
31.1.3. Cada sistema operacional tem sua política de escalonamento.
31.1.4. Execução → Espera – Um processo passa para o estado de espera por
31.1.5. eventos gerados pelo próprio processo, como uma operação de E/S, ou por
31.1.6. eventos externos. Um evento externo é gerado, por exemplo, quando o
31.1.7. sistema operacional suspende por um período de tempo a execução de um
31.1.8. processo.
31.1.9. Espera → Pronto – Ocorre quando uma operação solicitada é atendida ou o
31.1.10. recurso esperado é concedido. Não existe a mudança de espera para execução
31.1.11. diretamente.
31.1.12. Execução → Pronto – Ocorre através de eventos gerados pelo sistema, como
31.1.13. o termino da fatia de tempo que o processo possui para sua execução. Então,
31.1.14. aguarda nova oportunidade para continuar seu processamento.
32. Criação e Eliminação de Processos
32.1. Processos são criados e eliminados por diversas razões. A criação de um processo
32.2. ocorre quando o sistema operacional adiciona um novo PCB à sua estrutura e reserva espaço
32.3. na memória para uso
33. processos independentes
33.1. é a maneira mais simples de se implementar
33.2. a concorrência em sistemas multiprogramáveis. Neste caso, não existe vínculo entre o
33.3. processo criado e seu criador.
34. Subprocessos
34.1. são criados dentro de uma estrutura hierárquica. E neste caso, o
34.2. processo criador é denominado processo pai e o novo processo é chamado de subprocesso
34.3. ou processo filho
35. thread
35.1. foi estabelecido com a intenção de reduzir o tempo gasto na
35.2. criação, eliminação e troca de contexto de processos nas aplicações concorrentes, bem como
35.3. economizar recursos do sistema como um todo
36. Processos CPU-Bound e I/O-Bound
36.1. Os processos podem ser classificados como CPU-Bond ou I/O-Bond, de acordo
36.2. com a utilização do processador e dos dispositivos de E/S.
36.3. Um processo é definido como CPU-Bound (ligado à CPU), quando passa a maior
36.4. parte do tempo no estado de execução, ou seja, utilizando o processador
37. Programação Multithreads
38. Programação Multithreads
38.1. O desenvolvimento de aplicações multithread não é simples, pois exige que a
38.2. comunicação e o compartilhamento de recursos entre os diversos threads seja feito de forma
38.3. sincronizada para evitar problemas de inconsistências e deadlock
39. Arquitetura e Implementação
39.1. O conjunto de rotinas disponíveis para que uma aplicação utilize as facilidades
39.2. dos threads é chamado de pacote de threads.
40. Threads em Modo Usuário
40.1. Threads em modo usuário (TMU) são implementados pela aplicação e não pelo
40.2. sistema operacional.
41. Threads em Modo Kernel
41.1. Threads em Modo Kernel (TMK) são implementados diretamente pelo núcleo do
41.2. sistema opeacional, através de chamadas a rotinas do sistema que oferecem todas as funções
41.3. de gerenciamento e sincronização.
42. Threads em Modo Híbrido
42.1. combina as vantagens de threads
42.2. implementados em modo usuário (TMU) e threads em modo kernel (TMK). Um processo
42.3. pode ter vários TMKs, e por sua vez, um TMK pode ter vários TMUs.
43. Scheduler Activations
43.1. Os problemas apresentados no pacote de threads em modo híbrido existem
43.2. devido à falta de comunicação entre threads em modo usuário e em modo kernel. O modelo
43.3. ideal deveria utilizar as facilidades do pacote em modo kernel com o desempenho e
43.4. flexibilidade do modo usuário.
44. Aplicações Concorrentes
44.1. Em aplicações concorrentes, pode ser necessário que os processos comuniquemse entre si.
45. Especificação de Concorrência em Programas
45.1. Existem varias notações para especificar quais partes de um programa que devem
45.2. ser executadas concorrentemente
46. StarvationStarvation
46.1. A primeira situação indesejada é conhecida como starvation (ou espera
46.2. indefinida).
47. Sincronização Condicional
47.1. é uma situação onde o acesso a um recurso
47.2. compartilhado exige a sincronização de processos vinculada a uma condição de acesso
48. Semáforos
48.1. O conceito de semáforos foi proposto em 1965, sendo apresentado como um
48.2. mecanismo de sincronização que permitia implementar, de forma simples, a exclusão mútua
48.3. sincronização condicional entre processos
49. Monitores
49.1. são mecanismos de sincronização de alto nível que tornam mais
49.2. simples o desenvolvimento de aplicações concorrentes.
50. Troca de mensagens
50.1. A troca de mensagens é um mecanismo de comunicação e sincronização entre os
50.2. processos, implementado pelo sistema operacional através de duas rotinas do sistema SEND
50.3. e RECEIVE.
51. Deadlock
51.1. O Deadlock existe em qualquer sistema multiprogramável. Dizemos que um
51.2. processo está em Deadlock quando este para de responder porque está esperando por um
51.3. evento que nunca ocorrerá. Esta situação é conseqüência do problema da exclusão mútua
51.4. Troca de mensagens
51.4.1. A troca de mensagens é um mecanismo de comunicação e sincronização entre os
51.4.2. processos, implementado pelo sistema operacional através de duas rotinas do sistema SEND
51.4.3. e RECEIVE.
52. Critérios de escalonamento
52.1. Utilização do processador: corresponde a uma taxa de utilização, que na maioria
52.2. dos sistemas varia entre 30 e 90%. Uma utilização abaixo dos 30% indicaria um
52.3. sistema ocioso, com carga de processamento baixa, enquanto uma taxa de utilização
52.3.1. Throughput: é o número de processos executados em um determinado intervalo de
52.3.1.1. Tempo de Processador: é o tempo que um processo leva no estado de execução,
52.3.1.2. durante seu processamento. As políticas de escalonamento não interferem neste
52.3.1.3. parâmetro, sendo este tempo função apenas do código executável e da entrada/saída
52.3.1.4. de dados
52.3.2. tempo.
52.4. acima dos 90% pode indicar um sistema bastante carregado, próximo da sua
52.5. capacidade máxima (em alguns casos tal situação pode levar a um crash – travamento
52.6. do sistema).
53. Escalonamentos Não-Preemptivos e Preemptivos
53.1. Escalonamentos do tipo não-preemptivos são aqueles onde o sistema operacional não pode interromper o processo em execução para retirá-lo da CPU
53.1.1. Já os escalonamentos preemptivos são caracterizados pela possibilidade de o
53.1.2. sistema operacional interromper o processo em execução para retirá-lo da CPU e dar lugar a
53.1.3. outro
54. São escalonamentos não-preemptivos
54.1. FIFO: o processo que chegar primeiro à fila de pronto é selecionado para execução,
54.1.1. SJF (Shortest Job First): este escalonamento seleciona o processo que tiver o
54.1.2. menor tempo de processador ainda por executar. Desta forma, o processo que estiver
54.1.3. na fila de pronto com menor necessidade de tempo de CPU para terminar o seu
54.1.4. processamento será o escolhido para ocupar a CPU.
54.1.5. Troca de mensagens
54.1.5.1. A troca de mensagens é um mecanismo de comunicação e sincronização entre os
54.1.5.2. processos, implementado pelo sistema operacional através de duas rotinas do sistema SEND
54.1.5.3. e RECEIVE.
54.1.6. Troca de mensagens
54.1.6.1. A troca de mensagens é um mecanismo de comunicação e sincronização entre os
54.1.6.2. processos, implementado pelo sistema operacional através de duas rotinas do sistema SEND
54.1.6.3. e RECEIVE.
54.2. e permanece utilizando o processador até terminar sua execução ou ser interrompido
54.3. por E/S
55. Aplicações Concorrentes
56. Cooperativo: este escalonamento busca aumentar o grau de concorrência no
57. processador. Neste caso, um processo em execução pode voluntariamente liberar o
58. processador retornando à fila de pronto, possibilitando que um novo processo seja
59. São escalonamentos preemptivos
59.1. Circular: é um tipo de escalonamento projetado especialmente para sistemas em
59.2. tempo compartilhado. É muito semelhante ao FIFO (obedece a ordem de chegada á
59.3. fila de PRONTO), mas quando um processo passa para o estado de execução há um
59.4. limite de tempo para o uso contínuo do processador, chamado fatia de tempo (timeslice) ou quantum. Assim, toda vez que um processo é selecionado para execução
59.5. uma nova fatia de tempo lhe é concedida.
60. escalonado, permitindo melhor distribuição do tempo do processador.
61. Por Prioridades: funciona com base num valor associado a cada processo,
62. Swapping
62.1. É uma técnica aplicada à gerência de memória que visa dar maior taxa de
62.2. utilização à memória principal, melhorando seu compartilhamento. Visa também resolver o
62.3. problema da falta de memória principal num sistema
63. Memória Virtual
63.1. é uma técnica sofisticada e poderosa de gerência de memória
63.2. onde as memórias principal e secundária são combinadas, dando ao usuário a impressão de
63.3. que existe muito mais memória do que a capacidade real de memória principal.
63.4. Troca de mensagens
63.4.1. A troca de mensagens é um mecanismo de comunicação e sincronização entre os
63.4.2. processos, implementado pelo sistema operacional através de duas rotinas do sistema SEND
63.4.3. e RECEIVE.
64. Estrutura de Diretórios
64.1. É como o Sistema organiza logicamente os arquivos
64.1.1. Nível único
64.1.1.1. Diretório pessoa
64.1.1.1.1. Múltiplos níveis (ÁRVORE