Vous êtes sur la page 1sur 39

PS-T Sistemas Operacionais Modernos Tanembaum

Capítulo 01 – Sistemas operacionais – Tanenbaum

Sistemas Operacionais: Consiste de um conjunto de programas que compõe o software básico


do computador e cuja finalidade é de executar os programas aplicativos e de servir de interface
entre os computadores e seus usuários. Um sistema operacional deve atender a três objetivos
principais:
• Conveniência: tornar o uso do computador mais fácil;
• Eficiência: tornar eficiente (seguro e justo) o uso do compartilhamento dos recursos
existentes;
• Evolução: possibilitar o constante debug e o desenvolvimento de novas funcionalidades;
Em uma abordagem mais macro o Sistema Operacional pode ser visto como a primeira
camada de software acima do hardware do computador que se encarrega de suportar e servir
de interface entre este e os programas aplicativos e utilitários.
O Sistema Operacional é composto por módulos que se encarregam da comunicação,
alocação e gerenciamento de recursos específicos tais como:
• Processo
• Memória
• Arquivo
• Entrada e Saída
• Interconexão
• Alocação da UCP (Escalonamento)
• Segurança
• Interface com o usuário
A interface entre os programas aplicativos (processos) e o sistema operacional é
realizada através de comandos (instruções) de chamadas do sistema (as system calls)

-1-
PS-T Sistemas Operacionais Modernos Tanembaum

As System calls podem ser genericamente agrupadas em cinco categorias:


1. Controle de processo
2. Manipulação de arquivos
3. Manipulação de dispositivos
4. Informações de manutenção
5. Comunicações

Resumindo:

Função do Sistema Operacional: é gerenciar os componentes e fornecer aos programas do


usuário uma interface com hardware mais simples.

Área de atuação do sistema operacional

Sistema Bancário Reserva de Visualizador web


Passagens áreas Programas de Aplicação

Compiladores Editores Interpretador de


comandos Programas do Sistema

Sistema Operacional
Linguagem de máquina
Micro arquitetura Hardware

Dispositivos físicos

Nível de micro arquitetura → nível no quais os dispositivos físicos são agrupados em unidades
funcionais. Normalmente, esse nível contém alguns registradores internos à CPU (unidade
central de processamento) e um caminho de dados (data path) contendo uma unidade lógico-
aritmética.

Função do Caminho de dados: em algumas máquinas, a operação do caminho de dados é


controlada por um software denominado microprogramas, em outras é controlada diretamente
pelo hardware e sua função é executar um determinado conjunto de instruções.

-2-
PS-T Sistemas Operacionais Modernos Tanembaum

Nível ISA: muitas vezes denominado Linguagem de máquina (arquitetura do conjunto de


instruções): é formado pelo hardware mais as instruções visíveis a um programador de
linguagem de montagem. Esse nível muitas vezes é denominado linguagem de máquina. Nesse
nível, os dispositivos de entrada e saída são controlados carregando-se valores em registradores
de dispositivo.

Sistema Operacional: consiste em uma camada de software que oculta (parcialmente) o


hardware e fornece ao programador um conjunto de instruções mais conveniente. É
normalmente executada em modo supervisor ou modo núcleo (no caso, a parte mais interna de
um sistema operacional). Ele é protegido dos usuários pelo hardware. Realizam basicamente
duas funções não relacionadas: estender a máquina e gerenciar recursos.

• A função do sistema operacional como uma máquina estendida: é apresentar ao usuário


o equivalente a uma máquina estendida ou máquina virtual mais fácil de programar do
que o hardware, fornecendo uma variedade de serviços que os programas podem obter
usando instruções especiais conhecidas como chamadas ao sistema.
• A função do sistema operacional como um gerenciador de recursos: Fornecer uma
alocação ordenada e controlada de processadores, memórias e dispositivos de E/S entre
vários programas que competem por eles, ou seja, manter o controle sobre quem está
usando qual recurso, garantindo suas requisições de recursos, controlando as contas e
mediando conflitos de requisições entre diferentes programas e usuários. O
gerenciamento de recursos realiza o compartilhamento (ou multiplexação) no tempo,
diferentes programas ou usuários aguardam sua vez de usá-lo, e de espaço em que cada
um ocupa uma parte do recurso.

Compiladores e Editores: executados em modo usuário.

Função do Sistema Operacional: controla recursos usando a multiplexação de tempo e


espaço.

-3-
PS-T Sistemas Operacionais Modernos Tanembaum

Histórico dos sistemas Operacionais

1º Geração – Válvulas e painéis de programação: Toda a programação era feita em código


absoluto e muitas vezes conectando plugs e painéis para controlar as funções básicas da
máquina. Não havia linguagens de programação (nem mesmo a linguagem de montagem
existia).
Foi introduzido as perfuradoras de cartões.

2º Geração – Transistores e sistemas em lote (bath): Surgimento da programação em bath


(lote).
Os grandes computadores de segunda geração foram usados, em sua maioria, para cálculos
científicos, como equações diferenciais, muito freqüentes na física e na engenharia. Eles eram
preponderantemente programados em FORTRAN e em linguagem de montagem. Os sistemas
operacionais típicos eram o FMS (Fortran Monitor System) e o IBSYS, sistema operacional da
IBM para o 7094.

3º Geração – CIs e Multiprogramação: Popularização de várias técnicas fundamentais nos


sistemas operacionais de segunda geração, a mais importante: Multiprogramação. Outro aspecto
importante nos sistemas operacionais de terceira geração era a capacidade de transferir jobs de
cartões perfurados para disco magnéticos, assim que um job fosse completado, o sistema
operacional poderia carregar um novo job a partir do disco apenas nessa partição que acabou de
ser liberada e então processá-lo. Essa técnica é denominada spooling (simultaneous peripheral
operation online).

A série 360 foi a primeira linha de computadores a usar circuitos integrados em pequena escala,
propiciando assim uma melhor relação custo e beneficio em comparação à segunda geração de
máquinas, construídas com transistores individuais.

-4-
PS-T Sistemas Operacionais Modernos Tanembaum

• Surgiu o conceito de Compartilhamento de tempo – TimeSharing


• O primeiro sistema importante de timesharing o CTSS (capatible time sharing system –
sistema de compartilhamento compatível) foi desenvolvido pelo MIT em um 7094
modificado.

