7 de junho de 2012

2ª AV de Sistemas Operacionais



Qual a importância dos Sistemas Operacionais?
R. O sistema operacional é importante porque ele quem define o ambiente no qual o usuário interage como computador.

O que é Sistema Operacional?
Um sistema operacional (SO) é uma coleção de programas que inicializam o hardware do computador. Fornece rotinas básicas para controle de dispositivos. Fornece gerência, escalonamento e interação de tarefas. Mantém a integridade de sistema.

Sistema Operacional é o mesmo que Sistema Computacional?
R. Não, pois, o Sistema Operacional (SO) é uma coleção de programas que inicializam o hardware do computador. Já o Sistema Computacional consiste num conjunto de dispositivos eletrônicos (hardware) capazes de processar informações de acordo com um programa (software).

O que é um Sistema Computacional? Defina seus componentes.
R. Um sistema computacional é aquele que automatiza ou apoia a realização de atividades humanas através do processamento de informações. Seus componentes são: Hardware; Software; Informações; Usuários; Procedimentos ou Tarefas; Documentação.

O que é um processo?
Um processo ou tarefa é uma porção de um programa em alguma fase de execução. Um programa pode consistir de várias tarefas, cada uma com funcionamento próprio ou como uma unidade (talvez se comunicando entre si periodicamente).


Estrutura dos Sistemas Operacionais
1. Monolíticos.
R. No modelo monolítico, não há estruturação visível, como o próprio nome diz (mono=um), o SO consiste em um conjunto de procedimentos independentes, que pode chamar uns aos outros e que são combinados em um único programa para formar o kernel (núcleo) do Sistema Operacional. As vantagens são: é simplicidade e grande desempenho e como desvantagem, uma falha pode paralisar todo o núcleo.

2. Em camadas.
R. O SO é dividido em camadas sobrepostas, onde cada módulo oferece um conjunto de funções que podem ser utilizadas por outros módulos. Módulos de uma camada podem fazer referências apenas aos módulos das camadas inferiores. A vantagem neste tipo de estruturação é isolar as funções do SO, facilitando sua alteração e depuração, além de criar uma hierarquia de níveis de acesso que permite proteger as camadas mais internas. Como desvantagem, cada nova camada implica uma mudança no modo de acesso.

3. Máquinas Virtuais.
R. Uma máquina virtual é uma cópia via software que busca simular uma máquina real. Uma máquina virtual (Virtual Machine – VM) pode ser definida como “uma duplicata eficiente e isolada de uma máquina real”. Sua memória, processador e outros recursos são virtualizados. A virtualização é a interposição do software (máquina virtual) em várias camadas do sistema. É uma forma de dividir os recursos de um computador em múltiplos ambientes de execução. Como vantagens: flexibilidade no SO e a desvantagem, como simular diversas máquinas virtuais não é uma tarefa simples, pode ocorrer sobrecarga nesse SO.

4. Arquitetura Micro-kernel;
R. Tem a idéia de tornar o núcleo menor e mais simples possível e para implementar esta idéia o sistema é dividido em processos. Desta forma, sempre que uma aplicação desejar algum serviço ela solicitará ao processo responsável, assim, a aplicação que solicita um serviço é chamada de cliente e o processo que responde a solicitação é chamado de servidor.

5. Cliente-Servidor.
R. Sistemas Cliente-Servidor são modelos de computação que disntiguem dois tipos básicos de equipamentos computacionais: clientes e servidores, sendo interligados entre si e geralmente utilizam uma rede de computadores. Neste modelo, geralmente os servidores agregam as funções mais importantes do sistema, deixando aos clientes apenas o processamento de aplicações mais básicas.


Aulas 5 – Algoritmo para escalonamento de processos

Algoritmos de Escalonamento de Sistemas em Batch:

Três níveis:
Escalonador De Admissão: decide qual job será admitido no sistema. Por exemplo, uma mescla de Jobs orientados a CPU e orientados à E/S; Processos com menor tempo de acesso à CPU e maior tempo de interação com dispositivos de E/S;
Escalonador Da Memória: decisões sobre quais processos vão para a MP: Há quanto tempo o processo está esperando? Quanto tempo da CPU o processo já utilizou? Qual o tamanho do processo? Qual a importância do processo?
Escalonador da CPU: seleciona qual o próximo processo a ser executado;

