Pesquisar este blog

terça-feira, 17 de março de 2015

Sistema de Memórias e suas características

De acordo com o modelo de Von Neumann , a função da Unidade Central de Processamento (UCP) ou processador é, essencialmente, capturar dados e instruções que compõem um programa e processá-los, não importando sua origem ou destino. Mas para que o processador possa executar os programas, seus dados e instruções devem estar armazenados na memória. Portanto, a memória dos computadores é um elemento indispensável e tão importante quanto a Unidade Central de Processamento (CPU) ou processador. A memória é um dispositivo que permite ao computador armazenar dados de forma temporária ou permanente. Segundo Tanenbaum (2007), a memória é a parte do computador onde os programas e os dados são armazenados. Sem uma memória na qual os processadores (CPU) possam ler ou escrever informações, o conceito de computador digital com programa armazenado não pode ser implementado. Para o funcionamento adequado de um computador, é necessário dispor, nele mesmo, de diferentes tipos de memória. Em algumas tarefas, pode ser fundamental que a transferência de dados seja feita da forma mais rápida possível – é o caso das tarefas realizadas pela CPU, onde a velocidade é fator preponderante, ao passo que a quantidade de bits a ser manipulada é muito pequena. Esse tipo de memória deve possuir características diferentes daquele em que a capacidade de armazenamento é mais importante que a sua velocidade de transferência de e para outros dispositivos. Destacamos que a necessidade da existência de vários tipos de memória ocorre em virtude de vários fatores concorrentes, mas principalmente em função do aumento da velocidade das CPUs (a qual é muito maior do que o tempo de acesso da memória) e da capacidade de armazenamento.
Se existisse apenas um tipo de memória, sua velocidade deveria ser compatível com a da CPU, de modo que esta não ficasse esperando muito tempo por um dado que estivesse sendo transferido. Segundo Patterson e Hannessy (2000), a CPU manipula um dado em 5 ns, ao passo que a memória transfere um dado em 60 ns. Considerando os diversos tipos de memórias existentes, as quais variam em função de sua tecnologia de fabricação, capacidade de armazenamento, velocidade e custo, pode-se dizer que fica muito difícil projetar um computador utilizando-se apenas um único tipo de memória. Dessa forma, segundo Monteiro (2007), o computador possui muitas memórias, as quais se encontram interligadas de forma bem estruturada, constituindo o que é chamado de subsistema de memória, o qual é parte do sistema computacional. O subsistema de memória é projetado de modo que seus componentes sejam organizados hierarquicamente. A Figura 4.1 apresenta uma pirâmide contendo a hierarquia das memórias existentes em um computador. Observa-se que a base da pirâmide é larga, simbolizando a elevada capacidade de armazenamento, o tempo de uso, a velocidade e o custo de sua tecnologia de fabricação. Assim, a base da pirâmide representa dispositivos de armazenamento de massa (memória secundária), de baixo custo por byte armazenado, mas ao mesmo tempo com baixa velocidade de acesso. A flecha na direção do topo indica que quanto mais rápidas forem as memórias, mais elevado será o seu custo em relação à tecnologia e menor a sua capacidade de armazenamento em um computador.
Hierarquia de Memórias.

Computadores e as Várias Camadas de Abstração

Computadores são aparelhos extremamente complexos. Para compreender o seu funcionamento, precisamos entender várias camadas de abstração diferente.
A camada mais baixa de todas é aquela formada por transistores, tensão e corrente elétrica. Quem costuma lidar com esta camada são físicos e engenheiros elétricos. Nesta camada estuda-se o funcionamento de transistores e circuitos sempre levando em conta as propriedades físicas da corrente elétrica.
Uma camada acima, estão as portas lógicas - todas elas compostas por transistores. Neste nível estuda-se como criar estruturas mais complexas combinando-se as diversas portas como AND, OR e NOT para criar estruturas como multiplexadores, flip-flops e somadores. Neste estágio pode-se usar linguagens como o Verilog ou VHDL para programar circuitos.
Subindo mais um nível de abstração, começamos a lidar com estruturas mais complexas como registradores e unidades lógicas aritméticas - todas compostas por muitos flip-flops, somadores e multiplexadores. Vemos como todas essas estruturas realmente geram as instruções de cada máquina e como cada instrução funciona. É neste nível que costuma trabalhar um Arquiteto.
Um nível além, estuda-se como combinar as instruções da camada anterior para realizar comandos mais sofisticados como as operações da lingüagem C e como coordenar o funcionamento de um sistema operacional por meio de interrupções e outros recursos. 
Diagrama que representa o Kernel de um Sistema Operacional sendo usado como um meio de comunicação entre o Software e o Hardware:

