domingo, 26 de julho de 2015

Hardcore Devel #24 - Simulando x Emulando

Fala galera, estamos com mais um Hardcore Devel e hoje vamos separar doi conceitos que, embora diferentes, sejam muito parecidos, fazendo com que haja uma certa confusão ao se falar nesse assunto.


E é por isso que nós cavamos nos conceitos das coisas.

E pensar que eu achei a imagem desse cachorro no site de um pastor...

Então vamos lá. Todo mundo já usou um emulador de alguma coisa na vida, e todo mundo já passou por um simulador de qualquer coisa na vida. A experiência é bem parecida, a única diferença que parece existir é que emulação é replicar uma coisa eletrônica em outra coisa eletrônica, e simulação parece ser replicar uma coisa real usando alguma coisa eletrônica.

Só que não é bem assim, até porque as pessoas já devem ter pedido pra você simular alguma coisa no computador. Provavelmente você pode acabar tendo construído um emulador ao invés de um simulador sem mesmo saber isso.

Então qual e a maldita diferença?

Não é tão complicada assim. Na verdade os conceitos estão ligados com o nível de fidelidade de representação da coisa, um está mais próximo do que a coisa realmente é e o outro só faz uma abstração dos acontecimentos possíveis. Já sacou qual é um e qual é o outro? Não!? Então a gente te dá uma força.

Emulação é quando você tenta representar as coisas fielmente. o mais próximo possível do que elas realmente são. Se ao pensar os acontecimentos, você pensa nas transformações pelas quais as coisas tem de passar para atingir um outro determinado estado, você está pensando em emulação. Não é a toa que existem emuladores e não simuladores de consoles. Isso é porque você tem que fazer uma representação quase fiel do que aconteceria nos circuitos do console no seu programa, pois os arquivos que os emuladores lêem, são justamente os códigos dos processadores daqueles dispositivos, ou pelo menos alguma coisa muito similar.

Simulação é quando você não está interessado em toda a transformação das coisas e sim nos estados delas. O nível de abstração das coisas em uma simulação é bem maior do que em uma emulação. Simular um processador não implica em você criar registradores virtuais para fazer com que representações dos seus sinais elétricos façam a sua máquina virtual rodar. Na simulação o máximo que você vai ter é um evento que pode trocar o estado de um objeto, mas você não vai estar interessado em como essa transformação se processa.

Ainda tá difícil. Vamos pegar um exemplo então. Suponha que queiramos emular como uma máquina faz uma soma de 32 bits. Os operandos são 2 + 2.

Toda essa especificação é necessária, pois um computador quando faz uma soma, faz essa soma bit a bit e geralmente guarda esse valor em algum lugar. Fora todo o processo de ter que buscar operandos na memória e coisa e tal.

Um simulador não. O simulador não vai se importar muito em como os operandos chegam para fazer a soma. ele simplesmente sabe que uma soma foi feita, e que agora estamos buscando a próxima instrução. Mudou o estado da máquina e executou a ação, e dane-se como essa ação é executada.

Os propósitos para os quais eles são construídos em geral são diferentes. Emuladores são feitos justamente para replicar coisas antigas em coisas novas, por exemplo, ou até mesmo para verificar comportamento de algumas coisas antes do lançamento das mesmas. Simuladores são feitos quando você está mais interessado em medir quantidades ou analisar evolução de algumas coisas no tempo.

- Ah, mas e aqueles simuladores de parque de diversão?

Ora, aquilo é um simulador porque ele não pode recriar e controlar todo o ambiente para causar o impacto que o criador gostaria de causar. Especialmente cenas pós-apocalípticas ou viagens espaciais ou quaisquer coisas do tipo. O único objetivo é rir das caras que você faz conforme as ilusões são projetadas, ou pelo menos é pra isso que eu acho que serve aquela telinha que fica do lado de fora.



Imagens:
www.chrisduran.com.br


Nenhum comentário:

Postar um comentário