Simuladores de sistemas de computadores - eles parecem realidade

Em uma linguagem simples e acessível sobre termos básicos do campo de simuladores, bem como tipos e níveis de detalhe de modelos. Material para familiarização fácil e rápida com esta área.

imagem

Se me perguntassem sobre a simulação há algum tempo, a primeira coisa que me ocorreria seria meu filho, que fala sobre seu estômago doente na véspera do controle da escola. No entanto, nos últimos dez anos, tenho trabalhado com simuladores de vários sistemas de computadores, de telefones a servidores baseados em microprocessadores, SOCs (System-On-Chip) e chipsets de um dos maiores fabricantes (infelizmente, o nome está sob o NDA), e minha ideia de A simulação mudou. Mas as primeiras coisas primeiro.

Tenho certeza de que muitos de vocês já se depararam com simuladores, que costumam ser chamados de máquinas virtuais, hipervisores. Alguém instala o Parallels Studio em seu Mac para executar o Windows no MacOS, alguém usa um produto do VmWare - Workstation para ter outro sistema operacional (SO) em execução no interior já instalado. Quem conhece o Linux prefere o KVM e o QEMU. Também popular entre as pessoas é o VirtualBox. As pessoas que desenvolvem profissionalmente hardware baseado em FPGA (circuitos integrados de lógica programável) conhecem o VCS da Synopsys e da Mentor Graphics Questa. E, no entanto, isso é apenas uma pequena parte do que pode ser chamado de simuladores.

O que é um simulador?


Um simulador é um modelo, geralmente um software, dispositivo real. Por conseguinte, a simulação é um processo desse modelo que repete a operação do dispositivo.

Em princípio, você pode criar um modelo de qualquer dispositivo, mas os mais comuns são simuladores de dispositivos de microprocessador, ou seja, dispositivos cujo componente central é um microprocessador, e o restante da lógica já está sendo construído em torno dele. Um dos principais usos do simulador é o lançamento de programas projetados para esse microprocessador. Ao mesmo tempo, o uso de um dispositivo real é difícil por um motivo ou outro, por exemplo, ele pode simplesmente ainda não existir, se estivermos falando sobre modelar a futura geração de microprocessadores.

Airbnb em simulação - convidado e anfitrião


O código executado no simulador é chamado de "código convidado", pode ser um "programa convidado" ou todo o "sistema operacional convidado". O próprio sistema simulado é simplesmente chamado de "convidado". Por sua vez, o sistema, o computador em que o simulador é executado, é chamado de "host" (host em inglês) e o sistema operacional em execução no host em que o simulador é executado é chamado de "SO do host".

imagem

Assim, podemos dizer que um simulador que implementa um determinado conjunto de instruções do sistema convidado as simula usando as ferramentas do sistema host disponíveis.

Simulação e emulação - qual o nome correto?


O modelo pode repetir o dispositivo com vários graus de precisão e detalhes. Freqüentemente, essa é uma simulação apenas do comportamento externo do sistema disponível para o código do programa. O código não se importa com o modo como exatamente essa ou aquela instrução do processador é implementada - o principal é que funciona. Esta versão da simulação é comum, não é difícil de desenvolver e é bastante rápida, não diminui a velocidade mesmo em computadores de usuários comuns.

No entanto, isso não é suficiente se queremos saber, por exemplo, quanto tempo o programa será executado em hardware real. Isso requer modelagem não apenas do comportamento externo, mas também uma repetição da estrutura interna e lógica do trabalho. Isso também pode ser feito com vários graus de detalhes e precisão. É mais correto chamar esses modelos de emuladores, que realmente emulam o dispositivo, e não "simular" os resultados.

Criar emuladores é muito mais complicado devido à maior quantidade de funcionalidades que devem ser implementadas no modelo. Eles também funcionam muito mais lentamente em comparação com simuladores do comportamento externo do dispositivo. Com os emuladores, não estamos falando de iniciar o Windows - pode levar anos. Ninguém está envolvido na criação de um emulador de software de toda a plataforma - é muito longo e caro. Em vez disso, os componentes individuais do sistema são emulados, como o mesmo processador central, e apenas parte do processo de simulação é iniciada nele. Vários esquemas híbridos são possíveis, quando parte do simulador é um modelo de alto nível, parte é um modelo de baixo nível, parte é de um FPGA e parte é realmente um pedaço de ferro real.

imagem

4 níveis de detalhe da simulação