Algoritmo First-Come First-Served (ou FIFO):
Não-preemptivo (CPU não controla o tempo dos processos!); Processos são executados na CPU seguindo a ordem de requisição; Fácil de entender e programar;
Desvantagem: Ineficiente quando se tem processos que demoram na sua execução;

Algoritmo Shortest Job First (SJF) (o primeiro processo que entra é o mais curto):
Não-preemptivo; Possível prever o tempo de execução do processo (por que percorre todos os processos para verificar qual menor); Menor processo é executado primeiro; Menor turnaround (tempo em que o usuário espera pela saída do processo);
Desvantagem: Baixo aproveitamento quando se tem poucos processos prontos para serem executados;

Shortest Remaining Time Next (SRTN) (executar o processo com menor tempo de execução mais curto.):
Não - Preemptivo; Processos com menor tempo de execução são executados primeiro; Se um processo novo chega e seu tempo de execução é menor do que do processo corrente na CPU, a CPU suspende o processo corrente e executa o processo que acabou de chegar;
Desvantagem: processos que consomem mais tempo podem demorar muito para serem finalizados se muitos processos pequenos chegarem!


Algoritmos de Escalonamento para Sistemas Interativos:
Utilizam escalonamento em dois níveis (escalonador da CPU e memória);

Algoritmo Round-Robin:
Antigo, mais simples e mais utilizado; Preemptivo; Cada processo recebe um tempo de execução chamado quantum; ao final desse tempo, o processo é suspenso e outro processo é colocado em execução; Escalonador mantém uma lista de processos prontos; Quantum: se for muito pequeno, ocorrem muitas trocas diminuindo, assim, a eficiência da CPU; se for muito longo o tempo de resposta é comprometido;

Algoritmo com Prioridades:
Cada processo possui uma prioridade > os processos prontos com maior prioridade são executados primeiro; Prioridades são atribuídas dinâmica ou estaticamente; Classes de processos com mesma prioridade; Preemptivo;
Como evitar que os processos com maior prioridade sejam executados indefinidamente?
Diminuir a prioridade do processo corrente a cada interrupção do relógio e trocá-lo pelo próximo processo assim que sua prioridade caia abaixo da prioridade do próximo processo com prioridade mais alta (chaveamento); Atribuir um quantum máximo no qual o processo pode executar;

Algoritmo de Múltiplas Filas:
CTSS (Compatible Time Sharing System); Classes de prioridades; Preemptivo; Cada classe de prioridades possui quantum diferentes; Assim, a cada vez que um processo é executado e suspenso ele recebe mais tempo para execução, mas passa para uma fila com menor prioridade de execução.

Algoritmo Shortest Process Next(Próximo processo mais curto.);
Mesma idéia do Shortest Job First; Processos Interativos: não se conhece o tempo necessário para execução; Solução: realizar uma estimativa com base no comportamento passado e executar o processo cujo tempo de execução estimado seja o menor;

Algoritmo Garantido;
Garantias são dadas aos processos dos usuários; Exemplo: n processos > 1/n do tempo de CPU para cada processo: Deve ser mantida taxa de utilização de cada processo; Tem prioridade o que estiver mais distante do prometido. Difícil de implementar.

Algoritmo Lottery;
Cada processo recebe “tickets” que lhe dão direito de execução; A cada troca de processo um “tickets” é sorteado; O dono dos “tickets” sorteado recebe o direito de ocupar a CPU; Possível definir prioridade entre os processos por meio do número de “tickets” atribuído a cada processo; Fácil de implementar e de adaptar.


Algoritmo por Fração Justa (Fair-Share);
O escalonamento é feito considerando o dono dos processos; Cada usuário recebe uma fração da CPU e processos são escalonados visando garantir essa fração; Se um usuário A possui mais processos que um usuário B e os dois têm a mesma prioridade, os processos de A demorarão mais que os do B.

Algoritmos de Escalonamento de Sistemas em Tempo Real:
Tempo é um fator crítico; Sistemas críticos: Aviões; Hospitais; Usinas Nucleares; Bancos; Multimídia;
Ponto importante: obter respostas em atraso é tão ruim quanto não obter respostas;

