TIPOS DE MEMÓRIAS

13 Agosto 2008

INTRODUÇÃO

A memória é um dispositivo que permite ao computador armazenar dados por certo tempo. Atualmente o termo é geralmente usado para definir as memórias voláteis, como a RAM, mas seu conceito primordial também aborda memórias não voláteis, como o disco rígido. Parte da memória do computador é feita no próprio processador; o resto é diluído em componentes como a memória RAM, memória cache, disco rígido e leitores de mídias removíveis, como disquete, CD e DVD.

Nos computadores modernos, cada posição da memória é configurado para armazenar grupos de oito bits (chamado de um byte). Cada byte consegue representar 256 números diferentes; de 0 a 255 ou de -128 a +127. Para armazenar números maiores pode-se usar diversos bytes consecutivos (geralmente dois, quatro ou oito). Quando números negativos são armazenados, pode ser utilizada a notação de complemento para dois.

A memória do computador é normalmente dividida entre primária e secundária, sendo possível também falar de uma memória “terciária”.

Memória primária

A memória primária é aquela acessada diretamente pela Unidade Lógica e Aritmética. Tradicionalmente essa memória pode ser de leitura e escrita (RAM) ou só de leitura (ROM). Atualmente existem memórias que podem ser classificadas como preferencialmente de leitura, isso é, variações da memória ROM que podem ser regravadas, porém com um número limitado de ciclos e um tempo muito mais alto.

Normalmente a memória primária se comunica com a ULA por meio de um barramento ou canal de dados. A velocidade de acesso a memória é um fator importante de custo de um computador, por isso a memória primária é normalmente construída de forma hierárquica em um projeto de computador. Parte da memória, conhecida como cache fica muito próxima à ULA, com acesso muito rápido. A maior parte da memória é acessada por meio de vias auxiliares.

Normalmente a memória é nitidamente separada da ULA em uma arquitetura de computador. Porém, os microprocessadores atuais possuem memória cache incorporada, o que aumenta em muito sua velocidade.

Memória RAM

A memória RAM (Random Access Memory) é uma seqüência de células numeradas, cada uma contendo uma pequena quantidade de informação. A informação pode ser uma instrução para dizer ao computador o que fazer. As células podem conter também dados que o computador precisa para realizar uma instrução. Qualquer célula pode conter instrução ou dado, assim o que em algum momento armazenava dados pode armazenar instruções em outro momento. Em geral, o conteúdo de uma célula de memória pode ser alterado a qualquer momento.

As memórias RAM são denominadas genericamente de DRAM (RAM dinâmica), pelo fato de possuírem uma característica chamada refrescamento de memória, que tem a finalidade de manter os dados armazenados enquanto o computador estiver ligado. O tamanho de cada célula, e o número de células, varia de computador para computador, e as tecnologias utilizadas para implementar a memória RAM variam bastante. Atualmente o mais comum é a implementação em circuitos integrados.

TIPOS DE MEMÓRIA RAM

  • SRAM: Static RAM

- Célula de memória utiliza flip-flop para armazenar bit.

- Necessita de 6 transistores.

- Retém dados durante o tempo em que a fonte de energia permanecer ativa.

  • DRAM: Dynamic RAM

- Célula de memória utiliza transistor MOS e capacitor para armazenar bit.

- Mais compacta do que a SRAM.

- Renovação (“refresh”) é necessário: células são renovadas quando lidas.

- Taxa de renovação típica é de 15.625 ms.

- Acesso mais lento do que a SRAM.

  • PSRAM: Pseudo-static RAM

- DRAM com controlador de renovação de memória embutido.

- Alternativa de baixo custo e alta densidade quando comparada à SRAM.

  • NVRAM: Nonvolatile RAM

- Retém dados após a fonte de energia ser desligada.

- RAM com bateria (“Battery-backed RAM”).

– SRAM com bateria permanentemente conectada.

– Escrita é tão rápida quanto a leitura.

– Sem limite para o número de escrita, ao contrário das memórias não voláteis ROM.

Memória ROM

