Sei sulla pagina 1di 20

Super Resumo de SO

Créditos:

Resumo do capítulo 1: Mario Monteiro


Resumo do capítulo 2: Eduardo Franca
Resumo do capítulo 3 parte 1: Guilherme Bezerra
Resumo do capítulo 3 parte 2: Rennê Lira
Resumo do capítulo 4: Devon Seale
Resumo do capítulo 5: Bernardo Bheckmann

Fontes: Livro básico de SO, transparências, aulas de revisão

CAPÍTULO 1:

SISTEMA OPERACIONAL

* Propósito - Fornecer um ambiente no qual o usuário possa executar programas. Uma vez que o hardware
por si só não é particularmente fácil de usar, programas e aplicativos são desenvolvidos, e são controlados
pelo sistema operacional, já que eles exigem certas operações comuns(I/O, CPU, Memória), essas funções
comuns de controle e alocação de recursos são reunidas em um único software(SO).

*Principal Objetivo - Tornar o uso do sistema de computação conveniente. Executar programas de usuário
e tornar fácil a resolução dos problemas de usuário. Sua missão e tornar a tarefa computacional mais fácil.

* Meta secundaria - Usar o hardware do computador de forma eficiente. Importante principalmente para
sistemas multiusuário compartilhados e de grande porte.

DEFINICOES

1- Programa que atua como intermediário entre o usuário e o hardware de um computador.


2- Componente importante de praticamente todo sistema de computação.
3- Alocador de recursos.
4- Programa de controle(controlar a execução de programas de usuário para evitar erro e uso indevido do
computador)
5 - Programa que esta sempre executando no computador(núcleo ou kernel).

PRINCIPAIS TAREFAS DO SISTEMA OPERACIONAL

1 - Controlar e coordenar o uso do hardware entre os vários programas aplicativos para os vários
usuários(processadores de texto, planilhas eletrônicas, compiladores e navegadores Web).

2 - Fornecer o meio para o uso adequado desses recursos(uso do hardware) na operação do sistema de
computador. O sistema operacional não executa nenhuma função útil por si só mesma, fornece um ambiente
no qual outros programas podem realizar tarefas úteis.

3 - Alocar recursos tais como: tempo de CPU, espaço na memória, espaço de armazenamento de arquivos,
dispositivos de entrada/saída(I/O).e assim por diante. O sistema operacional gerencia esses recursos e os
aloca a programas e usuários específicos de acordo com a necessidade para execução de tarefas. Caso haja
conflitos entre os pedidos, cabe ao sistema operacional gerenciar que pedidos serão atendidos.
SISTEMAS EM LOTE(BATCH)

Sistema operacional usado geralmente nos primeiros computadores os quais eram maquinas
exageradamente grandes(em termos físicos), operados a partir de um console.

Funcionalidade -
* Dispositivos de entrada: leitoras de cartões e unidades de fita.
* Dispositivos de saída: impressoras de linhas, unidades de fita e perfuradoras de cartões.

Interação do usuário - O usuário não interagia diretamente com os sistemas de computação, em vez disso,
ele preparava um job(tarefa), que consistia no programa, e dava para o operador do computador.

Principal tarefa - Transferir controle automaticamente de um job para o próximo. O sistema operacional
estava sempre residente na memória.

Vantagens - Simplicidade.
Desvantagens -
1- CPU muitas vezes fica ociosa porque as velocidades dos dispositivos mecânicos de I/O são mais
lentas do que a dos dispositivos eletrônicos.

EVOLUCAO DOS SISTEMAS EM LOTE(BATCH)

Escalonamento - A introdução da tecnologia de disco permitiu que o sistema operacional mantivesse todos
os jobs em um disco,. Com acesso direto a vários jobs, o escalonamento de jobs e executado para usar
recursos e realizar tarefas de forma eficiente.

Funcionalidade - O sistema operacional escolhe e começa a executar um dos jobs na memória. Em alguns
momentos, o job terá de esperar a conclusão de alguma tarefa(I/O), logo depois ele simplesmente passa para
outro job e o executa. Quando esse job precisa esperar, a CPU passa para outro job e assim por diante. Com
a finalidade de não manter a CPU ociosa.

Vantagem - Possibilita a multiprogramação, o qual aumenta a utilização da CPU organizando jobs de forma
que a CPU sempre tenha um job pra executar.
Desvantagem - Difícil implementação, pois exige tomadas de decisões inteligentes(caso de vários jobs
estarem prontos para executar ao mesmo tempo).

SISTEMAS DE TEMPO COMPARTILHADO

Tempo compartilhado ou Multitarefa - Extensão lógica da multiprogramação, onde a CPU executa


vários jobs alternando entre eles, mas as trocas ocorrem com tanta freqüência que os usuários podem
interagir com cada programa durante sua execução.

Principal Vantagem - Permitir a comunicação direta entre o usuário e o sistema. O usuário passa instruções
ao sistema operacional ou a um programa diretamente, usando um teclado ou um mouse, e espera por
resultados imediatos.

Funcionalidade - O escalonamento de CPU e a multiprogramação e usado para fornecer a cada usuário uma
pequena parte de um computador de tempo compartilhado. Cada usuário tem pelo menos um programa
separado na memória. Um programa carregado na memória e em execução e normalmente chamado de
processo. Quando um processo executa, geralmente executa durante um curto espaço de tempo antes de
terminar ou de precisar realizar uma operação de I/O A operação de entrada/saída pode ser interativa, ou
seja, a saída para o usuário e feita em um monitor e a entrada e a partir de um teclado, mouse e outro
dispositivo.
Desvantagem - O sistemas operacionais de tempo compartilhado são ainda mais complexos do que os
sistemas operacionais multiprogramados. Muitos recursos devem ser implementados. São difíceis e caros de
construir.

Recursos implementados:
1 - Memória Virtual - Recurso implementado em sistemas de tempo compartilhado em virtude da busca
por eficiência em termos de tempo de resposta (já que vários jobs são mantidos na memória ao mesmo
tempo). E preciso, em geral, transferir rapidamente jobs da memória principal para o disco que serve de
extensão da memória principal.

