PROCESSANDO PADRÕES SIMBÓLICOS
Máquina 'von Neumann', ou
Computador Digital de Programa Armazenado em Memória
SÍMBOLOS-INTERRUPTORES
Como armazenador e modificador de (representações físicas de) símbolos, o computador também é um armazenador, modificador e acionador de 'interruptores'. Ao serem 'conectados' a certos dispositivos, aqueles símbolos-interruptores ligam e/ou desligam circuitos (caminhos ou fluxos, lugares ou conteúdos), acionam e/ou interrompem outros dispositivos. Os componentes são 'dinâmicos' não apenas porque mudam de estado, mas também porque a máquina mantém 'dinamicamente' cada estado particular através do funcionamento ininterrupto dos seus circuitos constituintes.
Assim, uma sucessão do tipo ...transição > estado1 > transição > estado2 > transição > etc., mantida dinamicamente de forma ininterrupta, permite que a máquina, para cada 'estado' definido entre duas transições quaisquer, exiba certo resultado 'legível' por qualquer dispositivo, sob o mesmo regime simbólico, 'sensível' àquela configuração particular.
TRANSIÇÕES
A máquina funciona através de uma sucessão de estados bem definidos do conjunto de seus componentes. Naturalmente, a transição entre dois estados sucessivos não é instantânea. Alterações físicas sempre levam algum tempo para se completar, e os tempos são distintos para as alterações de cada componente. Assim, às transições entre os estados discretos elementares (e, como 'transições' que são, não fazem parte do repertório de 'estados' possíveis) deve ser concedida duração suficiente para que todos os elementos envolvidos se estabilizem após cada modificação.
O Relógio (Clock) da máquina, ao estabelecer através de uma unidade comum de duração intervalos de tempo para cada ação elementar, permite sincronizar o funcionamento dos componentes de modo que ao final do tempo de transição todas as modificações elementares já se tenham completado para aquele passo. Apenas os 'estados' são significativos, no sentido de que temos um resultado 'estável' apenas durante o tempo em que a máquina não está passando de um estado para outro.
O resultado de uma tentativa de 'leitura' durante o período de transição é ininterpretável, ou 'espúrio', no sentido de não poder ser derivado do regime simbólico que a máquina representa e de depender de comportamento físico particular desconhecido dos componentes daquela máquina específica naquelas circunstâncias físicas específicas. Assim, sinais (elétricos, ópticos) de controle ligam e desligam (ou 'habilitam' e 'desabilitam') sucessivamente circuitos de intercomunicação entre componentes, de modo a garantir que o que se esteja comunicando seja, de fato, um padrão que já atingiu a estabilidade para certo estado da máquina.
Em outras palavras, deve-se esperar que se complete a transição de estado de uma estrutura antes de se permitir o acesso à mesma.
CICLO DE INSTRUÇÃO
Como a sequência de instruções que a máquina deve seguir se encontra na MP (Memória Principal), a CPU (Unidade Central de Processamento – ou 'processador') precisa BUSCÁ-LAS na memória, uma a uma, para poder decodificá-las e executá-las.
Ao final de cada busca, o índice que aponta para o lugar da próxima instrução deve ser ATUALIZADO, e a instrução já transferida para a CPU deve ainda ser decodificada e EXECUTADA. Os 'símbolos-interruptores' circulam sob a forma de sinais (elétricos, ópticos) e, assim, o que a máquina 'decodifica' são sinais que disparam a 'execução' de tarefas, sempre percorrendo as mesmas etapas em cada ciclo de instrução:
...>BUSCA>ATUALIZAÇÃO>EXECUÇÃO>BUSCA>ATUALIZAÇÃO>EXECUÇÃO>BUSCA>etc.
Resumindo, a CPU (Central Processing Unit) acessa (“lê”) instruções da Memória Principal (Main Memory), uma a uma, as decodifica e modifica o estado da máquina ao executá-las. Isto é, BUSCA as instruções, uma a uma (ATUALIZANDO o ponteiro de instruções), e as decodifica e EXECUTA.
BUSCA (Fetch Cycle)
O IP (Instruction Pointer) contém o ENDEREÇO da PRÓXIMA instrução a ser levada para a CPU e lá decodificada e executada; esse endereço é colocado no Barramento de Endereços (Address Bus), um dos barramentos (conectores) que ligam a Memória Principal (Main Memory) à CPU. Desse modo, apenas a célula de memória correspondente àquele endereço passa a estar conectada à CPU. O conteúdo da célula é conduzido, então, pelo Barramento de Dados (Data Bus) ao RI (Registrador de Instruções) da CPU. Um sinal (READ) originado na CPU para o Barramento de Controle (Control Bus) estabelece o sentido da transferência pelo barramento de dados, da MP para a CPU, já que se trata de uma operação de 'leitura' (LOAD) de um conteúdo da memória.
ATUALIZAÇÃO & DECODIFICAÇÃO
Uma vez armazenada a instrução no RI, o valor do IP é atualizado para o sucessor, isto é, para o endereço da instrução seguinte na memória. Desse modo, a atualização automática sequencial do IP após cada ciclo de busca reflete o modo normal sequencial de funcionamento da máquina. Contudo, se na etapa de execução for mudado o valor do IP, o próximo ciclo de busca irá acessar o endereço de memória correspondente àquele novo valor, permitindo-se assim o desvio do modo sequencial automático de funcionamento.
Ao lado da atualização do IP, ocorre a DECODIFICAÇÃO da instrução guardada no RI, o que prepara a CPU para as sequências de micro-instruções correspondentes àquela instrução particular.
EXECUÇÃO
A ALU (Unidade Lógico-Aritmética) da CPU faz uso de diversos registradores (que são células de armazenamento temporário da CPU, de propósitos específicos e de alta velocidade) para efetuar operações de comparação e de adição entre os operandos da instrução.
O ACC (acumulador) – e outros registradores de propósito geral - armazena os resultados lógicos e aritméticos. E cada bit do registrador PSW (Palavra de Estado do Programa, ou registrador de flags) sinaliza se uma operação resultou zero, negativa, positiva, se foi ultrapassado o maior (ou menor) valor representável do registrador na operação aritmética, se houve vai-1 na última adição, e outras indicações. Tais bits indicadores podem ser usados pelas instruções subsequentes para orientar alternativas de processamento.
Como vimos, se a execução de uma instrução gravar certo valor no IP, a próxima instrução será buscada no local de memória endereçado por aquele valor. Se não for guardado o valor anterior do IP, a máquina não terá como retornar àquele ponto de execução, o que corresponderia a um salto sem retorno. Guardado o valor anterior do IP na Pilha (ou STACK, parte da memória reservada para isso), uma instrução posterior pode regravar tal valor no IP, desde que tenha acesso ao local onde o valor se encontra. O SP (Stack Pointer) é um registrador da CPU que serve para isso, para manter o endereço do local mais recentemente usado no armazenamento do valor de retorno do IP.
Se uma instrução altera o valor do IP apenas no caso de certa ocorrência anterior (segundo o que está indicado no PSW), o desvio do modo sequencial de funcionamento vai depender daquela indicação, o que corresponde a um salto condicional, já seja com ou sem retorno. Se, ao contrário, a alteração do IP não depende do estado da máquina (indicado no PSW), temos um salto incondicional.
Um código de instrução armazenado no RI é um padrão binário com informações sobre o operador e os operandos envolvidos em certa operação. Ao ser decodificado, o padrão binário se desdobra em uma sequência de microinstruções cuja execução pela CPU realiza a função correspondente ao padrão.
Na decodificação do padrão binário armazenado no RI, são separados o operador e os seus operandos. Os 'operandos' representados na instrução tanto podem ser referências (diretas ou indiretas) para os verdadeiros operandos, que deverão ser buscados na memória ou em outros registradores, como podem ser os próprios operandos (de acesso imediato). De modo análogo, o 'operador' representado na instrução pode ser convertido diretamente em uma sequência de microinstruções que, ao serem executadas, realizam a operação desejada, ou o 'operador' é uma referência para uma sequência intermediária microcodificada capaz de gerar, ao ser executada, as microinstruções que realizam a operação desejada. No caso de instruções de escrita na memória (STORE), a transferência vai da CPU para a MP, enquanto que na leitura (LOAD) vai da MP para a CPU. O sentido da transferência é determinado por um sinal (WRITE ou READ) colocado pela CPU no Barramento de Controle.
Embora os processadores modernos façam uso de estruturas e expedientes complicados, como execuções paralelas, antecipações, arquitetura superescalar, registradores vetoriais e outros aperfeiçoamentos, nada disso invalida o modelo aqui apresentado, que continua sendo a base para a programação e para a compreensão do funcionamento dos computadores digitais de programa armazenado em memória desde a sua implementação na primeira metade do século vinte.
início
acima
anterior
próximo