4º Geração – Computadores Pessoais: Surgiram os PC.


Desenvolvimento de circuitos integrados em larga escala (LSI)
Em termos de arquitetura, os computadores pessoais (inicialmente denominados
microcomputadores) não eram muito diferentes dos minicomputadores da classe PDP-11.
8080 – Lançado em 1974 pela Intel foi o primeiro processador a ter oito bits de propósito gerais
e o primeiro microcomputador a ter unidade de disco flexível.

Obs.: a) Primeira versão do Windows que é totalmente independente do DOS: Windows 95.
b) Windows 95 / 98 ainda contém uma grande quantidade de código em 16 bits.
c) Windows NT: 32 bits.

Diversos tipos de sistemas Operacionais podem se identificados: monoprogramáveis,


multiprogramáveis, multiprocessáveis, sistemas de rede, sistemas distribuídos, sistemas
em lote (batch), sistemas de tempo compartilhado (time sharing) e de tempo real.

-5-
PS-T Sistemas Operacionais Modernos Tanembaum

Sistemas Monoprogramáveis:

Se caracterizam pela execução de uma única tarefa (processo) por vez, sendo que todos os
recursos (processador, memória e periféricos) ficam exclusivamente a eles dedicados. Nesses
sistemas, enquanto o programa aguarda a ocorrência de um evento qualquer, o processador
ficará ocioso (idle); a memória ficará subtilizada, caso o programa não ocupe totalmente e os
periféricos também ficarão ociosos se não utilizados.

Sistemas Multiprogramáveis:
Se caracterizam por permitir que vários programas (tarefas) residam “simultaneamente” na
memória e “concorram” pelo uso dos recursos disponíveis (apenas um programa detém, num
determinado instante o controle da UCP). O sistema operacional se encarrega de gerenciar o
acesso concorrente das diversas tarefas aos diversos recursos, de forma ordenada e protegida. O
throughput do sistema melhora, isto é, o número de processos concluídos por unidade de tempo
aumenta. Os sistemas multiprogramáveis oferecem condições de maior eficiência
computacional que um sistema monoprogramável.
Um sistema multiprogramável pode ser dos tipos: lote (batch), tempo compartilhado (time
sharing) ou tempo real (real time), sendo que o único sistema pode suportar um ou mais
desses tipos de processamento.

o Sistemas Batch: Não há iteração com o usuário e os programas armazenados vão


sendo executados na medida que haja disponibilidade de recursos.

o Sistemas Time Sharing: Surgiram com o aparecimento dos terminais de vídeo que
permitiam ao usuário compartilhar a distância o uso de recursos do computador.
Dessa forma o usuário acessa e interage com o computador tanto na fase de
desenvolvimento quanto na fase de execução e análise dos resultados. Não só o
processador é compartilhado neste sistema, mas também a memória e os periféricos,
como discos e impressoras. O sistema cria para o usuário um ambiente de trabalho
próprio, dando a impressão de que todo o sistema está dedicado, exclusivamente a
ele.

-6-
PS-T Sistemas Operacionais Modernos Tanembaum

o Tempo real São caracterizados por terem o tempo como um parâmetro fundamental.
Se as ações precisam necessariamente ocorrer em determinados instantes ou em
determinados intervalos de tempo tem-se então um sistema de tempo real, mas se o
descumprimento ocasional de um prazo é aceitável temos um sistema de tempo real
não crítico;

• Sistemas Operacionais de rede: Em um sistema operacional de redes os usuários sabem


da existência de múltiplos computadores e podem se conectar-se a máquinas remotas e
copiar arquivos de uma máquina para outra. Cada máquina executa seu próprio sistema
operacional local e tem seu próprio usuário local. Precisa de um controlador de interface de
rede e de software de baixo nível para controlá-la, bem como programas para conseguir
sessões remotas e também ter acesso remoto a arquivos, as esses sem acréscimos não alteram
a estrutura essencial do sistema operacional.

Outros tipos de SO:


• Grande porte
o Normalmente oferece três tipos de serviços: batch (lote – processa Jobs sem a
presença interativa do usuário), tempo compartilhado (permitem que múltiplos
usuários remotos executem seus Jobs simultaneamente no computador, como
na realização de consultas a um grande banco de dados), processamento de
transações (administram uma grande quantidade de pequenas requisições);
• Servidores: Servem múltiplos usuários de uma vez em uma rede e permitem-lhes
compartilhar recursos de hardware e de software. Servidores podem fornecer serviços
de impressão, serviços de arquivos ou serviços Web. Provedores de acesso a internet
utilizam várias máquinas servidores para dar suporte a seus clientes.

-7-
PS-T Sistemas Operacionais Modernos Tanembaum

Sistemas Multiprocessados
Caracterizam-se por permitir a execução simultânea de duas ou mais instruções, o que requer
a existência de mais de um processador. O multiprocessamento mantém todos os conceitos
da multiprogramação agora aplicados a vários processadores ao mesmo tempo.

O multiprocessamento pode ser obtido pela configuração de múltiplos processadores que


compartilham de uma mesma memória primária (fortemente acoplada) ou de múltiplos
computadores independentes do tipo de sistemas em rede e sistemas distribuídos
(fracamente acoplado), onde cada um tem seus próprios recursos.

Os sistemas multiprocessados permitem que vários programas sejam executados em


paralelo (granularidade grossa) , ou que um programa tenha duas ou mais de suas
instruções executadas em paralelo (granularidade fina)

Também conhecidos como servidores paralelos, multicomputadores ou multiprocessadores;


Precisam de sistemas operacionais especiais, mas muitos deles são variações dos sistemas
operacionais de servidores com aspectos especiais de comunicação e conectividade;

Sistemas Distribuídos
É, conceitualmente, um sistema em rede que possibilita a integração e a cooperação
transparente dos diversos nós que compõem a rede. Dessa forma, sob o enfoque dos
usuários e das tarefas, o sistema é único e se comporta como uma arquitetura
multiprocessada possibilitando tanto paralelismo de granularidade fina como grossa.

-8-
PS-T Sistemas Operacionais Modernos Tanembaum

• Computadores pessoais;

• Embarcados São executados em computadores que controlam dispositivos que


geralmente não são considerados computadores, como aparelho de TV, fornos de
microondas e telefones móveis. Eles têm muitas vezes, características de sistemas de
tempo real, mas também apresentam restrições de tamanho, memória e de consumo de
energia o que os fazem especiais.