Vantagem do uso da Memória Virtual - Programas podem ser maiores do que a memória física; abstrair
a memória principal em um vetor grande e uniforme de armazenamento, separando a memória lógica
conforme vista pelo usuário da memória física; Liberar programadores da preocupação relativa aos limites
da memória.

2 - Gerencia de Arquivos - O sistema de arquivos reside em uma coleção de discos; portanto, o


gerenciamento de disco deve ser realizado.

3 - Mecanismo de execução concorrente - requer esquemas sofisticados de escalonamento de CPU. Para


garantir a execução correta, o sistema deve fornecer mecanismos para a comunicação e sincronização de
jobs, e pode garantir que os jobs não fiquem presos em deadlocks, eternamente esperando uns pelos outros.

SISTEMAS DE COMPUTADORES PESSOAIS(PCs)

Surgimento - anos 70. No inicio a CPU não tinha os recursos necessários para proteger um sistema
operacional dos programas de usuário. Os sistemas operacionais para PC, não eram nem multiusuário nem
multitarefa.
Evolução - As metas desses sistemas operacionais para PC procuravam buscar a conveniência e a
capacidade de resposta ao usuário, ao invés de tentar maximizar a utilização de CPU e periféricos.

SISTEMAS PARALELOS:

Definição: Sistemas que tem mais de um processador em comunicação ativa, compartilhando o


barramento, o clock e, as vezes, a memória e os dispositivos periféricos. chamados SISTEMAS
FORTEMENTE ACOPLADOS(tightly coupled).

Vantagens:
1 - : Maior produção(throughput). Aumentando o numero de processadores, espera-se realizar mais trabalho
em menos tempo.
2 - Economizar dinheiro em comparação com vários sistemas de um único processador, porque os
processadores podem compartilhar periféricos, armazenamento de massa e fontes de alimentação. Se vários
programas forem processar o mesmo conjunto de dados, fica mais barato armazenar esses dados em um
disco e fazer com que todos os processadores os compartilhem, em vez de ter muitos computadores com
discos locais e muitas copias dos dados.
3 - Aumento da confiabilidade. Se as funções puderem ser distribuídas adequadamente entre vários
processadores, a falha de um processador não vai interromper o sistema, apenas reduzira sua velocidade.
Sistemas projetados para degradação normal também são chamados de tolerantes a falhas.

Tipos de multiprocessamento:
1- simétrico - Cada processador executa uma copia idêntica do sistema operacional, e essas copias se
comunicam entre si conforme necessário.

2 - assimétrico - Cada processador e atribuída uma tarefa especifica. Um processador mestre controla o
sistema; os outros processadores procuram o mestre para receber instruções ou tem tarefas predefinidas.
Esse esquema define uma relação mestre-escravo. O processador mestre escalona e aloca trabalho para os
processadores escravos.
principal diferença - O resultado de hardware ou software. Hardware especial pode diferenciar os
múltiplos processadores, ou o software pode ser escrito para permitir apenas um mestre e vários escravos.

SISTEMAS DE TEMPO REAL

Definição: Sistema de propósito especial em que e usado quando existem requisitos rígidos de tempo na
operação de um processador ou no fluxo de dados; assim, ele geralmente e usado como um dispositivo de
controle em uma aplicação dedicada.
Funcionalidade: Os sensores levam dados ao computador que deve analisar os dados e talvez ajustar os
controles para modificar as entradas dos sensores. Tem limitações de tempo bem definidas e fixas. O
processamento tem de ser feito dentro dos limites definidos ou o sistema falhara.
Utilização: Controlar experimentos científicos, sistemas de imagens medicas, sistemas de controle
industrial, sistemas de injeção de combustível em motores de veículos, controladores de eletrodomésticos e
sistemas de armas.

Tipos de sistema de tempo real:


1 - Critico: Garante que as tarefas críticas sejam executadas a tempo. Essa meta requer que todos os atrasos
no sistema sejam limitados, desde a recuperação de dados armazenados ate o tempo que o sistema
operacional precisa para terminar qualquer solicitação realizada.
2 - Não Critico - Uma tarefa critica de tempo real recebe prioridade sobre as demais tarefas e retém essa
prioridade ate ser concluída. Como ocorre com os sistemas de tempo real critico, os atrasos do kernel
precisam ser limitados: uma tarefa de tempo real não pode ficar esperando indefinidamente para execução
pelo kernel. O tempo real não-critico e uma meta alcançável que pode ser combinada com outros tipos de
sistemas. Os sistemas de tempo real não-critico, no entanto, tem utilidade mais limitada do que os sistemas
de tempo real crítico.

SISTEMAS DISTRIBUIDOS

Definição:
1 - Coleção de processadores que não compartilham memória ou clock. Em vez disso, cada processador tem
sua própria memória local. Os processadores se comunicam entre si através de varias linhas de
comunicação, tais como barramentos ou linhas telefônicas de alta velocidade. Geralmente chamados de
sistemas fracamente acoplados(loosely coupled systems).

Sistema operacional distribuído - Um sistema operacional distribuído e um ambiente menos autônomo: os


diferentes sistemas operacionais interagem o suficiente para dar a impressão de que existe um único sistema
operacional controlando a rede.

Funcionalidade: Um sistema operacional de rede e um sistema operacional que fornece recursos como
compartilhamento de arquivos através da rede e isso inclui um esquema de comunicação que permite a
processos diferentes em computadores diferentes trocarem mensagens. Um computador que executa um
sistema operacional de rede atua independentemente de todos os outros computadores na rede, embora
esteja ciente da rede e seja capaz de se comunicar com outros computadores ligados na rede.
Tópico Extra: Conceito de Spool

Spool é uma técnica usada por sistemas batch na qual o sistema sobrepõe o uso de I/O de um job pelo
processamento de outro job. Isto é enquanto um job fica esperando pelo resultado de um I/O podemos
processar outro job em seu lugar e posteriormente retomar a execução do primeiro job. É uma aplicação do
conceito de multiprogramação em sistemas batch para impedir que a CPU fique ociosa durante operações de
I/O

