Fundamentos de Sistemas Computacionais Introdução Prof. Eduardo Alchieri
Sistema Computacional Hardware Software Usuários Um ou mais processadores, memória, discos, impressoras, teclado, mouse, monitor, interfaces de rede e outros dispositivos de entrada e saída Software básico (Programas de Sistema) Gerenciam a operação do computador Software Aplicativo (Programas Aplicativos) Auxiliam os usuários em suas atividades específicas
Fonte: Livro Sistemas Operacionais Modernos de Tanenbaum
Onde o Sistema Operacional de encaixa? Fonte: Livro Sistemas Operacionais Modernos de Tanenbaum
O que é um Sistema Operacional? É uma máquina estendida Esconde os detalhes que precisam ser executados Apresenta uma interface com os usuários mais amigável e mais fácil de usar É um gerenciador dos recursos do computador É um programa cuja tarefa principal é controlar o funcionamento do computador, como um gerente dos diversos recursos disponíveis no sistema Exemplos de recursos: memória e processador (CPU). Funções de um Sistema Operacional: Facilidade de acesso aos recursos do sistema Compartilhamento de recursos de forma organizada e protegida
Sistema operacional como uma máquina estendida A arquitetura (conjunto de instruções, organização da memória, estrutura de barramentos, etc.) da maioria dos computadores em nível de linguagem de máquina é primitiva e de difícil programação Exemplo: E/S em discos flexíveis controlados pelo NEC-PD765 16 comandos especificados pela carga de 1 a 9 bytes no registrador do dispositivo São comandos para leitura e escrita de dados, movimento do braço do disco, formatação das trilhas. Servem também para inicialização, sinalização, reinicialização e calibração do controlador e das unidades de disquete Os comandos mais básicos (read e write) necessitam de 13 parâmetros agrupados em 9 bytes Quando a operação termina, o chip controlador retorna 23 campos de status e de erros agrupados em 7 bytes
Exemplo: E/S em discos flexíveis controlados pelo NEC-PD765 Além disso, o programador da unidade de discos deve saber se o motor está ligado ou não O motor não pode ficar ligado por muito tempo para não desgastar o disco Caso um programador tivesse que se preocupar com tudo isso, não conseguiria escrever sua aplicação O programador busca lidar com essas unidades de um modo mais abstrato e simples No caso de um disco, uma abstração típica seria aquela compreendida por um disco que contém uma coleção de aquivos com nomes. Cada arquivo pode ser aberto para leitura ou escrita, ser lido ou escrito, e por fim, fechado Todos os outros detalhes (exemplo: verificar se o motor está ligado) não devem fazer parte desta abstração
Processadores, memórias, discos, e outros dispositivos são muito complicados e apresentam interfaces difíceis. Desta forma, uma das principais tarefas de um sistema operacional é ocultar o hardware e oferecer aos programas abstrações precisas, claras, elegantes e coerentes. Os sistemas operacionais transformam o feio em bonito! Fonte: Livro Sistemas Operacionais Modernos de Tanenbaum
Sistema operacional como um gerenciador de recursos O sistema operacional gerencia todas as partes de um sistema complexo Processadores, memória, discos, etc. O sistema operacional deve fornecer uma alocação ordenada e controlada dos recursos computacionais de um sistema Exemplo: Vários programas tentando imprimir ao mesmo tempo Caso não tivesse controle, as primeiras linhas impressas poderiam ser do programa 1, as seguintes do programa 2, e assim por diante O sistema operacional é responável por traze ordem para esta possível confusão
Dentro desta visão de SO, sua principal função é manter o controle sobre quem está usando determinado recurso, mediando conflitos entre diferentes programas Este gerenciamento causa o compartilhamento (multiplexação) de recursos de duas formas: No tempo: diferentes programas ou usuários aguardam a sua vez para utilizar o recurso Determinar a ordem de acesso ao recurso é tarefa do SO Exemplo: sistema com uma única CPU e múltiplos programas precisando desta CPU para executar No espaço: diferentes programas ou usuários uma parte do recurso Questões como justiça e proteção da parte do recurso alocada a um programa é tarefa do SO Exemplo: a memória principal é normalmente dividida entre vários programas em execução Outro exemplo: o disco rígido é compartilhado no espaço
O que os sistemas operacionais controlam? Um sistema operacional esta intimamente ligado ao hardware do computador no qual ele é executado Deve estender o conjunto de instruções do computador e gerenciar seus recursos Fonte: Livro Sistemas Operacionais Modernos de Tanenbaum
Para cada recuso da máquina, o SO deve: Manter informações sobre o recurso Decidir quem pode acessar o recurso Alocar o recurso Liberar o recurso Quanto ao controle de utilização de recursos, o SO deve: Ser eficiente (maximizar a utilização) Possuir um tempo de resposta aceitável (ser justo)
O sistema operacional pode ser visto a partir do: Usuário Deve oferecer facilidade e transparência na utilização Deve garantir o bom desempenho da máquina Sistema É o gerente dos recursos Deve lidar com detalher do hardware
História dos sistemas operacionais
A evolução dos sistemas operacionais acontece basicamente devido a: Evolução do hardware existente Surgimento de novo hardware Oferta de novos serviços Interface gráfica Ferramentas de gerenciamento de recursos Necessidade de reajustes Um S.O. pode conter falhas Está relacionada à arquitetura dos computadores
Primeira Geração (1945 1955): Válvulas e Painéis Máquinas enormes, com milhares de válvulas Segunda Geração (1955 1965): Transistores e Sistemas em Lote Aumento da velocidade de processamento graças à troca de válvulas por transistores (semicondutores) Processamento de Jobs (tarefas) era feito em lotes (batch) Terceira Geração (1965 1980): Circuitos integrados e multiprogramação Surgimento de SO mais voltado ao usuário Criação da técnica da multiprogramação: mais de uma tarefa sendo executada pelo processador ''ao mesmo tempo'' Quarta Geração (A partir de 1980): Computadores pessoais Surgem os circuitos LSI (Large Scale Integration), que são chips com milhares de transistores em cada centímetro quadrado de silício
Estruturas de Sistemas Operacionais
Agora que já tivemos uma visão externa do SO, vamos estudar a sua estrutura interna Estrutura de um SO Sistemas monolíticos Sistemas em camadas Micronúcleo Sistemas cliente-servidor Máquinas virtuais Exonúcleo
Sistemas monolíticos É a organização mais comum, na qual o SO inteiro é executado como um único programa no modo núcleo O S.O. é escrito como uma coleção de procedimentos, sendo que cada um pode chamar um dos demais sempre que necessário Cada procedimento possui uma interface bem definida Não há estrutura clara em camada. Geralmente, o SO apresenta três niveis : um procedimento principal que chama os procedimentos de serviço um conjunto de procedimentos de serviço que tratam as chamadas ao sistema, e um conjunto de procedimentos que ajudam os procedimentos de serviço
Sistemas monolíticos
Sistemas em camadas Sistemas que apresentam uma hierarquia de camadas Sistema dividido em níveis de complexidade, sendo que os níveis inferiores prestam serviços para os superiores As diversas camadas do sistema são dependentes, e possuem funções específicas O primeiro sistema operacional construído em camadas foi o THE (Technische Hogeschool Eindhoven), na Holanda em 1968
Sistemas em camadas THE Camada 5 4 3 2 1 0 Função Operador Programa usuário Gerenciamento de E/S Comunicação operador-processo Gerenciamento de memória Alocação do processador e multiprogramação
Micronúcleo A idéia é colocar o mínimo possível do SO no modo núcleo Um erro no núcleo pode ser fatal Aproximadamente 10 erros por 1000 linhas de código Um SO monolítico de 5 milhões de linhas contém aproximadamente 50 mil erros no núcleo Alcançar alta confiabilidade por meio da divisão do sistema em módulos pequenos, bem definidos, e apenas um módulo destes, o nicronúcleo, é executado em modo núcleo Por exemplo, um erro em um driver de som não derruba todo o sistema
Micronúcleo
Sistemas cliente-servidor Tendência dos sistemas operacionais: levar código para as camadas mais altas, deixando o mínimo para o kernel. O sistema operacional é dividido em partes, sendo cada uma responsável por oferecer um conjunto de serviços, como serviços de arquivo, serviços de criação de processos, serviços de memória e serviços de escalonamento, etc. Sempre que uma aplicação deseja algum serviço ela solicita ao processo responsável. A aplicação que solicita o serviço é chamada de cliente, enquanto o processo que responde à aplicação é chamado de servidor
Sistemas cliente-servidor Processos: Cliente: solicita o serviço Servidor: executa em modo usuário, não tem acesso direto ao hardware Na ocorrência de problemas o sistema não é completamente derrubado Kernel: gerencia a comunicação (troca de mensagens) entre clientes e servidores Apenas o núcleo do sistema executa no modo Kernel Este modelo permite que os servidores executem em modo usuário, ou seja, não tenham acesso direto a certos componentes do sistema
Sistemas cliente-servidor Como os servidores se comunicam através de troca de mensagens, não importa se os clientes e servidores estão sendo processados em um sistema com um único processador, com múltiplos processadores (fortemente acoplados ou fracamente acoplados)
Máquinas Virtuais IBM foi a pioneira em trabalhar com MV Usando técnicas de memória virtual e de escalonamento de processos, o sistema operacional pode criar a ilusão de que um processo tem sua própria memória e processador O monitor de máquina virtual pode ser executado diretamente sobre o hardware (hipervisor de tipo 1) ou sobre um SO hospedeiro (hipervisor de tipo 2, como ex.: VMWare)
Máquinas Virtuais Essas máquinas virtuais não são máquinas estendidas, com arquivos e outras características convenientes Na verdade, são cópias exatas do hardware, inclusive com modo usuário/kernel, E/S, interrupções e tudo o que uma máquina real tem Como cada máquina é uma cópia do hardware básico, cada uma delas pode executar um sistema operacional distinto
Exonúcleo No modelo anterial, o hardware de cada máquina virtual é um clone do verdadeiro hardware do sistema. Exemplo: cada máquina pensa que tem seu próprio disco, com blocos indo de 0 a um valor máximo, de modo que o monitor de máquina virtual deve manter tabelas para remapear os endereços de disco No modelo exonúcleo, cada máquina recebe um sibconjunto de recursos Uma grande vantagem desse esquema é que ele poupa uma camada de mapeamento O exonúcleo precisa somente manter o registro de para qual máquina virtual foi atribuído qual recurso