• Cartão inteligente: os menores sistemas operacionais são executados em cartões


inteligentes – dispositivo de tamanho de cartões de crédito que contem um chip de CPU.
Possuem restrições severas de consumo de energia e de memória. Alguns deles podem
realizar apenas uma única função, como pagamento eletrônico, mas outros podem tratar
múltiplas funções no mesmo cartão inteligente. São comumente sistemas proprietários.
o Alguns cartões inteligentes são orientados a Java. Isso significa que a ROM do
cartão inteligente contém um interpretador para a máquina virtual Java. As
pequenas aplicações Java (applets) são carregadas no cartão e interpretadas
pelo JVM. Alguns desses cartões podem tratar múltiplas applets Java ao mesmo
tempo, acarretando Multiprogramação e a conseqüente necessidade de
escalonamento. O gerenciamento de recursos e proteção são também um
problema quando duas ou mais applets estão presentes simultaneamente. Esses
problemas devem ser tratados pelo sistema operacional (normalmente muito
primitivo) contido no cartão.

Processador → possui o contador de programa (PC – contém o endereço de memória da


próxima instrução a ser a ser buscada, depois da busca de uma instrução, o contador é atualizado
para apontar para instrução seguinte).

Ponteiro de pilha aponta para o topo da pilha atual na memória. A pilha contém uma estrutura
para cada procedimento chamado, mas que ainda não encerrou. Uma estrutura de pilha do

-9-
PS-T Sistemas Operacionais Modernos Tanembaum

procedimento contém os parâmetros de entrada, as variáveis locais e as variáveis temporárias


que não são mantidas nos registradores.

Registrador PWD – Esse registrador contém os bits do código de condições, os quais são
alterados pelas instruções de comparação, pelo nível de prioridade da CPU, pelo modo de
execução (usuário ou núcleo) e por vários outros bits de controle. Desempenha um papel
importante nas chamadas ao sistema e em E/S.

• Ciclo básico de execução: busca a primeira instrução da memória, decodificá-la para


determinar seus operandos e qual a operação a executar com os mesmos, executá-la e
então buscar, decodificar e executar as instruções seguintes. (detalhar mais)

Obs.: O tempo de acesso à memória para buscar uma instrução ou operando é muito
menor que o tempo para executá-la.

Pipeline → várias instruções sendo executado cada um em uma etapa diferente.

Arquitetura Superescalar → Esse tipo de processador possui múltiplas unidades de


execuções.

Chamada do sistema → alterar de modo usuário para núcleo para obter serviços do Sistema
Operacional.

- 10 -
PS-T Sistemas Operacionais Modernos Tanembaum

Memória → CMOS são memórias voláteis que consomem pouca energia e geralmente são
usados para guardar parâmetros de configuração, como por exemplo de que disco o boot deve
ser carregado.

Memória Principal (antes chamada de memória de núcleos) é dividida em Linhas de Cache, as


linhas mais utilizadas são mantidas em uma cache bem mais rápida, localizada dentro ou
próxima a CPU. Quando o programa precisa ler uma palavra de memória, o hardware da
memória cache verifica se a linha necessária está ma cache se a linha estiver (cache hit) a
requisição será atendida pela cache e nenhuma requisição adicional será enviada a memória
principal, caso contrário (cache miss) uma requisição adicional será enviada a memória cache.
Todas as requisições da CPU que não podem ser atendidas pela memória cache são
direcionadas a Memória Principal.

➔ Quando um programa é executado:


Registrador – base → aponta para início do programa.
Registrado - limite → indicará o tamanho do código e dados combinados.

Unidade de gerenciamento de memória (MMU) → realiza a verificação e o mapeamento de


endereço virtual (endereço gerado pelo programa) para real ou físico (endereço usado pela
memória). Localizada no chip da CPU ou próximo dele, mas, logicamente, entre a CPU e a
memória.

• Dois aspectos desse sistema hierárquico de memória possuem um efeito fundamental no


desempenho: (ver página 20 do Tanenbaum)
o A utilização da cache
o Mudança de Contexto

Chaveamento de contexto → alternância em programas (mudança de contexto)

Dispositivos de Entrada/Saída → formado pelo controlador (chip que recebe comandos do


Sistema Operacional) e o dispositivo.

- 11 -
PS-T Sistemas Operacionais Modernos Tanembaum

Driver de dispositivos → programa que se comunica com o controlador. Ele deve ser colocado
no núcleo. Há três maneiras de fazer isso:
➔ Apenas conectado e reiniciando do computador;
➔ Fazendo uma entrada de arquivo em um sistema operacional informar que precisa
de driver e então reinicializar o sistema
➔ Instalá-los sem a necessidade de reiniciar (USB, IEEE e 1394).

Realizando Entrada/Saída:
• Espera ociosa (controlada pelos dispositivos);
o Desvantagem: Mantém a CPU ocupada todo o tempo interrogando o
dispositivo até que a operação de E/S tenha terminado.
• Interrupção;
• DMA.

Vetor de interrupção: contém o endereço do procedimento tratador de interrupção para esse


dispositivo. Ao iniciar o tratador de interrupção ele remove o contador de programa (PC) e a
palavra de estado de programa (PSW) da pilha e os salva. Então ele consulta o dispositivo para
saber sua situação. Uma vez que o tratador de interrupção tenha terminado, ele retorna para o
programa do usuário que está sendo executado – retorna para a primeira instrução ainda não
executada.

- 12 -
PS-T Sistemas Operacionais Modernos Tanembaum

Barramentos:
• ISA (8,33 MHz transferi dois bytes de 1vez com velocidade máxima de 16,67
MB/s– interconexão de componentes periféricos); - compatibilidade de placas
antigas.
• PCI (66 MHz, transferi oito bytes por vez com velocidade de 528 MB/s); -
interconexão de periféricos.
• IDE acopla ao sistema dispositivos periférico com o CD-ROM;
• USB para dispositivos lentos – mouse, teclado;
• SCSI alto desempenho destinado a discos rápidos - scanners,
• IEEE 1394 (serial em bit, não tem controlador central – câmera digital).

Plug and play: faz com que o sistema colete automaticamente informações sobre os
dispositivos de E/S, atribua de maneira centralizada os níveis de interrupções e endereços de
E/S e informe a cada placa sobre quais são os seus números.

