Baixe o app para aproveitar ainda mais
Prévia do material em texto
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 programasforem 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 indicao 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 monitorque 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çãode 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 umprocesso 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, Solarise 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.
Compartilhar