Buscar

Apostila SO

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 22 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 22 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 22 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

Apostila
 
 
Sistemas Operacionais
 
UEMA
 
Turma de Engenharia da Computação
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2017
Alunos
Data de entrega: 25/11/2017
O capítulo 1 foi escrito pelos alunos: ALEXANDER PIETRO FONSECA, ANDRÉ LUIS ROLIM DE CASTRO SILVA, BIANCA VALÉRIA LOPES PEREIRA e BRUNO ROCHA GOMES
O capítulo 2 foi escrito pelos alunos: CLAUBER MARTINS PINTO, DANILO JOSE DOS SANTOS COSTA, ELTON SOUSA FERREIRA e ELVYSON BRUNNO AMORIM PEREIRA
 .
O capítulo 3 foi escrito pelos alunos: EUCLIDES FREIRE DA SILVA ABREU, FELIPE DUTRA ARAÚJO, FRANCISCO DE ASSIS DE SOUZA ALVES JÚNIOR e ÍTALO DE ASSIS SILVA LOPES
 .
O capítulo 4 foi escrito pelos alunos: JOADSON DANIEL MELO GOMES, JOADSON TEIXEIRA CASTRO DAS CHAGAS, JOÃO PEDRO MORENO VALE e JORDAN DE MARCO SANTOS LEITE
 .
O capítulo 5 foi escrito pelos alunos: JULIAN BRANCO DE SOUSA, LEONARDO FRANÇA BESSA, LUCAS DIOGENES PINHEIRO BARROSO e LUCAS JOSÉ FIGUEIRA VALADÃO
.
O capítulo 6 foi escrito pelos alunos: LUCAS TRINDADE DA SILVA, LUIS EDUARDO MEDEIROS BEZERRA , LUIZ EUGÊNIO HOFFMANN LOPES e MARCO ANTÔNIO ARAÚJO GONÇALVES
.
O capítulo 7 foi escrito pelos alunos:MARCOS VINICIUS JANUÁRIO DA SILVA, MATHEUS ADLER SOARES PINTO, MATHEUS DOS SANTOS TEIXEIRA e MATHEUS LACERDA BEZERRA
 .
O capítulo 8 foi escrito pelos alunos:MATHEUS PEREIRA DA SILVA, MATHEUS VICTOR DA SILVA DINIZ COSTA, MAX LEANDRO SILVA E SILVA e NILDSON DE CASTRO PINHEIRO MELLO
 .
O capítulo 9 foi escrito pelos alunos:PAULA FABIANNA SOARES OLIVEIRA, PEDRO YAGO RABELO DE SOUSA, PERY QUEIROZ DE SOUZA VIEIRA e RODRIGO NALBERTH CORREA RODRIGUES
 .