CAPÍTULO 2:

1.Introdução

O sistema operacional precisa garantir a operação correta do sistema de computação. Para que os programas
de usuário não interfiram na operação adequada do sistema, o hardware deve fornecer os mecanismos
apropriados para garantir o comportamento correto. Mais adiante vamos descrever a arquitetura de
computação básica que torna possível a criação de um sistema operacional funcional.

Operação dos sistemas de computação:

Um sistema de computação de uso geral moderno consiste em uma CPU e uma série de controladoras de
dispositivos que estão conectadas através de um barramento comum que fornece acesso à memória
compartilhada. A CPU e as controladoras de dispositivos podem executar de modo concorrente, competindo
pelos ciclos de memória.
Para que um computador comece a funcionar ele precisa ter um programa inicial para executar. Esse
programa deve saber como carregar o sistema operacional e iniciar a execução do sistema. O SO inicia a
execução do primeiro processo e espera que algum evento ocorra.
A ocorrência de um evento é geralmente assinalada por uma interrupção de hardware ou software. O
hardware pode disparar uma interrupção a qualquer momento enquanto que o software dispara uma
interrupção através de uma operação especial denominada chamada ao sistema ou system call.
As primeiras 100 posições de memória, mais ou menos,
são reservadas para as rotinas de serviço de interrupção para os vários dispositivos. Esse vetor de memória é
chamado de vetor de interrupção. Os sistemas operacionais são baseados em interrupções. Se não houver
processos para executar, nenhum dispositivo de I/O ao qual fornecer serviço e nenhum usuário a ser
atendido, um SO ficará parado esperando que algo aconteça. Os eventos são quase sempre sinalizados por
uma interrupção ou um trap que é uma exceção gerada por software causada por um erro ou por um pedido
específico de um programa de usuário para que um serviço de SO seja executado.

Estrutura de I/O:

Cada controladora de dispositivo está encarregada por um tipo específico de dispositivo. Uma controladora
de dispositivo mantém algum armazenamento em buffer local e um conjunto de registradores de propósito
especial e é responsável pela passagem dos dados entre os dispositivos periféricos que ela controla e o
buffer local. O tamanho do buffer local em uma controladora varia, dependendo do dispositivo específico
sendo controlado.

Interrupções de I/O:

Para começar uma operação de I/O, a CPU carrega os registradores adequados dentro da controladora de
dispositivo que por sua vez examina o conteúdo desses registradores para determinar que ação deve ser
tomada. Se ocorrer um pedido de leitura, a controladora começará a transferir dados do dispositivo para o
seu buffer local. Posteriormente, a controladora informa a CPU que terminou a operação disparando uma
interrupção.Uma vez iniciada a operação de I/O, dois roteiros são possíveis. No caso mais simples, a I/O é
iniciada; em seguida, quando tiver sido concluída, o controle é devolvido para o processo de usuário. Esse
caso é denominado I/O síncrona.A outra possibilidade é a I/O assíncrona que devolve o controle ao
programa de usuário sem esperar que a I/O termine. A I/O continua enquanto outras operações de sistema
ocorrem.
A tabela de status de dispositivo contém uma entrada para cada dispositivo de I/O e cada entrada indica o
tipo, endereço e estado do dispositivo( não funciona, ocioso ou ocupado).
Se o dispositivo estiver ocupado com um pedido, o tipo de pedido e outros parâmetros serão armazenados
na entrada da tabela para aquele dispositivo, podendo outros processos emitirem pedidos ao mesmo
dispositivo. Logo o SO mantém uma fila de espera para cada dispositivo de I/O.

DMA:

Para resolver o problema de transferência de dados entre o buffer da controladora de um dispositivo e a


memória com a CPU interferindo nesse processo foi criado o acesso direto a memória (DMA).
O DMA é usado para dispositivos de alta velocidade e transfere um bloco inteiro de dados entre o próprio
buffer de armazenamento e memória gerando apenas uma interrupção por bloco, ao invés de uma
interrupção por palavra. A controladora de DMA rouba ciclos de memória da CPU diminuindo a
velocidade de execução da mesma.

Estrutura de armazenamento:

A memória principal ou RAM dinâmica(DRAM) é um dispositivo de armazenamento volátil que perde seu
conteúdo quando há falta de energia ou esta é desligada. Assim a maioria dos sistemas de computação
fornece armazenamento secundário como uma extensão da memória principal.

Memória principal:

A memória principal e os registradores incorporados ao próprio processador são o único tipo de memória
que a CPU pode acessar diretamente. Logo, quaisquer instruções em execução, e quaisquer dados sendo
usados pelas instruções, devem estar em um desses dispositivos de armazenamento de acesso direto.
A I/O mapeada em memória fornece acessos mais convenientes aos dispositivos de I/O . Nesse caso, faixas
de endereços de memória são reservadas e mapeadas nos registradores de dispositivos. Leituras e escritas
nesses endereços de memória fazem com que os dados sejam transferidos de e para os registradores de
dispositivos.
O acesso à memória pode levar muitos ciclos até ser concluído e o processador aguarda até que os dados
necessários para uma determinada instrução estejam disponíveis.

Discos magnéticos:

Os discos magnéticos fornecem uma boa parte do armazenamento secundário para os sistemas de
computação modernos. Cada lâmina de disco tem uma forma plana circular, como um CD e as informações
são armazenadas por meio da escrita magnética nas lâminas.
Braço de disco, que move todas cabeças como uma unidade; trilhas, que são subdivisões das lâminas, são
subdivididas em setores; cilindro, que é um conjunto de trilhas que está em uma posição do braço; todos
esses elementos formam o mecanismo do disco magnético.
A capacidade de armazenamento dos discos magnéticos comuns é medida em gigabytes.

Fitas magnéticas:

A fita magnética foi usada como um meio inicial do armazenamento secundário, sendo relativamente
permanente e podendo armazenar grandes quantidades de dados. Seu tempo de acesso é lento em relação à
memória principal e mil vezes mais lento do que a dos discos magnéticos, sendo usadas basicamente para
backup, para o armazenamento de informações usadas com pouca freqüência e como meio de transferir
informações de um sistema para outro.
Hierarquia de armazenamento:

