• Nenhum resultado encontrado

Armazenamento de dados

1.1 Bits e seu armazenamento

Os computadores representam a informação por meio de padrões de bits. Um bit (dígito binário) pode assumir os valores 0 e 1, os quais, por enquanto, consideraremos como meros símbolos, sem signi- ficado numérico. Na verdade, veremos que o significado de um bit varia de uma aplicação para outra. Algumas vezes, os padrões de bits são usados para representar valores numéricos e, em outras, para representar caracteres ou outros símbolos; também podem representar imagens ou sons. Armazenar um

bit em um computador exige a presença de um dispositivo que possa assumir dois estados, como, por

exemplo, um interruptor (ligado ou desligado), um relé (aberto ou fechado), ou um sinalizador de ban- deira (erguida ou abaixada). Um dos estados representa 0 e o outro, 1. Nosso objetivo é estudar as formas como os bits são armazenados nos computadores modernos.

Portas lógicas (gates) e flip-flops

Começamos introduzindo as operações AND (e), OR (ou) e XOR (ou exclusivo), conforme es- quematizado na Figura 1.1. Estas operações são semelhantes às operações aritméticas de produto e de soma, por operarem sobre um par de valores (as entradas da operação) e produzirem um terceiro valor, o resultado (saída) da operação. Entretanto, note-se que os únicos dígitos manipulados pelas operações AND, OR e XOR são 0 e 1; estas operações atuam conceitualmente sobre os valores TRUE (verdadeiro) e FALSE (falso) — 1 para verdadeiro, 0 para falso. Operações que manipulam valores verdadeiro/falso são chamadas operações booleanas, em homenagem ao matemático George Boole (1815-1864).

A operação booleana AND reflete a verdade ou falsidade de uma expressão formada combinando duas expressões menores por meio da conjunção and. Estas expressões apresentam a forma genérica

P AND Q

onde P representa uma expressão e Q, outra. Por exemplo,

Caco é um sapo AND Senhorita Pig- gy é uma atriz.

Os dados de entrada para a operação AND representam a verdade ou falsidade dos compo- nentes da expressão composta e a saída, a verda- de ou falsidade da expressão composta. Como uma expressão da forma P AND Q só é verdadei- ra quando os seus dois componentes são verda- deiros, concluímos que 1 AND 1 resulta em 1; as demais situações resultariam em 0, de acordo com a Figura 1.1.

De modo semelhante, a operação OR está baseada em expressões compostas da forma

P OR Q

onde, novamente, P representa uma expressão e

Q, outra. Tais expressões são verdadeiras quando

pelo menos um dos componentes é verdadeiro, o que concorda com o conceito da operação OR, descrito na Figura 1.1.

Não há uma conjunção no idioma inglês* que expresse o significado da operação XOR. O resulta-

do, ou seja, a saída da operação XOR será 1 quando uma de suas entradas for verdadeira e a outra, falsa. Por exemplo, uma declaração da forma P XOR Q significa “P ou Q, mas não ambos”.

A operação NOT é outra operação booleana. Difere das operações AND, OR e XOR por apresentar uma única entrada. O valor da sua saída é o oposto da entrada: se o dado de entrada da operação NOT for verdadeiro, a saída será falsa, e vice-versa. Assim, se a entrada da operação NOT representar a veracida- de** da afirmação

Fozzie é um urso,

então sua saída representará a veracidade** da afirmação oposta:

Fozzie não é um urso.

*N. de T. Em português, também não. Aqui cabe uma observação similar para a saída da operação NOT.

**N. de T. Neste ponto, o termo veracidade está sendo empregado no sentido de que, se a afirmação em questão for verdadeira, o valor da entrada da operação NOT será considerado TRUE; caso contrário, FALSE.

Figura 1.2 Representação gráfica das portas lógicas AND, OR, XOR e NOT, com os valores de suas entradas e saídas.

Um dispositivo que fornece a saída de uma operação booleana, a partir de suas entradas, é deno- minado porta lógica. As portas lógicas podem ser implementadas por meio de diversas tecnologias, tais como engrenagens, relés e dispositivos óticos. As portas lógicas dos computadores modernos geral- mente são constituídas de pequenos circuitos eletrônicos, em que os dígitos 0 e 1 são representados por níveis de tensão elétrica. No presente estudo, todavia, não haverá necessidade de nos aprofundarmos nesses pormenores. Para os nossos propósitos, basta representar as portas lógicas na forma simbólica, conforme mostrado na Figura 1.2. Note-se que as portas lógicas das operações AND, OR, XOR e NOT são representadas por meio de diagramas diferentes, com os dados de entrada posicionados em um dos lados do diagrama, enquanto os de saída são representados no lado oposto.