A memória ROM (Read-Only Memory) é uma memória que só pode ser lida e os dados não são perdidos com o desligamento do computador. A diferença entre a memória RAM e a ROM é que a RAM aceita gravação, regravação e perda de dados. Mesmo se for enviada uma informação para ser gravada na memória ROM, o procedimento não é executado (esta característica praticamente elimina a criação de vírus que afetam a ROM).

Um software gravado na ROM recebe o nome de firmware. Em computadores da linha IBM-PC eles são basicamente três, que são acessados toda vez que ligamos o computador, a saber: BIOS, POST e SETUP.

Existe uma variação da ROM chamada memória preferencialmente de leitura que permite a regravação de dados. São as chamadas EPROM (Era sable Programmable Read Only Memory) ou EEPROM (Electrically Erasable Programmable Read-Only Memory).

TIPOS DE MEMÓRIA ROM

  • OTP-ROM: One-time programmable ROM

    - As conexões são programadas pelo usuário.

  • Usuário define o arquivo especificando o conteúdo da ROM.

  • Arquivo é inserido na máquina denominada ROM programmer.

  • Cada conexão programável corresponde a um ponto fundido.

  • ROM programmer rompe os pontos fundidos onde a conexão não deve existir

– Habilidade de escrita muito baixa

  • Escrita uma única vez; necessita do dispositivo de programação da ROM

– Retenção de informações muito alta

  • Os bits armazenados permanecem, a menos que o programador seja usado para romper mais conexões

– Comumente utilizado em produtos finais

  • Barato, dificilmente é modificado acidentalmente

  • EPROM: Erasable programmable ROM

– O componente programável é um transistor MOS

  • Transistor possui um gate flutuante cercado por um isolante

  • (a) Cargas negativas formam um canal entre a fonte e o dreno armazenando o nível lógico 1

  • (b) Aplicação de uma grande tensão positiva no gate faz com que cargas negativas saiam do canal e sejam presos pelo gate flutuante, armazenando o nível lógico 0

  • (c) (Erase) Raios de UV incidentes na superfície do gate-flutuante causam o retorno de cargas negativas para o canal a partir do gate flutuante, restaurando o nível lógico 1

  • (d) O integrado de uma EPROM possui uma janela de quartuz, material transparente a radiação UV

– Habilidade de escrita alta

  • Pode ser apagada e reprogramada centenas de vezes

– Baixa retenção de informações

  • Programa pode permanecer por 10 anos, porém é susceptível à radiação e àos ruídos elétricos

– Tipicamente, utilizado durante o desenvolvimento do projeto

  • EEPROM: Electrically erasable programmable ROM

    - Programada e apagada eletronicamente

  • Tipicamente, utilizando-se uma tensão maior do que a de operação normal

  • Pode-se programar e escrever palavras individuais

– Habilidade de escrita ainda maior

  • Pode-se programá-la no sistema através de circuitos embutidos que geram tensões maiores do que as normais

  • Controladores de memória embutidos tornam operações transparentes para o usuário da memória

  • Escrita é lenta, pois antes é preciso apagar (ou limpar) o conteúdo

  • Pinos “busy” indicam ao processador que a EEPROM ainda está sendo escrita

  • Pode ser apagada e escrita dezenas de milhares de vezes

– Retenção de informação comparável à das EPROMs (aproximadamente 10 anos)

– Muito mais convenientes do que as EPROM’s, porém mais caras


Burlando Encapsulamento

25 Julho 2008

Na linguagem C++ é possível burlar o encapsulamento de dados com o uso de ponteiros, diferentemente de como ocorre em Java já que nessa não é possível a manipulação direta de ponteiros.

Exemplificamos abaixo uma maneira de fazer o descrito acima:

Classe Arquitetura:

#include <iostream>

class Arquitetura

{

private:

int a;

public:

Arquitetura(int v){a = v;}

int* endereco(){return &a;}

int getA(){return a;}

};

Método Principal

#include <iostream.h>

#include “Arquitetura.h”

int main(){

int* p;

Arquitetura o(3);

p = o.endereco();

*p = 10;

cout << o.getA() << endl;

return 0;

}