Acima desta camada, está o estudo do funcionamento de funções de bibliotecas, APIs e a programação de aplicativos e programas de computador simples.E finalmente, na camada de abstração mais superior está o funcionamento de um programa de computador do ponto de vista do usuário. Como utilizar um aplicativo já criado.

A Lei de Moore

Gordon Earl Moore, hoje com 86 anos.
A lei de Moore surgiu em 1965 através de um conceito estabelecido por Gordon Earl Moore. Tal lei dizia que o poder de processamento dos computadores (entenda computadores como a informática geral, não os computadores domésticos) dobraria a cada 18 meses. Vale frisar que de modo algum Gordon queria se referenciar a sua empresa (Gordon é co-fundador da Intel), pois ele não havia como ter certeza que a empresa conseguiria evoluir em tal ritmo.
Não há como dizer que esta lei vá perpetuar por muito mais tempo, mas até agora ela tem sido válida. Atualmente sabe-se que o computador mais veloz do mundo é o IBM Roadrunner, o qual tem a capacidade de 1,144 petaflops. Se compararmos este número às atividades do ser humano, seria como dizer que nossos órgãos sensoriais calculam as atividades e as realizam com a mesma grandeza.

A comparação supracitada realmente é real, pois em um teste realizado pelo grupo Los Alamos (grupo de pesquisadores que tem parceria com a IBM no projeto do Roadrunner) eles conseguiram realizar em uma simulação o mesmo número de cálculos que nosso cérebro executa durante a audição ou a locomoção. Tais experiências são de suma importância, visto que podem ser de grande ajuda na medicina para auxiliar pessoas com deficiências, e ainda podem auxiliar a ciência para estudar melhor o corpo humano.
A título de curiosidade, o IBM Roadrunner utiliza 6.562 processadores dual core AMD Opteron associados a 12.240 chips da IBM (semelhantes ao processador utilizado no PlayStation 3) e quase 52 TB (TeraBytes) de memória RAM. Alguns cientistas até já prevêem que se a lei de Moore continuar sendo válida, em 2019 teremos um décimo do poder do IBM Roadrunner em nossas casas. Há de se convir que tais números são absurdamente estrondosos e nos levam a pergunta: se a informática continuar a evoluir neste ritmo, aonde iremos parar? Realidades como as dos filmes “Eu, o Robô” ou “O Homem Bicentenário” serão o futuro da humanidade?
                                                                                 Fonte: http://www.tecmundo.com.br/curiosidade/701-o-que-e-a-lei-de-moore-.htm

Níveis de Máquinas

Níveis de Máquinas
Existe um certo número de níveis em um computador (o número exato é discutível), do nível do usuário descendo ao nível do transistor. Descendo a partir do nível mais alto, os níveis se tornam menos abstratos e mais da estrutura interna do computador se torna visível.

Nível 1 ou nível de microprogramação é o verdadeiro nível de máquina, havendo um programa denominado microprograma, cuja função é interpretar as instruções de nível 2. A instrução neste nível é denominada microinstrução.

 Nível 2 ou nível convencional de máquina é o primeiro nível de máquina virtual. A linguagem de máquina deste nível é comumente denominada linguagem de máquina. As instruções são executadas interpretativamente pelo microprograma. Em máquinas que não tenham o nível de microprogramação, as instruções de nível convencional de máquina são executadas diretamente pelos circuitos.