Flash ROM: memória não volátil, mas que pode ser atualizada pelo sistema operacional se
erros forem encontradas na BIOS

Dispositivo legado → projetado antes de existir plug and play.

Inicialização → A BIOS consulta a memória do tipo CMOS para ver os dispositivos de


inicialização, depois a BIOS é verificada para confirmar se existem os drivers dos dispositivos
e carregá-los dentro do núcleo.

Processo → programa em execução que tem associado espaço de endereçamento (o executável,


os dados e a pilha) e uma lista de posições de memória.

Sinal de alarme → análogos em software das instruções de hardware. Esse sinal faz com que
o processo suspenda temporariamente, salve seus registradores na pilha e inicia a execução de
um procedimento especial para tratamento de sinal.

- 13 -
PS-T Sistemas Operacionais Modernos Tanembaum

Subsistema de Entrada/Saída → parte do Sistema Operacional que gerencia seus dispositivos


de Entrada.

Os processos têm suas memórias divididas em três: segmento de texto (programa), segmento
de dados (variáveis) e o segmento de pilha. O segmento (explicitamente) de dados cresce para
cima e a pilha cresce para baixo (automaticamente).

Estruturas de Sistemas Operacionais

Sistemas monolíticos: O sistema operacional é escrito como um programa único composto por
uma coleção de subrotinas que chamam umas as outras quando necessário. Mesmo os modelos
monolíticos, adotam modos distintos de operação, no mínimo dois – modo usuário e modo
supervisor (kernel) que operam com privilégios e prioridades distintas de execução. Aos
programas aplicativos é reservado o modo usuário, com menor privilegio e menor prioridade, e
as rotinas do sistema operacional é reservado o modo supervisor.
Cada procedimento do Sistema Operacional pode chamar um dos demais sempre que necessário.

Sistemas de camadas: Cada camada construída sobre a camada inferior, nessa filosofia em
camadas a comunicação ocorre apenas entre as camadas adjacentes e, assim, fica estabelecida a
segurança e o funcionamento do sistema.

Máquinas virtuais → cada máquina virtual é uma cópia exata do hardware, cada uma delas
pode executar qualquer sistema operacional capaz de ser executado diretamente sobre o
hardware. Nesta técnica cada máquina real pode abrigar internamente diferentes ambientes
virtuais, cada um simulando uma máquina distinta, com memória, sistema operacional, recursos
e processos próprios. Dessa forma, cada usuário ou aplicativo parece possuir sua própria
máquina.

Exonúcleos → executado em modo núcleo, sua tarefa é alocar recursos às máquinas virtuais e
então verificar as tentativas de usá-las para assegurar de que nenhuma máquina esteja tentando
usar recursos de outra.

- 14 -
PS-T Sistemas Operacionais Modernos Tanembaum

Cliente–servidor: Uma tendência nos sistemas operacionais modernos é a estruturação segundo


a filosofia cliente – servidor. Nessa estratégia o kernel tende a ser reduzido ao máximo,
tornando-se às vezes micro-kernel, e as tarefas passam a ser executadas por programas de
sistemas, chamados servidores, que são executados no modo usuário. O programa aplicativo,
agora chamado de cliente, para requisitar a execução de um serviço, por exemplo, a leitura de
um bloco de disco, envia a mensagem ao processo servidor, que realiza a tarefa e envia de volta
a resposta para o cliente.
Uma das principais vantagens desta estratégia é a sua fácil adaptabilidade.

- 15 -
PS-T Sistemas Operacionais Modernos Tanembaum

Capítulo 2 – Processos e Threads

Um processo é apenas um programa em execução acompanhado dos valores atuais do


contador de programa, dos registradores e das variáveis, cada um com seu próprio fluxo de
controle, contém, além do programa no seu formato executável, todas as informações
necessárias (contexto) à execução e ao controle da execução do mesmo.

Processo X programa: Um processo constitui uma atividade. Ele possui programa, entrada e
saída e um estado. Um único processador pode ser compartilhado entre os vários processos, com
algum algoritmo de escalonamento usado para determinar quando parar o trabalho sobre um
processo e servir outro. Um programa é um algoritmo expresso por uma notação adequada.

Pseudo paralelismo: no decorrer de 1s a CPU executa vários programas, dando aos usuários a
ilusão de paralelismo.

Multiprocessadores: tem duas ou mais CPUs que compartilham simultaneamente a mesma


memória física.

Multiprogramação: trocas rápidas entre os processos.

Criação de processos → Quatro situações que levam a criação de processo:


• Início do sistema;
• Execução de uma chamada ao sistema de criação de processo por um processo em
execução;
• Requisição do usuário para criar um novo processo;
• Início de um job em lote.

Daemos → processo que ficam em segundo plano (correio eletrônico, impressão).

- 16 -
PS-T Sistemas Operacionais Modernos Tanembaum

Término do processo:
• Saída normal;
• Saída por erro;
• Erro fatal;
• Cancelamento por um outro processo.

Hierarquia de processos → no Unix → Init pai de todos


No Windows → o pai manda no filho, porém o pai pode passar o id
do filho para alguns outros processos.

Estados do Processo
• Em execução (realmente usando a CPU naquele instante);
• Pronto (executável; temporariamente parado para dar lugar a outro processo);
• Bloqueado (incapaz de executar enquanto um evento externo não ocorrer);

Transições de estado
• (1) Em execução -> bloqueado;
• (2) Em execução -> Pronto (final de time slice);
• (3) Pronto -> Em execução;
1- O processo bloqueia aguardando uma entrada.
• (4) Bloqueado -> Pronto; 2- O escalonador seleciona outro processo
3- O escalonador seleciona esse processo
4- A entrada torna-se disponível
Execução

Bloqueado Pronto

Todo tratamento de interrupção e o bloqueio de processos estão ocultos naquilo que é chamado
escalonador, que na verdade, não em muito código.

- 17 -
PS-T Sistemas Operacionais Modernos Tanembaum

Tabelas de processos ou bloco de controle de processos → cada entrada tem estado, contador
de programa, o ponteiro da pilha, a alocação de memória, os estados de seus arquivos abertos e
qualquer outra informação de um processo necessário quando tira um processo de execução.

Vetor de interrupção → associado a cada classe de dispositivos de Entrada/Saída está uma