Tipos de STR:
Hard Real Time: atrasos não são tolerados: Aviões, usinas nucleares, hospitais;
Soft Real Time: atrasos são tolerados: Bancos; Multimídia;
Programas são divididos em vários processos; Eventos causam a execução de processos: Periódicos: ocorrem em intervalos regulares de tempo; Aperiódicos: ocorrem em intervalos irregulares de tempo;
Algoritmos podem ser: Estáticos: decisões de escalonamento antes do sistema começar;
Informação disponível previamente; Dinâmicos: decisões de escalonamento em tempo de execução;

Aula 06 –Thread

Processos
Sistemas Operacionais tradicionais: Cada processo tem um único espaço de endereçamento e um único fluxo de controle. Existem situações onde é desejável ter múltiplos fluxos de controle compartilhando o mesmo espaço de endereçamento: Solução: THREADS

THREADS
Um processo tradicional (pesado) possui um contador de programas, um espaço de endereço e apenas uma thread de controle (ou fluxo de controle);
Multithreading: Sistemas atuais suportam múltiplas threads de controle, ou seja, pode fazer mais de uma tarefa ao mesmo tempo, servindo ao mesmo propósito;

Thread é uma entidade básica de utilização da CPU. Também conhecidos como processos leves (lightweight process ou LWP); Processos com múltiplas threads podem realizar mais de uma tarefa de cada vez; Processos são usados para agrupar recursos; Threads são as entidades escalonadas para execução na CPU: A CPU alterna entre as threads dando a impressão de que elas estão executando em paralelo; Como cada thread pode ter acesso a qualquer endereço de memória dentro do espaço de endereçamento do processo, uma thread pode ler, escrever ou apagar a pilha de outra thread; Não existe proteção pois: Não é necessário pois, diferente dos processos que podem pertencer a diferentes usuários, as threads são sempre de um mesmo usuário.

Razões para existência de threads:
Em múltiplas aplicações ocorrem múltiplas atividades “ao mesmo tempo”, e algumas dessas atividades podem bloquear de tempos em tempos; As threads são mais fáceis de gerenciar do que processos, pois elas não possuem recursos próprios > o processo é que tem!
Desempenho: quando há grande quantidade de E/S, as threads permitem que essas atividades se sobreponham, acelerando a aplicação; Paralelismo Real em sistemas com múltiplas CPUs.

Considere um navegador WEB:
Muitas páginas WEB contêm muitas figuras que devem ser mostradas assim que a página é carregada;
Para cada figura, o navegador deve estabelecer uma conexão separada com o servidor da página e requisitar a figura > tempo; Com múltiplas threads, muitas imagens podem ser requisitadas ao mesmo tempo melhorando o desempenho;

Benefícios das Threads:
Capacidade de resposta: aplicações interativas. Ex.: servidor WEB;
Compartilhamento de recursos: mesmo endereçamento, memória, recursos;
Economia: criar e realizar chaveamento de threads é mais barato;
Utilização de arquiteturas multiprocessador: processamento paralelo;

Tipos de threads:
Em modo usuário (espaço do usuário):
Implementadas por bibliotecas no espaço do usuário; Criação e escalonamento são realizados sem o conhecimento do kernel; Sistema Supervisor (run-time system): coleção de
procedimentos que gerenciam as threads; Tabela de threads para cada processo;
Cada processo possui sua própria tabela de threads, que armazena todas a informações referentes à cada thread relacionada àquele processo;
Vantagens: Alternância de threads no nível do usuário é mais rápida do que alternância no kernel; Menos chamadas ao kernel são realizadas; Permite que cada processo possa ter seu próprio algoritmo de escalonamento; Podem ser implementado em Sistemas Operacionais que não têm threads.
Principal desvantagem: Processo inteiro é bloqueado se uma thread realizar uma chamada bloqueante ao sistema;

