Fig 9.1:

Fig 9.2:

Fig 9.3

Fig. 9.4

Fig 9.5

Fig 9.6

Fig 9.7

Fig 9.8

Fig 9.9

Fig 9.10

Fig 9.11

Fig 9.12
Fig 9.13

Fig 9.14

Fig 9.16

Fig 9. 17

Fig 9.18

Fig 9.19

Fig 9.20

Fig 9.1:

Fig 9.2:

Fig 9.3

Fig. 9.4

Fig 9.5

Fig 9.6

Fig 9.7

Fig 9.8

Fig 9.9

Fig 9.10

Fig 9.11

Fig 9.12
Fig 9.13

Fig 9.14

Fig 9.16

Fig 9. 17

Fig 9.18

Fig 9.19

Fig 9.20

Apresentados os mecanismos de cooperação entre processos diversas dúvidas nos são apresentadas: Como posso sincronizá-los, o que acontece quando ocorre deadlock (o que é deadlock)? Como resolver esses problemas? Quais são as técnicas e como elas funcionam.
O trabalho tem, portanto, uma finalidade de pesquisa. Utilize-se da internet e da bibliografia apresentada para elaborar um trabalho manuscrito apresentando um estudo sobre a comunicação entre processos, os problemas que podem decorrer da mesma e como resolvê-los.
Data de entrega: Dia da prova.
Bom trabalho e boas pesquisas.
Problema do Produtor/Consumidor
Buffer fixo (Mem. Compartilhada)
#define BUFFER_SIZE 10
typedef struct {
…
} item;
item buffer[BUFFER_SIZE];
int in=0;
int out=0;
#define BUF_FILL (((in+1)%BUFFER_SIZE)==out)
item nextProduced;
while(1){
/**/ while(((in+1)%BUFFER_SIZE)==out)
/**/ ; /* não faz nada!*/
/**/ buffer[in]=nextProduced;
/**/ in=(in+1)%BUFFER_SIZE;
}
item nextConsumed;
while(1) {
/**/ while(in==out)
/**/ ; /* não faz nada */
/**/ nextConsumed = buffer[out];
/**/ out=(out+1)%BUFFER_SIZE;
}
Comunicação entre processos (IPC)
Decisões de implementação
Comunicação Direta
Comunicação Indireta
Sincronização de Primitivas
Controle de Espaço no Canal
Gerência do Processador
O escalonador é a entidade do SO responsável por selecionar um processo apto para executar no processador
O objetivo é dividir o tempo do processador de forma justa
Típicos de sistemas multiprogramados
Duas partes:
Escalonador: política de seleção
Dispatcher: efetua a troca de contexto
Objetivos do Escalonamento
Maximizar a utilização do processador Maximizar a produção do sistema
N° de processos executados por unidade de tempo
Minimizar o tempo de execução
Tempo total para executar um processo
Minimizar o tempo de espera
Tempo em que o processo permanece na fila de aptos
Minimizar o tempo de resposta
Tempo decorrido entre a requisição e sua realização
Quando Escalonar
Quando se cria um novo processo, é necessário tomar uma decisão entre executar o processo pai ou o processo filho
Quando se termina um processo, algum outro processo deve ser escolhido entre processos prontos
Quando um processo bloqueia para E\S
Quando ocorre uma interrupção de E\S
Algoritmos de Escalonamento
– Existem duas categorias de algoritmos de escalonamento:
Não preemptivos – escolhe um processo para executar e então o deixa executar até que seja bloqueado ou até que ele voluntariamente libere a CPU
Preemptivos – escolhe um processo e o deixa em execução por um tempo máximo fixado
Ambientes de escalonamento
Lote (Batch)
Algoritmos não preemptivos ou preemptivos com longo intervalo de tempo
Interativo
Preempção é essencial!
Tempo real
Algumas vezes a preempção é desnecessária
Objetivos do algoritmo de escalonamento
Todos os Sistemas:
Justiça – dar a cada processo um porção justa da CPU
Aplicação da política – verificar se a política estabelecida é cumprida
Equilíbrio – manter ocupadas todas as partes do sistema
Sistemas em Lote:
Vazão (throughput) – maximizar o n° de processos por hora
Tempo de retorno – minimizar o tempo entre a submissão e o término
Utilização de CPU – manter a CPU ocupada o tempo todo
Sistemas Interativos
Tempo de resposta – responder rapidamente às requisições
Proporcionalidade – satisfazer às expectativas dos usuários
Sistemas de Tempo Real
Cumprimento dos prazos – evitar a perda de dados
Previsibilidade – evitar a degradação da qualidade em sistemas multimídia
Considerações
Vazão – é o número de processos por hora que o sistema termina
Tempo de resposta – indica quanto tempo, em média, o usuário tem de esperar pelo fim de um trabalho
Despacho (Dispatch) ou Troca/Chaveamento de contexto
Escalonamento em Sistemas em Lote (Batch)
Escalonamento em Sistemas Interativos
Níveis de Escalonamento
Longo Prazo
Executado quando um novo processo é criado;
Determina quando um processo novo passa a ser considerado no sistema;
Controla o grau de multiprogramação do sistema
Quanto maior o n° de processos ativos, menor a porcentagem de tempo de uso do processador por processo
Médio Prazo
Associado a gerência de memória
Participa do mecanismo de swapping
Suporte adicional a multiprogramação
Grau de multiprogramação efetiva (diferencia aptos dos aptos suspensos)
Curto Prazo
Mais importante;
Determina qual processo apto deverá utilizar o processador;
Executado sempre que eventos importantes ocorrem
Interrupção de relógio
Interrupção de E\S
Chamadas de sistemas
Sinais (interrupção de software)
Diagrama de Escalonamento
Algoritmos de escalonamento
FIFO
Simples de Implementar (Fila)
Funcionamento:
Processos aptos são inseridos no fim da fila
Processo no início da fila é o próximo a executar
Processo executa até que:
Libere o processador
Realize uma chamada de sistema (bloqueado)
Termine sua execução
Round Robin
Similar ao algoritmo FIFO, só que:
Cada processo recebe um tempo limite máximo para executar um ciclo do processador
Fila de processos aptos é uma fila circular
Necessidade de um relógio para delimitar as fatias de tempo
Shortest Job First (SJF)
Problema: Duração do próximo pulso
Como resolver?
Escalonamento com prioridades
Escalonamento por Filas Multi-Nível
Filas Multinível com realimentação
Escalonamento de multi-processadores
Multiprocessamento Simétrico (SMP)
Multiprocessamento assimétrico (AMP):
Escalonamento de tempo real
Latência de despacho
Objetivos:
Unix: Um pouco de História
Versões Atuais
Unix: Estrutura geral do sistema
Unix: O Processo de Boot
Unix: O processo de boot (Bootloader)
Unix: O processo de Boot no Kernel
Unix: O processo de boot (Init)
Unix: Processos
Criação de Processos no Unix
Criação de processos no Unix: Exemplo
if((child_pid=fork())>0) {
/*Aqui é o processo pai*/
} else
if(child_pid==0) {
//Estamos no processo filho
if(execl(programfile,/*…*/)<0){
perror(“Erro no Execl“);
exit(1);
}
fprintf(stderr,”Não chega aqui“);
} else {
perror(“Erro no Fork“);
exit(2);
}
Unix: Processos (A partir do Init) 1
Unix: Processos (A partir do Init) 2
Unix: Processos (A partir do Init) 3
Unix: Processos (A partir do Init) 4
Finalizar Nota Anterior
Apresentar os Tipos de SO
Quanto ao Uso:
Monotarefa – Monousuário
Multitarefa – Multiusuário
Multitarefa – Multiusuário
Quanto à Arquitetura:
Monolítico
Microkernel
O que é um Sistema Residente?
Arquitetura de um SO:
Usuários
Camada de Aplicações
Sistema Operacional
Camada de Usuário do SO
Chamadas de Sistema comunicam a de cima e a de baixo
Camada de Núcleo (Kernel do SO)
Camada de Hardware
Sob ponto de vista do usuário: Executa programas requeridos
Sob ponto de vista do Hardware: Requisita recursos (e geralmente é prontamente atendido salvo em alguns casos: Usuário, IRQ, DMA)
Sistemas Operacionais com o Tempo:
Mainframes
Programação Direta (Sem SO, software gerenciava o HW)
– Altair 8800
Monitores de Execução (quase-SO)
– Cartões
Batch
Primeiros SO
Monitor Residente
Inicializa Sistema, controla Hw
Aloca Recursos
Transfere Controle pra um programa (tarefa)
Ao final reassume o controle
Problemas ao se trocar a aplicação

