Documente Academic
Documente Profesional
Documente Cultură
Um computador digital é uma máquina capaz solucionar problemas por meio da execução
de instruções que lhe são fornecidas. Programa é uma seqüência de instruções que descrevem como
executar uma tarefa. Os circuitos eletrônicos de cada computador podem reconhecer e executar
diretamente um conjunto limitado de instruções simples. Para serem executados, todos os
programas precisam ser convertidos para esta linguagem primitiva, chamada linguagem de
máquina ou linguagem de montagem (assembly language). Esta é a linguagem que a máquina
realmente entende. Trata-se do código binário, correspondente a sinais elétricos, que é o que uma
máquina é realmente capaz de executar.
Para facilitar a comunicação dos seres humanos com a máquina, foram desenvolvidas
linguagens mais próximas daquelas usadas pelos humanos, as chamadas linguagens de alto nível (C,
C++, Delphi, Pascal, Fortran, JAVA etc.). Estas linguagens precisam ser convertidas para
linguagem de máquina para serem executadas. Há dois métodos de conversão das linguagens de
alto nível: a tradução e a interpretação. Estes métodos são similares. Em ambos as instruções de
alto nível são executadas pelas seqüências equivalentes em linguagem de máquina. A diferença é
que na tradução o programa completo de alto nível é primeiro convertido para a linguagem de
máquina para então ser executado. Na interpretação, depois de cada instrução de alto nível ser
examinada e decodificada, ela é executada imediatamente. Nenhum programa traduzido é gerado.
Ambos os métodos são amplamente usados pelos compiladores.
Máquina Estruturada Multinível
Nível 5 Nível de linguagem orientada para
problemas
(LINGS. DE ALTO NÍVEL)
Tradução (compilador)
Nível 4 Nível do
MONTADOR ou ASSEMBLER
(Mnemônicos)
Tradução (montador)
Nível do
Nível 3 SISTEMA OPERACIONAL
Interpretação (microprograma)
Nível de
RISC
Nível 1 MICROPROGRAMAÇÃO
(CISC)
Os microprogramas executados
diretamente pelo hardware
Nível de
Nível 0
LÓGICA DIGITAL
1
A linguagem Java é a mais importante tendência atual e mais recente avanço na busca pela linguagem universal - o
"esperanto" dos computadores. Java eleva a abstração ainda mais um nível e se propõe a ser independente da máquina
onde será executado. Porém, na realidade, quando não está sendo processado em um processador Java nativo, o código
Java é interpretado por uma camada de software chamada máquina virtual Java (JVM - Java Virtual Machine), ou seja,
um emulador. (Mano, 1998)
amigável. Neste nível cada instrução de máquina é apelidada por um mnemônico (por exemplo add,
load, store etc.) que normalmente correspondem diretamente a uma única instrução de máquina.
Assim, o mnemônico é um apelido, mais significativo para os humanos, que representa uma
instrução de máquina, ou seja, um código binário executável. Os programas em linguagem de
montagem são primeiramente traduzidos para uma linguagem do nível 1, 2 ou 3, e então são
interpretados pela máquina real ou virtual apropriada. O programa que executa a tradução é
denominado montador.
O nível 5 consiste em linguagens projetadas para serem utilizadas por “programadores de
aplicação” (software aplicativo) com problemas a serem resolvidos. Tais linguagens possuem
muitos nomes, dentre eles linguagens de alto nível e linguagens orientadas para problemas.
(FORTRAN, PASCAL, Delphi, C, COBOL, LISP, JAVA etc.). Os programas escritos nestas
linguagens são geralmente traduzidos para o nível 3 ou nível 4 por tradutores conhecidos como
compiladores, embora às vezes sejam interpretados.
Os níveis 6 e superiores (não representados na Figura 1) consistem em coleções de
programas projetados para criar máquinas virtuais especialmente adequadas para certas aplicações
(aplicativos computacionais). Estes níveis contêm grandes quantidades de informação acerca da
aplicação. Pode-se imaginar máquinas virtuais voltadas a aplicações em administração, educação,
projeto de computadores, realidade virtual etc. Estes níveis estão no terreno da pesquisa atual.
Em resumo, o ponto-chave a ser lembrado é que os computadores são projetados como uma
série de níveis, cada um deles construído sobre seu predecessor. Cada nível representa uma
abstração distinta, com diferentes objetos e operações presentes. Ao projetar e analisar
computadores deste modo, podemos temporariamente suprimir detalhes irrelevantes dos níveis
inferiores, e assim reduzir um assunto complexo a algo mais fácil de ser compreendido.
Programa em Ling.
EXECUÇÃO DE UM de Alto Nível
PROGRAMA→
(C)
Compilador
Programa em ling. de
montagem
Montador
Objeto: módulo em
ling. de máquina
Objeto: rotinas da
biblioteca (em Ligador
ling. de máquina)
Executável: programa
em ling. de máquina
MEMÓRIA
Carregador
Memória
Barramento
Barramento de controle
Barramento de dados
Barramento de endereços
2
Logicamente aqui é entendido como o que é “visto” ao nível de linguagem de máquina, ou seja, no primeiro
nível do software considerando a “máquina estruturada multinível”.
exemplo o barramento de dados é de 8 bits (D7....D0 Î 28 = 256 valores diferentes), o
barramento de endereços de 16 bits (A15...A0 Î 216 = 65.536 endereços diferentes – 64K) e
o barramento de controle de 3 bits. Neste exemplo os sinais de controle ready, R/W e IO/M
controlam o fluxo das informações nos demais barramentos.
O sinal ready (um bit) é usado para indicar a UCP que um dispositivo de entrada
está pronto para enviar um dado para a própria UCP, ou para memória, ou ainda que um
dispositivo de saída está pronto para receber um dado da UCP ou da memória. A linha
ready serve para sincronizar a UCP com a disponibilidade de dados nos dispositivos E/S.
Este sinal serve principalmente para compatibilizar as velocidades, pois a UCP opera em
velocidades bem mais altas que os dispositivos E/S.
O sinal R/W (um bit) indica se a operação é de; leitura ou escrita. Se este sinal é 1
indica que a operação selecionada é uma leitura (read) na memória ou em um dispositivo
de entrada; e se 0, indica uma operacão de escrita (write) na memória ou em um dispositivo
de saída. E o último sinal IO/M (um bit) se 1 indica uma operação de entrada ou saída de
dados (Input/output); e se igual a 0 indica uma operação de acesso à memória.
Barramento de controle
IO/M
R/W
Ready
Barramento
de dados
D7....D0
Barramento
de endereços
A15.....A0
UC = Unidade de controle
clock
UC
Clock = referência de tempo
R0
Registradores de uso geral:
R0...Rk
Rk
Registradores de uso
PC
específico:
RI PC = contador de programa
RE RI = registrador de instrução
RE = registrador de endereços
RD
RD = registrador de dados
3
No processador Pentium este registrador é chamado de Instruction Pointer – IP - (ponteiro de instrução).
registradores, ou seja, internos à UCP. Conseqüentemente, a UC deve manter os valores
corretos no barramento de dados e endereços, por um tempo suficiente, até que o acesso à
informação tenha sido complemente efetuado. Assim, geralmente são necessários dois
registradores específicos para esta tarefa um chamado registrador endereço - RE – e outro
chamado registrador de dados – RD. Ambos auxiliam a compatibilização dos tempos da
UCP com o tempo de acesso à memória e aos dispositivos de E/S.
Ciclo de
busca
(Fetch)
instrução
Ciclo de
Ciclo de
Execução
1.4 A Memória
A memória é aquela parte do computador onde programas e dados são armazenados.
Alguns cientistas da computação usam o termo armazenamento no lugar de memória. Sem
uma memória de onde os processadores possam ler e escrever informações, não haveria
nenhum computador digital com programa armazenado como os conhecemos. O termo
memória normalmente se refere à memória principal (MP) ou comumente chamada de
memória RAM. A memória principal é a parte do computador onde programas e dados são
armazenados durante o processamento. A informação permanece na memória principal
apenas enquanto for necessário para seu emprego pela UCP, sendo então a área de MP
ocupada pela informação pode ser liberada para ser posteriormente ser sobregravada por
outra informação. Quem controla a utilização da memória principal é o Sistema
Operacional por meio do gerenciador de memória.
Estrutura da memória principal - células e endereços4
A memória precisa ter uma organização que permita ao computador guardar e
recuperar informações quando necessário. Não teria sentido armazenar informações se não
fosse possível recuperar depois. Portanto, não basta transferir informações para a memória.
É preciso ter como encontrar essa informação mais tarde, quando ela for necessária, e para
isso é preciso haver um mecanismo que registre exatamente onde a informação foi
armazenada.
Célula é a unidade de armazenamento da memória do computador. A memória
principal é organizada em células. Célula é a menor unidade da memória que pode ser
endereçada (não é possível buscar uma "parte" de uma célula de memória) e tem um
tamanho fixo específico de cada máquina. As memórias são compostas de um determinado
número de células ou posições. Cada célula é composta de um determinado número de bits.
Todas as células de um dado computador tem o mesmo tamanho, isto é, todas as células
daquele computador terão o mesmo número de bits.
Cada célula é identificada por um endereço único, pela qual é referenciada pelo
sistema e pelos programas. As células são numeradas seqüencialmente, uma a uma, de 0 a
(N-1), chamado o endereço da célula. Endereço é o localizador da célula, que permite
identificar univocamente uma célula. Assim, cada célula pode ser identificada pelo seu
endereço. O endereço é o indexador de cada célula.
Organização da memória
A estrutura da memória principal é um problema do projeto de hardware:
- mais endereços com células menores ou
- menos endereços com células maiores?
4
http://wwwusers.rdc.puc-rio.br/rmano/comp7mp.html
Assim, cabe ao projetista de uma máquina definir o número de linhas de endereço e
o número de bits que constitui cada célula. O número de n linhas no barramento de
endereços definirá 2n combinações diferentes, isto é, o número máximo de células que
podem ser endereçadas. Por exemplo:
Número de bits de endereço = 10 ⇒ 210 (= 1024 = 1K) células endereçadas
Tamanho da célula = 8 bits
Esta memória seria representada como 1K X 8 (1 kilobyte)
No projeto de cada computador é definida a organização da memória, ou seja, o
tamanho do barramento de endereços e o tamanho de cada célula de memória, são valores
comuns:
64K (216) X 8 bits (65 536 posições de 8 bits = 64 kilobytes)
4 Giga (232) X 8 bits (4 294 967 296 posições de 8 bits)
1 Mega (220) X 16 bits (1 048 576 posições de 16 bits)
16 Mega (224) X 4 bits (16 777 216 posições de 4 bits)
O diagrama da Figura 9 mostra uma memória com "n" linhas de endereços e "m"
linhas de dados. As "n" linhas de endereços ("n" bits) permitem endereçar 2n diferentes
células de memória. O tamanho do dado, contido em cada célula de memória, é "m" bits. O
valor de "n" independe do de "m". Cada código de endereço de "n" bits seleciona, através
do decodificador de endereços, apenas uma única célula na memória. O sentido do fluxo de
dados dependerá do sinal de controle R/W. Se R/W = 1 a operação é de READ, ou seja
leitura na memória e o dado sairá da memória, caso contrário (R/W = 0) a operação será de
escrita (WRITE) e o dado entrará na memória.
Memória
E A0 0 Dado 0
N A1
A2 Dado 1
D Decodificador
1 D
2
E de endereços Dado 2 Dm...D0 A
R D
An n
E Dado n O
Ç
O
R/W
Figura 9 - Diagrama esquemático da organização da memória.
Memória - exercícios
Referências:
1- http://pt.wikipedia.org/wiki/Barramento (acesso em 16/09/06)
2 - http://wwwusers.rdc.puc-rio.br/rmano/index.html (acesso em 16/09/06)
3 - Patterson, D. A. e Hennessy, J. L. Organização e Projetos de Computadores – A
Interface Hardware/Software, 3ª Ed., Editora Campus, Rio de Janeiro, 2005.
4 - Tanenbaum, A. S. Organização estruturada de computadores, 3a Edição, Rio de Janeiro:
PHB, 1995.