Em modo kernel:
Suportadas diretamente pelo SO;
Criação, escalonamento e gerenciamento são feitos pelo kernel:
Tabela de threads e tabela de processos separadas: As tabelas de threads possuem as mesmas informações que as tabelas de threads em modo usuário, só que agora estão implementadas no kernel;
Vantagem: Processo inteiro não é bloqueado se uma thread realizar uma chamada bloqueante ao sistema;
Desvantagem: Gerenciar threads em modo kernel é mais caro devido às chamadas de sistema durante a alternância entre modo usuário e modo kernel;

Modelos Multithreading:
Muitos-para-um: (Green Threads e GNU Portable Threads)
Mapeia muitas threads de usuário em apenas uma thread de kernel;
Não permite múltiplas threads em paralelo em multiprocessadores;
Gerenciamento Eficiente
Se uma bloquear todas bloqueiam

Um-para-um: (Linux, Família Windows, OS/2, Solaris 9)
Mapeia para cada thread de usuário uma thread de kernel;
Permite múltiplas threads em paralelo;
Problema – criação de thread no kernel prejudica o desempenho.

Muitos-para-muitos: (Solaris até versão 8, HP-UX, Tru64 Unix, IRIX)
Mapeia para múltiplos threads de usuário um número menor ou igual de threads de kernel;
Permite múltiplas threads em paralelo;


Estados das Threads: executando, pronta, bloqueada;
Comandos para manipular threads: Thread_create; Thread_exit; Thread_wait; Thread_yield (permite que uma thread desista voluntariamente da CPU);

Aula 07 –Deadlock

Dispositivos e recursos são compartilhados a todo o momento: impressora, disco, arquivos, etc...;
Deadlock: processos ficam parados sem possibilidade de poderem continuar seu
processamento;

Recursos
Recursos: objetos acessados, os quais podem ser tanto hardware quanto uma informação.
Preemptivos: podem ser retirados do processo sem prejuízos: Memória; CPU;
Não-preemptivos: não podem ser retirados do processo, pois causam prejuízos: CD-ROM; Unidades de fita;
DEADLOCKS ocorrem com recursos não-preemptivos;

Operações sobre recursos/dispositivos:
Requisição do recurso; Utilização do recurso; Liberação do recurso;

Se o recurso requerido não está disponível, duas situações podem ocorrer:
Processo que requisitou o recurso fica bloqueado até que o recurso seja liberado, ou;
Processo que requisitou o recurso falha, e depois de um certo tempo tenta novamente requisitar o recurso;
Aquisição do recurso:
Para alguns tipos de recursos, os processos dos usuários gerenciam o uso dos recursos, através, por exemplo, de semáforos: Exemplo: acesso a registros em um sistema de banco de dados.
Se vários processos tentam acessar os mesmos recursos, podem ocorrer situações onde a ordem de solicitação dos recursos pode conduzir ao um deadlock ou não.

O que é um DEADLOCK?
R. “Um conjunto de processos estará em situação de deadlock se todo processo pertencente ao conjunto estiver esperando por um evento que somente um outro processo desse mesmo conjunto poderá fazer acontecer.”

Quatro condições para que ocorra um deadlock:
Exclusão mútua: cada recurso pode estar somente em uma de duas situações: ou associado a um único processo ou disponível;
Posse e espera (hold and wait): processos que já possuem algum recurso podem requer outros recursos;
Não-preempção: recursos já alocados não podem ser retirados do processo que os alocou; somente o processo que alocou os recursos pode liberá-los;
Espera Circular: um processo pode esperar por recursos alocados a outro processo;
Todas as condições devem ocorrer para que ocorra um deadlock.

Geralmente, deadlocks são representados por grafos a fim de facilitar sua detecção, prevenção e recuperação:
Ocorrência de ciclos pode levar a um deadlock;
a) Recurso R alocado ao Processo A;
b) Processo B requisita Recurso S;
c) Deadlock.





Aula 8 - Gerenciamento de Memória

Memória - recurso muito importante;
Tendência atual do software: Lei de Parkinson: “Os programas se expandem para preencher a memória disponível para eles” (adaptação);
Requisitos: Muito grande; Rápida; Não volátil; Baixo custo.
Hierarquia de Memória:
Cache – vários sub-níveis: Pequena quantidade – k/M bytes; Alto custo por byte; Muito rápida; Volátil.
Memória Principal: Quantidade intermediária – M/G bytes; Custo médio por byte; Velocidade média; Volátil.
Disco: Grande quantidade – G/T bytes; Baixo custo por byte; Lenta; Não volátil.
Para cada tipo de memória: gerenciar espaços livres/ocupados; Alocar processos/dados na memória; Localizar dado.
Entre os níveis de memória: Gerenciar trocas.