alocação de memória, contendo os endereços dos procedimentos dos serviços de interrupção.

Quando ocorre uma interrupção o hardware salva o contador, estado e os registradores


necessários na pilha e desvia a execução para o endereço especificado no vetor de interrupção,
depois tudo é executado por software, copiando o que está na pilha para a tabela de processo.

- 18 -
PS-T Sistemas Operacionais Modernos Tanembaum

THREAD

O modelo de processo é baseado em dois conceitos independentes: agrupamento de


recursos e execução.

Thread (de execução): tem um contador de programa, registradores que contêm suas variáveis
atual de trabalho, pilha com história da execução. Compartilha o espaço de endereçamento e
variáveis globais têm os estados.

Processos X Thread → processo agrupa recursos relacionados e threads são as entidades


escalonadas para a execução sobre o CPU.

O que as threads acrescentam ao modelo de processo é permitir que múltiplas execuções


ocorram no mesmo ambiente do processo com um grande grau de independência uma da outra.
Os threads compartilham das mesmas variáveis globais, dos mesmos arquivos, das mesmas
tabelas, porém não há qualquer forma de proteção de acesso entre os threads.

Multithread → existência de muitos threads no mesmo processo.

Thread – yield → thread desiste voluntariamente da CPU para deixar outro thread executar.
Vantagens → possibilitam que múltiplas atividades ocorram no mesmo tempo, é mais fácies de
criar e destruir que o processo, tem ganhado em desempenho na execução baseada
Entrada/Saída.

Máquina de estados finitos → cada computação tem um estado salvo e existe um conjunto de
eventos que podem ocorrer para mudar o estado.

Thread despachante: lê as requisições de trabalho que chegam da rede. Depois de examinar a


requisição, ele escolhe um thread operário ocioso (bloqueado) e entrega-lhe a requisição,
possivelmente colocando um ponteiro para a mensagem em uma palavra especial associada a
cada thread. O despachante então acorda o operário que está descansando, tirando-o do estado
de bloqueado e colocando-o como pronto.

- 19 -
PS-T Sistemas Operacionais Modernos Tanembaum

Thread de usuário
O núcleo gerencia processos e threads executam no topo de um sistema supervisor, o qual os
gerencia. Cada processo tem a sua tabela de thread, permitindo ser implementada em Sistema
Operacional que não suporte thread. A alternância de threads é feita pelo sistema supervisor.
Permite algoritmo de escalonamento personalizado

Jaqueta ou Wrapper → código que envolve a chamada ao sistema para fazer a verificação.

Desvantagem → não tem relógio para o processo, isso faz com que o escalonador não tenha
oportunidade de trabalhar por alternância circular.

Thread de núcleo
Não necessita de sistema superior, o núcleo que tem a tabela de thread e de processos. E
alternativamente, para diminuir custo, não se destrói um thread marca-o não executável
poupando sobrecarga quando tivesse que ser criada uma nova thread.
* Reciclagem de thread;

Implementação híbrida → as threads podem ser mutiplexadas em diversos thread de usuário.


Possibilitando quando um thread bloqueia executar outro thread dentro do mesmo processo.
Para implementar cada processo possui um certo número de processadores virtuais e deixa o
sistema supervisor alocar threads.

Thread pop-up → thread criada a partir de uma mensagem.

Convertendo monothread em multithread → problema: lidar com variáveis globais a thread


e não globais a processo. Solução: alocar um pedaço de memória para variáveis globais e passa-
las com parâmetro extra para cada procedimento no thread. Problema: muitas bibliotecas não
são reentrantes (aceitar mais de uma chamada ao mesmo tempo). Solução: te um bit para indicar
que a biblioteca está em uso, para ser verificado antes do um thread tentar usar a biblioteca.
Problema: gerenciamento da pilha é feito pelo número se ele não souber de sua existências não
aumentará a pilha automaticamente quando necessário.

- 20 -
PS-T Sistemas Operacionais Modernos Tanembaum

Comunicação Interprocessos (IPC)

- Como passar informação de um processo para outro.


- Garantir que um ou mais processos não interfira em outro
- Seqüência de execução adequada para quando existirem dependências.

Condições de disputa → dois processos, um processo lê e outro escreve em um arquivo


compartilhado.

Regiões críticas → parte do programa que tem acesso à memória compartilhada.

Exclusão Mútua → algum modo de impedir acesso a um recurso compartilhado que esteja em
uso. Boa solução:
- Nunca dois processos podem estar simultaneamente em suas regiões críticas.
- Nada pode ser afirmado sobre velocidade ou números de CPUs.
- Nenhum processo executando fora da região crítica pode bloquear outro.
- Nenhum processo deve esperar eternamente para entrar em sua região crítica.

- 21 -
PS-T Sistemas Operacionais Modernos Tanembaum

Exclusão mútua com espera ociosa

Desabilitando interrupção
• Quando o processo entra na região crítica desabilita as interrupções. É a solução
mais simples, cada processo desabilita todas as interrupções logo depois de entrar
em sua região crítica e reabilita-as antes de sair dela.
• A CPU não será alternada para outro processo
• Não é prudente dar aos processos o poder de desligar interrupções
• Em multiprocessadores, afetará apenas a CPU que executou a instrução
disable, as outras poderão ter acesso a memória compartilhada.

Variáveis de impedimento
• Uma única variável compartilhada (lock) inicialmente com o valor 0 (zero).
• Para entrar na região crítica, um processo testa antes se há impedimento,
verificando o valor de lock, quando tem acesso modifica para 1
• Apresenta exatamente a mesma falha do diretório de spool.

Alternância obrigatória
• Utiliza uma variável compartilhada turn que indica vez de qual processo pode
entrar na região crítica, a qual deve ser modificada para o próximo processo antes
de sair da região crítica.
• Não é uma boa idéia quando um dos processos for muito mais lento que o outro
• Essa situação viola a condição três: um processo bloqueia outro que não está em
sua região crítica

- 22 -
PS-T Sistemas Operacionais Modernos Tanembaum

Solução de Peterson
• Consiste em dois processos em ANSI C
• Antes de entrar na região crítica cada processo chama enter_region com seu
número de processo (0 ou 1). Esta chamada fará com que ele fique esperando
até que seja seguro entrar. Depois de terminar o uso da região crítica, o
processo chama leave_region para permitir o outro processo entrar.

