Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais e Sistemas Operacionais e Máquinas VirtuaisMáquinas Virtuais Colaboração Profa Valéria Bastos Introdução ● O que é um Sistema Operacional? – É um programa (software) que atua como intermediário entre o usuário e o hardware. – Fornece um ambiente onde o usuário pode executar os programas. – Garante uma utilização eficiente do hardware. – Protege o sistema de computação e os usuários uns dos outros. Sistema Operacional Sistema Operacional Sistema Computacional ● São recursos de hardware: – Tempo de processador (CPU); – Espaço em memória; – Espaço para armazenamento de arquivos; – Dispositivos de entrada e saída; – Dispositivos de comunicação de dados. ● São recursos de software: – Programas utilitários; – Bibliotecas de funções estáticas e dinâmicas; – Rotinas de serviço; – Programas aplicativos; – Programas de interface com dispositivos – drivers. Compartilhamento de Recursos ● O que significa? – Compartilhar recursos significa que diferentes usuários ou programas usam os recursos de forma concorrente. ● Por que ocorre? – Ocorre porque num mesmo computador ou sistema computacional pode-se ter mais de um programa ou mais de um usuário operando ao mesmo tempo. ● Como administrar seu uso? – Os recursos são limitados e, assim, o uso dos mesmos pelos diferentes programas ou usuários precisa ser controlado e administrado de forma a evitar possíveis conflitos. Essa tarefa cabe ao sistema operacional. Visão Simplificada Interface com o Usuário ● Provê facilidades para o usuário: – Acessar o sistema – segurança de acesso; – Criar e gerir diretórios, arquivos e programas; – Executar os programas; – Acessar os dispositivos de E/S; – Acessar o conteúdo dos arquivos; – Detectar erros de execução; – Contabilizar o uso do sistema. Classificação ● Sistema monotarefa: – Admite e gerencia apenas uma tarefa em execução por vez. – Ex: DOS, CP/M ● Sistema multitarefa: – Admite e gerencia vários tarefas em processamento concorrente. – Ex: Windows 98, Windows 2000/NT/XP, Linux. Classificação Classificação ● Sistema monousuário: – admite e gerencia apenas um usuário – não permite que mais de um usuário esteja “logado” simultaneamente ● Ex: Windows 98, Windows NT (exceto versão com Terminal Server) ● Sistema multiusuário: – admite e gerencia vários usuários – permite que mais de um usuário esteja “logado” no sistema simultaneamente. ● Ex: Linux, Windows 2000, VMS Classificação ● Sistemas monoprocessados: – Somente reconhece um único processador; – Multitarefa ou monotarefa; – Ex: Windows 98 ● Sistemas multiprocessados: – Reconhece mais de um processador; – execução simultânea; – Ex: Windows 2000/NT/XP, Linux Classificação ● Sistemas batch: – Os programas são processados em lote, um de cada vez, não havendo interação com o usuário. ● Sistemas time sharing: – Os usuários compartilham o tempo de uso do computador que, em sequência, dedica uma fatia do tempo de processamento para cada usuário. Classificação ● Sistemas de tempo real: – Sistemas que possuem um forte vínculo com o tempo. – O resultado correto deve ser dado no tempo previsto. ● Sistemas embarcados: – Sistemas inseridos em produtos com funções específicas como carros, forno de microondas, equipamentos bélicos, etc. Sistemas de Tempo Real ● Sistema de tempo real pode ser definido como aquele em que o funcionamento correto da aplicação não depende apenas do resultado gerado mas também do tempo em que o mesmo é gerado. ● Tarefa Hard Real Time – Os deadlines são imperativos. Não sendo cumprido os resultados de nada servirão. ● Tarefa Soft Real Time – Os deadlines são desejáveis porém não mandatórios. Sistemas de Tempo Real ● Características – Determinismo – tempo de execução predeterminado (duro ou dentro de um determinado intervalo). – Tempo de resposta – atraso de tempo (latência) necessária para o sistema iniciar o tratamento de uma interrupção – Controle pelo usuário – o usuário tem que ter a possibilidade de determinar o tipo de suas aplicações (soft ou hard), bem como definir a prioridade das mesmas. – Confiabilidade – é muito mais importante em sistemas de tempo real do que em todos as demais modalidades. – Tolerância a falhas – um SO de tempo real é dito estável se na impossibilidade de atender ao deadline de todas as tarefas ativas, garante o atendimento daquelas mais críticas. Sistemas de Tempo Real ● Funcionalidades: – Troca de contexto rápida – Tamanho reduzido – Resposta rápida à interrupções – Multitarefa com funcionalidades de IPC e concorrência – Escalonamento preemptivo com base em prioridade – Minimização dos intervalos em que as interrupções estão desabilitadas – Primitivas para atrasar por um tempo fixo, para suspender ou parar tarefas em execução – Alarmes e timeouts especiais Free RTOS ● O FreeRTOS é um kernel de sistema operacional em tempo real para dispositivos embarcados que foi portado para 35 plataformas de microcontroladores. Ele é distribuído sob a Licença MIT. ● O kernel FreeRTOS foi originalmente desenvolvido por Richard Barry por volta de 2003 e posteriormente desenvolvido e mantido pela empresa de Barry, a Real Time Engineers Ltd. Em 2017, a empresa transferiu a administração do projeto FreeRTOS para a Amazon Web Services (AWS). Barry continua trabalhando no FreeRTOS como parte de uma equipe da AWS. ● O FreeRTOS foi projetado para ser pequeno e simples. Ele é principalmente escrito na linguagem de programação C para facilitar a portabilidade e manutenção. Também inclui algumas funções em linguagem de montagem, onde necessário, principalmente em rotinas de escalonamento específicas da arquitetura. Kernel Monolítico ● Todo o sistema operacional está trabalhando no espaço do kernel. ● O modelo monolítico difere de outras arquiteturas de sistema operacional, como o microkernel, porque ele sozinho define uma interface virtual de alto nível sobre o hardware do computador. ● Um conjunto de primitivas ou chamadas de sistema implementa todos os serviços do sistema operacional, como gerenciamento de processos, concorrência e gerenciamento de memória. ● Drivers de dispositivo podem ser adicionados ao kernel como módulos. ● Carregar módulos dinamicamente (conforme necessário) ajuda a minimizar a quantidade de código em execução no espaço do kernel. Micro Kernel ● Usa uma quantidade quase mínima de software para fornecer os mecanismos necessários para implementar um sistema operacional (SO), tais como gerenciamento de espaço de endereço de baixo nível; escalonamento e comunicação entre processos (IPC). ● O microkernel é normalmente o software em execução no nível mais privilegiado, que geralmente é chamado de modo supervisor ou kernel. ● As funções tradicionais do sistema operacional, como drivers de dispositivo, pilhas de protocolos e sistemas de arquivos, normalmente são removidas do próprio microkernel e executadas no espaço do usuário. Monolítico vs Microkernel Arquitetura do Unix (Monolítico) Arquitetura do Linux (Monolítico) Arquitetura do Windows NT (Híbrido) Máquina Virtual ● Máquina virtual é um termo amplo que é empregado para descrever diversos tipos de implementações que adicionam mais um nível de abstração do hardware, além do sistema operacional. As opções incluem o seguinte: – Soluções baseadas em hardware que fornecem suporte para criação e gerenciamento de máquinas virtuais via firmware. Esses gerenciadores de VMs, que são comumente encontrados em mainframes e servidores de grande a médio porte, são geralmente conhecidos como hipervisores do tipo 0. IBM LPARs e Oracle LDOMs são exemplos. – Software semelhante ao sistema operacional criado para fornecer virtualização, incluindo VMware ESX, Joyent SmartOS e Citrix XenServer. Esses gerenciadores de VMs são conhecidos como hipervisores do tipo 1. Nestes casos não há sistema operacional entre o hipervisor e o hardware. Máquina Virtual – Sistemas operacionaisde uso geral que fornecem funções padrão, bem como funções de gerenciamento de VMs, incluindo Windows Server com HyperV e o Linux com o recurso KVM. Como esses sistemas têm um conjunto de recursos semelhante aos hipervisores do tipo 1, eles também são conhecidos como tipo 1. – Aplicativos executados em sistemas operacionais padrão, mas que fornecem recursos de gerenciamento de VMs para sistemas operacionais convidados. Esses aplicativos, que incluem VMware Workstation e Fusion, Parallels Desktop e Oracle VirtualBox, e são chamados hipervisores do tipo 2. Normalmente o desempenho é menor que os hipervisores do tipo 1 e 0. – Virtualização do ambiente de programação, na qual os gerenciadores de VMs não virtualizam o hardware real, mas criam um sistema virtual otimizado para um processador virtual. Essa técnica é usada pelo Oracle Java e Microsoft.Net. Máquina Virtual ● A ideia fundamental por trás de uma máquina virtual é abstrair o hardware de um único computador (processador, memória, unidades de disco, placas de interface de rede e assim por diante) em vários ambientes de execução diferentes, criando assim a ilusão de que cada ambiente separado está sendo executado em seu próprio computador privado. ● Uma máquina real pode abrigar internamente diferentes ambientes virtuais, cada um simulando uma máquina distinta, com memória, sistema operacional, recursos e processos próprios. Desta forma, cada usuário (ou aplicativo) parece possuir sua própria máquina. ● Uma única máquina física pode, portanto, executar vários sistemas operacionais simultaneamente, cada um em sua própria máquina virtual. Máquina Virtual Máquina Virtual ● Sem algum nível de suporte de hardware, a virtualização seria impossível. ● Quanto mais suporte de hardware disponível em um sistema, mais ricas em recursos e estáveis as máquinas virtuais podem ser e melhor elas podem executar. ● Na família de processadores x86, a Intel adicionou novo suporte à virtualização (as instruções VT-x) em gerações sucessivas a partir de 2005. Hoje em dia, a tradução binária é não é mais necessária. ● A tecnologia de virtualização da AMD (AMD-V) apareceu em vários processadores AMD a partir de 2006, definindo mais dois novos modos de operação – host e convidado – além do modos de usuário e privilegiado usuais. Container ● A containerização de aplicativos não é virtualização, embora forneça recursos semelhantes à virtualização, segregando aplicativos do sistema operacional. Docker, Podman, Oracle Solaris Zones, BSD Jails e IBM AIX WPARs “containerizam” aplicativos, tornando-os mais seguros e gerenciáveis. ● Os containers fornecem isolamento a nível de sistema operacional e compartilham o mesmo kernel do sistema operacional hospedeiro. ● As máquinas virtuais emulam um ambiente completo de hardware e fornecem uma maior separação entre os sistemas operacionais convidados. ● As VMs são mais adequadas para ambientes que exigem isolamento máximo, enquanto os containers são mais leves, rápidos e adequados para empacotar e implantar aplicativos isolados com eficiência. Emuladores ● Emuladores que permitem que aplicativos escritos para um tipo de processador sejam executados em computadores com um tipo diferente de processador. ● A principal diferença entre emuladores e máquinas virtuais é que os emuladores imitam o comportamento e as características de um sistema operacional ou dispositivo específico em um ambiente diferente, enquanto as máquinas virtuais são instâncias isoladas de sistemas operacionais completos em um ambiente virtualizado, compartilhando o mesmo hardware físico. ● Os emuladores são frequentemente usados para executar software antigo em hardware moderno, enquanto as máquinas virtuais são usadas para consolidar servidores, executar vários sistemas operacionais e facilitar a implantação de aplicativos em ambientes virtualizados. Máquina Virtual Java ● No caso do Java, os programas são compilados para o código objeto de um processador virtual e traduzidas em tempo de execução pela JVM (Máquina Virtual Java). ● Isso permite que os programas Java sejam compilados uma vez e executados em qualquer sistema com uma JVM disponível. ● De forma semelhante às máquinas virtuais, a JVM cria um espaço isolado em uma máquina hospedeira.Este espaço pode ser utilizado para executar programas Java independente da plataforma ou sistema operacional da máquina. ● O código Java é primeiro compilado em bytecode para gerar um arquivo de classe. Esse arquivo de classe é então interpretado pela Java Virtual Machine para gerar código compatível com a máquina hospedeira. ● O mesmo arquivo de classe pode ser executado em qualquer versão da JVM em execução em qualquer plataforma e sistema operacional. Componentes da JVM Máquina Virtual Java ● A JVM pode ser implementada em software em cima de um sistema operacional hospedeiro, como Windows, Linux ou MacOS, ou como parte de um navegador da web. ● Alternativamente, a JVM pode ser implementada em hardware em um chip projetado especificamente para executar programas Java. ● Tutoriais Java: https://youtu.be/jnpuRvRdTgI https://youtu.be/Dpuy8WUBq9w https://youtu.be/jnpuRvRdTgI https://youtu.be/Dpuy8WUBq9w Máquina Virtual Java (JVM) Máquina Virtual Python ● Python é uma linguagem interpretada, onde o interpretador traduz o código “bytecode” para o código de máquina do processador do computador hospedeiro. ● Cada computador/sistema operacional possui uma versão específica do interpretador adequada às suas características. ● No Python 3, os arquivos com bytecode são armazenados em um pasta com o nome __pycache__. Máquina Virtual Python ● A máquina virtual python possui uma instrução com 16 bits, sendo 8 reservados para o opcode e 8 para o parâmetro. ● Se o parâmetro necessitar de mais um byte ele pode ser estendido até a quantidade de bytes necessária colocando-se um valor especial de parâmetro. ● Como pode-se observar é uma máquina com ordenação “little-endian”, cujas instruções em linguagem de máquina são bastante sofisticadas. https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d Máquina Virtual Python ● A abordagem utilizada pelo Python é semelhante à adotada pelo Java. ● Existe até uma maneira de traduzir programas Python em código de byte Java para a Java Virtual Machine (JVM) utilizando o programa Jython. ● Mas em python não precisamos compilar o programa manualmente, isso é feito automaticamente ao se invocar o interpretador. ● Sempre que um programa Python é chamado, verifica-se se existe uma versão compilada com o sufixo .pyc. Se tal arquivo existir, o interpretador carregará o código de bytes, o que acelerará o tempo de execução do programa. ● Se não existir uma versão bytecode mais recente, o código fonte será então compilado e um arquivo bytecode gerando antes da execução do programa. Python bytecode Máquina Virtual Python ● Finalmente, o seu programa ser executado não é uma característica da linguagem: trata-se da implementação da linguagem. ● A descrição apresentada foi do funcionamento do CPython, a implementação usual do Python, assim chamada porque é escrito em C. ● PyPy é outra implementação, usando um compilador JIT para executar o código muito mais rápido do que o CPython. ● O código-fonte .py é primeiro compilado para código de byte como .pyc. Este código de byte pode ser interpretado (CPython oficial) ou compilado por JIT (PyPy). https://thenewstack.io/mit-created-compiler-speeds-up-python-code/ Comparação de Desempenho https://medium.com/starschema-blog/jit-fast-supercharge-tensor-processing-in-python- with-jit-compilation-47598de6ee96
Compartilhar