Gerenciador de memória: responsável por alocar e liberar espaços na memória para os processos em execução; também responsável por gerenciar chaveamento entre os níveis de memória: principal e disco; principal e cache.
A função principal da memória é a alocação de áreas contíguas (memória) e fragmentação dos dados em memória.

Tipos básicos de gerenciamento:
Com paginação (chaveamento): Processos são movidos entre a memória principal e o disco; artifício usado para resolver o problema da falta de memória; Se existe MP suficiente não há necessidade de se ter paginação;
Sem paginação: não há chaveamento;

Monoprogramação:
Sem paginação: gerenciamento mais simples; Apenas um processo na memória;

Modelo de Multiprogramação:
Múltiplos processos sendo executados; Eficiência da CPU;
Vários processos na memória: como proteger os processos uns dos outros? E kernel de todos os processos? Como tratar a realocação? Todas as soluções envolvem equipar a CPU com um hardware especial: MMU (memory management unit).

Realocação:
Quando um programa é montado (link), i.e. programa principal + rotinas do usuário + rotinas da biblioteca > executável, o montador (linker) deve saber em que endereço o programa irá iniciar na memória;
Nesse caso, para que o montador não escreva em um local indevido (por exemplo na área do SO), é preciso de realocação.

Proteção:
Com várias partições e programas ocupando diferentes espaços da memória é possível acontecer um acesso indevido;
Solução para ambos os problemas:
Dois registradores > base e limite:
Quando um processo é escalonado o registrador - base é carregado com o endereço de início da partição e o registrador - limite com o tamanho da partição; O registrador - base torna impossível a um processo uma remissão a qualquer parte de memória abaixo de si mesmo. Automaticamente, a MMU adiciona o conteúdo do registrador - base a cada endereço de memória gerado; Endereços são comparados com o registrador - limite para prevenir acessos indevidos;

Partições
Particionamento da memória pode ser realizado de duas maneiras:
Partições fixas (alocação estática): Tamanho e número de partições são fixos (estáticos); Não é atrativo, porque partições fixas tendem a desperdiçar memória (Qualquer espaço não utilizado é literalmente perdido); Mais simples;

Partições variáveis (alocação dinâmica): Tamanho e número de partições variam; Otimiza a utilização da memória, mas complica a alocação e liberação da memória; Partições são alocadas dinamicamente; SO mantém na memória uma lista com os espaços livres; Menor fragmentação interna e grande fragmentação externa; Solução: Compactação;

Minimizar espaço de memória inutilizado:
Compactação: necessária para recuperar os espaços perdidos por fragmentação; no entanto, muito custosa para a CPU;
Técnicas para alocação dinâmica de memória:
Bitmaps: Memória é dividida em unidades de alocação em kbytes; Cada unidade corresponde a um bit no bitmap: 0 > livre 1 > ocupado; Tamanho do bitmap depende do tamanho da unidade e do tamanho da memória; Ex.: Unidades de alocação pequenas > bitmap grande; Unidades de alocação grandes > perda de espaço;
Listas Encadeadas.

O que fazer quando não existe espaço suficiente para todos os processos ativos?
Swapping
Chaveamento de processos inteiros entre a memória principal e o disco. Transferência do processo da memória principal para a memória secundária (normalmente disco): Swap-out; Transferência do processo da memória secundária para a memória principal: Swap-in; Pode ser utilizado tanto com partições fixas quanto com partições variáveis;
Overlays > Memória Virtual
Programas são divididos em pedaços menores; Pedaços são chaveados entre a memória principal e o disco.

Memória Virtual (MV)
Programas maiores que a memória eram divididos em pedaços menores chamados overlays > programador;
Desvantagem: custo muito alto;
Memória Virtual: Sistema operacional é responsável por dividir o programa em overlays;
Sistema operacional realiza o chaveamento desses pedaços entre a memória e o disco;


Nenhum comentário:

Postar um comentário