O capítulo 10 foi escrito pelos alunos: VICTOR HUGO SILVA ALVES, VINICIUS RIBEIRO CASTELO BRANCO, VITOR AUGUSTO DOS SANTOS MUNIZ e WELLISON SILVA SANTOS
.
Sumário
Introdução
Funcionalidades 
Histórico
Tipos de sistemas operacionais
Conceitos de hardware
Interrupções 
Proteção do núcleo 
Chamadas de sistema 
Arquiteturas de Sistemas Operacionais 
Sistemas monolíticos 
Sistemas em camadas 
Sistemas micro núcleo 
Máquinas virtuais 
Processos
Processos sequenciais vs paralelos 
Estado dos processos 
PCB e tabelas de processos 
Funções do núcleo de sistema operacional 
Threads 
Modelos de multithreading
Concorrência
Problemas de concorrência
DeadLock
Starvation
Regiões críticas 
Código reentrante 
Situações de corrida
A solução de Dekker 
A solução de Peterson
Comunicação de processos 
Escalonamento de Processos
Níveis de escalonamento 
Escalonamento preemptivo e não preemptivo
Algoritmos de escalonamento 
Gerenciamento de Memória 
Organização da memória 
Estratégias de alocação 
Particionamento fixo
Particionamento contígua 
Alocação por segmentos
Alocação paginada
Alocação segmentada paginada
Tabelas de páginas
Memória Virtual
Algoritmos de substituição de páginas
Conjunto de trabalho 
A anomalia de Belady
Thrashing 
Gerenciamento de I/O
Operação de Módulos de I/O
Dispositivos de entrada/saída 
Componentes de um dispositivo
Barramentos
Interface de acesso
Endereçamento
Interrupções
Discos rígidos 
Escalonamento de acessos
Caching de blocos 
Sistemas RAID
Gerência de arquivos 
Arquivos 
Organização de volumes
Sistemas de arquivos
Virtualização 
Conceitos básicos 
Tipos de máquinas virtuais 
Técnicas de virtualização 
Sistemas operacionais distribuídos
Programação concorrente
Referências
Introdução
Antes de falar de sistemas operacionais (SO’s), precisamos falar de sistema computacional, que se compõe em vários ou único processador, monitor, RAM, discos, mouse, impressoras, interfaces de redes, teclado e outros dispositivos de I/O. Os programas precisam saber lidar com todos esses recursos e é justamente por conta dessa precisão que os sistemas operacionais surgiram e têm grande importância. Um SO tem a funcionalidade de prover suporte para aplicações de forma que o mesmo desempenha uma interface entre o dispositivo de hardware e o SO. 
1.1 Funcionalidades 
Um SO é um software básico que tem como objetivo agir como uma interface (ou intermediário) entre o usuário e o hardware, ou seja, é um programa ou conjunto de programas que gerencia todos os recursos disponíveis do sistema computacional. Em uma aplicação sem uso do SO há maior consumo no tempo de programação, aumento da complexidade e da atenção do usuário com detalhes do mesmo. Já uma aplicação com SO proporciona absoluta portabilidade, absoluta racionalidade e absoluta dedicação a problemas de alto nível.
Os prós de um SO:
· Retrata uma máquina mais maleável;
· Outorga a serventia eficiente e controlada dos componentes de hardware;
· Outorga a utilização compartilhada e protegida dos diversos componentes de hardware e software, por diversos usuários.
Os contras de um SO:
.
· Proveito;
· Rendimento;
· A melhor escolha sempre depende de algo;
· Propensão de evolução.
Na interação com o SO (que pode ser na forma textual ou gráfica), o usuário se comunica através de uma linguagem de comunicação especial, denominada “linguagem de comando”. Já o programa dos usuários interagindo com o SO, eles invocam os serviços do SO por meio das “chamadas ao sistema operacional”.
Gerência de processos: tem como objetivo partilhar de forma justa a técnica de processamento entre as aplicações, respeitando as prioridades e evitando a monopolização de um recurso para uma aplicação.
As formas de processamento do SO:
· Serial (Monoprogramação): Recursos alocados a um único programa;
· Concorrente (Multiprogramação): Recursos dinamicamente reassociados entre uma coleção de programas em diferentes estágios.
Gerência de memória: fornece a cada aplicação um espaço na memória principal, isolada e independente das outras e inclusive do núcleo do sistema.
Gerência de I/O: tem como funcionalidade a interação com cada dispositivo através de drivers e criar modelos abstratos que possibilitam agrupar vários dispositivos diferentes na mesma interface de acesso.
Gerência de arquivos: é construída sobre a gerência de dispositivos e tem como objetivo criar arquivos e diretórios definindo sua interface de acesso e as regras de uso.
Gerência de Proteção: com computadores ligados em rede e compartilhado por muitos usuários, é significativo definir visivelmente os recursos que cada um pode acessar, as formas de acesso e garantir que essas definições sejam obedecidas.
1.2 Histórico
· 1ª Geração (1945/1955)
Os computadores eram a válvula naquela época, sem presença de um SO e programação em linguagem de máquina (baseados em 0 e 1). 
Um exemplo de computador da época: Colossus Mark I
· 2ª Geração (1955/1965)
Invenção e uso dos transistores (menores que as válvulas e não se tinha tanta perda de energia por efeito Joule) para fabricação de computadores, uso da linguagem Assembly e FORTRAN, SO’s do tipo lote (processamento batch, onde se submete vários programas enfileirados e o programa posterior só é processado após o término completo do anterior).
Transistor
· 3ª Geração (1965/1980)
Circuitos integrados, multiprogramação, time-sharing (onde o sistema computacional é compartilhado com vários processos ao mesmo tempo), sistema OS/360 (IBM).
 
