1. NÍVEL CONVENCIONAL DE MÁQUINA 1.1. VISÃO GERAL DO

Transcrição

1. NÍVEL CONVENCIONAL DE MÁQUINA 1.1. VISÃO GERAL DO
Curso de Ciências da Computação
1. NÍVEL CONVENCIONAL DE MÁQUINA
Relembrando a nossa matéria de Arquitetura de Computadores, a arquitetura de
Computadores se divide em vários níveis como já estudamos anteriormente. Ou seja: o Nível 0
(Nível de Lógica Digital) e o Nível 1 de Microprogramação (Linguagem de Baixo nível). Chegou a
hora de tocarmos no nível Convencional de Máquina (ou seja, Nível de Arquitetura de Conjunto de
Instruções).
.
1.1. VISÃO GERAL DO NÍVEL
A tecnologia de computadores fez um progresso incrível nos aproximadamente 65 anos
desde que foi criado o primeiro computador eletrônico de uso geral. Hoje, menos de 1000 dólares
compram um computador pessoal com maior desempenho, mais memória principal e mais espaço
de armazenamento em disco que um computador comprado em 1980 por um milhão de dólares.
Essa rápida taxa de aperfeiçoamento vem de avanços na tecnologia usada para construir
computadores e da inovação no projeto de computadores.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 1 de 5
Curso de Ciências da Computação
Embora os aperfeiçoamentos tecnológicos tenham sido bastante regulares, o progresso que
surge de melhores arquiteturas de computadores e muito menos consistente.
O crescimento no desempenho de microprocessadores desde meados da década de 1980
tem sido substancialmente maior que nos anos anteriores, como mostra o gráfico de desempenho
SPECint.
Gráfico. 1.1
Esse gráfico representa o desempenho relativo medido pelos benchmarks SPECint, com a
base unitária correspondendo a um VAX11/780 (de 1984). O desempenho de máquinas mais
novas é estimado por um fator de escala que relaciona o desempenho para duas versões
diferentes de SPEC (por exemplo, SPEC92 e SPEC95). Antes da metade da década de 1980, o
crescimento no desempenho de microprocessadores era orientado em grande parte pela
tecnologia e aumentava em media cerca de 35% ao ano.
1.1.5. A evolução da tarefa do projetista de computadores
Na década de 1960, a forma dominante de computação se Iimitava a grandes mainframes máquinas que custavam milhões de dólares e eram armazenadas em salas de computação com
vários operadores supervisionando seu suporte.
As aplicações típicas incluíam o processamento de dados comerciais e a computação
científica em grande escala. Os anos 70 presenciaram o nascimento do minicomputador, uma
máquina de dimensões menores, dedicada inicialmente a aplicações em laboratórios científicos,
mas que logo ampliou seus limites, à medida que a tecnologia do compartilhamento de tempo diversos usuários compartilhando um computador interativamente pela utilização de terminais
independentes - se disseminou. Na década de 1980, surgiu o computador de mesa (desk Top)
baseado em microprocessadores, na forma de computadores pessoais e de estações de trabalho.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 2 de 5
Curso de Ciências da Computação
O computador de mesa de um único usuário substituiu o compartilhamento de tempo e levou
ao surgimento de servidores - computadores que forneciam serviços em maior escala, tais como
armazenamento e acesso confiável a arquivos em longo prazo, maior quantidade de memória e
maior capacidade de computação. Na década de 1990, surgiram: a Internet e a WWW (World
Wide Web), os primeiros dispositivos bem-sucedidos como computadores de mão (assistentes
digitais pessoais ou PDAs) e também os aparelhos eletrônicos digitais de alto desempenho, desde
videogames até os telefones celulares.
Os projetistas de Computadores fizeram história liderando esta evolução, mas a arquitetura
dentro desta evolução continua basicamente a mesma.
1. O projetista utiliza uma solução combinada de hardware/software que inclui algum
hardware personalizado e um núcleo de processador embutido que é integrado ao
hardware personalizado, frequentemente no mesmo chip.
2. O projetista usa software personalizado funcionando em um processador
embutido comercial.
3. O projetista utiliza um processador de sinais digitais e software personalizado para
o processador. Os processadores de sinais digitais (DSPs - digital signal
processors) são processadores especialmente adaptados para aplicação de
processamento de sinais.
Em suma:
Um sistema de computação, nada mais é do que um conjunto de componentes
integrados para funcionar com se fossem um único elemento e que têm por objetivo
realizar manipulações com dados, isto é, realizar alguns tipos de operações com os dados
de modo a obter uma informação útil.
O NÍVEL CONVENCIONAL DE MÁQUINA que estudamos aqui age sobre a interpretação
dos microprogramas e prepara o sistema de computação para receber o Sistema Operacional.
Para tal é necessário que a manipulação de dados seja organizada em tipos de dados.
1.2. TIPOS DE DADOS
Já sabemos que um computador funciona através da execução sistemática de
instruções que o orientam a realizar algum tipo de operação sobre valores (numéricos,
alfabéticos, ou lógicos). Estes valores são genericamente conhecidos como dados.
Quer desejemos calcular uma expressão matemática complexa, quer o objetivo seja
colocar uma relação de nomes em ordem alfabética, como também a tarefa de acessar a
Internet e até a manipulação do mouse, tarefas que requerem ou não a execução de operações
matemáticas, todas elas necessitam do emprego de instruções que ativem operações com
os dados. Estes dados podem ser:
Valores numéricos (no cálculo de expressões matemáticas),
Valores alfabéticos (caracteres), ou ainda;
Valores apenas binários (lógicos).
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 3 de 5
Curso de Ciências da Computação
De qualquer modo, tanto as instruções quanto os dados estão sempre armazenados
internamente sob a forma de uma sequência de 0s e 1s, os algarismos binários, que
constituem a linguagem da máquina.
Quando digitamos os valores dos dados, estes são convertidos internamente em um código
de armazenamento como se fossem caracteres alfabéticos (nesse instante, eles são tratados
como um texto), isto é, quando introduzimos, por exemplo, um dado cujo valor decimal e 143. Este
número e digitado algarismo por algarismo, e claro, primeiro o algarismo 1, depois o algarismo 4
e, em seguida, o algarismo 3. Logo, o sistema de computação segue o mesmo processo,
recebendo estes algarismos não como o numero 143, mas sim um texto com caracteres
codificados segundo o código de armazenamento interno utilizado (na maioria dos casos e o
código ASCII).
Seriam, portanto, introduzidos (digitados) os seguintes valores binários:
00110001 (algarismo 1 em ASCII);
00110100 (algarismo 4 em ASCII);
00110011 (algarismo 3 em ASCII).
Qualquer que tenha sido a linguagem de programação utilizada para escrever o programa,
este devera ser convertido para um outro programa equivalente, porém em linguagem de
máquina, denominado código-objeto e, em seguida, completado através do processo de ligação,
tornando-se um código executável pelo processador (os processos de compilação, que geram
código-objeto e código de ligação, que dão origem a códigos executáveis). A referida conversão
(compilação) também inclui os dados, que deverão ser alterados de modo a estarem em uma
forma apropriada para utilização pela unidade aritmética e lógica (UAL). Em outras palavras, se o
programa que vamos executar contiver um comando do tipo:
X:= A + B;
antes da sua execução teremos que, de alguma forma, introduzir um valor numérico
correspondente a "A" e um outro valor para "B", de modo que esses valores sejam lidos pela UCP
e somados na UAL. Para efetivar a soma, a UAL executa, passo a passo, uma série de microoperações (um algoritmo), como, por exemplo, verificar o sinal dos números, efetuando uma ou
outra ação diferente.
No entanto, dependendo da forma com que o dado foi definido no programa pelo
programador (ao escrever o programa em uma linguagem de alto nível), o referido algoritmo
poderá ser diferente (em cada passo serão realizadas micro-operações diferentes, de acordo
com o algoritmo realizado), embora o resultado final seja o mesmo. Ou seja, se o programador
definiu o dado como um valor inteiro, ele será representado de uma forma diferente, por exemplo,
da forma que ele seria internamente representado se o programador tivesse definido o mesmo
dado como sendo um valor fracionário. A operação aritmética, embora sendo a mesma (uma
soma, por exemplo), teria sua efetivação estabelecida por algoritmos diferentes, um para o caso
de soma com números representados sob a forma de inteiros e outro para o caso de uma soma
com números representados sob a forma de fracionários. Por exemplo:
Se A = +5 e B = -3, então, após a execução do comando, teremos: X = +2.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 4 de 5
Curso de Ciências da Computação
Se, por exemplo, A e B forem representados internamente de uma forma binária simples e
direta, com 16 bits, teríamos para cada um:
A = +5 = 0000000000000101
B = -3 = 1000000000000011
Nesse caso, o algoritmo que a UAL deve executar certamente será diferente, embora, no
final, os resultados sejam idênticos.
Esta diferença de formas de representação e respectivos algoritmos de realização das
operações matemáticas é bastante útil, pois cada uma tem uma aplicação onde é mais vantajosa
que a outra. Cabe ao programador à escolha da forma a ser utilizada pelo sistema, podendo ser
explicita, quando ele define as variáveis e constantes em seu programa, ou implícita, ao deixar
que o compilador faça sua própria escolha. A seguir são apresentados alguns exemplos de
definição de variáveis em determinadas linguagens, indicando-se, em cada caso, o tipo de dados
correspondente, estabelecido internamente no sistema.
Exemplo 1.1 Definição de variáveis em Pascal
Exemplo 1.2 Definição de variáveis em C
Exemplo 1.3 Definição de variáveis em Visual Basic
Exemplo 1.4 Definição de variáveis em Delphi
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 5 de 5

Documentos relacionados