Computadores XIX: Leitura e escrita na MP

Transcrição

Computadores XIX: Leitura e escrita na MP
Computadores XIX: Leitura e escrita na MP
A6 – Texto 4
http://www.bpiropo.com.br/fpc20060109.htm
Sítio Fórum PCs /Colunas
Coluna: B. Piropo – Publicada em 09/01/2006
Autor: B.Piropo
Na coluna anterior da série vimos como é possível transmitir um dado entre dois
componentes através de um conjunto de condutores paralelos (barramento). Usamos
como exemplo um barramento de oito linhas de dados, capaz de transportar valores
expressos em um byte (oito bits transportados simultaneamente nas oito linhas) entre
UCP e MP, parte do chamado “barramento frontal” (as demais partes do barramento
frontal são as linhas de endereços e as de controle; veja a coluna <
http://www.forumpcs.com.br/viewtopic.php?t=141948 > “Placas-mãe e memória
principal”).
Vimos ainda que o valor é transportado aplicando-se tensões elétricas em uma das
extremidades de cada linha e lendo estas tensões na extremidade oposta usando como
referência para o momento exato em que as tensões devem ser aplicadas (e lidas) o
chamado “sinal de clock”, constituído por um pulso de tensão aplicado em intervalos
regulares a uma linha do barramento de controle designada especificamente para este
fim, ou a linha CLK. E vimos que este procedimento é a essência da chamada “lógica
temporizada”.
Porém tudo isso refere-se à forma física pela qual o valor é transportado. E o que mais
nos interessa são os aspectos lógicos da questão. Aspectos que tentaremos abordar
agora examinando o procedimento adotado para efetuar a escrita (armazenamento de
um número em uma posição de memória) ou leitura (recuperação de um número
previamente escrito em uma posição de memória) na MP.
Mas, antes de prosseguirmos, uma observação. Quem acompanha a evolução do
hardware usado nos computadores modernos talvez tenha a impressão que os novos
módulos de memória “DDR” (de “Double Data Rate”, ou taxa de dados dupla)
desafiam a lógica. Ou pelo menos a lógica temporizada, já que são capazes de
transferir mais de um conjunto de bits (dois conjuntos, no caso dos módulos DDR
simples, quatro no caso dos DDR2) em cada ciclo de clock. No ponto em que estamos
de nossa jornada em busca do entendimento das entranhas do computador nos faltam
conhecimentos para entender como isso pode ser feito. Deixemos então esse tipo de
detalhe para mais adiante quando, depois de destrincharmos a CPU, começaremos a
discutir a memória. Por enquanto vamos usar como exemplo um tipo de memória que
praticamente caiu em desuso, as velhas memórias FPM (de Fast Page Mode; se você
quiser saber um pouco mais sobre elas leia a excelente série de colunas do Mestre
Abel Alves sobre memórias). São memórias antigas, é verdade, porém mais simples.
E justamente por isso será mais fácil entendermos como funcionam. Como a lógica
das operações de leitura e escrita nas velhas memórias é essencialmente a mesma
usada nas modernas (o que varia é apenas o ritmo em que as operações se sucedem),
adotaremos como exemplo as mais simples apenas para facilitar o entendimento.
Então, já alertados para o fato de que o procedimento abaixo descrito aplica-se às
memórias tipo FPM, vamos adiante.
Para ler ou escrever algo na MP são necessários três parâmetros: o endereço da
posição de memória na qual a operação será efetuada, um sinal de controle indicando
o tipo da operação (leitura ou escrita) e, no caso da escrita, o valor a ser escrito. Tudo
isso, naturalmente, sincronizado com os sinais de “clock”.
Vamos entendermos as operações de leitura e escrita na memória vamos recorrer à
Figura 1, a parte do esquema da placa-mãe que nos interessa no momento, mostrando
a UCP com seus componentes internos, a MP com seu controlador e o trecho do
barramento entre UCP e MP denominado barramento frontal ou FSB (de Front Side
Bus; note que, conforme mostra a figura, o barramento frontal é subdividido nos
barramentos de dados, endereços e controle).
Figura 1: UCP, MP e FSB
Vamos começar pela operação de escrita na MP. Como se percebe da Figura 1, a
única forma da UCP se comunicar com os barramentos de dados e endereços é através
dos registradores RDM e REM. Portanto, para efetuar uma operação de escrita na
memória, os números correspondentes ao dado a ser escrito e ao endereço da posição
da memória que irá armazená-lo deverão ter sido previamente escritos no RDM e
REM, respectivamente. Por enquanto vamos ignorar como isso é feito: é tarefa interna
da UCP e por ora basta saber que para iniciar o procedimento de escrita de um
número em uma posição de memória é preciso que tanto o número a ser escrito quanto
o endereço da posição de memória que irá recebê-lo estejam presentes
respectivamente no RDM e REM. Imaginemos que o número a ser escrito seja
10101010 (170 em decimal) e o endereço onde ele deverá ser escrito seja 11111010
(250 em decimal).
Neste ponto inicia-se o procedimento de escrita. Os circuitos internos da Unidade de
Controle da UCP, de onde partem as linhas do barramento de controle mostradas em
vermelho nas figuras, aguardam o próximo pulso de clock (lembre da lógica
temporizada discutida na coluna anterior) e assim que ele é emitido aplicam um sinal,
também sob a forma de um pulso de tensão elétrica, na linha do barramento de
controle correspondente à escrita na memória (Memory Write).
Quando o controlador da memória constata que há um pulso na linha “Memory
write”, ainda no mesmo ciclo de “clock”, prepara-se para a operação de escrita lendo
o conteúdo do REM (ou seja, o endereço onde o dado será escrito) e “apontando” seus
circuitos internos para este endereço. A situação será similar à representada pela
Figura 2. Observe, na figura, o conteúdo dos registradores RDM e REM e note que o
buffer da MP, uma posição de memória auxiliar contida no interior do controlador da
memória, embora vazio, “aponta” para o endereço 11111010. E lembre que tudo isto
ocorreu em um único ciclo do barramento, ou seja, após um único pulso de clock.
Figura 2: Situação após o controlador da MP receber o sinal “Memory Write”.
O controlador da memória agora “sabe” que no próximo ciclo ele deverá realizar uma
operação de escrita na MP (graças ao sinal “Memory write”) e “sabe” em que posição
de memória o valor deverá ser escrito (pois já “apontou” seus circuitos internos para
ele). Agora é só aguardar o próximo pulso de clock.
No momento em que ele é disparado o controlador da MP lê o conteúdo do RDM ou
seja, ausculta suas extremidades das linhas do barramento de dados para verificar
quais estão energizadas (bit “um”) e quais não estão (bit “zero”), transpõe esses bits
para o buffer da MP e daí os transfere para o endereço lido anteriormente no REM. O
resultado final é o exibido na Figura 3: o valor binário 10101010 escrito no endereço
11111010. A operação de escrita na memória foi finalizada com sucesso.
Figura 2: Situação após encerrada a operação de escrita na MP
No caso da operação de leitura, as coisas se passam de forma semelhante. Primeiro, os
circuitos de controle escrevem no REM o endereço de onde o dado será lido. No
momento em que é disparado o próximo pulso na linha de clock, a unidade de
controle dispara um pulso simultâneo em uma outra linha do barramento de controle,
a linha denominada “Memory read” que informa ao controlador da MP que a próxima
operação será de leitura.
No momento em que o circuito de controle da memória detecta o sinal na linha
“Memory read” ele toma conhecimento que deverá fornecer à UCP um dado
armazenado em um certo endereço de memória, aquele que foi previamente escrito no
REM. E, durante o mesmo ciclo, lê o conteúdo do REM e “aponta” seus circuitos
internos para o endereço correspondente.
Agora é só aguardar o próximo pulso na linha de “clock”. No momento em que ele é
disparado o controlador da MP lê o conteúdo do endereço para o qual já está
“apontando”, o copia no buffer da MP e o transfere imediatamente para o RDM, onde
a UCP irá buscá-lo para fazer bom uso dele. E com isso se encerra a operação de
leitura da MP.
Como se vê, é tudo muito simples.
Para finalizar, uma observação interessante: o mecanismo acima descrito permite
entender porque a UCP não consegue executar instruções que impliquem operações
binárias (com dois operandos) nas quais ambos os operandos estão armazenados na
memória principal (por exemplo: somar dois números, cada um armazenado em uma
posição da MP). A razão é que a UCP somente consegue “enxergar” o conteúdo de
uma posição de memória de cada vez (aquele cujo endereço está no RDM) e para
realizar uma operação binária a UCP deve alimentar a ULA com ambos os operandos
simultaneamente. Assim, é possível somar com uma única instrução, por exemplo, o
valor contido no Acumulador com o de uma determinada posição de memória (cujo
valor é lido e copiado no RDM), já que a ULA pode ser alimentada simultaneamente
com ambos os valores, posto que estão contidos em dois registradores (Acumulador e
RDM). Mas não é possível fazer o mesmo com dois valores armazenados na memória
principal (é claro que esta operação pode ser viabilizada em dois passos, cada um
correspondendo a uma instrução: no primeiro, um dado e lido da memória e copiado
no acumulador, no segundo este valor é somado com o conteúdo da segunda posição
de memória, copiado no RDM; o que é impossível é realizar esta operação com uma
única instrução em linguagem de máquina).
Agora que sabemos como os dados são movimentados entre MP e UCP estamos
prontos para entender o “ciclo de busca e execução”, aquele que permite à UCP ler e
executar instruções sucessivamente. Ou seja: como funcionam os programas.
Na próxima coluna, naturalmente...