Instruções TSL
• Instrução test and set lock
• TSL RX, LOCK copia o valor de RX para LOCK. Um processo pode entrar em sua
região crítica apenas no caso de LOCK ser 0. A leitura do valor de LOCK e sua
restauração para 0 podem ser feitas por instruções ordinárias.
• Copia o valor de lock, muda o valor de lock para 1, verifica se o lock = 0 entra
senão volta a testar.

Dormir e acordar
• As soluções baseadas em espera ociosa têm a desvantagem de provocar gasto de
CPU.
• Outra abordagem é que o SO disponibilize duas chamadas de sistema (sleep e
wakeup).
• Sleep faz com que um processo “durma” até ser acordado por outro processo
através de um wakeup

- 23 -
PS-T Sistemas Operacionais Modernos Tanembaum

o O problema produtor-consumidor
▪ Dois processos (produtor e consumidor) compartilham um
buffer de tamanho fixo
▪ O problema se origina quando o produtor quer colocar um novo
item no buffer, mas ele está cheio ou o consumidor remover
quando está vazio.
▪ A solução é colocar o processo, impedido pela capacidade do
buffer, para dormir até que o outro modifique o buffer e acorde o
anterior.

Semáforos
• Usa uma variável inteira para contar o número de sinais de acordar salvos para
uso futuro.
• Down: operação que decrementa a variável do semáforo se maior que zero, caso
contrário, é posto para dormir.
• Up: incrementa o valor do semáforo e um dos processos bloqueados será
liberado.
• Verificar o valor, alterá-lo e possivelmente ir dormir são tarefas executadas todas
como uma única ação atômica.

o Semáforos apresentam várias propriedades importantes:

• São independentes de máquina

• São simples

• São gerais

• Funcionam com muitos processos

• Podem existir várias seções críticas diferentes controladas por vários


semáforos

• Muitos recursos podem ser adquiridos simultaneamente (vários down's)

- 24 -
PS-T Sistemas Operacionais Modernos Tanembaum

• Permitem múltiplos processos numa seção crítica de uma vez, se isso for
desejável.

Mutexex
• Basicamente são semáforos simplificados onde não há necessidade de “contar”.
• Um mutex é uma variável de um bit que pode estar impedida ou desimpedida.
• Quando um processo vai entrar em uma região crítica ele chama mutex_lock() e
quando sai chama mutex_unlock()
• Por serem muito simples podem ser implementados no espaço do usuário se houver
uma instrução TSL disponível
• Se ao tentar dar um lock já estiver impedido chamado thread-yield para liberar execução
para outra thread.

Monitor
• Uma unidade básica de sincronização de alto nível;
• É uma coleção de procedimentos, variáveis e estrutura de dados. Os processos podem chamar
os procedimentos, mas não podem acessar as estruturas internas diretamente;
• A exclusão mútua é garantida, pois somente um processo pode estar ativo em um monitor em
um dado momento;
• Quando um processo chama um procedimento de um monitor, é verificado se outro processo
está ativo. Se estiver, o processo que chamou é suspenso até que o outro deixe o monitor, senão
o processo que chamou poderá entrar;
• Cabe ao compilador implementar a exclusão mútua nas entradas do monitor;
• É preciso também um modo de bloquear processos quando não puderem continuar;
• A solução são variáveis condicionais, com duas operações: wait e signal;
• Quando um procedimento do monitor descobre que não pode prosseguir emite um wait sobre
uma variável condicional (resultando no bloqueio do processo), permitindo que outro processo
proibido de entrar no monitor agora entre;
• Esse outro processo pode acordar seu parceiro adormecido a partir da emissão de um signal
para a variável condicional;
• Algumas linguagens suportam monitores. Ex: java;

- 25 -
PS-T Sistemas Operacionais Modernos Tanembaum

• Java suporta threads de usuário e também permite que métodos sejam agrupados em classes;
• Adicionando-se a palavra-• chave synchronized à declaração de um método, Java garante que,
uma vez iniciado qualquer thread executando aquele método, a nenhum outro thread será
permitido executar qualquer outro método synchronized naquela classe;

Monitores são mais seguros, Semáforos são mais fáceis de implementar.


- Precisa de uma linguagem que os tenha embutido
- Usado para somente uma memória compartilhada

Troca de mensagens
• Permite a troca de informações entre processos usando duas primitivas: send(destination,
&message)
• Envia uma mensagem para um dado destino receive(source, &message)
• Recebe uma mensagem de uma dada origem ou uma origem qualquer;
• Se nenhuma mensagem estiver disponível o receptor poderá ficar bloqueado, até chegue
alguma;
• Possui problemas específicos como perda da mensagem pela rede para prevenir pode-se
usar confirmação de recebimento (acknowledgement), mas se o receptor receber a
mensagem e não a confirmação?
o As mensagens podem ser numeradas
• Chamadas send e receive não podem ser ambíguas;
• Autenticação deve ser garantida;
• Desempenho deve ser garantido em troca de mensagens de processos na mesma
máquina;
• Copiar mensagens é mais lento que realizar operações sobre monitores ou semáforos;
• Problema produtor-consumidor;
• Pode ser resolvido com troca de mensagens sem memória compartilhada;
• Considerando que todas as mensagens são do mesmo tamanho e que aquelas enviadas e
ainda não recebidas são armazenadas pelo SO;

- 26 -
PS-T Sistemas Operacionais Modernos Tanembaum

• O consumidor envia N mensagens vazias para o produtor, que se tiver algum item para
fornecer pegará uma mensagem vazia e retornará uma cheia. O número total de
mensagens permanece certo.
• Se o produtor trabalhar mais rápido que o consumidor?

Troca de mensagens é bastante usada em programação paralela. Ex: MPI (messagepassing


interface – interface de troca de mensagem).

Barreiras
• Mecanismo de sincronização dirigido a grupos de processos;
• Algumas aplicações são divididas em fase e têm como regra que nenhum processo
pode avançar para a próxima fase até que todos os processos estejam prontos para
fazê-lo;
• Isso pode ser conseguido por meio de uma barreira no final de cada fase;
• Quando uma barreira é alcançada o processo é bloqueado até que todos a alcancem;

Uso de uma barreira


a) processos se aproximando de uma barreira
b) todos os processos, exceto um, bloqueados pela barreira;
c) último processo chega, todos passam;