A grande variedade de sistemas de armazenamento em um sistema de computação pode ser organizada em


uma hierarquia de acordo com a velocidade e custo. Os níveis mais altos são caros e rápidos. Descendo na
hierarquia o custo por bit diminui, enquanto o tempo de acesso aumenta.

Cache:

Cache é um sistema de armazenamento mais rápido onde informações são copiadas temporariamente as
quais são acessadas posteriormente visando um melhor desempenho do sistema computacional.
Como caches têm tamanho limitado, a gerência de caches é um importante problema de projeto. A memória
funciona como um cache rápido para a memória secundária, já que os dados no armazenamento secundário
devem ser copiados para a memória principal para o uso e os dados devem estar na memória principal antes
de serem removidos para o armazenamento secundário por segurança.

Coerência e consistência:

Em uma estrutura de armazenamento hierárquico, os mesmos dados podem aparecer em diferentes níveis do
sistema de armazenamento.
Em ambientes multitarefa deve-se tomar muito cuidado para garantir que, se vários processos desejam
acessar um dado A, cada um desses processos obterá o valor atualizado de A mais recente. Logo, se o valor
de A for alterado, esse valor deverá ser imediatamente refletido em todos os outros caches nos quais A
reside. Essa situação é chamada de coerência de cache dando uma certa consistência ao sistema
computacional.

Proteção de Hardware:

Os sistemas de computação eram sistemas operados por programador com usuário único. À medida que os
sistemas operacionais se desenvolveram o controle passou para o sistema operacional. O SO fazia um
compartilhamento de recursos e adotava a multiprogramação melhorando a utilização do SO, mas
aumentando os problemas. Muitos processos poderiam ser afetados negativamente por um bug em um dos
programas, logo sistemas de proteção ( modo dual, proteção de I/O, memória, CPU) surgiram visando
acabar com esse tipo de problema.

Operação modo dual:

Para garantir a operação adequada, devemos proteger o sistema operacional e todos os outros programas e
seus dados de qualquer programa funcionando mal. Para isso dois modos de operação foram criados: modo
usuário e modo supervisor. Um bit de modo é acrescentado ao hardware do computador para indicar o modo
correto: (0) monitor, (1) usuário.
Com isso é possível distinguir entre uma tarefa executa da em nome do SO ou em nome do usuário. O modo
dual de operação fornece uma forma de proteger o SO contra usuários errantes, protegendo também usuários
errantes uns dos outros. Essa proteção é alcançada através do uso de instruções privilegiadas, que são
instruções de máquina que só podem ser executadas no modo monitor.

Proteção de I/O:

Para evitar que um usuário execute uma operação ilegal de I/O definimos todas as instruções de I/O como
sendo privilegiadas. Para que a proteção de I/O seja completa, é preciso Ter certeza de que um programa de
usuário nunca terá o controle do computador no modo monitor. Pois se isso ocorrer o programa de usuário
pode fazer operações de I/O ilegais, acessando posições de memória no próprio SO ou recusando-se a
liberar a CPU.
Proteção de memória:

Para garantir a operação correta é preciso fornecer proteção de memória pelo menos para o vetor de
interrupção e as rotinas de serviço de interrupção do SO.
Em geral, é preciso proteger o SO do acesso por programas de usuário e também proteger os programas dos
usuários uns dos outros.
Para separar o espaço de memória de cada programa é preciso Ter a capacidade de determinar a faixa de
endereços que o programa pode acessar e proteger a memória que estiver válida fora desse espaço. É
possível fornecer essa proteção usando dois registradores: o de base e o de limite. O registrador base
mantém o menor endereço de memória física válida e o registrador limite o tamanho da faixa de
endereçamento.

Proteção de CPU:

A proteção de CPU garante que o SO mantenha o controle evitando que um programa de usuário fique
tempo demais utilizando a CPU. O timer(temporizador) registra o tempo em que cada programa deve
utilizar a CPU. O timer possui vários usos, entre os quais destacam-se o compartilhamento de tempo e a
computação da hora atual.

Arquitetura geral do sistema:

Para melhorar o sistema de computação, a multiprogramação e o tempo compartilhado são técnicas que
levaram a modificações na arquitetura básica do computador, permitindo ao SO manter controle sobre o
sistema de computação. O controle deve ser mantido para fornecer operação contínua e correta.
Uma instrução de I/O é sempre privilegiada e cabe a qualquer programa de usuário solicitar ao monitor que
faça I/O em nome do usuário através chamadas ao sistema.
Uma chamada ao sistema é feita de várias formas e em todas elas um método é usado por processo para
solicitar ação pelo SO. Uma chamada ao sistema é uma espécie de exceção para uma posição específica no
vetor de interrupção com essa exceção executada por uma instrução chamada trap.
Quando uma chamada ao sistema é executada, ela é tratada pelo hardware como uma interrupção de
software. O controle passa pelo vetor de interrupção para a rotina de serviço no SO, e o bit de modo é
definido para o modo monitor. O monitor examina a instrução de interrupção, determinando qual chamada
ao sistema ocorreu, verifica se os parâmetros(tipo de serviço, informações adicionais, etc) estão corretos e
válidos, executa o pedido e devolve o controle para a instrução após a chamada ao sistema.

Alguns exercícios de prova:

1. Existem nos ambientes computacionais mecanismos de proteção implementados pelo próprio


hardware. Identifique dois destes e explique os seus próprios e de que forma são implementados
Base de resposta: ver seção Proteção de Hardware

2. O que são instruções privilegiadas e não privilegiadas? Qual a relação dessas instruções com os
modos de execução?
Base de resposta: ver seção Modo Dual.
CAPÍTULO 3:

Gerência de processos:

Processo é um programa em execução