Na classe Arquitetura é declarada uma variável com visibilidade private de tipo inteiro, variável esta que não é possível fazer o acesso por causa da visibilidade, mas através de aritmética de ponteiros acessaremos a variável e modificaremos seu valor; o método endereço retorna o endereço da variável private ‘a’; o método getA retorna o valor da variável ‘a’; e o construtor da classe seta o valor default da variável ‘a’.

No método principal declaramos o ponteiro de inteiros ‘p’ que receberá o endereço da variável ‘a’ através do método endereço da classe Arquitetura; após o ponteiro ‘p’ receber o endereço da variável ‘a’ modificamos o valor para o qual ‘p’ aponta para 10 e posteriormente imprimimos a variável ‘a’ através do método getA que retornará 10. Dessa forma mostramos que é possível modificar o valor de uma variável de visibilidade private em outra classe.


Hardware do Multiplicador em Ponto Flutuante

16 Julho 2008

1º) Soma os expoentes dos dois números (Utilizando o somador)

2º) Multiplica os significandos , isto é, multiplica as frações dos dois números(Utilizando a ULA)

3º) Normaliza o expoente e a fração, se for preciso, deslocando a fração para direita e incrementando o expoente. (Utilizando Incremento e Deslocando para direita)

4º) Arredonda o significando(expoente e fração) para o número correto de bits.(Utilizando Hardware do Arredondamento)

5º) Se está normalizado vai para fase 7 senão vai para fase 6.

6º) O controle seta os mutiplexadores de forma que o valor que sai do hardware do arredondamento passe novamente pelos hadwares Incremento e Deslocando para direita e posteriormente volta para o hardware do arredondamento. Depois volta para fase 5.

7º) Define o sinal do produto para positivo se os sinais dos operandos originais forem iguais, se forem diferentes, torna o sinal negativo.(Utilizando o xor)

8º) Finaliza a operação colocando os valores no novo registrador.


Little-endian x Big-endian

16 Junho 2008

Na verdade, não existe tal coisa. Embora muitos tenham tomado parte de um lado ou do outro, tanto little-endian e big-endian são representações que têm vantagens e desvantagens.

Para a little-endian, as instruções da linguagem assembly que trabalham com diferentes números de comprimento (1, 2, 4 bytes) procede da mesma maneira em primeiro pegar o byte menos significativo, no endereço base +0 e indo para o byte mais significativo.

Já a representação big-endian, não importa quão longo é o número, você pode testar rapidamente se é positivo ou negativo, verificando o byte base no endereço 0 (o byte mais significativo). A maior parte dos códigos de rede bitmap e gráficos são mapeados em representações big-endian . Em uma máquina big-endian, os armazenamentos são automaticamente cuidados com relação a arquitetura, mas na máquina little-endian, existe a necessidade de inverter a ordem de byte elementos que são armazenados em mais de um byte. Além disso, é mais fácil de ler textos hexadecimal.

Ordenação em diferentes arquiteturas

As seguintes arquiteturas uso:

  • Little-endian:
    • Intel x86 Intel x86
    • AMD64
    • DEC VAX DEC VAX
    • MOS Technology 6502 Tecnologia MOS 6502
  • Big-endian
    • Sun SPARC Sun SPARC
    • Motorola 68000 Motorola 68000
    • POWER PC Power PC
    • IBM System/360 IBM System/360
  • Bi-endian, rodando em modo big-endian por default:
    • MIPS running IRIX PA-RISC
    • Most POWER and PowerPC systems
  • Bi-endian, rodando em modo little-endian por default:
    • MIPS running Ultrix
    • most DEC Alpha
    • IA-64 running Linux


Computação nas Nuvens

13 Maio 2008

Nos próximos anos deveremos ouvir muito os termos “computação nas nuvens“, “cloud computing” e SaaS – Software-as-a-Service“. O conceito é claro, cada vez mais as informações estarão disponíveis e mais pessoas terão acesso a essas informações, graças à disponibilização de muitos serviços on-line, muitos gratuitamente, e que devem baratear o preço dos computadores, inclusive, aumentando a presença on-line de pequenas empresas e fornecedores de serviços.