Nível 3 ou nível de sistema operacional apresenta a maior parte das instruções em linguagem de nível 2, um conjunto de novas instruções, organização diferente da memória, capacidade de execução de dois ou mais programas em paralelo. As novas facilidades são realizadas por um interpretador denominado sistema operacional, em execução no nível 2. As instruções de nível 3 idênticas às de nível 2 são executadas diretamente pelo microprograma.

Nível 4 ou nível de linguagem de montagem consiste de uma forma simbólica para uma linguagem de nível inferior. Os programas em linguagem de montagem são traduzidos para uma linguagem de nível 2 ou 3, e, então, interpretados pela máquina apropriada. O programa que executa a tradução é denominado montador.

 Nível 5 ou nível de linguagem orientada para problemas consiste de linguagem de alto-nível. Os programas escritos nessas linguagens são, normalmente, traduzidos para o nível 3 ou 4 por tradutores conhecidos como compiladores.

Os níveis 2 e 3 são sempre interpretados, enquanto os níveis 4 e 5 são, geralmente, traduzidos. As linguagens de máquina dos níveis 1, 2 e 3 são numéricas, ao passo que as dos níveis 4 e 5 são simbólicas, contento palavras e abreviaturas.


O Modelo de Barramento de Sistema

Este modelo é um refinamento do modelo de von Neumann, já que ele possui uma CPU (ALU e controle), memória e uma unidade de entrada/saída (I/O). A comunicação entre os componentes é realizada através de um caminho compartilhado chamado barramento de sistema (bus), constituído do barramento de dados, do barramento de endereços e do barramento de controle. Existe também um barramento de energia e algumas arquiteturas podem ter um barramento de I/O separado.


Modelo de Barramento
Cada barramento consiste de um determinado conjunto de fios interligando os componentes do sistema. Quando dizemos, por exemplo, que um sistema tem 32 bits no barramento de dados, isso quer dizer que existem 32 fios para transmitir dados, e eles estão interligando todas as unidades do computador. Um computador moderno tem, normalmente, três barramentos:
 1. Barramento de Dados - para transmitir dados.

 2. Barramento de Endereços - para identificar onde o dado deve ser lido/escrito. 

3. Barramento de Controle - para coordenar o acesso aos barramentos de dados e endereços, para que não ocorra conflitos (do tipo vários periféricos querendo escrever na memória ao mesmo tempo).


Além disso, o acesso a dispositivos pode ser de duas maneiras. Algumas arquiteturas exigem que os dispositivos sejam mapeados em memória, ou seja, para enviar uma informação a um dispositivo deste tipo, a CPU deve escrever em um (ou mais) endereço(s) de memória específico(s). Para receber informações do dispositivo, a CPU deve ler um (ou mais) endereço(s) de memória específico(s). Outras arquiteturas, mais flexíveis, possuem dois tipos de endereçamento: um endereçamento de memória e outro de entrada e saída (I/O). Neste caso, os dispositivos podem tanto ser mapeados em memória como mapeados em portas de I/O. O uso de mapeamento de dispositivos em portas de I/O permite que todo o endereçamento de memória esteja disponível, de fato, para o acesso à memória.

segunda-feira, 16 de março de 2015

Arquitetura de Von Neumann

John von Neumann.
Introduziu o conceito do computador controlado por programa armazenado e segundo ele todo computador é formado por 5 partes básicas: a memória, a unidade lógica e aritmética, a unidade de controle e os dispositivos de entrada e saída. As operações a serem realizadas pelo computador são definidas pelos dados e instruções do programa carregado na memória.

  • A unidade aritmética e lógica é a parte do computador onde são feitas as operações aritméticas e lógicas com os dados.
  •  O tipo de operação a ser executado é determinado por sinais vindos da unidade de controle. A memória é onde ficam armazenados os dados e instruções que vão ser utilizados pela UAL e pela unidade de controle. Os dados a serem operados são lidos dos dispositivos de entrada para a memória. 
  • Os resultados obtidos são enviados para a memória e daí para os dispositivos de saída de dados. 