Batch Multiprogramados
Tenta resolver a ociosidade de carregar programas
Carregando varios simultaneamente na memória
Quando um programa para esperando por dados outros podem ser executados
Tudo era manual
Tempo Compartilhado
Um computador
Vários Usuários “Simultaneamente”
Sistemas de Mesa
Surgiu com os computadores pessoais ou estações de trabalho
Dedicados a apenas um usuário
Voltados à conveniência e resposta ao usuário
Podem ou não adotar soluções de sistemas de grande porte
Sistemas Multiprocessados
Sistemas com multiplas CPU’s próximas
Paralelos ou fortemente acoplados
Processadores compartilham memória e clock
Comunicação entre CPU’s pela memória
Aumento de desempenho
Economia de Escala
Aumento de Confiabilidade
Podem ser:
Simétrico
Cada processador executa a mesma tarefa
Assimétrico
Cada processador executa tarefas diferentes
Sistemas Distribuídos
Sistemas fracamente acoplados
Cada processador tem sua memória local
Comunicação se dá por canais de transmissão. Ex: Rede
Distribuem-se a computação entre diversos processadores fisicamente independentes
Podem se organizar como Cliente-Servidor ou Peer-to-Peer (par a par)
Compartilham recursos em uma rede
Aumenta o desempenho por dividir a carga de trabalho
Confiável
Provê comunicação entre usuários e aplicativos
Clusters (Agregados)
Embutidos
Programa Interface: Shell ou GUI
Permite a Interação Usuário-Máquina
Shell (ou Interpretador de Comandos)
Alfanumérico
Baseado em Texto
Aguarda digitação do comando e enter
Permite digitar mais de um comando em uma única linha
Geralmente permite que a saída de um comando seja a entrada de outro
GUI (Graphical User Interface)
Interface Iconográfica
Baseada em Ícones ou Imagens
(Geralmente) Bidimensional
Permite clicar em um local da tela para efetuar operações
Executar um comando
Executar um programa
Não permite concatenação de operações (como na interface de texto)
Nenhum dos dois fazem parte específica do SO
Ambos se encontram na camada de Aplicação
Níveis de Operação
A maioria dos computadores (e PC’s a partir dos 286) tem 2 níveis de operação
Modo Nucleo (Kernel ou Supervisor)
Modo Usuário
Modo Núcleo
Nível de Operação do SO em si
Programa nesse nível tem acesso completo a todo hardware e pode executar qualquer instrução que a máquina seja capaz de executar
Sistema Operacional impede que programas utilizem o modo Kernel
Modo Usuário
Disponibiliza apenas um subconjunto de instruções que a máquina é capaz de realizar
Instruções que afetam controle da máquina ou realizam E/S são proibidas
Tais funções são requisitadas ao Sistema Operacional via Chamada de Sistema
Chamada de Sistema
São métodos utilizados pelos programas para solicitar serviços específicos de hardware ao sistema operacional
Cada chamada corresponde a um procedimento definido em uma biblioteca de software disponibilizada pelo e contida no sistema operacional
As chamadas de sistema executam em modo protegido sem a interferência do usuário
Processo de Execução de uma chamada de sistema:
Serviços são requisitados por se atribuir parâmetros adequados aos seus locais determinados, ex: Em registradores
Executa-se uma instrução especial de trap, uma chamada especial indicando que se deseja utilizar o modo kernel
A máquina é chaveada para o modo kernel, mas o controle vai para o SO, não para o programa
O SO examina os parâmetros para determinar qual das chamadas de sistema executar
Uma tabela é consultada para verificar o endereço do procedimento que executa a chamada ao sistema
Após a conclusão da chamada de sistema o controle retorna ao modo usuário e devolve a execução ao programa.
Exemplo:
count=read(file,buffer,nbytes);
ptr=(int*)malloc(sizeof(int)*4);
Processo
Conceito fundamental para todos os SO’s
Ambiente onde se executa um programa
Consiste na área de memória alocada ao programa e a seus dados
Basicamente podemos dizer que é um programa em execução
SO indica a existência de um processo através de uma tabela chamada de tabela de processos
Cada entrada da tabela é chamada de bloco de controle do processo (Process Control Block PCB)
Um PCB é responsável por manter todas as informações referentes a um determinado processo
Informações de um Processo
Ponteiros
Estado do Processo
Prioridade do Processo
Limites de Memória
Registradores Usados (e valores)
Estado dos Arquivos Abertos
Lista de Arquivos Abertos
Contabilidade do Processo no Uso de Recursos
Outras Informações
Estados do Processo
Num sistema multiprogramável (Multiprocessado), um processo passa por uma série de estados durante sua existência.
Esses estados determinam qual o comportamento do processo no sistema e se limitam a 3:
Pronto: Um processo encontra-se pronto para executar, apenas esperando o processador chamá-lo para iniciar
Executando: O processador está destinando seus recursos ao processo e efetivamente processando suas instruções
Bloqueado/Espera: Um processo está nesse estado quando aguarda a ocorrência de determinado evento para continuar sua execução
Um processo pode ser bloqueado por:
Apesar de estar pronto para executar, ainda necessita de alguma entrada ainda não disponível (DMA, scanf,…)
Estava executando, mas precisou realizar alguma operação de E/S, desocupou o processador, realizou a operação e aguarda a retomada.
Um processo muda diversas vezes de estado durante seu ciclo de vida em função de eventos gerados por ele próprio (Eventos Voluntários) ou pelo sistema operacional (Eventos Involuntários)
Basicamente existem quatro mudanças de estado que podem ocorrer a um processo:
Por que precisamos de um Sistema Operacional?
Para gerenciar diversos recursos. Vejamos quais são e depois me respondam o por quê.
Arquitetura de um Computador
Hardware: O que é?
equipamento físico usado para
atividades de entrada, processamento, saída
e armazenamento de um sistema de
computador
Hardware: Quais são (os fundamentais)
CPU, Armazenamento Primário, Armazenamento Secundário, Tecnologias de Entrada, Tecnologias de Saída, Tecnologias de Comunicação
CPU: O que é e quais os componentes que a compõe?
Unidade Central de Processamento
Realiza a computação propriamente dita
É um microprocessador (ex: Pentium)
composto de milhões de transistores
embutidos em um circuito sobre um chip
Manipula dados e controla as tarefas realizadas
pelos outros componentes
Formada por: ULA, UC e Registradores
ULA
Unidade Lógica e Aritmética
UC
Unidade de Controle: Processa instrução e mantêm o rastreio da próxima instrução
Instruções: Mover um dado na memória, Enviar dado à ULA, Enviar comando à ULA, Escrever um dado na memória, Ler um dado da memória, enviar um dado a um dispositivo de Saída, Ler um dado de um dispositivo de entrada, comparar dados
Registradores
Unidades temporárias de armazenamento. Pouco espaço, altíssima velocidade