OS/360 Circuito integrado
· 4ª Geração (1980/1990)
Circuitos integrados com alta escala de integração (LSI), SO para micros (MS-DOS (textual) e Windows (gráfico)), difusão da internet (rede mundial de computadores interligados um ao outro)
 
Windows MS-DOS
· 5ª Geração (1990/HOJE)
Difusão da internet, SO com suporte para TCP/IP (respectivamente, protocolo de transporte e rede), arquitetura de software Cliente Servidor, sistemas de tempo-real, computação ubíqua, internet das coisas, sistemas ciber-físicos (CPS).
1.3 Tipos de sistemasoperacionais
Classificação quanto ao compartilhamento de hardware
a) Monoprogramado/Monotarefa:
Permite um único programa ativo em um intervalo de tempo, o qual permanece na memória principal até o final da sua execução (Ex: MS-DOS). Uma característica forte: permite que o processador, a RAM e os periféricos se dediquem especificamente a execução de um único programa. Sendo assim, os recursos são mal utilizados (exemplo: se o programa está em execução sem o uso do disco, o disco fica ocioso, caso contrário, a CPU fica ociosa), todavia, são implementados com facilidade. Existem apenas três estados para o processo dentro do ciclo de execução: novo, executando e terminado.
b) Multiprogramado/Multitarefa:
Mantêm vários programas em execução na RAM, para permitir o compartilhamento do tempo de CPU e demais recursos (Ex: Windows, UNIX). A característica principal é manter vários programas em memória ao mesmo tempo. A processos simultâneos, em um único processador: enquanto um espera, o outro opera. Necessita-se de mecanismo de trocas rápidas de processos.
 
Classificação quanto ao tipo de processamento
 
As subdivisões de SO’s multitarefa quanto à interação permitida com as aplicações:
o Sistemas de Batch.
Foram os primeiros a serem criados e se caracterizam por terem seus programas executados de forma linear. Nesse tipo de SO, não exigem influência com o usuário, lendo e gravando dados em disco.
 
o Sistemas de Tempo Compartilhado (time-sharing)
Apareceram devido ao surgimento dos “terminais burros”. Denomina-se este nome pois eram desprovidos de qualquer capacidade de processamento local, que era executado pela CPU do sistema central. É permitido a interação entre o sistema e o usuário. Para cada usuário o SO aloca uma fatia de tempo do processador. Não somente o processador pode ser compartilhado, e sim todos os recursos do sistema.
 
o Sistemas de Tempo Real
 
São bem parecidos em realização aos sistemas de tempo compartilhado, porém o tempo de resposta exigido no processamento das aplicações é a maior diferença. Não existe a ideia de fatia de tempo, um programa detém o processador o tempo que for necessário até que se manifeste algum usuário de maior preferência para o sistema. Esses sistemas são mais comuns em aplicações de controle de processos tais como algum tipo de monitoramento ou qualquer aplicação onde o fator tempo de resposta é crítico e fundamental.
 