Modelo de Von Neumann.

Algumas Definições básicas para compreensão de Arquitetura Computacional

Para se compreender bem a Arquitetura Computacional, alguns conceitos básicos devem ser pontuados, abaixo, segue uma lista desses conceitos fundamentais:


  •  A Arquitetura de Computadores trata do comportamento funcional de um sistema computacional, do ponto de vista do programador (ex. tamanho de um tipo de dados – 32 bits para um inteiro).
  • Processamento de dados: Série de operações que se aplica a um conjuntos de dados (entrada)para obter outro conjunto de dados ou resultados (saída).
  • Processamento eletrônico de dados: É o processamento de dados com a utilização do computador. Diz-se eletrônico pois os computadores atuais são constituídos de componentes eletrônicos. 
  • Informática: Ciência que abrange todas as atividades relacionadas com o processamento automático de informações.
  • Hardware: conjunto de componentes mecânicos, elétricos e eletrônicos com os quais são construídos os computadores e os periféricos.
  •  Software: conjunto de programas, procedimentos e documentação que permitem usufruir da capacidade de processamento oferecida pelo hardware.
  • Programa: Um programa pode ser definido como uma seqüência de instruções que descrevem como executar uma determinada tare
  • Instrução: Uma instrução pode ser definida como um comando para o processado
  • Linguagem de máquina: Linguagem de máquina corresponde ao conjunto de instruções primitivas do computador. Devem ser simples, reduzindo a complexidade e custo dos circuitos.
Existem ainda outras diversas outras definições mas que não serão aqui colocadas por se aprofundarem de mais em determinados assuntos. 

Introdução a Arquitetura de Computadores

É sabido que desde os tempos mais remotos os ancestrais da espécie humana já sentiam a necessidade de calcular, seja para dividir os animais em grupos, definir os limites de suas terras ou repartir a comida. Com o avanço tecnológico da espécie humana a conveniência de poder enumerar objetos ficou mais acentuada e complexa, o que levou a construção dos primeiros numerais, que foram se formando lentamente diariamente, em decorrência da necessidade diária de registrar as contagens. Usou-se os dedos, fez-se marcas na areia ou nas pedras, mas em um determinado momento esse tipo de técnica já não era mais suficiente para cálculos mais complexos.
A mais antiga ferramenta conhecida para uso em computação foi o ábaco, e foi inventado na Babilônia por volta de 2400 a.C. O seu estilo original de uso, era desenhar linhas na areia com rochas. Ábacos, de um design mais moderno, ainda são usados como ferramentas de cálculo.
A primeira máquina de verdade foi construída por Wilhelm Schickard (1592-1635), sendo capaz de somar, subtrair, multiplicar e dividir. Essa máquina foi perdida durante a guerra dos trinta anos, sendo que recentemente foi encontrada alguma documentação sobre ela. Durante muitos anos nada se soube sobre essa máquina, por isso, atribuía-se a Blaise Pascal (1623-1662) a construção da primeira máquina calculadora, que fazia apenas somas e subtrações.
Pascal, que aos 18 anos trabalhava com seu pai em um escritório de coleta de impostos na cidade de Rouen, desenvolveu a máquina para auxiliar o seu trabalho de contabilidade.
A calculadora usava engrenagens que a faziam funcionar de maneira similar a um odômetro.
Pascal recebeu uma patente do rei da França para que lançasse sua máquina no comércio. A comercialização de suas calculadoras não foi satisfatória devido a seu funcionamento pouco confiável, apesar de Pascal ter construído cerca de 50 versões.
O projeto de Pascal foi bastante aprimorado pelo matemático alemão Gottfried Wilhelm Leibniz (1646-1726), que também inventou o cálculo, o qual sonhou que, um dia no futuro, todo o raciocínio pudesse ser substituído pelo girar de uma simples alavanca. 
Todas essas máquinas, porém, estavam longe de serem consideradas um computador, pois não eram programáveis. Isto quer dizer que a entrada era feita apenas de números, mas não de instruções a respeito do que fazer com os números.