Como escrevi acima, a opção mais comum é a simulação no nível das instruções do processador, o chamado ISA (Instruction Set Architecture) ou, mais precisamente, o resultado de sua execução, ou seja, sem emular toda a lógica interna de como isso acontece em um processador real e sem levar em conta o tempo de execução de várias instruções. Tais simuladores também são chamados funcionais. É assim que o VirtualBox, a VMware Workstation, a Wind River Simics, a KVM e a QEMU funcionam. Isso permite que você, convenientemente, sem ações adicionais desnecessárias, execute programas projetados para o dispositivo simulado. Em outras palavras, nem a recompilação nem quaisquer outras manipulações com programas em execução são necessárias. Nesses casos, eles dizem que é possível executar código binário não modificado.

Se falamos de um nível mais alto de abstração, essa será a implementação de uma certa ABI (Application Binary Interface). Em poucas palavras, a ABI descreve uma interface binária para a interação de dois programas - geralmente um programa de usuário e uma biblioteca ou sistema operacional. A ABI cobre convenções de chamada (como passar parâmetros e retornar valores), tamanhos de tipos de dados, fazer chamadas do sistema. Como funciona? Por exemplo, se um programa escrito para Linux precisar criar um encadeamento adicional (a partir do encadeamento em inglês) para execução, a função pthread_create () será chamada. Mas e se você criar uma biblioteca com essa função no Windows e implementar os mecanismos necessários para vincular o aplicativo e a biblioteca (vinculação dinâmica)? Nesse caso, será possível executar aplicativos Linux no Windows. O Windows "simula" o Linux.Isso é exatamente o que foi feito no subsistema Windows para Linux no Windows 10, que permite executar aplicativos Linux binários não modificados no Windows.

Agora vamos ver como são os níveis detalhados e de nível inferior da simulação. Esse será o nível da microarquitetura em que algoritmos internos reais e blocos de processador são simulados, como um decodificador de instruções, filas, uma unidade de processamento extraordinária, um preditor de transição, um cache, um planejador e os próprios dispositivos de contagem. Essa modelagem nos permite analisar a velocidade real da execução do programa e, por exemplo, otimizá-los para arquiteturas existentes. E no caso de simular protótipos de microprocessadores futuros, é possível prever e avaliar o desempenho desses dispositivos.

Abaixo do nível da simulação microarquitetônica, está o nível de emulação dos elementos lógicos dos quais os chips modernos são feitos. Esses emuladores são software e hardware usando FPGAs. A lógica do FPGA é descrita usando RTL (Register Transfer Level) nos idiomas Verilog, VHDL, etc. Após a compilação, é obtida uma imagem (fluxo de bits), que é então lançada no FPGA. E para isso, não é necessário usar um ferro de soldar e entender a engenharia elétrica. A placa está conectada a um computador, por exemplo, via interface USB ou JTAG, e um software especial do fabricante da placa FPGA realiza a gravação. O custo dessas placas começa entre dez dólares, para as opções mais simples, e milhões de dólares para placas FPGA grandes, do tamanho de um gabinete usado em grandes empresas fabricantes de chips.Nessas empresas, a simulação de FPGA é o estágio final antes da RTL ser colocada em produção.

Se estamos falando de dispositivos simples, e tendo a imagem FPGA em mãos, você pode entrar em contato com empresas especializadas que farão um dispositivo real (não FPGA) com lógica programada.

A figura abaixo mostra os níveis de simulação descritos.

imagem

Além desses níveis de simulação, eu também tive que lidar com simuladores híbridos. De fato, eles são simuladores conectados entre si, modelando diferentes partes do sistema em diferentes níveis. Por exemplo, você precisa analisar a largura de banda de uma nova placa de rede que funcione em conjunto com o driver que está sendo desenvolvido para um sistema operacional específico. Esse dispositivo de rede, assim como vários dispositivos relacionados, pode ser implementado primeiro no nível microarquitetural para análise preliminar e, em seguida, no FPGA, no nível dos elementos lógicos, para verificações finais. Ao mesmo tempo, o restante do sistema, que está envolvido apenas parcialmente, é implementado no nível da instrução. Você não pode ficar sem ele, pois é necessário, por exemplo, carregar o sistema operacional e não faz sentido implementá-lo em um nível mais baixo e mais complexo.

Então, que tal comparar simuladores e realidade?

Como agora está claro, não há tarefa de tornar este ou aquele simulador o mais semelhante possível à realidade. Há uma tarefa colocada pelos negócios, e a simulação é realizada com o grau de "semelhança" com a realidade, que é minimamente suficiente para resolver esse problema, sem desperdiçar tempo e dinheiro extra. Em um caso, pode ser uma biblioteca simples que implementa a interface binária necessária (ABI) e, no outro, um simulador microarquitetônico detalhado não pode ser dispensado.

Esta é a informação mais básica sobre o que são simuladores e o que são. No próximo artigo, descreverei os detalhes da implementação de simuladores de plataforma completa, modelos de batida e trabalho com trilhas.

All Articles