c) Sistemas com múltiplos processadores
São caracterizados por possuir dois ou mais CPU’s interligadas, operando em conjunto. São subdivididos em fortemente acoplados (onde os processadores compartilham uma única memória e são controlados por apenas um único SO) e fracamente acoplados (possui dois ou mais sistemas computacionais conectados através de linhas de comunicação, funcionam de forma independente).
1.4 Conceitos de hardware
1.4.1 Interrupções 
1.4.2 Proteção do núcleo 
1.4.3 Chamadas de sistema 
1.5 Arquiteturas de Sistemas Operacionais 
1.5.1 Sistemas monolíticos 
1.5.2 Sistemas em camadas 
1.5.3 Sistemas micro núcleo 
1.5.4 Máquinas virtuais 
2. Processos
 O conceito mais básico em qualquer sistema operacional é o processo, que nada mais é do que um programa em execução. os processos são abstrações muito importante usadas pelos sistemas operacionais desde que foram inventados, e possuem várias funções, como manter a capacidade de atividades na modalidade concorrente, eles transformam uma única CPU em várias CPU’s virtuais, desta forma podemos observar que sem a existência da abstração de processos a computação moderna seria muito limitada, comparada ao que temos hoje. 
Todos os computadores, trabalham realizando várias tarefas ao mesmo tempo, este fato não visível a todos, mas por trás das solicitações realizadas pelo usuário existem diversos processos sendo realizados de forma simultânea. fato que pode ser verificado acessando o gerenciador de tarefas e a aba processos, tomando como exemplo o sistema operacional Windows.
 Gerenciador de tarefas do windows na aba Processos.
Quando o sistema operacional é iniciado varios processos sao iniciados de forma secreta, ou seja em segundo plano, onde não são visíveis aos olhos do usuário, por exemplo o antivírus ele é iniciado com o sistema e procura novas definições de vírus, além disso vários outros processos podem estar sendo executados enquanto o usuário simplesmente navega, todas essas tarefas precisam ser administradas, e um sistema multiprogramado que suporta muitos processos seria a solução. outros processos podem estar executando, tudo isso através de processos, em todos os sistemas multiprogramados a CPU alter de programa para programa executando cada um em curto espaço de tempo ou seja a CPU trabalha com vários programas em mínimos espaços de tempo, dessa forma fica a alusão de que ela faz tudo ao mesmo tempo, este fato é conhecido por alguns como pseudo paralelismo, ter controle sobre várias atividades feitas ao mesmo tempo é algo complexo, para estudiosos da área estão trabalhando no modelo conceitual de processos gerenciais que facilita o paralelismo.
O termo processo pode ser substituído pelo termo tarefa e ter outras definições como:
Um programa em execução
Uma atividade assíncrona
Os processos computacionais podem ser divididos em subprocessos, podem ser decompostos em processos componentes menores e mais simples que o processo Inicial. O que permite um detalhamento da realização da sua tarefa, isso pode ser feito até que os processos cheguem ao nível de micro instruções do processador que será utilizado. o nível adequado da divisão de um processo é o nível que permite um entendimento completo dos eventos que estão acontecendo no estudo. processos tipicamente também podem criar outros novos processos, o processo criador é chamado de processo pai e os processos criados são chamados de processos filhos, um processo filho também pode criar novos processos assim se configurando uma árvore de hierarquia.
2.1 Processos sequenciais vs paralelos 
 Processos sequenciais são aqueles que ocorrem um de cada vez, em uma série de eventos. para cada processo todos os recursos computacionais estão disponíveis, ou seja ocorre um processo por vez, desta forma os recursos computacionais podem ser usados livremente.
Diagrama exemplo de processos sequenciais 
porém os processos nem sempre usam todos os recursos computacionais, o que faz com que alguns recursos fiquem ociosos, variando de processo para processo, isso é considerado um problema tendo em vista os custos com económicos com os recursos. 
Processos Paralelos são aqueles processos que ocorrem ao mesmo tempo desta forma os processos Paralelos que podem ser dois ou mais podem disputar um ou mais recursos computacionais pelo fato de estarem funcionando ao mesmo tempo por isso a denominação de processos paralelos. 
Diagrama exemplo de processos paralelos
Existem três tipos de processos paralelos: 
Independentes - quando utilizam recursos diferentes e não precisam se envolveram em disputas.
Concorrentes - quando os processos precisam utilizar o mesmo recurso computacional e ficam dependentes do sistema operacional para decidir quem vai usar primeiro.
Cooperantes - quando processos em conjunto utilizam os mesmos recursos computacionais para realizar uma determinada tarefa.
É impossível prever Quais os tipos e a quantidade de processo que um sistema operacional terá que administrar então o mesmo deve se manter preparado para receber grandes quantidades de processos Paralelos ou concorrentes e realizar a complexa tarefa de gerenciar todos os processos e recursos computacionais disponíveis.
2.2 Estado dos processos 
Diante de um sistema multiprogramável, um processo não poderá colocar a CPU como prioridade, dando a entender que possa existir um compartilhamento sobre a utilização do processador. Os processos consequentemente passam por inúmerosestados ao longo do processamento, mediante as aplicações de ocorrências geradas pelo próprio sistema operacional, pelo hardware, e também, até pelo programa. Diante disso, são estados possíveis de um processo:
Novo: Tal estado é onde se deve a alocação de dados dentro da memória, sendo criado no sistema. Todos os meios necessários à execução do processo são guardados durante a ligação do por este estado, onde acontece uma vez. Muitos processos devem estar ligados a este estado, simultaneamente.
 
