# data[].attributes.body
Na década de 1940, um grupo de pesquisadores, dentre eles o matemático húngaro John Von Neumann, desenvolveram no Instituto de Estudos Avançados de Princeton um projeto que revolucionou a programação de computadores.

Eles descobriram que, utilizando dispositivos de memória em formas de linha de retardo de mercúrio, poderiam armazenar instruções de programas nos computadores, não sendo mais necessárias as alterações manuais de interruptores nos hardwares para cada aplicação que desejavam executar, diminuindo assim o tempo consumido no processo e também reduzindo as possibilidades de erro. Desta maneira, dados e programas estavam armazenados, simultaneamente, na memória do computador e os programas apresentavam os resultados imediatamente, dando origem ao Conceito de Programa Armazenado.

# data[].attributes.body
Esta arquitetura se dividia em três pilares: Unidade de Processamento Central, Memória e Dispositivos de Entrada e Saída.

Sistema de Memória (armazenar o resultado final da operação);

Sistema de Entrada e Saída de dados (responsáveis pela comunicação do sistema com o meio externo);

Unidade de Processamento Central, a central de processamento de dados que é subdividida em:

1. Unidade de Controle (UE), responsável gerenciar as outras unidades e determinar as sequência das instruções serem executadas;

2. Unidade de Lógica e Aritmética (ULA), capaz de realizar cálculos lógicos e matemáticos utilizados para processar os dados;

3. Registradores, pequenas memórias e de altíssima velocidade para armazenar dados dentro da própria CPU;

4. Contador de Programa, responsável por avisar a Unidade de Controle qual a próxima instrução a ser buscada e executada.

# data[].attributes.body
Dentro da CPU, as instruções são executadas obedecendo um ciclo de busca, decodificação e execução. A unidade de controle busca a próxima instrução do programa na memória, o contador de programa é utilizado pela unidade de controle para encontrar onde essa instrução está localizada, em seguida decodifica a instrução para uma linguagem que a unidade lógica e aritmética entenda, os operandos de dados requeridos para executar essa instrução são carregados da memória e colocados nos registradores, para finalmente a unidade lógica aritmética executa a instrução e coloca os resultados em registradores ou na memória.

Os componentes desse modelo eram interligados por um sistema de conectores capazes de transmitir os dados de um dispositivo a outro, chamados de barramentos. Esses barramentos são um fator limitante nessa arquitetura, uma vez que o processador consegue processar e enviar os dados numa velocidade maior do que os barramentos e a memória conseguem enviar dados a ele, deixando a CPU em espera por novos dados. A esse fenômeno foi dado o nome de Gargalo de Neumann.

Podemos resumir essa arquitetura em três conceitos básicos:

os dados e as instruções podem ser armazenados em uma única memória;

o conteúdo dessa memória é endereçado pela sua posição, independente do tipo de dados nela contido;

a execução de instruções ocorre de modo sequencial, exceto quando o programa alterar a instrução para a seguinte.

# data[].attributes.body
Esta arquitetura se originou na Universidade de Harvard, com um projeto idealizado por Howard Aiken. Nele não existe o conceito de Programa Armazenado, logo os dados e as instruções estão armazenados em memórias distintas.

Os elementos de interconexão entre o processador e cada umas das memórias também são separados, logo temos barramentos de conexão processador-dados e barramentos de conexão processador-instrução. Logo, as buscas por instruções e por dados acontecem simultaneamente, gerando maior agilidade para os processos.

Além disso, enquanto uma instrução está sendo decodificada, a próxima instrução pode ser lida em paralelo, num processo chamado de pipelininig.

# data[].attributes.body
A fim de evitar ataques cibernéticos, uma equipe de pesquisadores da Universidade de Michigan nos Estados unidos desenvolveu um chip que torna o computador capaz de se defender proativamente. Essa tecnologia criptografa e reorganiza aleatoriamente bits chave de seu próprio código e de seus dados em alta velocidade, impedindo que hackers possam usar oportunidades no controle de fluxo para instalar vírus, espionar e roubar dados.

Das arquiteturas apresentadas anteriormente, a de Harvard seria a mais indicada para aproveitar dessa tecnologia, uma vez que permite maior velocidade ao sistema, entretanto seria possível utilizá-la também na de Von Neumann.