Processo precisa de recursos (tempo de CPU, memória,arquivos, dispositivos de I/O)
Recursos são dados ao processo quando ele é criado ou alocado na sua execução
Ao término do processo o SO solicitará de volta quaisquer recursos reutilizáveis
Programa Processo.
Programa é uma entidade passiva, como o conteúdo de um arquivo em disco.
Processo é uma entidade ativa, que possui um contador de programa especificando a próxima instrução.
A execução de um processo dever ser seqüencial: A CPU executa uma instrução do processo após a outra
até o processo terminar.
Além disso a qualquer momento no máximo uma instrução é executada em nome do processo.
Conseqüência: Embora dois processos possam ser associados com o mesmo programa, eles são
considerados duas seqüências de execução separadas.
Em um sistema existem processos de sistema operacional(aqueles que executam código do sistema) e
processos de usuário(que executam código de usuário).
Esses processos (usuário e de sistema) executam concorrentemente, multiplexando a CPU entre eles.

Atividades em relação a gerência de processos:

Criar e excluir processos de usuário e de sistema.


Suspender e retomar processos.
Fornecer mecanismos para a sincronização de processos.
Fornecer mecanismos para a comunicação de processos.
Fornecer mecanismos para o tratamento de deadlocks.

Gerência da memória principal:

A memória principal é um repositório de dados rapidamente acessíveis compartilhados pela CPU e


dispositivos de I/O.
A CPU lê as instruções da memória principal no ciclo de busca de instruções, e lê e grava dados da memória
principal durante o ciclo de busca de dados.
As operações de I/O implementadas via DMA também fazem a leitura e escrita na memória principal. A
memória principal geralmente é o único dispositivo de armazenamento grande que a CPU pode endereçar e
acessar diretamente. Para que a CPU processe os dados do disco, esses dados devem primeiro ser
transferidos para a memória principal por chamadas de I/O geradas pela CPU.Do mesmo modo, as
instruções devem estar na memória principal para que a CPU as execute. É preciso manter vários programa
na memória para melhorar a utilização da CPU e a velocidade da resposta do computador aos seus usuários.

Atividades em relação a gerência de memória principal:

Manter registro das partes da memória que estão sendo usadas no momento e por quem
Decidir que processos deverão ser carregados na memória quando houver espaço disponível.
Alocar e desalocar espaço na memória, conforme necessário.

Gerência de arquivos:

Para uso conveniente do sistema de computação, o sistema operacional fornece uma visão lógica uniforme
do armazenamento de informações.
O sistema operacional abstrai as propriedades físicas de seus dispositivos de armazenamento para definir
uma unidade lógica de armazenamento, o arquivo.
O sistema operacional mapeia os arquivos nos meios físicos e acessa esses arquivos através dos dispositivos
de armazenamento.

Atividades em relação a gerência de arquivos:

Criar e excluir arquivos


Criar e excluir diretórios
Fornecer suporte a primitivas para manipular arquivos e diretórios
Mapear arquivos no armazenamento secundário
Fazer backup de arquivos em meios de armazenamento estáveis(não-voláteis)

Gerência do sistema de I/O:

Um dos objetivos de um sistema operacional é ocultar as peculiaridades de dispositivos de hardware


específicos do usuário.

Consiste de:

Um componente de gerência de memória que inclui buffering, armazenamento em cachê e spooling.


Uma interface geral de driver de dispositivo.
Drivers para dispositivos de hardware específicos.

Apenas o driver de dispositivos conhece as peculiaridades do dispositivo específico ao qual foi atribuído.

Gerência de armazenamento secundário:

Gerência de espaço livre


Alocação de espaço (armazenamento)
Escalonamento de disco

Redes:

Um sistema distribuído reúne sistemas fisicamente separados e possivelmente heterogêneos em um único


sistema coerente, fornecendo ao usuário acesso aos vários recursos mantidos pelo sistema.
Os sistema operacionais geralmente generalizam o acesso à rede como uma forma de acesso a arquivos,
com os detalhes da rede estando contidos no driver de dispositivo de interface da rede.

Sistemas de Proteção:

Se um sistema tiver vários usuários e permitir a execução concorrente de múltiplos processos, esses
processos deverão ser protegidos das atividades uns dos outros
O hardware de endereçamento de memória garante que um processo só pode executar dentro do seu próprio
espaço de endereçamento.
O timer garante que nenhum processo pode obter controle da CPU sem mais tarde ceder esse controle.
Os registradores de controle de dispositivo não são acessíveis aos usuários, de modo que a integridade dos
vários dispositivos periféricos é protegida.
A proteção é qualquer mecanismo para controlar o acesso de programas, processos ou usuários aos recursos
definidos por um sistema de computação.
Sistema interpretador de comandos:

É a interface entre o usuário e o sistema operacional


Sua função é obter a instrução de controle seguinte e executa-la

Serviços de sistemas operacionais:

Execução de programa:

O sistema deve ser capaz de carregar um programa na memória e executar esse programa.
O programa deve ser capaz de encerrar a sua execução, quer de forma normal ou anormal (indicando erro).

Operações de I/O:

Para fins de eficiência e proteção, os usuários em geral não podem controlar os dispositivos de I/O
diretamente.
Portanto, o sistema operacional deve fornecer os meios para realizar as operações de entrada e saída.

Manipulação do sistema de arquivos:

O SO deve dar suporte para que os programas possam ler,gravar, criar e excluir arquivos.

Comunicações:

Existem muitas circunstâncias nas quais um processo precisa trocar informações com outro processo.
Entre processos executando no mesmo computador: se dá através de memória compartilhada.
Entre processos executando em computadores diferentes: se dá através da troca de mensagens na qual
pacotes de informações são movidos entre processos pelo sistema operacional

Detecção de erros:

O sistema operacional precisa estar constantemente ciente de possíveis erros.Para cada tipo de erro o
sistema operacional deve tomar a medida adequada para garantir uma computação correta e consistente

Funções auxiliares

Alocação de recursos

O sistema deve alocar os diversos recursos necessários para os múltiplos processo dos múltiplos usuários
levando em conta certos fatores como o fato de que alguns recursos tem um gerenciamento especial (CPU,
memória, arquivos)

Contabilização:

É preciso manter um registro dos usuários que utilizam os recursos do computador, em que quantidade e que
tipos de recursos.
Esse registro pode ser usado para contabilização (para que os usuários possam ser faturados) ou
simplesmente para acumular estatística de uso.
As estatísticas podem ser uma ferramenta valiosa para os pesquisadores que desejam reconfigurar o sistema
para melhorar os serviços de computação
Proteção:

Os proprietários das informações armazenadas em um sistema de computação multiusuário podem desejar


controlar o uso dessas informações. A proteção visa garantir que todo acesso aos recursos do sistema seja
controlado.

Chamadas ao Sistema (System calls):

As chamadas ao sistema (system calls) fornecem a interface entre um processo e o sistema operacional.
Geralmente estão disponíveis como instruções em linguagem assembly.Certos sistemas permitem que as
chamadas sejam feitas diretamente de um programa de linguagem de nível mais alto, lembrando chamadas a
sub-rotinas. Nas chamadas aos sistemas geralmente se passam algumas informações necessárias além de
simplesmente identificar ao chamada ao sistema operacional.

Três métodos gerais são usados para passar parâmetros para o sistema operacional:

Passar os parâmetros em registradores


Abordagem simples
Mas em alguns casos pode haver mais parâmetros do que registradores

Armazenar em um bloco ou tabela na memória e o endereço da tabela é passado como parâmetro ao


registrador.

Os parâmetros podem ser alocados, ou inseridos, na pilha pelo programa e lidos e retirados da pilha pelo
sistema operacional.

Alguns sistemas operacionais preferem os métodos de bloco ou pilha, porque essas abordagens não limitam
o número ou tamanho dos parâmetros sendo passados.

As chamadas ao sistema podem ser agrupadas basicamente em cinco categorias:

Controle de processos
Manipulação de arquivos
Manipulação de dispositivos
Manutenção de informações
Comunicações

Programas de Sistema:

Um aspecto de um sistema moderno é a coleção de programas de sistema. Os programas de sistema


fornecem um ambiente conveniente para o desenvolvimento e a execução de programas.

Podem ser divididos nestas categorias:

Gerência de arquivos: Manipulação de arquivos e diretórios.


Informações de status: Fornecem informações relativas à data, hora quantidade de memória ou espaço em
disco disponível, números de usuários ou informações semelhantes.
Modificação de arquivo: Editores de texto para criar e modificar o conteúdo dos arquivos armazenados em
disco ou fita.
Suporte à linguagem de programação: Compiladores, montadores e interpretadores para linguagens de
programação comuns são geralmente fornecidos ao usuário com o sistema operacional. A maioria desses
programas agora são pagos e fornecidos à parte.
Carregamento e execução de programas: Um programa precisa ser carregado na memória para ser
executado, o sistema pode oferecer utilitários de carga absolutos, utilitários de carga relocável, linkeditores
e utilitários de carga em overlay.
Comunicações: Oferecem o mecanismo para criar conexões virtuais entre processos, usuários e diferentes
sistemas de computação.

Estruturas de sistemas:

Estrutura simples(Monolítica):
Sistemas implementados dessa maneira não possuem uma estrutura bem definida, O MS-DOS é um
exemplo de um sistema assim, foi escrito para fornecer funcionalidade máxima ao menor espaço possível. O
MS-DOS também foi limitado pelo hardware da época, o hardware para o qual foi escrito não possuía o
modo dual, ocasionando em problemas de segurança.

Vantagem:

Fornece o máximo de funcionalidades no menor espaço possível.

Desvantagens:
Não possui interfaces bem definidas.(As interfaces e níveis de funcionalidade não são bem separados).
Depuração e manutenção são mais difíceis.

Abordagem em camadas:
Na abordagem em camadas o SO é dividido em uma séries de camadas(níveis), cada qual construída
sobre camadas inferiores. Cada camada é implementada apenas com as operações fornecidas pelas camadas
de nível inferior. Uma camada não precisa saber como essas operações são implementadas, só precisa saber
o que essas operações fazem.

Vantagens:

Modularidade; simplifica a depuração e verificação do sistema.(Principal vantagem)


Projeto e implementação do sistema é mais simplificado.

Desvantagem:
Desempenho prejudicado pela demora ocasionada na comunicação entre as camadas.

Microkernels:
Estrutura o sistema operacional removendo do kernel todos os componentes não-essenciais e
implementando-os como programas de sistema e de nível de usuário. Os microkernels geralmente fornecem
gerência mínima de memória e processos, além de um recurso de comunicação. A principal função de um
microkernel é fornecer um recurso de comunicação entre o programa cliente e os vários serviços que
também estão em execução no espaço de usuário. A comunicação é feita por troca de mensagens.

Vantagens:
Facilidade de expandir o sistema operacional.
Segurança e confiabilidade, pois a maior parte dos serviços estão sendo executados como processos de
usuário, em vez de kernel. Se um serviço falhar, o resto do sistema permanece inalterado.

Desvantagem:
- Overhead(demora) causada pela troca de mensagens entre o kernel e os seus módulos.(Semelhante à
desvantagem da abordagem em camadas).
Máquinas virtuais:
Fornecem uma interface que é idêntica ao hardware subjacente. Quando carregados, cada processo
recebe uma cópia(virtual) do computador subjacente. O computador físico compartilha recursos para criar
máquinas virtuais. O escalonamento de CPU pode compartilhar a CPU para criar a ilusão de que os usuários
tem seus próprios processadores.

Implementação de Máquina Virtual:


Embora o conceito de máquina virtual seja útil, ele é difícil de implementar. Muito trabalho é
necessário para fornecer uma duplicata exata da máquina subjacente. A máquina subjacente tem dois
modos: o modo usuário e o modo monitor. A máquina virtual propriamente dita só pode executar no modo
usuário. Assim como a máquina física tem dois modos, no entanto, máquina virtual também precisa tê-los.
Conseqüentemente, é preciso ter um modo usuário virtual e um modo monitor virtual, ambos executando
em um modo usuário físico.

Vantagens:
Segurança, pois existe proteção total dos recursos do sistema. Cada máquina virtual é completamente
isolada de todas as outras máquinas virtuais.
Veículo de desenvolvimento e pesquisa; pois realizações de testes, aplicações de correções, essas atividades
podem ser feitas em ambiente isolado, sem prejudicar o sistema de operação normal(SO original).

