INTRODUÇÃO AOS SISTEMAS OPERACIONAIS setembro/2013 SEMANA 07 Arquitetura dos sistemas operacionais. Sistema monolítico, sistema em camadas, microkernel, cliente-servidor, máquinas virtuais. 1 - Introdução A estrutura interna dos sistemas operacionais está relacionada ao desenho [design] do sistema. Ao longo do tempo essa estrutura tem evoluído, buscando uma estrutura mais apropriada. Entre outras, existem as seguintes estruturas: sistema monolítico, sistema em camadas, sistema cliente-servidor [microkernel] e máquinas virtuais. 2 - Sistema monolítico O modelo monolítico dominou nos primórdios da computação, nele o sistema operacional é escrito como um programa único composto por uma coleção de subrotinas que chamam umas às outras sempre que for necessário. A organização mais comum é estruturar o sistema operacional como um conjunto de rotinas que podem interagir livremente umas com as outras. O sistema monolítico pode ser comparado a uma aplicação formada por várias rotinas ou procedimentos compilados separadamente e depois ligados [linked, "lincados"], para formar um grande e único programa executável. Como vantagem está o grande desempenho e a alta eficiência. Além disso, existe forte integração interna dos componentes e por isso permite que detalhes de baixo nível do hardware sejam bem explorados. Como desvantagens estão manutenção e expansão complexos. Além disso, como os módulos trabalham no mesmo espaço de endereçamento, uma falha pode paralisar todo o kernel. Os modelos monolíticos também adotam modo usuário e modo supervisor [kernel], que operam com diferentes privilégios e diferentes prioridades de execução. Às aplicações é reservado o modo usuário, com baixo privilégio e baixa prioridade, já para as rotinas do sistema operacional é reservado o modo supervisor. Introdução aos Sistemas Operacionais - www.jairo.pro.br 1/6 O Linux é um exemplo de kernel monolítico e modular. Modular pois módulos podem ser carregados para acessar algum recurso, isso com o sistema rodando. Posteriormente, se não estiver mais em uso, esse módulo poderá ser descarregado para melhorar o desempenho da máquina e economizar memória. aplicação aplicação aplicação aplicação aplicação 4 3 1 2 n modo usuário modo kernel interface de chamadas de sistema [system calls] componentes do sist. operacional O sistema monolítico não é estruturado, mas também não é totalmente desestruturado. Por exemplo, existe um pouco de estrutura para os serviços do sistema que são requisitados via chamadas de sistema. hardware Fig 1 – Sistema monolítico Os primeiros Unix, no início dos anos 1970, também eram sistemas monolíticos. Atualmente, FreeBSD, AIX e HP-UX são sistemas monolíticos. Outro exemplo é o antigo MS-DOS. Atualmente, a maioria dos sistemas operacionais são monolíticos. 3 - Sistema em camadas No sistema em camadas, a comunicação ocorre apenas entre camadas adjacentes. Isso garante segurança e funcionamento para o sistema. A camada mais inferior é a que tem acesso aos dispositivos de hardware e a camada mais externa é a que realiza a interface com os usuários e com as aplicações. modo usuário A organização dos módulos ocorre por meio de hierarquia de camadas sobrepostas, onde cada módulo oferece um conjunto de funções que podem ser utilizados por outros módulos. Os módulos de uma camada podem fazer referência apenas a módulos de camadas inferiores, e quanto mais interna a camada, mais privilegiada ela é. A vantagem em estruturar o sistema operacional em camadas é a isolação que essas camadas proporcionam, pois facilitam a alteração e depuração do sistema e criam uma Introdução aos Sistemas Operacionais - www.jairo.pro.br camada 2 camada 1 hardware Fig 2 – Sistema em camadas 2/6 hierarquia de níveis de modos, que protege as camadas mais internas. Porém, o empilhamento de várias camadas de software faz com que a requisição de uma aplicação demore mais tempo para chegar até o dispositivo ou recurso a ser acessado, prejudicando o desempenho do sistema. Além disso, não é tarefa óbvia dividir as funcionalidades de um kernel em camadas horizontais de abstração crescente, pois mesmo funcionalidades que tratam de recursos distintos podem ser interdependentes. Muitos dos sistemas operacionais comerciais utilizam o modelo de duas camadas, onde uma camada trabalha no modo kernel e a outra no modo usuário. Como exemplo, o MULTICS1 tinha oito camadas. Outro exemplo é o Minix, que foi criado pelo professor Andrew S. Tanenbaum em 1987. Atualmente o Minix é um projeto de código fonte aberto [http://www.minix3.org/]. 4 - Sistema cliente-servidor [microkernel] Os sistemas operacionais em estrutura cliente-servidor têm um microkernel, que é um kernel menor e mais simples. Para funcionar, esse sistema é dividido em processos. Existem processos clientes e processos servidores. A proposta do microkernel é tornar o kernel menor e mais simples possível, movendo código para as camadas superiores. Como implementação, o sistema é dividido em processos, onde cada processo é responsável por oferecer um conjunto de serviços. Sempre que uma aplicação necessita algum recurso ela solicita ao processo responsável. A aplicação que solicita um serviço é chamada de cliente, e o processo que atende a essa solicitação é chamado de servidor. Nessa implementação, o sistema é dividido em processos, onde cada processo é responsável por oferecer um conjunto de serviços. Por exemplo: • • • • serviço de arquivos [ou servidor de arquivos]; serviço de criação de processos [servidor de processos]; serviço de memória [servidor de memória]; serviço de rede [servidor de rede]. Num exemplo de funcionamento, se um processo de usuário [processo cliente] precisar ler um bloco de dados em arquivo, este fará uma solicitação ao serviço de arquivos que, por sua vez, irá acessar o sistema de arquivos e ler esse bloco de dados, para depois enviar para o processo cliente. Um microkernel permite que os processos servidores executem em modo usuário e não 1 MULTICS: Multiplexed Information and Computing Service foi um sistema operacional cujo desenvolvimento teve início em 1964. O último sistema MULTICS foi desligado em 2000. O Unix foi baseado no MULTICS. Introdução aos Sistemas Operacionais - www.jairo.pro.br 3/6 modo kernel [que é o caso do sistema monolítico]. Apenas o microkernel, que é o responsável pela comunicação entre clientes e servidores, executa no modo kernel. A função básica do microkernel é permitir a comunicação entre processos clientes e processos servidores. Essa comunicação ocorre pela troca de mensagens. Uma vantagem é que o sistema operacional passa a ter manutenção mais simples, indiferente do fato do processo de serviço estar numa máquina com um único processador, com múltiplos processadores ou num sistema distribuído. No entanto, a implementação do sistema cliente-servidor é difícil, então usualmente é implantado uma combinação de modelo em camadas com o cliente-servidor. Ainda como desvantagem, tem baixo desempenho, pois é frequente a mudança do modo de acesso. Além diso, algumas funções exigem acesso ao hardware, então o microkernel precisa assumir também funções críticas como escalonamento, intercomunicação entre processos, gerência de memória, tratamento de interrupções e gerência de dispositivos. servidor de rede mensagem gem servidor de memória me nsa servidor de processos mensagem gem Também como vantagem, é facilmente adaptável para uso em sistemas tanto monoprocessados quanto multi, seja forte ou fracamente acoplados. Em sistema distribuídos, possibilita a um cliente solicitar um serviço e ser atendido remotamente, fato que garante alta escalabilidade [pode-se adicionar mais e mais máquinas]. servidor de arquivos nsa me Como vantagem, os serviços executam em modo usuário, então se algum falhar não comprometerá o sistema como um todo. modo usuário modo kernel microkernel hardware Fig 3 – Sistema cliente-servidor E ainda como vantagem, o sistema cliente-servidor é mais fácil de depurar pois os serviços são pequenos e específicos. No passado, uma das razões para adoção do microkernel era a limitação de memória no hardware de 16 bits ou menos. Mas após o surgimento de arquiteturas de 32 bits, não houve mais necessidade do kernel ser pequeno. Como exemplos de sistemas que usam microkernel temos a família de sistemas operacionais Windows baseados no NT [que são todos os Windows atuais]. Porém, esses sistemas não são 100% cliente-servidor, pois usam uma camada de abstração de hardware [HAL, Hardware Abstraction Layer], coisa que deveria estar incluída no microkernel. 5 - Máquinas virtuais Introdução aos Sistemas Operacionais - www.jairo.pro.br 4/6 Um máquina virtual é formada por recursos virtuais mapeados para recursos reais. Assim, uma máquina física com muitos processadores e muita memória pode ser particionada em muitas máquinas virtuais, cada uma com menos recursos que a máquina real. Uma máquina real pode abrigar internamente diferentes ambientes virtuais, cada um simulando uma máquina distinta, com processadores, memória, I/O, sistema operacional, recursos e processos próprios. Desta forma, cada usuário ou aplicação tem a impressão de possuir a sua própria máquina. O propósito da máquina virtual é criar um nível intermediário entre o hardware e o sistema operacional. E este nível cria máquinas virtuais independentes. Como vantagens no uso de máquinas virtuais temos a convivência de diferentes sistemas operacionais na mesma máquina física, centralização, alta segurança e independência para cada máquina virtual. E se determinada máquina virtual falhar, as demais não serão afetadas. Como desvantagem, o compartilhamento e gerenciamento dos recursos de hardware entre diferentes máquinas virtuais não é tarefa simples. Virtualização é um conceito antigo, e a IBM já tinha suporte à virtualização no seu System/370, no final dos anos 1960. Conceitos comuns em virtualização são hipervisor e paravirtualização. O hipervisor é um componente básico na virtualização. É um software que desvincula o sistema operacional e seus aplicativos dos recursos de hardware. São de dois tipos: hipervisor 1 e hipervisor 2. O hipervisor tipo 1 roda direto no hardware [bare metal], sem um sistema operacional. Na prática, nesse caso o próprio hipervisor é um kernel modificado. Como exemplos, temos Citrix Xen Server, VMware ESX (ou ESXi) Server e Microsoft Hyper-V technology. aplicações aplicações aplicações Windows Server 2003 Windows Server 2008 Linux Red Hat serviço de console Vmware hardware x86 Fig 4 – Hypervisor tipo 1 O hipervisor tipo 2 roda sobre um sistema operacional, dito sistema hospedeiro (host), e portanto se assemelha a uma aplicação que roda sobre um determinado sistema operacional para permitir virtualização. Como exemplos, temos Workstation da Vmware, Microsoft Virtual PC e VirtualBox da Oracle. Introdução aos Sistemas Operacionais - www.jairo.pro.br 5/6 Paravirtualização é uma técnica de virtualização que apresenta uma interface de software para máquinas virtuais que é similar mas não idêntica àquela encontrafa direta no hardware. Nesse caso, o sistema operacional virtualizado precisa ser preparado para rodar sobre a máquina virtual. aplicações aplicações aplicações aplicações Windows Server 2003 Windows Server 2008 Linux Red Hat Vmware workstation sistema operacional hospedeiro (host) A técnica de paravirtualização requer que o sistema operacional virtualizado seja explicitamente portado [modificado] para hardware x86 permitir essa execução e com isso obter melhor desempenho que a virtualização total, pois os Fig 5 – Hypervisor tipo 2 drivers executados nas máquinas paravirtualizadas são os drivers reais para os dispositivos físicos, e na virtualização total são drivers emulados. Outros conceitos são virtualização total [full virtualization], onde a máquina virtual é capaz de oferecer todo o hardware que o sistema operacional hospedado [guest] necessita para ser executado de maneira isolada e virtualização auxiliada pelo hardware, quando a própria arquitetura de hardware suporta a execução de máquinas virtuais isoladas. Na virtualização total, todo o hardware sofre uma virtualização para que o sistema operacional hospedado [guest] não precise sofrer nenhuma modificação. E esta é a grande vantagem da virtualização total. 5.1 - Máquina virtual Java A máquina virtual Java [Java Virtual Machine, JVM], é uma aplicação que roda num sistema operacional e que tem por objetivo interpretar as instruções contidas no arquivo ".jar" [aplicação Java]. Nesse arquivo, as instruções estão em bytecode e são resultado da compilação de um programa Java. O objetivo da JVM é tornar a aplicação Java independente tanto do sistema operacional quanto da arquitetura do computador. Em princípio, basta que nesse sistema operacional rode uma JVM que a aplicação Java irá funcionar. Isso economiza portar a aplicação para diferentes sistemas operacionais. aplicação java [bytecode] máquina virtual java kernel hardware Fig 6 – Máquina virtual Java Introdução aos Sistemas Operacionais - www.jairo.pro.br 6/6