Pronto: É onde os processos, após serem criados ou quando retornam do processo de admissão, permaneceram em espera aguardando a soltura da CPU para que possam começar ou continuar seus processos. De certo modo, é como se fossem uma fila, gerenciada pelo sistema operacional, que se remete a organizar todos os processos de acordo as informações contidas. Nesse estado pode acarretar vários processos, ao mesmo tempo.
Execução: É onde, de fato, o processo utiliza a CPU. O mesmo fica contido no processador até que seja parado ou termine sua execução. Nesse estado, somente um único processo poderá permanecer de cada vez, pois, já existe um único processador para executar um processo.
Espera: Nesse estado estão presentes os processos que sofreram com algum tipo de interrupção de entrada e saída, logo os mesmo devem permanecer até que a intercessão seja solucionada. Podem estar vários processos nesse estado, simultaneamente. 
Saída: É o último estado do processo, quando este acaba seu processamento, assim, dando origem a uma nova execução. Podem existir mais de um processo neste estado, ao mesmo tempo.
Exemplo de um esquema dos estados de um processo
2.3 PCB e tabelas de processos 
 Quando o sistema operacional passa a usar um modelo de administração de processos, para que de forma eficiente consiga controlar esses processos existentes dentro do sistema. é criada uma tabela chamada de tabela de processo esta tabela é geralmente implementada em forma de Vetor de estruturas ou então em forma de uma lista de estruturas. Cada processo existente aloca uma posição da tabela, Esta estrutura que é projetada para receber informações recebe o nome de PCB. 
O PCB É uma estrutura de dados que mostra a representação de um processo para o sistema operacional contém as informações que são precisas para execução, interrupção e retomada de acordo com o que o sistema operacional determina, tudo isso sem prejuízo aos processos. 
O PCB contém as seguintes informações:
ID do processo (PID)
Estado corrente do processo
Ponteiro direto para o processo pai
Uma lista de ponteiros para todos os processos filhos
Sistema de prioridade do processo
Uma lista de ponteiro para as regiões que foram alocados na memória
Informações sobre horário de início e tempo utilizado do processador
Estatísticas sobre o uso de memória e periféricos
Cópia do conteúdo do controlador de programa
Cópia do conteúdo dos registradores do processador
Identificador do processador que está sendo utilizado no momento
Informações sobre diretório Raiz e de trabalho
Informações dos arquivos em uso
Permissões e direitos
Exemplo de uma tabela de processos
Operações realizadas sobre processos:
Criação
Destruição
Suspensão
Retomada
Prioridade
Bloqueio
Ativação
Execução
Comunicação inter-processo
Quando se cria um processo também são criadas algumas operações particulares como:
ID do processo(PID)
Inserção do processo na lista de processos conhecidos do sistema
Determinação da prioridade inicial do processo
Criação do PCB
Alocação inicial dos recursos necessários
2.4 Funções do núcleo de sistema operacional 
 O que Kernel é uma parte do sistema operacional também é chamada de núcleo. todas as operações que envolvem processos são controladas pelo Kernel, apesar do Kernel não representar a maior parte do sistema é uma das partes mais importantes tanto que fica alocada permanentemente na memória primária do sistema funcionando basicamente como um cérebro. 