Desvantagem:
Difícil implementação, é exigido um esforço muito grande para uma exata duplicação do hardware da
máquina subjacente.

Objetivos de um projeto de SO:

Ao nível de usuário: Para o usuário um SO deve ser conveniente e fácil de usar, fácil de aprender,
confiável, seguro e rápido.

Ao nível de sistema: Deve ser fácil de projetar, implementar e manter, como também ser flexível,
confiável, livre de erros e eficiente.

Alguns exercícios de prova:

3. Compare as estruturas de SO modelo monolítico e microkernel, mostre vantagens e desvantagens


entre esses modelos
Base de resposta: ver seção Microkernels e seção Estrutura Simples(Monolítica)

CAPÍTULO 4

O que é um processo

Um processo é um programa em execução.

Diferença entre um processo e um programa


A diferença entre um processo e um programa é que, um processo é uma entidade ativa (tem um contador
do programa PC especificando a próxima instrução para executar e também um conjunto de recursos
associados) portanto um programa é uma entidade passiva (o conteúdo de um arquivo armazenado no
disco).
Status do Processo:

Novo, Executando, Esperando, Pronto, Encerrado

Blocos de Controle de Processo(PCB)


Cada processo é representado no SO pelo PCB. É um repositório das informações que pode varia entre
processo de processo. Consiste de várias informações sobre um processo.
1. Status do Processo
2. Contador do Programa(PC)
3. Registradores do CPU
4. Informações sobre o escalonamento do CPU
5. Informações sobre o Gerenciador da Memória
6. Informações sobre a Utilização dos Recursos.
7. Informações sobre o Status do IO

Escalonamento dos Processos

Num sistema com um único processador, só pode ter um processo executando, caso tiver mais processos
para executar, os processos teriam de esperar até o CPU é disponível e pode ser re-escalonado.

Filas de Escalonamento
1. Job queue
2. Ready queue
3. Device queue

Classes de Escalonamento:

O processo da seleção de um processo num queue é feito por um escalonador.

1. Longo Prazo ou nível alto


2. Médio Prazo ou nível intermediário
3. Curto Prazo ou nível baixo

Diferença entre o prazo longo e prazo curto é a frequência da execução.


T= 1 F

O escalonador de prazo curto selecionar o novo processo para o CPU mais frequente. Olha a equação
Frequência aumenta, tempo diminui , então mais rápido. Contrário para o escalonador de prazo longo que
pode levar mais tempo para decidir que processo deve ser selecionado para a execução.

Processos podem ser categorizados como

I/O bound
CPU bound

Troca de Contexto:

Chaveando o CPU para um outro processo, o sistema precisa salvar o contexto de processo velho e carregar
o contexto salvo do processo novo. Essa tarefa é conhecida como a troca de contexto.

Criação de Processo:
O processo de criar um processo é chamado o processo pai e o novo processo é chamado o processo
filho.Os filhos podem criar mais processos formando uma árvore de processos.

Terminação de Processo:

O processo termina quando o último comando é executado e o processo pede o SO para deletá-lo usando a
chamada do sistema (exit).
Neste ponto o processo deve retornar dados de saída para o processo pai usando a chamada do sistema
(wait).

Processos Cooperativos:

Um processo é independente quando o processo não pode afetar ou ser afetado pela execução de outros
processos.

Caso contrário Processo Cooperativo.

Vantagens:

Compartilhamento de Informação muitos usuários são interessados na mesma informação.

Aceleração da velocidade de computação Se quiser uma tarefa particular para executar mais rápido, deve
quebrar em sub tarefas, e cada uma estarão executando em paralelo com os outros.

Modularidade Se quiser construir um sistema em modularidade, precisa dividr as funções do sistema em


processos separados.

Conveniência um usuário pode ter várias tarefas para realizar no mesmo tempo.

Problema do Produtor-Consumidor:

Para permitir um produtor e consumidor executar simultâneo deve ter um buffer de itens, que pode ser
enchido pelo produtor esvaziado pelo consumidor.Tem que ter uma sincronização entre os dois, o
consumidor não vai tentar consumir um item que ainda não foi produzido. O consumidor deve esperar ate
um item foi produzido.

Estratégias
Buffer ilimitado e Buffer limitado

Comunicação InterProcessos(IPC):

IPC fornece um mecanismo para permitir que os processos comuniquem e sincronizem as ações deles.
Diferença entre Comunicação Direita e Indireta

Direta
Cada processo deve identificar um ao outro explicitamente.

Indireta
Mensagens são direcionadas e recebidas de mailboxes.
Bufferização:

Um link tem a capacidade para determinar o numero de mensagens que pode ficar por um tempo
temporário.Essa propriedade pode ser vista como uma fila de mensagens associada ao link.

Implementadas de três modos:


a) Capacidade zero
b) Capacidade limitada
c) Capacidade ilimitada

CAPÍTULO 5

THREADS

Visão Geral

THREAD ou Processo leve é uma unidade básica de utilização de CPU; compreende um ID de thread: um
contador de programa, um conjunto de registradores e uma pilha. Compartilha com outros threads
pertencentes ao mesmo processo sua seção de código, seção de dados e outros recursos do sistema
operacional, tais como arquivos abertos e sinais.

Processo tradicional ou processo pesado tem um ÚNICO fluxo de controle.

Processos com múltiplos threads podem realizar mais de uma tarefa de cada vez.

Benefícios:
Obs: já caiu em prova!

1. Capacidade de resposta: o MULTITHREADING de uma aplicação interativa pode permitir que