Ciclo de Instrução
período de tempo no qual um computador lê e processa uma instrução em linguagem de máquina da sua memória
Seqüência de ações que a CPU realiza para executar cada instrução em código de máquina num programa
Ocorre milhões de vezes por segundo
Avanços nos projetos de Microprocessadores
Goordon Moore previu em 1965 que a complexidade dos processadores dobraria a cada dois anos
O avanço vem das mudanças
– Miniaturização
-Projetos de Larga Escala
– Materiais mais eficientes
– Multiplos processadores em um unico chip
– Uso da tecnologia (e do conhecimento) para melhorar a tecnologia (e a produção do conhecimento)
Impactos da Lei de Moore
Em 1988 um PC chip Intel 80386 de 16 MHZ, 1 MB de RAM, disco rígido de 40 MB e SO DOS 3.31 custava U$ 5.200 (sem monitor) (Nos EUA!)
Em 2005 um PC chip Intel Pentium 4 de 3.4 GHZ, 2 GB de RAM, disco rígido de 160 GB, SO Windows XP e monitor tela plana de 19 polegadas custava cerca de U$ 2.000 (Nos EUA!)
Memória do Computador
Tipos de Memória
Armazenamento Básico (ou primário)
Armazenamento Secundário
O que pode afetar
Tipos de programas que o computador pode executar
Trabalho que ele pode realizar
Velocidade
Custo da Máquina
Custo do Processamento (Tempo x Energia x Recursos)
Capacidade da Memória
CPU processa apenas 0s e 1s
Os dados são traduzidos por meio de linguagens de computador para dígitos binários -> bits
Combinações específicas de bits pode representar determinado caractere alfanumérico ou um número
São necessários 8 bits para representar qualquer caractere -> Byte
A capacidade de armazenamento é medida em bytes
Hierarquia da Capacidade em termos quantitativos
Kilobyte – Mil bytes (em informações de disco) -> 1024 bytes (em informações de processamento)
Megabyte – 1 milhão de bytes -> 1024 Kilobytes
Gigabyte – 1 bilhão de bytes -> 1024 Megabytes
Terabyte – 1 trilhão de bytes -> 1024 Gygabytes
Petabyte – 1 Quatrilhão de bytes -> 1024 Terabytes
Exabyte – 1 Quintilhão de bytes -> 1024 Petabytes
Tipos de Informações Armazenadas
Código
Dados
Sistema Operacional
Armazenamento Primário
Armazena temporariamente os dados e as instruções de programas durante o processamento
Dados armazenados (geralmente) estão em Uso
Códigos do SO
Instruções do Programa Corrente
Dados em uso do programa corrente
4 tipos de Armazenamento
Registradores
Parte da CPU
A menor capacidade de armazenamento
Armazenam dados imediatamente antes e imediatamente após o processamento de uma instrução
Temporária e extremamente volátil
Memória de Acesso Aleatório (RAM)
Armazena programas e pequenas quantidades de dados para processamento
Ao iniciar, um programa é trazido do armazenamento secundário para a RAM
Armazena mais informações que os registradores
Está mais distante da CPU que os registradores
Não faz parte da CPU
precisa de um barramento para enviar e receber os dados e um barramento para saber de onde enviar ou para onde receber os dados (Barramento de Dados + Barramento de Endereços)
Mais Lenta
Temporária e volátil
Memória Cache
Tipo de memória de alta velocidade que permite o armazenamento temporário de blocos de dados que são usados frequentemente
Mais Rápida que a Ram
Menos Quantidade de Dados que a Ram
Dados pouco utilizados ficam na RAM
Entre a CPU e a RAM
Memória Somente de Leitura
É o local em que certas instruções críticas são guardadas com segurança
Não é volátil (Permanente)
Instruções podem apenas serem lidas
(Instruções para iniciar o computador: BIOS)
Armazenamento Secundário
Armazena os dados e programas para uso futuro
Projetado para armazenar grandes quantidades de dados por longos períodos
Não é volátil
Demorada (leva muito tempo para se recuperar os dados)
Mais barata que o de armazenamento primário
Tendencias de melhoria de velocidade, aumento de capacidade e redução de custos com o tempo
Tipos:
Meios Magnéticos
Fitas Magnéticas
DAT, K7
Meio mais Barato
Lento (pois é sequencial)
Discos Rígidos
Armazenamento em um disco dividido em trilhas e setores que fornecem acesso a vários fragmentos de dados (Bidimensional)
Acesso mais rápido que a fita
É o mais usado atualmente
Baixo custo, alta velocidade e grande capacidade de armazenamento
Lêem e escrevem em pilhas de discos magnéticos giratórios
Trilhas Concêntricas
Trilhas divididas em setores