Uma das funções vitais do Kernel do sistema operacional é o gerenciamento de interrupções pois nos sistemas operacionais um grande número de interrupções é constantemente direcionada ao processador e seu efetivo processamento de término Quem irá usar os recursos do sistema e consequentemente como serão os tempos de resposta para os processos dos usuários.
A partir de uma máquina física com um ou mais processadores, o núcleo de um sistema operacional pode construir diversas máquinas virtuais onde cada máquina virtual é designada para um processo, este processo dentro de certos limites que são impostos pelo próprio sistema operacional controla sua máquina virtual, para que ela realize as tarefas.
O núcleo de um sistema operacional deve conter rotina para que possa realizar as seguintes funções:
Gerenciamento de interrupções
Manipulação de processos
Manipulação dos PCBs
Troca de estado dos processos
Intercomunicação dos processos
Sincronização dos processos
Gerenciamento de memória
Gerenciamento de dispositivos de entrada e saída
Suporte a um ou mais sistemas de arquivos
suporte a funções de administração do sistema
Boa parte dessas funções podem ser programada diretamente em assembly, permitindo assim um maior desempenho e uma maior eficiência em sua execução.
2.5 Threads 
Thread é um programa que consequentemente executa como um subsistema, logo tendo uma forma de processo de se auto dividir em duas ou até mesmo mais tarefas. Essas diversas tarefas poderão ser executadas ao mesmo tempo, para iniciar de forma mais rápida do que um programa em apenas um bloco, ou praticamente em conjunto, mas elas são tão rápidas que se pode compreender que trabalham juntas ao mesmo tempo.
Os inúmeros threads que existem em um único programa podem trocar de dados entre si, e, compartilhar as mesmas aptidões do sistema, incluindo apenas um espaço de memória. Assim, um usuário poderá utilizar alguma função do sistema enquanto as outras linhas de execução estarão ocupadas e realizando outros cálculos e operações. É como se um usuário virtual estivesse atrelado de forma sigilosa no mesmo PC que a pessoa, simultaneamente.
Diante à maneira rápida que ocorre a mudança de uma thread e a outra, ao que tudo indica, é como se elas estivessem sendo iniciadas simultaneamente ao mesmo tempo em um hardware com apenas uma única CPU. Tais sistemas são nomeados de monothread. Pois, para os hardwares que possuem mais de uma CPU, os threads são, de fato, feitos em antagonismo e recebem o nome de multithread.
Vantagens:
· Não existe necessidade de comunicação entre processos
· Utilização de multiprocessos para um mesmo processo
· Um programa pode continuar executando mesmo se estiver bloqueada.
Desvantagem:
· O desenvolvimento de aplicações que fazem uso de threads não é simples.
Ilustração de uma thread
2.5.1 Modelos de multithreading
3. Concorrência
3.1 Problemas de concorrência
3.2 DeadLock
3.3 Starvation
3.4 Regiões críticas 
3.5 Código reentrante 
3.6 Situações de corrida
3.7 A solução de Dekker 
3.8 A solução de Peterson
3.9 Comunicação de processos
 
