Escolar Documentos
Profissional Documentos
Cultura Documentos
br
SISTEMA
OPERACIONAL
Prof: Fernando
www.cliqueapostilas.com.br
Sumário
APOSTILA E EXERCICIOS DA DISCIPLINA SISTEMA OPERACIONAL ..................... 4
1. Introdução ...................................................................................................................... 4
1.1 Facilidade de acesso aos recursos do sistema ............................................................ 5
1.2 Compartilhamento de recursos de forma organizada e protegida .............................. 6
2. Um breve histórico dos Sistemas Operacionais ............................................................. 7
3. Tipos de Sistemas Operacionais .................................................................................. 12
3.1 Classificação ............................................................................................................. 12
3.1.1 Sistema monoprogramável/ monotarefa ............................................................. 13
3.1.2 Sistema multiprogramável/ multitarefas ............................................................. 13
3.1.3 Sistemas com múltiplos processadores .............................................................. 18
3.2 Alguns Tipos de Sistemas Operacionais .................................................................. 20
4. Estrutura de Sistemas Operacionais ............................................................................. 22
4.1 Estrutura ................................................................................................................... 24
4.2 Funcionalidades ........................................................................................................ 25
4.3 Proteção do núcleo ................................................................................................... 27
4.4 Interrupções e Chamadas de Sistemas...................................................................... 28
4.5 Sistemas monolíticos ................................................................................................ 31
4.6 Sistemas em Camadas .............................................................................................. 32
4.7 Sistemas Micronúcleo (Cliente-Servidor) ................................................................ 33
4.8 Máquinas Virtuais .................................................................................................... 34
5. Processos Computacionais ........................................................................................... 36
5.1 O PCB (Process Control Block) ............................................................................... 37
5.2 Estado do Processo ................................................................................................... 39
5.3 Mudanças de estado de Processo.............................................................................. 39
5.4 Tipos de Processos ................................................................................................... 39
5.5 Comunicação entre Processos .................................................................................. 40
5.5.1 PROBLEMAS DE SINCRONIZAÇÃO ............................................................ 40
5.5.2 SOLUÇÕES DE SOFTWARE........................................................................... 41
5.5.3 DEADLOCKS .................................................................................................... 43
6. Responda as seguintes Questões .................................................................................. 44
7. Aulas Prática ................................................................................................................ 48
8. Referências Bibliográficas e Sites................................................................................ 48
www.cliqueapostilas.com.br
SISTEMAS OPERACIONAIS
Competência
1. Conhecer o funcionamento interno de um Sistema Operacional (S.O.), identificar sistemas
operacionais e programas utilitários de acordo com as necessidades do usuário, bem como analisar e
operar serviços e funções de sistemas operacionais e conhecer princípios, normas e recursos de
segurança em Informática.
Habilidades
1. Evolução de S.O.; Conceitos de S.O.; Classificação, Estrutura e Processos de Sistemas
Operacionais; Gerencia de Memória e Sistemas de Arquivos; Instalação de Sistemas Operacionais;
Configuração de Dispositivos (mouse, vídeo, modem, impressora e outros); Instalação,
desinstalação e configuração de softwares (aplicativos); Estrutura de Domínios e Contas;
Compartilhamento de Recursos; Segurança em S.O.; Tipos de Sistemas Operacionais; Sistemas
Operacionais Livres e Proprietários; Utilização do Prompt de Comandos.
3
www.cliqueapostilas.com.br
1. Introdução
Antes de começarmos a estudar os conceitos e os principais componentes de um sistema
operacional, devemos conhecer suas funções básicas.
Por mais complexo que possa parecer, um sistema operacional é apenas um conjunto de
rotinas executado pelo processador, da mesma forma que qualquer outro programa. Sua função
principal é controlar o funcionamento do computador, como um gerente dos diversos recursos
disponíveis no sistema.
Segundo Sobell, Sistema Operacional (SO) é um programa de controle do computador. Ele é
responsável por alocar recursos de hardware e escalonar tarefas. Ele também deve prover uma
interface para o usuário, ou seja, ele fornece ao usuário uma maneira de acesso aos recursos do
computador.
Segundo Stemmer, um SO pode ser definido como um gerenciador dos recursos que
compõem o computador (processador, memória, I/O, arquivos, etc). Os problemas centrais que o
sistema operacional deve resolver são: o compartilhamento ordenado, a proteção dos recursos a
serem usados pelas aplicações do usuário e o interfaceamento entre este e a máquina.
Um sistema operacional é um programa que controla a execução dos programas de aplicação
e atua como uma interface entre o usuário do computador e o hardware do computador. Um
sistema operacional pode ser pensado como tendo dois objetivos ou desempenhando duas funções:
conveniência, pois faz o sistema computacional mais conveniente de usar; e eficiência, pois permite
que os recursos do sistema computacional sejam usados de maneira eficiente [Stallings, 1996 apud
Jandl].
O SO é uma camada de software colocada entre o hardware e os programas que executam
tarefas para os usuários.
O SO busca ser mais eficiente (maior utilização do hardware; distribuição de recursos entre
os programas) e mais conveniente (diminuição de tempo para construção do programa; o acesso a
periféricos é feita pelo SO).
O SO oferece os seguintes tipos de serviços:
Oferece meios para que um programa seja carregado na memória principal e executado.
O SO recebe o nome do arquivo, aloca na memória para o programa, copia o conteúdo
4
www.cliqueapostilas.com.br
do arquivo para a memória principal, inicia sua execução, sendo possível abortar a
execução.
Permite a utilização de arquivos, serviços implementados pelo Sistema de Arquivos.
Podendo criar, escrever, ler e destruir o arquivo. Através da leitura e escrita pode
renomear, obter tamanho, data e outras informações.
Alocação de periféricos, leitura, escrita e liberação. Pode obter informações a respeito de
cada periférico e alterar algumas de suas características.
Compartilhamento do computador. Podendo saber quanto e quais recursos cada usuário
necessita. Pode-se utilizar esta informação para calcular o valor a ser cobrado pelo uso
do computador, mesmo que não tenha esta cobrança, a monitoração do uso dos recursos
pode levar a identificação de gargalos no sistema.
Informações sobre o sistema (data, hora, lista de usuários, versão do SO, etc).
Mecanismos de proteção entre os usuários. Para não causar danos aos arquivos e
trabalhos do usuário.
O computador pode ser considerado como uma maquina de níveis ou camadas, tornando a
interação entre o usuário e o computador mais simples, confiável e eficiente. A parte física tornou-
se transparente para o usuário. Basicamente o computador possui a estrutura abaixo:
Um sistema operacional possui inúmeras funções que resumimos em: Facilidade de acesso
aos recursos do sistema e Compartilhamento de recursos de forma organizada e protegida.
5
www.cliqueapostilas.com.br
unidade de disco, posicionar na trilha e setor onde estão os dados, transferir os dados do disco para
a memória e, finalmente, informar ao programa a chegada dos dados.
O sistema operacional, então, serve de interface entre os usuários e os recursos disponíveis
no sistema, tornando esta comunicação transparente e permitindo ao usuário um trabalho mais
eficiente e com menores chances de erros.
Este conceito de ambiente simulado, criado pelo sistema operacional, e denominado
máquina virtual (virtual machine) está presente, de alguma forma, na maioria dos sistemas atuais.
É comum pensar que compiladores, linkers1, bibliotecas, depuradores e outras ferramentas
fazem parte do sistema operacional, mas, na realidade, estas facilidades são apenas utilitários,
destinados a ajudar a interação do usuário com o computador.
1
Linkers (ligadores) são programas capazes de juntar as diferentes partes de um mesmo programa, após elas
terem sido montadas separadamente. Isso permite, entre outras coisas, que programas grandes sejam divididos em
módulos que são montados separadamente e depois unidos em um só programa pelo ligador.
6
www.cliqueapostilas.com.br
2
Acompanhando a figura: inicialmente, os programas passaram a ser perfurados em cartões, que, submetidos a
uma leitora, eram gravados em uma fita de entrada (a). A fita, então, era lida pelo computador, que executava um
programa de cada vez, gravando o resultado do processamento em uma fita de saída (b). Ao terminar todos os
programas, a fita de saída era lida e impressa (c).
7
www.cliqueapostilas.com.br
8
www.cliqueapostilas.com.br
O monitor residente também é o local indicado para as rotinas de acesso aos periféricos, são
rotinas utilizadas por todos os programas, com elas as aplicações não precisam acessar diretamente
os periféricos, apenas chamar a rotina apropriada dentro do monitor, iniciando a ideia de chamada
de sistema.
Anos 60: Surgiu o conceito de multiprogramação. No monitor residente, apenas um
programa é executado de cada vez. Quando ele precisa fazer alguma entrada e saída, o processador
fica parado. Em geral, periféricos são dispositivos eletromecânicos e trabalham na faixa de
milissegundo. Ao mesmo tempo, o processador é um dispositivo eletrônico, que trabalha na faixa de
microssegundo.
Decidiram então colocar vários programas na memória principal ao mesmo tempo, assim
enquanto um programa está esperando a conclusão da E/S o outro inicia sua execução
(multiprogramação). Desta forma o processador fica menos tempo parado e os periféricos são
melhor utilizados, pois com mais programas em execução, as solicitações são mais frequentes.
Surgem também as interrupções. Quando um comando é enviado para um periférico,
imediatamente o SO inicia a execução de um outro programa, sendo necessário que o periférico
avise o SO quando estiver concluído, isso se dá através das interrupções.
Técnica Polling ou busy-loop: Pode-se fazer com que o processador fique em um laço,
consultando a interface do periférico, até que a operação esteja concluída.
Não é possível fazer multiprogramação sem interrupções. O desenvolvimento dos discos
magnéticos também são importantes para o surgimento da multiprogramação. Os Jobs eram
submetidos em cartões perfurados e lidos pelo computador diretamente nos cartões, depois
passaram a ser copiados em fitas magnéticas. Com os discos magnéticos os Jobs dos cartões e fitas
passaram a ser lidos em discos, sendo agora possível a execução de vários Jobs.
Com a utilização de discos magnéticos, não havia mais a necessidade de reunir Jobs
semelhantes em lotes. O termo batch passou a designar um sistema no qual não existe interação
entre usuário e a execução do programa. Posteriormente o termo batch foi substituído por
“execução em background”. A depuração de programas em um ambiente batch é difícil. O
programador submete o job e, algumas horas depois, recebe uma listagem como o resultado da
execução. Os erros do programa devem ser detectados e corrigidos nesse contexto.
Nesta década também iniciou as primeiras experiências com sistemas timesharing, porem
somente na década seguinte ocorreu sua disseminação.
1961: o grupo do pesquisador Fernando Corbató, do MIT, anuncia o desenvolvimento do
CTSS – Compatible TimeSharing System, o primeiro sistema operacional com
compartilhamento de tempo.
9
www.cliqueapostilas.com.br
10
www.cliqueapostilas.com.br
1985: primeira tentativa da Microsoft no campo dos sistemas operacionais com interface
gráfica, através do MS-Windows 1.0.
1987: Andrew Tanenbaum, um professor de computação holandês, desenvolve um sistema
operacional didático simplificado, mas respeitando a API do UNIX, que foi batizado como Minix.
1987: IBM e Microsoft apresentam a primeira versão do OS/2, um sistema multitarefa
destinado a substituir o MS-DOS e o Windows. Mais tarde, as duas empresas rompem a parceria; a
IBM continua no OS/2 e a Microsoft investe no ambiente Windows.
1991 – 2000: A VLSI (Very Large Scale Integration) evolui para ULSI (Ultra Large Scale
Integration). O conceito de processamento distribuído é explorado de forma que suas funções
estejam espalhadas por vários processadores através da rede de computadores. E a arquitetura
cliente-servidor aplicada basicamente em redes locais passa a ser oferecida em redes distribuídas.
Problemas de segurança, gerência e desempenho tornam-se fatores importantes relacionados ao
sistema operacional e a rede.
1991: Linus Torvalds, um estudante de graduação finlandês, inicia o desenvolvimento do
Linux, lançando na rede Usenet o núcleo 0.01, logo abraçado por centenas de programadores ao
redor do mundo.
1993: a Microsoft lança o Windows NT, o primeiro sistema 32 bits da empresa.
1993: lançamento dos UNIX de código aberto FreeBSD e NetBSD.
2001: a Apple lança o MacOS X, um sistema operacional derivado da família UNIX BSD.
2001: lançamento do Windows XP.
2004: lançamento do núcleo Linux 2.6.
2006: lançamento do Windows Vista.
2009: lançamento do Windows 7.
2012: lançamento do Windows 8.
Esse histórico reflete apenas o surgimento de alguns sistemas operacionais relativamente
populares; diversos sistemas acadêmicos ou industriais de grande importância pelas contribuições
inovadoras, como Mach, Chorus, QNX e Plan 9, não estão representados.
A maior parte das aplicações comerciais, mesmo em microcomputadores, é hoje construída
em torno de bancos de dados, mesmo que os sistemas gerenciadores de banco de dados sejam
implementados fora do SO.
Uma das áreas de pesquisa mais importantes atualmente é a dos sistemas operacionais
distribuídos, onde vários computadores são interconectados por meio de uma rede de comunicação
de algum tipo. A gerência dessas solicitações aumenta a complexidade do SO, fica mais difícil o
11
www.cliqueapostilas.com.br
controle de acessos não autorizados e cria sérios problemas com segurança, principalmente após o
surgimento da Internet.
Outra área importante são os SO de tempo real usados no suporte as aplicações submetidas
de natureza temporal. Os sistemas mais simples estão os controladores embutidos em utilidades
domesticas (lavadoras de roupa e videocassetes), em outra extremidade, estão os sistemas militares
e o controle de trafego aéreo. Quanto a aplicações criticas estão os sistemas responsáveis pelo
monitoramente de pacientes em hospitais e os sistemas embarcados em veículos, de automóveis até
aviões e sondas espaciais. Em aplicações não criticas estão os vídeo-games e as aplicações
multimídia em geral.
Na tabela a seguir dividimos essa evolução em fases, onde destacamos, em cada uma, suas
principais características de hardware, software, interação com o sistema e aspectos de
conectividade.
3.1 Classificação
Os Sistemas Operacionais podem ser classificados em:
Sistemas monoprogramáveis/monotarefa - Single - Tasking: não admite ser usado
por mais de um usuário simultaneamente, gerenciando uma mesma CPU. O MSDOS, da Microsoft
é o SO monousuário mais utilizado até hoje.
12
www.cliqueapostilas.com.br
13
www.cliqueapostilas.com.br
Sist. Multiprog.
Multitarefas
14
www.cliqueapostilas.com.br
Desvantagens:
Desenvolvimento complexo.
Desvantagens:
Desenvolvimento complexo.
Dedicação exclusiva ao processo.
Sistemas Monoprogramáveis
Somente um programa residente na memória
CPU permanentemente dedicada a execução de um programa
Desperdício na utilização da CPU
Subutilização da memória
Sistemas Multiprogramáveis
15
www.cliqueapostilas.com.br
INTERRUPÇÃO E EXCEÇÃO
Eventos que podem ocorrer durante o processamento de um programa, obrigando a
intervenção do sistema operacional.
Pode ser resultado da execução de instruções do próprio programa, gerado pelo sistema
operacional ou por algum dispositivo de hardware.
O fluxo de execução do programa é desviado para uma rotina especial de tratamento.
- Interrupção
Gerada pelo SO ou por algum dispositivo
Independe do programa que está sendo executado
Quando a interrupção é detectada, o controle é desviado para rotina de tratamento da
interrupção
Através da interrupção o SO sincroniza a execução de todas as suas rotinas e dos
programas de usuário, além de controlar periféricos e dispositivos de sistema.
- Exceção
Resultado direto da execução de uma instrução do próprio programa.
Ex.: Divisão de um número por zero, overflow de caracteres.
O tratamento pode ser escrito pelo próprio programa.
16
www.cliqueapostilas.com.br
2ª - Após o inicio da transferência dos dados, a UCP fica livre para se ocupar de outras
tarefas. Em determinados intervalos de tempo o SO deve realizar um teste para saber do termino ou
não da operação de E/S em cada dispositivo (polling).
- Problema: se existir um grande numero de periféricos o SO terá que interromper o
processamento dos programas para testar os diversos periféricos.
- Canais de E/S
Canais de E/S é um processador com capacidade de executar programas de E/S.
As instruções de E/S são armazenadas na memória principal pela UCP.
A UCP realiza uma operação de E/S instruindo o canal para executar um programa
localizado na memória.
Canal E/S realiza a execução e ao final gera uma interrupção avisando o término da
operação.
BUFFERING
A técnica de buffering consiste na utilização de uma área da memória para a transferência de
dados entre periféricos e a memória principal denominado buffer (memória secundária).
O buffer possui a capacidade de armazenar diversos registros, de modo a permitir que
existam dados lidos no buffer mas ainda não processados, ou ainda não gravados. Desta forma, o
dispositivo de entrada poderá ler diversos registros antes que a CPU os processe, ou a CPU poderá
processar diversos registros antes de o dispositivo de saída realizar a gravação.
SPOOLING
Foi introduzido para aumentar a produtividade e eficiência dos sistemas operacionais.
Este processo permitia armazenar vários programas em uma fita para depois processá-los.
Atualmente, a técnica de spooling é implementada na maioria dos sistemas operacionais,
fazendo com que tanto a CPU quanto os dispositivos de E/S sejam aproveitados de forma mais
eficiente.
Um exemplo em impressoras, no momento em que um comando de impressão é executado
por um programa, as informações que serão impressas são gravadas em um arquivo de disco
(arquivos de spool), para ser impresso posteriormente pelo sistema.
17
www.cliqueapostilas.com.br
REENTRÂNCIA
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.
Comum em sistemas multiprogramáveis, permite que cada usuário manipule dados próprios.
O código não pode ser mudado por nenhum usuário no momento em que está sendo
executado.
PROTEÇÃO
Essencial em sistemas multiprogramáveis para garantir a integridade dos pertencentes a cada
usuário.
Todo sistema implementa algum tipo de proteção ao diversos recursos que são
compartilhados, como memória, dispositivos de E/S e UCP.
Fortemente Fracamente
Acoplados Acoplados
São
Figura 5 - Sistemas classificados
com em:
Múltiplos Processadores
18
www.cliqueapostilas.com.br
Organização Funcional
É o esquema de comunicação interna das CPUs, memória e I/O.
- Barramento Comum
Interliga todos os componentes em um único barramento.
Problema: Somente uma unidade funcional poderá estar utilizando o Barramento.
- Barramento Cruzado
Para evitar o problema de gargalo (no barramento) as unidades podem ser conectados entre
si. É possível a comunicação simultânea entre diferentes unidades funcionais, o hardware resolve os
conflitos de acesso a uma mesma unidade.
IMPORTANTE: a CPU não pode ter acesso simultâneo à uma mesma unidade de memória.
- Memória Multiport
Possibilita os acessos simultâneos a um modulo de memória.
19
www.cliqueapostilas.com.br
- SO Distribuído
Relacionamento forte entre os seus componentes, onde geralmente os SOs são os mesmos.
Ex.: Novell, Lantastic.
Organização Funcional
A organização funcional dos sistemas fracamente acoplados ou topologia define como são
interligadas fisicamente os diversos sistemas de rede.
- Barramento
Utilizadas em redes locais.
- Organização Distribuída
Linhas de comunicação ponto-a-ponto (Internet).
20
www.cliqueapostilas.com.br
21
www.cliqueapostilas.com.br
controle de funcionamento de uma turbina de avião a jato ou de uma caldeira industrial. Exemplos
de sistemas de tempo real incluem o QNX, RT-Linux e VxWorks. Muitos sistemas embutidos têm
características de tempo real, e vice-versa.
- System Calls
Responsáveis por não permitir que a aplicação/usuário acessem diretamente o Kernel do SO,
mando assim, o sistema estável e operante. Estas chamadas à system calls por determinada
aplicação é similar à um programa modularizado ativando um de seus procedimentos ou funções.
Os programas solicitam serviços ao SO através das chamadas de sistema (System Calls).
Semelhante as chamadas de sub-rotinas, enquanto as chamadas de sub-rotinas são transferência para
procedimentos normais do programa, as chamadas de sistema transferem a execução para o SO. O
programa informa o que necessita através de parâmetros. O retorno da chamada de sistema e da
sub-rotina, faz com que a execução do programa seja retomada a partir de instruções que segue a
chamada.
O programador de Assembly chama as sub-rotinas de biblioteca. A lista de serviços do SO é
transformada em uma lista de chamadas de sistema (manual do SO).
A parte do SO responsável por implementar as chamadas de sistemas é chamada Núcleo ou
Kernel. Os principais componentes do Kernel são:
22
www.cliqueapostilas.com.br
3
Compilador é um programa de sistema que traduz um programa descrito em uma linguagem de alto nível para
um programa equivalente em código de maquina para o processador (assembly). Exemplo: compiladores Java e C++.
4
O Montador traduz linguagem assembly para linguagem de maquina (em inglês Assembrer).
5
Interpretador de comandos, também conhecido como “shell”, é responsável por interpretar as instrucoes
enviadas pelo usuário e seus programas ao SO (o Kernel). Ele executa comandos de um arquivo executável. O
GNU/Linux possui diversos interpretadores de comando (bash, asch, csh, tcsh, sh) e o do DOS é o Command.com.
23
www.cliqueapostilas.com.br
O SO oferece uma interface gráfica de usuário (GUI - Graphical User Interface) que
possibilita mais comodidade ao usuário, que passa a usar ícones, menus e mouse no lugar de digitar
comandos textuais.
Na maior parte do tempo, o usuário trabalha com programas distantes do SO e sua opinião a
respeito do sistema irá depender dos programas que utiliza.
Com o SO o usuário final obtêm maior eficiência e conveniência no uso do computador.
Normalmente o processador esta executando programas de usuário. Mas há 2 tipos de eventos que
ativam o SO: uma chamada de sistema ou uma interrupção de periféricos.
A chamada de sistema corresponde a uma solicitação de serviço por parte do programa em
execução. Por meio destas, o SO envia comandos para os controladores de periféricos. O
controlador deve informar ao SO quando a operação estiver concluída. Isso é feito por intermédio
de uma interrupção que acontece quando o processador para o que esta fazendo e passa a executar
uma rotina especifica do SO. A interrupção do periférico avisa o termino da operação de E/S,
dizendo assim que uma chamada de sistema foi concluída, liberando o processador para o programa
que estava a espera.
- Modos de Acesso
Operações como I/O e gerencia de memória são arriscadas e podem causar uma
instabilidade no SO, por isso aplicações não devem realizar este tipo de tarefa.
Para que uma aplicação possa realizar uma instrução privilegiada (que compromete o
sistema) são implementados pelo processador os modos de acesso:
Modo Usuário: aplicação executa instrução não-privilegiada.
Modo Kernel: aplicação executa instrução privilegiada.
4.1 Estrutura
Logicamente, nem todos os sistemas têm a mesma estrutura, ou seja, não apresentam a
mesma forma de ligação entre as partes. Contudo, os sistemas operacionais modernos geralmente
possuem as seguintes partes:
Gerenciamento de processos: Criar e eliminar, suspender e retomar, sincronismo
e comunicação entre processos; visa distribuir a capacidade do processamento de forma justa entre
as aplicações, evitando que uma aplicação monopolize esse recurso e respeitando as prioridades dos
usuários.
24
www.cliqueapostilas.com.br
4.2 Funcionalidades
As funcionalidades do sistema operacional geralmente são inter-dependentes: por exemplo,
a gerência do processador depende de aspectos da gerência de memória, assim como a gerência de
memória depende da gerência de dispositivos e da gerência de proteção.
25
www.cliqueapostilas.com.br
26
www.cliqueapostilas.com.br
27
www.cliqueapostilas.com.br
Nível núcleo: também denominado nível supervisor, sistema, monitor ou ainda kernel
space. Para um código executando nesse nível, todo o processador está acessível: todos os recursos
internos do processador (registradores e portas de entrada/saída) e áreas de memória podem ser
acessados. Além disso, todas as instruções do processador podem ser executadas. Ao ser ligado, o
processador entra em operação neste nível.
Nível usuário (ou userspace): neste nível, somente um sub-conjunto das instruções do
processador, registradores e portas de entrada/saída estão disponíveis. Instruções “perigosas” como
HALT (parar o processador) e RESET (reiniciar o processador) são proibidas para todo código
executando neste nível. Além disso, o hardware restringe o uso da memória, permitindo o acesso
somente a áreas previamente definidas. Caso o código em execução tente executar uma instrução
proibida ou acessar uma área de memória inacessível, o hardware irá gerar uma exceção6, desviando
a execução para uma rotina de tratamento dentro do núcleo, que provavelmente irá abortar o
programa em execução (e também gerar a famosa frase “este programa executou uma instrução
ilegal e será finalizado”, no caso do Windows).
É fácil perceber que, em um sistema operacional convencional, o núcleo e os drivers operam
no nível núcleo, enquanto os utilitários e as aplicações operam no nível usuário, confinados em
áreas de memória distintas.
6
As exceções ocorrem em eventos como instruções ilegais ou não existentes, tais como tentativa de divisão
por zero ou outros erros de software disparam exceções no processador, que resultam na ativação de uma rotina de
tratamento de exceção, usando o mesmo mecanismo das interrupções.
28
www.cliqueapostilas.com.br
29
www.cliqueapostilas.com.br
30
www.cliqueapostilas.com.br
Aplic. Aplic.
SYSTEM CALLS
HARDWARE
31
www.cliqueapostilas.com.br
de um componente podem ter um impacto inesperado em outros componentes, caso estes acessem
aquela estrutura diretamente.
A arquitetura monolítica foi a primeira forma de organizar os sistemas operacionais;
sistemas UNIX antigos e o MS-DOS seguiam esse modelo. Atualmente, apenas sistemas
operacionais embutidos usam essa arquitetura, devido às limitações do hardware sobre o qual
executam. O núcleo do Linux nasceu monolítico, mas vem sendo paulatinamente estruturado e
modularizado desde a versão 2.0 (embora boa parte de seu código ainda permaneça no nível de
núcleo).
32
www.cliqueapostilas.com.br
NÚCLEO
HARDWARE
Uma outra possibilidade de estruturação consiste em retirar do núcleo todo o código de alto
nível (normalmente associado às políticas de gerência de recursos), deixando no núcleo somente o
código de baixo nível necessário para interagir com o hardware e criar as abstrações fundamentais
(como a noção de atividade). Por exemplo, usando essa abordagem o código de acesso aos blocos
de um disco rígido seria mantido no núcleo, enquanto as abstrações de arquivo e diretório seriam
33
www.cliqueapostilas.com.br
criadas e mantidas por um código fora do núcleo, executando da mesma forma que uma aplicação
do usuário.
Por fazer os núcleos de sistema ficarem menores, essa abordagem foi denominada micro-
núcleo (ou kernel). Um micro-núcleo normalmente implementa somente a noção de atividade, de
espaços de memória protegidos e de comunicação entre atividades.
Todos os aspectos de alto nível, como políticas de uso do processador e da memória, o
sistema de arquivos e o controle de acesso aos recursos são implementados fora do núcleo, em
processos que se comunicam usando as primitivas do núcleo.
Em um sistema micro-núcleo, as interações entre componentes e aplicações são feitas
através de trocas de mensagens. Assim, se uma aplicação deseja abrir um arquivo no disco rígido,
envia uma mensagem para o gerente de arquivos que, por sua vez, se comunica com o gerente de
dispositivos para obter os blocos de dados relativos ao arquivo desejado. Os processos não podem
se comunicar diretamente, devido às restrições impostas pelos mecanismos de proteção do
hardware. Por isso, todas as mensagens são transmitidas através de serviços do micro-núcleo. Como
os processos têm de solicitar “serviços” uns dos outros, para poder realizar suas tarefas, essa
abordagem também foi denominada cliente-servidor.
O micro-núcleos foram muito investigados durante os anos 80. Dois exemplos clássicos
dessa abordagem são os sistemas Mach e Chorus. As principais vantagens dos sistemas micro-
núcleo são sua robustez e flexibilidade: caso um sub-sistema tenha problemas, os mecanismos de
proteção de memória e níveis de privilégio irão confiná-lo, impedindo que a instabilidade se alastre
ao restante do sistema. Além disso, é possível customizar o sistema operacional, iniciando somente
os componentes necessários ou escolhendo os componentes mais adequados às aplicações que serão
executadas.
Vários sistemas operacionais atuais adotam parcialmente essa estruturação; por exemplo, o
MacOS X da Apple tem suas raízes no sistema Mach, ocorrendo o mesmo com o Digital UNIX.
Todavia, o custo associado às trocas de mensagens entre componentes pode ser bastante elevado, o
que prejudica seu desempenho e diminui a aceitação desta abordagem. O QNX é um dos poucos
exemplos de micro-núcleo amplamente utilizado, sobretudo em sistemas embutidos e de tempo-
real.
34
www.cliqueapostilas.com.br
35
www.cliqueapostilas.com.br
5. Processos Computacionais
Um processo computacional ou simplesmente processo pode ser entendido como uma
atividade que ocorre em meio computacional, usualmente possuindo um objetivo definido, tendo
duração finita e utilizando uma quantidade limitada de recursos computacionais.
Então, podemos entender um processo como um programa em execução, o que envolve o
código do programa, os dados em uso, os registradores do processador, sua pilha (stack) e o
contador de programa além de outras informações relacionadas a sua execução. Desta forma, temos
que a impressão de um documento é um processo computacional assim como a cópia de um
arquivo, a compilação de um programa ou a execução de uma rotina qualquer. Todas as atividades,
manuais ou automáticas, que ocorrem dentro de um computador podem ser descritas como
processos computacionais.
Atualmente quase todos os computadores são capazes de realizar diversas tarefas ao mesmo
tempo, onde cada uma destas tarefas pode representar um ou mais processos. Para funcionarem
desta forma tais computadores são multiprogramados, ou seja, o processador é chaveado de
processo em processo, em pequenos intervalos de tempo, isto é, o processador executa um
programa durante um pequeno intervalo de tempo, para depois executar outro programa por outro
pequeno intervalo de tempo e assim sucessivamente.
Num instante de tempo qualquer, o processador estará executando apenas um dado
programa, mas durante um intervalo de tempo maior ele poderá ter executado trechos de muitos
programas criando a ilusão de paralelismo.
Este comportamento é, algumas vezes, chamado de paralelismo virtual ou
pseudoparalelismo. Em computadores com dois ou mais processadores é possível a existência de
paralelismo verdadeiro, pois cada processador pode executar um processo independentemente.
A administração de vários diferentes programas em execução concomitante é o que permite
o funcionamento eficiente dos computadores modernos, ao mesmo tempo conferindo-lhe complexa
organização e estrutura, pois tal administração não é simples e requer a consideração de muitos
fatores e situações diferentes, mesmo que improváveis.
O termo processo (process) é muitas vezes substituído pelo termo tarefa (task), foi
utilizado pela primeira vez no desenvolvimento do MULTICS, na década de 60, e pode assumir um
dos seguintes significados:
Um programa em execução;
Uma atividade assíncrona;
O espírito ativo de um procedimento;
O “controle local” de um procedimento em execução;
36
www.cliqueapostilas.com.br
37
www.cliqueapostilas.com.br
O SO gerencia os processos através das system calls que realizam operações como criação,
eliminação, sincronização, suspensão de processos, dentre outros.
Pelo motivo dos PCBs precisarem ser manipulados rapidamente pelo SO, muitos sistemas de
computadores, contém registradores que sempre mostram ao PCB qual o processo em execução. As
instruções de hardware estão frequentemente disponível para carregar informações dentro do PCB e
recuperar essas informações rapidamente.
CONTEXTO DE HARDWARE
Constitui-se basicamente do conteúdo dos registradores, Program Counter (PC), Stack Point
(SP) e bits de estado. Quando um processo está em execução seu contexto de hardware fica gravado
nos registradores do processador. No instante em que o processo perde a utilização da CPU, o
sistema salva suas informações no contexto de hardware do processo.
Este contexto é aplicado a sistemas que utilizam-se de Time-Sharing, podendo ser
interrompido e recuperado como se nada tivesse acontecido.
CONTEXTO DE SOFTWARE
São características de um processo que vão influenciar na execução de um programa, como
por exemplo n.o máximo de arquivos abertos simultaneamente e o tamanho do buffer 7para as
operações de I/O.
Um processo contem 3 grupos, de informações, são eles:
- Identificação: os processos criados recebem sempre uma identificação (PID) e em alguns
sistemas podem receber além do PID um nome também.
- Quotas: são limites de cada recurso do sistema que um processo pode alocar. Caso uma
quota não seja o suficiente o processo é executado lentamente ou até não ser executado. Ex.: n o
máximo de arquivos abertos simultaneamente, tamanho máx. de memória que um processo pode
alocar, no máximo de operações de I/O pendentes, tamanho máx. do buffer para operação de I/O, no
máx. de processos e sub-processos que podem ser criados.
- Privilégios: determina o que os processos podem ou não fazer em relação ao sistema ou a
outros processos.
ESPAÇO DE ENDEREÇAMENTO
É a área de memória do processo onde o programa é executado, além do espaço para os
dados utilizados por ele.
7
Buffer é uma área de armazenamento em memória principal para transferências de I/O.
38
www.cliqueapostilas.com.br
39
www.cliqueapostilas.com.br
40
www.cliqueapostilas.com.br
- Semáforos
Conceito de semáforos foi proposto por Dijkstra, como uma das soluções geral mais simples
de ser implementada. Um semáforo é uma variável inteira, não negativa, que só Poe ser manipulada
por duas instruções: DOWN e UP, também chamadas originalmente de P e V.
No caso da exclusão mútua, as instruções DOWN e UP funcionam como protocolos de
entrada e saída. O semáforo fica associado a um recurso compartilhado, indicando quando o recurso
está sendo acessado por um processo concorrente. Se seu valor for maior que 0, então nenhum
processo está utilizando o recurso, caso contrario, o processo fica impedido de acesso.
O programa a seguir mostra uma solução para os problemas da exclusão mútua entre dois
processos através do uso de semáforos.
PROGRAM Semaforo_1; repeat
var Down(s);
s: semáforo := 1; Regiao_critica_B;
procedure processo_A; Up(s);
begin until false;
repeat end;
down (s); //desocupa a região
Regiao_Critica_A; begin
Up(s); //ocupa a região parbegin
until false; processo_A;
end; processo_B;
parend;
procedure processo_B; end.
begin
41
www.cliqueapostilas.com.br
- Monitores
São mecanismos de sincronização de alto nível tentando tornar mais fáceis o
desenvolvimento e a correção de programas concorrentes.
O monitor é um conjunto de procedimentos, variáveis e estrutura de dados definido dentro
do módulo. Sua característica mais importante é a implementação automática da exclusão mútua
entre procedimentos do monitor em um determinado instante. Toda vez que algum processo chama
um desses procedimentos do monitor. Caso exista, o processo ficará aguardando a sua vez até que
tenha permissão para executar.
- Troca de Mensagens
É um mecanismo de comunicação e sincronização entre processos, implementado pelo
sistema operacional através de duas rotinas do sistema: SEND e RECEIVE. A rotina SEND é
responsável por enviar uma mensagem para um processo receptor, e a rotina RECEIVE por receber
uma mensagem de um processo transmissor. As rotinas podem ser representadas através dos
procedimentos a seguir:
SEND (Receptor, Mensagem);
RECEIVE(Transmissor, Mensagem);
A comunicação ocorre porque um processo, ao receber uma mensagem, obtém dados
enviados de outro processo. A sincronização é obtida porque uma mensagem obtém dados enviados
de outro processo. A sincronização é obtida porque uma mensagem somente pode ser lida após ter
sido enviada, restringindo, dessa forma, a ordem na qual os dois eventos devem ocorrer.
A comunicação por troca de mensagens possui muitos problemas, como a perda de uma
mensagem. Para evitar que esta mensagem não se perca o processo receptor deve enviar ao processo
transmissor uma mensagem de recebimento (ACK – acknowledgement). Caso o transmissor não
receba o ACK ele retransmite a mensagem.
O endereçamento direto é a troca de mensagem entre dois processos diretamente.
O endereçamento indireto é a troca de mensagem entre dois processos utilizando um
intermediário mailbox.
42
www.cliqueapostilas.com.br
5.5.3 DEADLOCKS
Um processo é dito em deadlock quando está esperando por um evento que nunca ocorrerá.
Essa situação é conseqüência do comportamento de recursos do sistema entre vários processos,
sendo que cada processo deve ter acesso ao recurso de forma exclusiva (exclusão mútua).
O problema de deadlock existe em qualquer sistema multiprogramável, no entanto, as
soluções implementadas devem considerar o tipo do sistema e o impacto em seu desempenho.
- Prevenção de Deadlock
Para prevenir o deadlock é necessário uma das quatro condições abaixo:
Exclusão mútua.
Evitar que os processos que já possuam recursos garantidos requisitem novos
recursos, também evitarem o problema do deadlock.
Permitir que um recurso seja retirado de um processo quando outro processo
necessitar do mesmo recurso.
Forçar o processo a ter apenas um recurso de cada vez.
- Detecção de Deadlock
Os sistemas operacionais para detectar deadlocks, devem manter estruturas de dados capazes
de identificar cada recurso do sistema, o processo que o está alocando que estão na espera da
liberação do recurso. Toda vez que um recurso é alocado ou liberado por um processo, a estrutura
deve ser atualizada.
Dependendo do tipo de sistema, o ciclo de busca por um deadlock varia. Em sistemas com
time sharing, o tempo de busca pode ser maior, sem comprometer o desempenho e a confiabilidade
do sistema. Já em sistemas de tempo real devem constantemente certificar-se da ocorrência de
deadlocks, porém essa maior segurança gera mais processamento no sistema.
- Correção de Deadlock
Uma solução bastante utilizada na maioria dos SOs é eliminar os processos envolvidos no
deadlocks e desalocar os recursos já garantindo por eles, quebrando assim a espera circular.
43
www.cliqueapostilas.com.br
14) Sobre as System Calls, marque a alternativa que contem uma afirmação INCORRETA:
a) São responsáveis por impedir acesso direto d) É o método pelo qual o SO gerencia
ao kernel. processos.
b) São interrupções que o SO causa no e) NDA
momento de falha de uma aplicação.
c) São responsáveis por manter o Kernel
estável.
44
www.cliqueapostilas.com.br
45
www.cliqueapostilas.com.br
28) Seria possível construir um sistema operacional seguro usando um processador que não tenha
níveis de privilégio? Por quê?
29) Monte uma tabela com os benefícios e deficiências mais significativos das principais
arquiteturas de sistemas operacionais.
30) Relacione as afirmações aos respectivos tipos de sistemas operacionais: distribuído (D), multi-
usuário (M), desktop (K), servidor (S), embutido (E) ou de tempo-real (T):
[ ] Deve ter um comportamento temporal previsível, ou seja, com prazos de resposta bem
definidos.
[ ] A localização dos recursos do sistema é transparente para os usuários.
[ ] Todos os recursos do sistema têm proprietários e existem regras controlando o acesso aos
mesmos pelos usuários.
[ ] A gerência de energia é muito importante neste tipo de sistema.
[ ] Prioriza a gerência da interface gráfica, recursos multimídia e a interação com o usuário.
[ ] Construído para gerenciar de forma eficiente grandes volumes de recursos.
[ ] São sistemas operacionais compactos, construídos para executar sobre plataformas com poucos
recursos.
31) A operação em modo usuário permite ao processador executar somente parte das instruções
disponíveis em seu conjunto de instruções. Quais das seguintes operações não deveria ser
permitida em nível usuário? Por quê?
(a) Ler uma porta de entrada/saída
(b) Efetuar uma divisão inteira
(c) Escrever um valor em uma posição de memória
(d) Ajustar o valor do relógio do hardware
(e) Ler o valor dos registradores do processador
(f) Mascarar uma ou mais interrupções
46
www.cliqueapostilas.com.br
47