Problemas clássicos do IPC:


• Jantar dos filósofos;
• Dos leitores e escritores
• Barbeiro sonolento

- 27 -
PS-T Sistemas Operacionais Modernos Tanembaum

Escalonamento

Escalonador: parte do sistema operacional que faz a escolha de que processo será executado,
utiliza um algoritmo chamado algoritmo de escalonamento.
Objetivos do algoritmo de escalonamento: melhorar os seguintes aspectos:
• Vazão: número de jobs por hora que o sistema termina.
• Tempo de retorno: é estaticamente o tempo médio do momento em que o um job
em lote é submetido até o momento em que ele é terminado.
• Utilização da CPU: Um processo que permaneça mais tempo na UCP terá maior
probabilidade para ser escalonado.
• Throughput: representa o número de tarefas executadas em um período.
• Tempo de Turnaround: tempo em que se leva desde a admissão até o seu
término.
• Tempo de resposta: nos sistemas interativos, esse tempo é decorrido entre a
submissão de um pedido ao sistema até a primeira resposta produzida.

Para atender tais objetivos, muitas vezes conflitantes, os Sos precisam levar em
consideração:
• As características dos processos em execução (batch, interativo, tempo-real,
CPU-bounded, IO-bounded);
• A disponibilidade de recursos;
• As características da instalação

• Escalonamento preemptivo: escolhe um processo para executar e então o deixa


executar até que seja bloqueado ou até que ele voluntariamente libere a CPU.

- 28 -
PS-T Sistemas Operacionais Modernos Tanembaum

Categoria de algoritmos de escalonamento:


o Lote:
▪ Primeira a chegar, primeiro a ser servido (FIFO): o primeiro processo
chegar será o primeiro a ser escalonada para execução. Para
implementação é necessário uma estrutura de fila.
▪ Foi muito utilizado em sistemas em bath;
• Desperdício do sistema;
• As maiores restrições relativas a esta estratégia são:
o Incapacidade para prever quando um processo será
executado;
o Possibilidade de ocorrência de processos CPU_bound de
menor importância prejudicarem o processamento de
processos IO_bound mais prioritários;

▪ Job mais curto primeiro (SJF): será escalonado o processo mais


curto, ou seja, o que gastar menos tempo.
o A restrição maior deste algoritmo está na determinação
da estimativa do tempo necessário para execução de um
determinado processo.
▪ Próximo de menor tempo restante (SRTN): será escalonado o processo
que menos tempo precisará permanecer na UCP. Tem vantagem de
favorecer os processos menores, mas prejudicam os processos maiores.
Se, para terminar, o novo job precisar de menos tempo que o processo
atual, então esse será suspenso e o processo atual, então esse será
suspenso e o novo job será iniciado. Esse esquema permite que novos
jobs curtos obtenham um bom desempenho.

- 29 -
PS-T Sistemas Operacionais Modernos Tanembaum

▪ Escalonamento em três níveis


• Escalonador de admissão: decide qual Job será admitido no
sistema.
• Escalonador de memória: determina quais processos ficarão na
memória ou permanecerão no disco.
• Escalonador de CPU: escolhe num dos processos na memória
principal para executá-la depois.

▪ Interativo:
• Escalonador por alternância circular (round robin): utilizado
em sistemas de tempo compartilhado, é semelhante ao FIFO,
sendo que o processo permanecerá na UCP até que o time slice
(quantum) do sistema seja esgotado. Denominado preempção
por tempo. Os processos são tratados de maneira igual.
o A definição do quantum é um param,etro de gerência
da operação, sendo que se deve levar em consideração
a disponibilidade
• Escalonar por prioridades: os processos são associados a algum
tipo de prioridade de execução e são escalonados
preferencialmente, de acordo com suas prioridades. É
implementada mediante um clock que interrompe o processador
em determinados intervalos de tempo, para que a prioridade de
cada processo da fila seja reavaliado
.
• Filas múltiplas: são implementados diversas filas para os
processos em estado de pronto e essas filas têm um grau de
prioridade equivalente aos processos. Há situações em que o
processo altera a sua prioridade, porém não poderá sair da fila que
se encontra.

- 30 -
PS-T Sistemas Operacionais Modernos Tanembaum

• Múltiplas filas com realimentação: implementa filas de


prioridade como no escalonamento anterior, porém os processos
podem ser movidos para demais filas, por meio de mecanismo
adaptativo.

• Escalonamento com múltiplos processadores: em sistemas


fracamente acoplados cada processador faz seu próprio
escalonamento local. Nos fortemente acoplados, todos os
processos são implementados em uma única fila e são
escalonados no primeiro processador disponível.

• Escalonamento garantido: Se tiver N usuários conectados


enquanto você estiver trabalhando, você receberá certa de 1/n de
CPU.
• Escalonamento por loteria: A idéia básica é dar bilhetes de
loteria aos processos, cujos prêmios são vão vários recursos do
sistema, como tempo de CPU. Se houver uma decisão de
escalonamento, um bilhete de loteria será escolhido
aleatoriamente e processo que tem o bilhete conseguirá o recurso.
• Escalonamento por fração justa;

▪ Tempo Real: os processos tem um grau de prioridade fixo, que é


implementado de acordo com a sua aplicação. Não há time-slice;

- 31 -
PS-T Sistemas Operacionais Modernos Tanembaum

Algoritmos de SCHEDULING

Resolvendo a questão.

Utilizando o FCFS: P1 – de 0 à 11 / P2- de 11 à 41 / P3 de 41 à 45 / P4 de 45 à 53 e P5 de 53 à 66

0 11 41
45 53 66

Cálculo: (0 + 11 + 41 + 45 + 53)/5 = 30

Utilizando o SJF: P3- de 0 à 04 / P4 de 4 à 12 / P1 de 12 à 23/ P5 de 23 à 36 / P2 de 36 à 66

0 4 12
23 36 66
Cálculo: (4+12+23+36)/5 = 15
Utilizando por prioridade: Tem que ser estabelecida a prioridade.

- 32 -
PS-T Sistemas Operacionais Modernos Tanembaum

Exemplo:
Processo Tempo de Chegada Prioridade
P1 10 3
P2 1 1
P3 2 4
P4 1 5
P5 5 2

0 1 6
16 18 19
Cálculo: (1+6+16+18)/5 = 8,2