O conceito não é novo para quem trabalha com internet, mas ganha cada vez mais destaque com declarações da Google estar trabalhando na sua “computações nas nuvens”. O termo refere-se à possibilidade de utilizarmos computadores menos potentes que podem se conectar à Web e utilizar todas as ferramentas on-line, seguindo o exemplo que o Google propõe com o Google Docs, Gmail e tantas outras aplicações. Assim, o computador seria simplesmente uma plataforma de acesso às aplicações, que estariam em uma grande nuvem – a Internet.

Vale lembrar, que como o termo não é nada novo, já existem vários sites que são praticamente sistemas operacionais on-line, além de muitos serviços que disponibilizam ferramentas fantásticas on-line. Exemplo recente da Adobe, que disponibilizou uma versão on-line do Photoshop.

O Jornal da Globo fez uma reportagem tentando explicar o conceito e, ao visitar a sede do Google em Mountain View tornou-se a primeira equipe de TV sul-americana a conversar com Eric Schmidt – CEO do Google. Na conversa, Eric falou que o Google compra novas empresas na proporção de uma por semana e, ao ser perguntado sobre uma possível aquisição do Yahoo!, respondeu que não há planos de comprar gigantes, mas sim de pequenas empresas que oferecem serviços “revolucionários”.

Eric também “alfinetou” a Microsoft, falando que não tem medo da empresa de Bill Gates e que a empresa deve sofrer com a concorrência da “computação nas nuvens” que deve crescer nos próximos anos e ir totalmente contra o conceito aplicado até hoje pela Microsoft. Segundo ele, o futuro está na internet, daí o interesse da Microsoft adquirir o Yahoo!.

Eric completou que o Google está trabalhando para esta “computação nas nuvens”, mostrando que a empresa tem interesse em disponibilizar cada vez mais informações e torná-las cada vez mais acessíveis, seguindo o lema da empresa e, lógico, ganhando mercado e fazendo dinheiro com este público sedento por informações.

Assista a reportagem realizada pela Globo dentro do GooglePlex:

Link


Compilador

13 Maio 2008

O compilador tem como função traduzir um programa de linguagem fonte (alto nível) para uma linguagem de máquina (baixo nível). Porém nesta  tradução existem estágios intermediários até chegar em linguagem de máquina para ser executada pelo processador. Esses estágios são:

1º) Edição: É o estágio onde o programador constrói sua linguagem (fonte) de alto nível em um editor qualquer e salva em uma terminação padrão da linguagem adotada. Ex em c++:.cpp;.C; etc.

2º) Pré-Processador: Antes de compilar o código fonte, este passa por um pré-processador que obedece à comandos chamados de diretivas de pré-processador (que em c++ são iniciados por #), que indicam que certas manipulações devem ser feitas antes da compilação. Exemplo em c++:

#define area_quadrado(x) (x*x)

Então o comando:

area = area_quadrado(2);

Vai ser traduzido para:

area = (2*2);

Daí então passa para fase de compilação.

3º) Compilação: Nesta fase o programa fonte já pré-processado é transformado em um arquivo objeto (.o) que já contém todo programa em binário. Neste processo, no caso c++, antes de passar para o “.o” é traduzido para código assembly para depois, utilizando um montador, ser passado para programa objeto (.o).

4º) Linkagem: O código objeto não é executado diretamente depois de traduzido, visto que em um programa pode-se ocorrer referências a outros programas ou dados, os quais se encontram em outros programas, ou em bibliotecas. Então nesta etapa um editor (linkeditor) tem como função juntar esses códigos traduzidos separadamente em um único módulo que seria um programa executável. Portanto se um programa for traduzido e linkado corretamente será gerado um executável.

5º) Carregamento: Antes que um programa possa ser executado, ele deve ser armazenado na memória principal. Portanto esta fase tem como função colocar o programa em memória principal.

6º) CPU: Por fim, o computador, sob controle da CPU executa uma instrução por vez.