um programa continue executando mesmo se parte dele estiver bloqueada ou executando uma
operação demorada, aumentando assim, a capacidade de resposta para o usuário. Por exemplo, um
navegador Web pode permitir a interação do usuário em um thread enquanto uma imagem está
sendo exibida.
2. Compartilhamento de recursos: por default, os threads compartilham memória e os recursos do
processo aos quais pertencem. O benefício do compartilhamento do código permite que uma
aplicação tenha vários threads diferentes de atividade todos dentro do mesmo espaço de
endereçamento.
3. Economia: alocar memória e recursos para a criação de processos é caro. Como alternativa, os
threads compartilham recursos do processo aos quais pertencem, é mais econômico criar e realizar
troca de contexto de threads. Pode ser difícil avaliar empiricamente a diferença em custo de criar e
manter um processo em vez de um thread, mas em geral é muito mais demorado criar e gerenciar
processos do que threads. No Solaris, criar um processo é aproximadamente 30 vezes mais lento do
que criar um thread, e a troca de contexto é cinco vezes mais lenta.
4. Utilização de arquiteturas multiprocessador: os benefícios do multithreading podem ser muito
aumentados em uma arquitetura multiprocessador, na qual cada thread pode estar executando em
paralelo em um processador diferente. Em uma arquitetura no processador, a CPU geralmente move-
se entre cada thread de forma tão rápida que existe a ilusão de paralelismo, mas na verdade apenas
um thread está sendo executado de cada vez.

Threads de usuário e de kernel:

Os threads podem ser fornecidos tanto no nível do kernel, quanto no nível do usuário.
Thread de usuário:

Conceito: são suportados acima do kernel e são implementados por uma biblioteca de threads no
nível do usuário. Essa biblioteca fornece suporte à criação, escalonamento e gerência de threads, sem
suporte do kernel.
Vantagens: são rápidos de criar (pois não necessitam da intervenção do kernel).
Desvantagens: se o kernel tiver um único thread, qualquer thread de usuário realizando uma
chamada bloqueante ao sistema causará o bloqueio de todo o processo, mesmo se houver outros
threads disponíveis para a execução na aplicação.
Exemplos: Pthreads POSIX, C-threads Mach e threads Solaris.

Thread de kernel:

Conceito: são suportados diretamente pelo SO criação, escalonamento e gerência são feitos pelo
kernel em seu espaço. Permite que o conceito de threads seja completo. (por que?)
Vantagens: não bloqueará o sistema, caso um thread realize uma chamada bloqueante ao sistema,
pois o kernel poderá escalonar outro thread na aplicação de execução. Além disso, em um ambiente
multiprocessador, o kernel pode escalonar threads em processadores diferentes.
Desvantagens: são geralmente mais lentos para criar e gerenciar do que os threads do usuário.
Exemplos: Windows NT, Solaris e Digital Unix.

Modelos de MULTITHREADING:
Obs.: já caiu em prova!

Muitos sistemas fornecem suporte a threads de usuário e de kernel, resultando em diferentes modelos de
multithreading.

Modelo muitos-para-um:

Conceito: mapeia muitos threads do usuário em um thread de kernel.


Vantagens: é eficiente, pois a gerência de threads é feita no espaço do usuário
Desvantagens: o sistema bloqueará se um thread efetuar uma chamada bloqueante ao sistema. Além
disso, como apenas um thread pode acessar o kernel de cada vez, não é possível executar múltiplos
threads em multiprocessadores.
Exemplos: é usado em ambientes que não oferecem threads a nível de kernel.

Modelo um-para-um:

Conceito: mapeia cada thread de usuário em um thread de kernel.


Vantagens: fornece mais concorrência do que o modelo muitos-para-um, permitindo que outro
thread execute, caso uma chamada bloqueante ao sistema seja feita. Permite também que múltiplos
threads executem em paralelo com multiprocessadores.
Desvantagens: a única desvantagem é que criar um thread de usuário requer criar um thread de
kernel, podendo prejudicar o desempenho de uma aplicação. A maior parte das implementações
desse modelo restringem o número de threads suportados pelo sistema. O desenvolvedor precisa ter
cuidado para não criar um número excessivo de threads em uma aplicação.
Exemplos: Windows NT e OS/2.

Modelo muitos-para-muitos:

Conceito: multiplexa múltiplos threads do usuário em um número menor ou igual de threads de


kernel.
Vantagens: os desenvolvedores podem criar tantos threads quantos forem necessários, e os threads
de kernel correspondentes podem executar em paralelo em um multiprocessador. Além disso,
quando um kernel realiza uma chamada bloqueante ao sistema, o kernel pode escalonar outro thread
para execução.
Desvantagens: (é um modelo perfeito?)
Exemplos: Solaris, IRIX e Digital UNIX.

Threads e a JVM:

Além de um programa Java que contém vários threads de controle distintos, existem muitos threads
executando assincronamente para a JVM que tratam de tarefas ao nível de sistema, tais como gerência de
memória e controles gráficos.

A JVM e o SO host:

A implementação típica da JVM normalmente pe feita sobre um SO host. Essa configuração permite que a
JVM oculte os detalhes da implementação do SO subjacente e forneça um ambiente consistente e abstrato
que permite aos programas Java operar em qualquer plataforma que suporte uma JVM. A especificação da
JVM não indica como os threads Java serão mapeados no SO subjacente, deixando essa decisão para cada
implementação particular da JVM. Em geral, um thread Java é considerado um thread de usuário, e a JVM é
responsável pela gerência de threads. O Windows NT utiliza o modelo um-para-um; portanto, cada thread
Java para uma JVM executando no NT é mapeado em um thread de kernel. O Solaris 2 inicialmente
implementou a JVM usando o modelo muitos-para-um (chamados threads verdes pela Sun). No entanto, já
na versão 1.1 da JVM com o Solaris 2.6, a JVM foi implementada usando o modelo muitos-para-muitos.

Alguns exercícios de prova:

4. Em relação ao conceito de threads, comente seus benefícios no que diz respeito à capacidade de
resposta e economia.
Base de resposta: ver seção Benefícios.

5. Defina quais são os modelos de multithreading, caracterizando cada um desses.


Base de resposta: ver seção modelos de multithreding.

6. Cite as vantagens da utilização de multithreads.


Base de resposta: novamente, ver seção Benefícios.
This document was created with Win2PDF available at http://www.daneprairie.com.
The unregistered version of Win2PDF is for evaluation or non-commercial use only.

Potrebbero piacerti anche