4. Escalonamento de Processos
4.1 Níveis de escalonamento 
4.2 Escalonamento preemptivo e não preemptivo
4.3 Algoritmos de escalonamento 
5. Gerenciamento de Memória 
5.1 Organização da memória 
5.2 Estratégias de alocação 
5.2.1 Particionamento fixo
5.2.2 Particionamento contígua 
5.2.3 Alocação por segmentos
5.2.4 Alocação paginada
5.2.5 Alocação segmentada paginada
5.3 Tabelas de páginas
5.4 Memória Virtual
5.4.1 Algoritmos de substituição de páginas
5.4.2 Conjunto de trabalho 
5.4.3 A anomalia de Belady
5.4.4 Thrashing 
6. Gerenciamento de I/O
6.1 Operação de Módulos de I/O
6.2 Dispositivos de entrada/saída 
6.2.1 Componentes de um dispositivo
6.2.2 Barramentos
6.2.3 Interface de acesso
6.2.4 Endereçamento6.2.5 Interrupções
6.3 Discos rígidos 
6.3.1 Escalonamento de acessos
6.3.2 Caching de blocos 
6.3.3 Sistemas RAID
7. Gerência de arquivos 
7.1 Arquivos 
7.2 Organização de volumes
7.3 Sistemas de arquivos
8. Virtualização 
8.1 Conceitos básicos 
A tecnologia de máquinas virtuais (também denominada como virtualização) possibilita que um único computador hospeda múltiplas máquinas virtuais, cada qual com seu próprio sistema operacional.
Devido essa característica, um sistema virtualizado pode ter diferentes serviços funcionando em diferentes máquinas virtuais, o que diminui o impacto das falhas (a falha em uma das máquinas virtuais não induz a falha nas outras automaticamente).
Neste contexto o único software que funciona no modo núcleo é o hipervisor (também conhecido como monitor de máquina virtual) que tem menos linhas de comando em comparação com um sistema operacional, dessa forma, apresenta menos erros.
Existem dois tipos básicos de máquinas virtuais, hipervisor tipo 1 e hipervisor tipo 2, há também variações (buscando otimização) desses dois tipos. Já para a virtualização, existem três formas: a virtualização que exporta o sistema físico como uma abstração do hardware (virtualização do hardware); a virtualização que exporta um sistema operacional como abstração de um sistema específico (virtualização de sistema operacional) e a virtualização na qual a camada de virtualização cria uma aplicação no topo do sistema operacional (virtualização de linguagens de programação). Além desses conceitos, há também diversas maneiras de tratar os detalhes técnicos, conhecidas como técnicas de virtualização.
8.2 Tipos de máquinas virtuais 
 Tipo 1: o hipervisor tem total controle do hardware. Criando um ambiente de máquinas virtuais que operam em conjunto no mesmo sistema físico. Cada máquina virtual se comporta como uma máquina física possuindo seu próprio sistema operacional.
Tipo 2: As máquinas virtuais do tipo 2 trabalham semelhantes as do tipo 1, com a diferença que o hipervisor executa sobre um sistema anfitrião e desse modo o hipervisor simula todas as ações que o sistema anfitrião executaria.
Existe também um hipervisor denominado tipo 3 que é junção das máquinas virtuais do tipo 1 e do tipo 2, onde a máquina virtual acessa o hardware diretamente sem ter que passar alguma informação pro hipervisor.
8.3 Técnicas de virtualização 
 Existem diversas técnicas de virtualização (virtualização total, paravirtualização, entre outras), cada uma com suas características próprias, vantagens e desvantagens.
Virtualização Total
 A virtualização total consiste em virtualizar o hardware fazendo com que o sistema a ser virtualizado não sofra qualquer alteração. O principal benefício dessa técnica é o sistema a ser virtualizado não sofrer qualquer tipo de alteração, mas ao mesmo tempo ele fica mais lento fazendo com que o hipervisor implemente alternativas para que operações privilegiadas possam ser executadas por processadores que não suportem a virtualização nativamente.
Recompilação Dinâmica
 Na recompilação dinâmica há uma tradução das instruções do programa durante a execução do programa, da seguinte forma: as instruções são agrupadas em sequência de bits. Na próxima etapa, essas sequências são agrupadas em sequências mais próximas do sistema operacional hospedeiro, é algo parecido com os bytecodes em Java, por último, essas instruções são reagrupadas em um código de mais alto nível que então é compilado na linguagem nativa da máquina virtual. Essa técnica exige muito poder de processamento, pois acontece em tempo real de execução do programa. 
9. Sistemas operacionais distribuídos
10. Referências
TANEMBAUM, Andrew. Sistemas Operacionais Modernos. 3 Ed. São Paulo: Pearson Education, 2000. 656p. (CAP. 2)

Outros materiais