Utilizando o Round Robin


Obs.: Deve ser oferecido o quantum no exemplo vamos usar um quantum de 4 milissegundos.
Exemplo:
Processo Tempo de pico
P1 24
P2 3
P3 3
P1 P2 P3 P1 P1 P1 P1 P1

0 4 7 10 14
18 22 26 30
Com P1 precisa de mais 20 segundo será interceptado,será alocado o próximo processo P2 vai fazer
P2 e P3 e voltar para P1.
Cálculo: (7+10)/3 = 5,66

- 33 -
PS-T Sistemas Operacionais Modernos Tanembaum

Capítulo 3 – DeadLocks

Deadlocks podem ocorrer tantos em recursos de hardware quanto de software. Geralmente


ocorre com recursos não preemptivos.

Recursos preemptível → é aquele que pode ser retirado do processo proprietário sem nenhum
prejuízo.

Recursos não-preemptível → apresenta falha. Ex.: gravador de CD.

Quatro condições para que ocorra o deadlock:


• Condição de exclusão mútua (recurso está associado a 1 único processo ou disponível),
• Condição de posse e espera (1 processo pode requisitar mais de um recurso),
• Condição de não preempção (recurso deve ser explicitamente liberados pelo processo
que o retém),
• Condição de espera circular (mais de um processo esperando o recurso utilizado).

Modelagem: grafo de recursos para verificar os ciclos.

Quatro estratégias para tratar deadlocks:


• Ignorar o problema;
• Detecção e recuperação;
• Anulação dinâmica (por meio de uma alocação cuidadosa de recursos);
• Prevenção (negando uma das quatro condições).

- 34 -
PS-T Sistemas Operacionais Modernos Tanembaum

Prevenção de deadlocks
• Estabelecer critérios de que todos os recursos sejam previamente alocados, antes do
processo ganhar acesso à UCP.
• Admitir a prática da preempção, isto é, o sistema ter a possibilidade de retirar um
recurso alocado para um processo e dar a outro processo.
• Forçar que um processo não aloque mais do que um recurso de cada vez.

Qualquer que seja a estratégia de prevenção adotada, ela é sempre muito onerosa, uma
vez que precisa ser executada a todo instante. A estratégia mais comum e menos onerosa é
detectar a ocorrência de um deadlock e, uma vez adotada, executar rotinas de resolução
do problema.

Detecção de deadlocks
• Eliminar um ou mais processos envolvidos;
• Liberar acumulativamente alguns dos recursos já alocados pelos processos envolvidas
até que a espera circular se desfaça;

Ignorar o problema – algoritmo do avestruz.

Detecção e recuperação de deadlocks → Deixa o deadlock ocorrer para tratá-lo:


• Detecção de deadlocks com um recurso de cada tipo → faz um grafo e verifica se tem
ciclos.
• Detecção de deadlocks com múltiplos recursos de cada tipo → um vetor de recursos
existente, um vetor de recursos disponíveis, uma matriz de alocação atual e matriz de
requisição.

- 35 -
PS-T Sistemas Operacionais Modernos Tanembaum

Algoritmo → procure um processo na matriz cujo os recursos necessários para execução seja
menor igual ao equivalente no vetor de recursos disponíveis, ao encontrar marque o processo e
atualize as matrizes. Quando acabar o loop se ainda existir algum valor na matriz de requisição
esses processos estarão em deadlock.
Quando verificar as matrizes: a toda requisição (caro), de tempos em tempos ou quando a
utilização da CPU estiver caído abaixo de um certo limite.

Recuperação de situação de deadlock → recuperação por meio de preempção (escolhe um


recurso para realocá-lo, de preferência um recurso passível de ser retornado facilmente),
recuperação por meio de revisão de estado (processo guarda seu estado em um arquivo –
imagem para quando ocorrer deadlock um processo que tem um dos recursos necessários é
revertido para um estado em um instante anterior ao momento que adquiriu o recurso),
recuperação por meio da eliminação de processos (matando um ou mais processos).

Evitando deadlocks
• Estado seguro – se ele não está em situação de deadlock e se existe alguma ordem de
escalonamento na qual todo o processo possa ser executado até a conclusão.
• Algoritmo do banqueiro para um único recurso → verifica se a liberação de uma
requisição é capaz de levar a um estado inseguro. Em caso positivo, a requisição será
negada, senão atendida.
• Algoritmo do banqueiro com múltiplos recursos → igual detecção de deadlock para
múltiplos recursos do mesmo tipo.

Na prática é difícil identificar quais os recursos necessários para um processo antecipadamente.

Prevenção de deadlocks

- 36 -
PS-T Sistemas Operacionais Modernos Tanembaum

• Atacando a condição de exclusão mútua se nunca acontecer de um recurso ser alocado


exclusivamente a um único processo, nunca teremos deadlocks.
• Atacando a condição de posse-e-espera → o sistema adquire todos os recursos
mantendo-os até o processo ser finalizado. Ou para obter um recurso libera os outros
alocados anteriormente.
• Atacando a condição de não preempção → e complicação senão impossível.
• Atacando a condição de espera circular → processo só Ter um recurso de cada vez ou
numeração global para os recursos onde um processo só pode obter um novo recurso se
tiver número superior ao recurso já alocado.
• Pode ser impossível determinar que satisfaça a todos.

Bloqueio em duas fases → 1º bloqueio de registro, 2º atualização e liberação.

Deadlocks que não envolvem recursos → um recurso esperando a conclusão do trabalho do


outro.

Condição de inanição (star vation) → processo que nunca obtém recursos. Pode ser evitado
com a política de alocação FIFO.

- 37 -
PS-T Sistemas Operacionais Modernos Tanembaum

d) Essa é a única opção correta, pois entrará em deadlock os processos p4, p5,p7 e p8, uma vez
que, ele receber o recurso de r5,já que a alternativa colocou de forma clara que se obtiver o recurso
r5 entrará em deadlock está certa a opção. Para ficar mais claro ainda, observe que fez um círculo
nos processos e recursos: p4,r3,p5,r4,p7,r7,p8 e r5 e retornando ao início. Olha que ele poderia
brincar com a questão falando de recurso, mas o examinador foi bonzinho falou só dos processos.
(certa)

- 38 -
PS-T Sistemas Operacionais Modernos Tanembaum

- 39 -

Vous aimerez peut-être aussi