Tais portas lógicas permitem a realização de blocos, com os quais são construídos os computado- res. Um passo importante nesta direção está descrito no circuito representado na Figura 1.3. Este é um exemplo de uma série de circuitos do tipo flip-flop. Um flip-flop é um circuito cuja saída apresenta um dos dois valores binários, permanecendo assim até que um pulso temporário em sua entrada, provenien- te de outro circuito, venha a forçá-lo a modificar sua saída. Em outras palavras, o valor da saída alternará entre dois valores, de acordo com a ocorrência de estímulos externos. Enquanto as duas entradas do circuito da Figura 1.3 permanecerem com seus valores em 0, a sua saída (seja ela 0 ou 1) não se alterará. Todavia, introduzindo-se temporariamente o valor 1 na entrada superior, a saída será levada a assumir o valor 1. Se, no entanto, for introduzido temporariamente o valor 1 na entrada inferior, a saída será levada a assumir o valor 0.

Analisemos com maior cuidado estes resultados. Sem conhecer a saída do circuito descrito na Figura 1.3, suponhamos que o valor nele introduzido pela sua entrada superior seja 1, enquanto o da entrada inferior permanece com o valor 0 (Figura 1.4a). Isto levará o circuito a atribuir à saída da porta lógica OR o valor 1, independentemente do valor presente em sua outra entrada. Por outro lado, os valores das duas entradas da porta lógica AND agora serão iguais a 1, já que o valor da outra entrada desta porta já se encontra em 1 (valor este obtido passando-se o dado de entrada inferior do flip-flop através da porta lógica NOT). O valor da saída da porta lógica AND agora será igual a 1, o que significa que o valor da segunda entrada da porta lógica OR agora será igual a 1 (Figura 1.4b). Isto garante que o valor da saída da porta lógica OR permanecerá em 1, mesmo quando o valor da entrada superior do flip-

flop retornar para 0 (Figura 1.4c). Em suma, o valor da saída do flip-flop passará a ser 1, permanecendo

assim mesmo depois que o valor da entrada superior retornar a 0.

De forma semelhante, colocando-se temporariamente o valor 1 na entrada inferior, o valor da saída do flip-flop será forçado para 0, permanecendo assim mesmo que o valor da entrada inferior volte para 0.

A importância do flip-flop, do nosso ponto de vista, é que ele se mostra ideal para o armazena- mento de um bit no interior de um computador. O valor armazenado é o valor de saída do flip-flop. Outros circuitos podem facilmente ajustar este valor enviando pulsos para as entradas do flip-flop, e outros ainda podem responder ao valor armazenado usando a saída do flip-flop como suas entradas.

Existem, é claro, outras maneiras de se construir um flip-flop. Uma alternativa é mostrada na Figura 1.5. Se você experimentar com esse circuito, verá que embora apresente uma estrutura interna diferen- te, suas propriedades externas são as mesmas daquelas da Figura 1.3. Isto nos leva ao primeiro exemplo do papel das ferramentas abstratas. Quando projeta um

flip-flop, um engenheiro considera as maneiras alter-

nativas nas quais ele pode ser construído usando por- tas lógicas como módulos. Então, uma vez projetados os flip-flops e outros circuitos lógicos, o engenheiro pode usá-los como módulos para construir circuitos mais complexos. Assim, o projeto dos circuitos de um com- putador se faz em uma estrutura hierárquica, onde cada nível usa os componentes do nível abaixo como ferra- mentas abstratas.

Figura 1.4 Como forçar o valor 1 na saída do flip-flop. Outras técnicas de armazenamento

Na década de 1960, era comum os compu- tadores conterem pequeninos anéis ou argolas fei- tos de material magnético chamados núcleos, atravessados por fios elétricos muito finos. Passan- do uma corrente elétrica pelos fios, cada núcleo poderia ser magnetizado em uma de duas polari- dades possíveis. Posteriormente, a polaridade des- se campo magnético poderia ser consultada obser- vando-se seu efeito sobre uma corrente elétrica forçada pelos fios que atravessavam o núcleo. Deste modo, os núcleos magnéticos realizavam uma for- ma de armazenamento de bits — o 1 era represen- tado por um campo magnético em uma direção e o 0, por um campo magnético na outra. Tais siste- mas são obsoletos hoje, devido ao seu tamanho e ao seu consumo de energia.

Um método mais recente para armazenar um bit é o capacitor, que consiste em duas peque- nas placas metálicas posicionadas paralelamente mantendo uma pequena distância de separação. Se uma fonte de tensão for conectada às placas — positivo em uma placa e negativo na outra — as cargas da fonte se distribuirão nas placas. Então, quando a fonte de tensão for removida, essas car- gas ficarão nas placas. Se estas forem conectadas mais tarde, uma corrente elétrica fluirá pela cone- xão e as cargas serão neutralizadas. Assim, um ca- pacitor está em um de dois possíveis estados: car- regado ou descarregado, um deles pode ser usado para representar o 0 e o outro, para representar o 1. A tecnologia atual é capaz de construir milhões de pequenos capacitores, bem como os seus cir- cuitos, tudo em uma única pastilha (chamada

chip). Assim, os capacitores vêm se tornando uma