Discos Flexíveis
Semelhante aos discos rígidos
Capacidade limitada
Mais lentos
apenas 1 disco
Dispositivo Óptico
CD/DVD/Blue Ray
Feixe concentrado de luz sendo refletido e incidindo sobre um transceptor (ou não)
Mais lentos que os Discos Rígidos (principalmente para escrita)
Podem ser usados para o armazenamento de grande capacidade de dados
Memórias Flash
Memória de rápido acesso, cujos chips são semelhantes àqueles utilizados em memórias RAM
A principal diferença é que a memória flash conserva seu estado mesmo sem alimentação de energia, permitindo o armazenamento permanente de informações
Limitada em tamanho e mais lento que os HDs
Utilizada em larga escala por
Cartões de máquinas fotográficas digitais
P Pen drives
celulares
etc.
Memórias de Estado Sólido
Melhoria das Memórias Flash
Aumento na Capacidade de Armazenamento
Aumento na rapidez de comunicação
Modelo Empresarial de Armazenamento
É um sistema externo e independente com inteligência que inclui dois ou mais dispositivos de armazenamento
Oferecem:
– Grandes quantidade de armazenamento
Transferências de alto desempenho
Alto grau de disponibilidade
Proteção contra perda (de dados)
Ferramentas de gerenciamento sofisticadas
1956: 450 quilogramas, peso de dois refrigeradores, alugada por U$ 3.200/mês e capacidade de 5 megabytes
2005: microdrive IBM/Hitachi 1 polegada quadrada, custava U$300 e armazenava 6 gigabytes
Hierarquia de Computação
O modo tradicional de comparar classes de computadores é por poder de processamento
Os limites entre essas categorias têm se tornado indistintos
Supercomputadores
Indica os mecanismos de computação mais rápidos disponíveis em qualquer momento específico
Usado para tarefas computacionalmente exigentes e dados extremamente grandes
Uso aplicações militares, científicas e meteorológicas
Mainframes
Visto às vezes como um tipo de servidor
São populares em grandes empresas para aplicações de intenso acesso a dados ou intensa quantidade de requisições de processamentos (transações) acessados por milhares de usuários
Ex de aplicações: reserva de vôo e folha de pagamento corporativo ou aplicações de sistemas financeiros
São menos poderosos e menos dispendiosos que os supercomputadores
Medianos
São um tipo de servidor
Relativamente pequenos, baratos e compactos
Flexibilidade para organizações que não desejam aplicar recursos de TI em mainframes (menos escaláveis)
Ex: comércio eletrônico e provedores de páginas web (Amazon Web Service, Microsoft Azure…)
Estações de Trabalho
Executam aplicações científicas, de engenharia e financeiras computacionalmente intensas
(podem ter) Gráficos de alta resolução e cálculos de alta velocidade
Geralmente são dedicados
Ex: Antigas estações Irix (Silicon Graphics)
Micro Computadores (Computadores Pessoais)
São a categoria menor e mais barata de computadores de aplicação geral
Desktop, Notebook, Laptop
Dispositivos móveis (celulares, PDA’s, Tablets)
Tecnologias de Entrada e Saída
Recebe dados e os converte em um formato que o computador pode entender ou converte dados do computador para que possamos entender
Dispositivos de Entrada
Teclado, Joystick, Mouse, Touchscreen
Kinect, Wiimote (sensores de orientação/deslocamento)
Entrada de Dados pode ser Automatizada
Aumenta a Eficiência e Reduz Erros
Ex: Leitor de Código de Barras ou de RFID
Dispositivos de Saída
Monitores ou impressoras
Atualmente com tecnologia multimídia:
Integração de sons, textos e imagens
Mistura habilidades dos computadores com elementos de entretenimento como TV, Aparelho Estereofônico, Rádio, Jogos, etc.
Tecnologias Emergentes
Computação em Grade
Utilizar diversos computadores para resolver partes de um problema maior
Ex: SETI
Computação Quântica
Utilização dos conhecimentos da física quântica sobre estado dos elétrons para a representação de bits
Parte 1 – Histórico e Visão Abrangente de SOs
Introdução;
Organização e Arquitetura de Computadores;
Objetivo de um SO
Tipos de Sistemas Operacionais;
Quanto à Arquitetura
Micro-Kernel
Monolítico
Quanto ao Funcionamento
Por Batches
Em Tempo Real
Mono-Usuário, Mono-Tarefa
Mono-Usuário, Multi-Tarefa
Multiusuário
Arquitetura de Sistemas Operacionais;
Parte 2 – Gerenciamento de Processos
Conceito de Processo;
Controle de Processos;
Troca de Contexto de Processos;
Conceito de Threads;
Comunicação, Concorrência e Sincronismo de Processos;
Deadlocks;
Escalonamento de Tarefas;
Prova 1
Parte 3 – Gerenciamento de Memória
Endereçamento de Processos;
Gerenciamento de Memória;
Memória Virtual;
Parte 4 – Sistema de Arquivos
Interface do Sistema de Arquivos;
Implementação de Sistemas de Arquivos;
Parte 5 – Entrada e Saída
Sistema de E/S;
Estrutura de Armazenamento em Massa;
Prova 2 –
Avaliação
2 provas de 30 pontos cada
2 Trabalhos de 15 pontos cada
2 Trabalhos integradores de 5 pontos cada
8. BIBLIOGRAFIA
Básica
1. SILBERSCHATZ, A.; GALVIN, P. B. GAGNE, G.; Fundamentos de Sistemas Operacionais, 6a.
ed.; Editora Campus, 2004.
2. TANENBAUM, A. S. and Woodhull, A. S. Sistemas Operacionais – Projeto e Implementação.
Bookman, 2000.
3. STALLINGS, W. Operating Systems – Internals and Design Principles. 3.ed. Englewood Cliffs, NJ : Prentice-Hall, 1998.
Complementar
1. Rômulo Silva de Oliveira, Alexandre da Silva Carissimi, Simão Sirineo Toscani, Sistemas
Operacionais, Editora Bookman, Porto Alegre, 3a Edição, 2008. (reimpressão)
ISBN: 9788577803378
3. BACH, M. The design of the Unix Operating System. Englewood Cliffs, N.J., Prentice-Hall,
1990.
4. LEWIS, B.; BERG, D. J. Threads primer: a guide to multithreaded programming. New Jersey,
Prentice-Hall, 1996.