tecnologia popular para armazenamento de bits dentro das máquinas.

Flip-flops, núcleos e capacitores são exem-

plos de sistemas de armazenamento com diferen- tes graus de volatilidade. Um núcleo retém seu campo magnético após o desligamento da máqui- na. Um flip-flop perde o dado armazenado quando a fonte de energia é desligada. Por sua vez, as car- gas nesses pequenos capacitores são tão frágeis que tendem a se dissipar neles próprios, mesmo en- quanto a máquina está funcionando. Assim, a car- ga em um capacitor deve ser restaurada regular-

mente por um circuito conhecido como refresco (refresh). Considerando essa volatilidade, a memória do computador (Seção 1.2) construída com essa tecnologia, freqüentemente é chamada de memória di- nâmica.

?

Figura 1.5 Outra forma de construção de um flip-flop.

A notação hexadecimal

Quando consideramos as atividades internas de um computador, devemos lidar com cadeias de bits, algumas das quais podem ser muito longas. Essa cadeia é freqüentemente chamada corrente (stream). Infelizmente, a mente humana tem dificuldades para gerenciar esse nível de detalhe. A sim- ples transcrição do padrão 101101010011 se mostra não ape- nas tediosa, como muito propensa a erros. Por essa razão, para

simplificar a representação de padrões de bits, normalmente utilizamos uma notação mais compacta, co- nhecida como notação hexadecimal. Esta notação aproveita o fato de que os padrões de bits dentro de um computador apresentam sempre comprimentos múltiplos de quatro. Em particular, a notação hexadecimal utiliza um único símbolo para representar quatro bits, ou seja, uma seqüência de doze bits pode ser denota- da com apenas três símbolos hexadecimais.

A Figura 1.6 apresenta o sistema de codificação hexadecimal. A coluna da esquerda mostra todos os possíveis padrões de bits de comprimento quatro, enquanto a da direita apresenta o símbolo utilizado na notação hexadecimal para representar o padrão de bits correspondente. Nesta notação, o padrão 10110101 é representado como B5. Isto é obtido dividindo o padrão de bits em subcadeias de compri- mento quatro e novamente representando cada cadeia pela notação hexadecimal equivalente. Assim, 1011 é representado por B e 0101, por 5. Desta maneira, o padrão 1010010011001000, de 16 bits, pode ser reduzido à forma A4C8, bem mais confortável.

Utilizaremos extensivamente a notação hexadecimal no próximo capítulo, no qual se poderá cons- tatar a sua eficácia.

Q

UESTÕES

/E

XERCÍCIOS

1. Que configurações de bits de entrada devem ser fornecidas ao circuito abaixo para que seja produzida uma saída 1?

2. No texto, afirmamos que a introdução do 1 na entrada inferior do flip-flop da Figura 1.3 (mantendo fixo o 0 para a entrada superior) forçará a saída do flip-flop a ser 0. Descreva a sucessão de eventos que ocorreram neste caso, dentro do flip-flop.

Figura 1.6 O sistema de código hexadecimal.

3. Admitindo que as duas entradas do flip-flop da Figura 1.5 sejam 0, descreva a sucessão de eventos que ocorrerão quando a entrada superior for temporariamente igualada a 1.

4. Muitas vezes é necessário coordenar atividades em várias partes de um circuito. Isso é feito acoplando um sinal pulsante (chamado relógio) às partes do circuito que requerem coordenação. Uma vez que o relógio alterna entre os valores 0 e 1, ele ativa os vários componentes do circuito. A seguir, está um exemplo de uma parte do circuito que envolve o

flip-flop mostrado na Figura 1.3. Para quais valores do relógio o flip-flop ficará isolado dos

valores de entrada do circuito? Para quais valores ele responderá aos valores de entrada do circuito?

5. a. Se a saída de uma porta lógica OR passar por uma porta NOT, a combinação executará a operação booleana chamada NOR, cuja saída só será 1 quando as duas entradas forem 0. O símbolo para essa porta lógica é o mesmo da porta OR, exceto em que ele possui um círculo em sua saída. Abaixo, está um circuito que contém uma porta lógica AND e duas portas NOR. Que função booleana ele computa?

b. Se a saída de uma porta lógica AND passar por uma porta NOT, a combinação executará a operação booleana chamada NAND, cuja saída só será 0 quando as duas entradas forem 1. O símbolo para essa porta lógica é o mesmo da porta AND, exceto em que ele possui um círculo em sua saída. Abaixo, está um circuito que contém portas lógicas NAND. Que função booleana ele computa?

6. Utilize a notação hexadecimal para representar os seguintes padrões de bits: a. 0110101011110010

b. 111010000101010100010111 c. 01001000

7. Que padrões de bits são representados pelos seguintes padrões hexadecimais?