segunda-feira, 9 de fevereiro de 2009

Introdução à Análise e ao Projeto de Software



Introdução à Análise
e ao Projeto de Software




O que é “Análise” e “Projeto”?
 Na Análise, investigamos o problema e descobrimos o QUE precisará estar no sistema.
 Durante o Projeto:
 detalhamos a análise de modo a encontrar uma solução computacional que satisfaça os requisitos do software
 Estruturamos COMO o sistema será implementado
 O Projeto oferece uma ponte entre a Análise e a Implementação.


O que é “Análise” e “Projeto”?
 A análise consiste de todas as atividades feitas com ou para o conhecimento do cliente. A informação produzida é aquela que o cliente deve discutir e aprovar.
 O projeto inclui as atividades que resultam em informação que interessa apenas ao programador.
 Com essa definição, a análise invade um pouco o "lado da solução", pois o cliente deve discutir alguns tipos de interações que ocorrerão na interface do usuário, etc.


Fases do desenvolvimento de Software
 Planejamento
 Análise de Requisitos
 Projeto
 Codificação
 Revisão
 Teste
 Documentação
 Manutenção


Processos de desenvolvimento de Software
 Modelo Cascata
 Modelo Iterativo e Incremental (RUPRational Unified Process)

Modelo Cascata
 Abordagem sistemática e seqüencial
 Processo organizado em fases distintas e separadas
 Baseado nos processos convencionais de engenharia
 Requer especificação completa e bem entendida
 Dificulta a introdução de mudanças após o início do processo




Modelo Cascata
 Problemas:
 projetos reais raramente seguem o fluxo seqüencial que o modelo propõe;
 logo no início é difícil estabelecer explicitamente todos os requisitos ;
 no começo dos projetos sempre existe uma incerteza natural
 propagação de erros pelas as fases do processo
 o cliente deve ter paciência.
 uma versão executável do software só fica disponível numa etapa avançada do desenvolvimento
 Contribuição:
 imposição de disciplina, planejamento e gerenciamento.


Modelo Iterativo e Incremental
 Divide o desenvolvimento de um produto de software em ciclos de desenvolvimento.
 Cada ciclo considera um subconjunto de requisitos.
 Especificação evolui junto com o sistema.
 Suporta requisitos parcialmente definidos.
Modelo Iterativo e Incremental



Modelo Iterativo e Incremental
 Vantagens X Desvantagem
 Incentiva a participação do usuário.
 Riscos do desenvolvimento podem ser mais bem gerenciados.
 Um risco de projeto é a possibilidade de ocorrência de algum evento que cause prejuízo ao processo de desenvolvimento, juntamente com as conseqüências desse prejuízo.
 Influências: custos do projeto,cronograma, qualidade do produto, satisfação do cliente, etc.Mais difícil de gerenciar X
 Mais difícil de Gerenciar.


Distribuição das Fases
Metodologias de Desenvolvimento de Software


 É uma abordagem para a produção de software viável e de alta qualidade
 APE (Ex.: Análise estruturada, Projeto Estruturado,Análise de sistemas estruturados)
 APOO (Ex.: Booch, OMT, OOSE)

Processo X Metodologia
 Processo: como organizar as fases de desenvolvimento
 Metodologia: como produzir os resultados de cada fase
 Portanto, diferentes combinações de modelos e metodologias podem ser formadas
 Cascata + APOO
 Cascata + Projeto Estruturado
 Iterativo + Projeto Estruturado
 Iterativo + APOO

sexta-feira, 6 de fevereiro de 2009

Engenharia de Software














Engenharia de Software
- Introdução






O que é Software?
 Segundo (Pressman, 2000):
 instruções (programas de computador) que, quando executadas, produzem a função e o desempenho desejados;
 estruturas de dados que possibilitam que programas manipulem adequadamente as informações;
 Documentos que descrevem a operação e uso dos programas.
 Segundo (Sommerville, 2002):
 Software é o conjunto de programas de computador,juntamente com a documentação e os dados de configuração necessários à sua operação

Características do Software
 É o Produto da Engenharia de Software.
 O Software é desenvolvido ou projetado por engenharia, não é fabricado no sentido clássico.
 Software não “se desgasta”
 Software não é sensível aos problemas ambientais que fazem com que o hardware se desgaste
 Toda falha indica erro de projeto ou implementação: manutenção do SW é mais complicada que a do HW
 Software não dá “avisos” de que pode falhar mais tarde. Em eletrônica, por exemplo, várias observações podem ser feitas periodicamente nos sinais para verificar o potencial de mau funcionamento.

O que é um software de qualidade?
 O software que satisfaz os requisitos solicitados pelo usuário. Deve ser fácil de manter, ter bom desempenho,ser confiável e fácil de usar.
 Alguns atributos de qualidade
 Manutenibilidade
 O software deve evoluir para atender os requisitos que mudam
 Eficiência
 O software não deve desperdiçar os recursos do sistema
 Usabilidade
 O software deve ser fácil de usar pelos usuários para os quais ele foi projetado

Qualidade de Software
(Um exemplo para varejo)
 Correto
 A loja não pode deixar de cobrar por produtos comprados pelo consumidor
 Robusto e altamente disponível
 A loja não pode parar de vender
 Eficiente
 O consumidor não pode esperar
 A empresa quer investir pouco em recursos computacionais(CPU, memória, rede)
 Amigável e fácil de usar
 A empresa quer investir pouco em treinamento






Qualidade de Software
(Um exemplo para varejo)
 Altamente extensível e adaptável
 A empresa tem sempre novos requisitos (para ontem!)
 A empresa quer o software customizado do seu jeito(interface,teclado, idioma, moeda, etc.)
 Aberto, compatível, de fácil integração com outros sistemas
 A empresa já tem controle de estoque, fidelização, etc.
 Portável e independente de plataforma (hw e sw)
 A empresa opta por uma determinada plataforma
 Baixo custo de instalação e atualização
 A empresa tem um grande número de PDVs .Mas...temos a crise de software
 Refere-se a um conjunto de problemas encontrados no desenvolvimento de software
 25% dos projetos são cancelados
 75% dos sistemas não funcionam como planejado
 os problemas são proporcionais a complexidade dos sistemas




Crise de Software
 1. As estimativas de prazo e de custo frequentemente são imprecisas
 O tempo de desenvolvimento é bem maior do que o estimado
 “Não dedicamos tempo para coletar dados sobre o processo de desenvolvimento de software”
 2. A produtividade das pessoas da área de software não tem acompanhado a demanda por seus serviços
 “Os projetos de desenvolvimento de software normalmente são efetuados apenas com um vago indício das exigências do cliente”

Crise de Software
 3. A qualidade de software às vezes é menos que adequada
 Só recentemente começam a surgir conceitos quantitativos sólidos de garantia de qualidade de software
 4. O software existente é muito difícil de manter
 A tarefa de manutenção devora o orçamento destinado ao software
 A facilidade de manutenção não foi enfatizada como um critério importante

Crise de Software
 estimativas de prazo e de custo ↑
 produtividade das pessoas ↓
 qualidade de software ↓
 software difícil de manter ↑




Causas da crise de software
 Causas mais óbvias
Pouco tempo dedicado para coletar dados sobre o desenvolvimento do software - resulta
em estimativas “a olho”
Comunicação entre o cliente e o desenvolvedor é muito fraca
Falta de testes sistemáticos e completos
Foguete Ariane 5

Foguete Ariane 5
 Projeto da Agência Espacial Européia que custou:
 10 anos.
 US$ 8 Bilhões
 Capacidade 6 toneladas.
 Garante supremacia européia no espaço.

Foguete Ariane 5
 Vôo inaugural em 04 de junho de 1996 Resultado
 Explosão 40 segundos após a decolagem.
 Destruição do foguete e carga avaliada em US$ 500milhões.

O que aconteceu?
 Fato: o veículo detonou suas cargas explosivas de autodestruição e explodiu no ar.
 Por que?Porque ele estava se quebrando devido às forças aerodinâmicas. Mas por que?
 O foguete tinha perdido o controle de direção.Causa disso?
 Os computadores principal e back-up deram shut-down ao mesmo tempo.

O que aconteceu?
 Por que o Shut-down? Ocorrera um run time error(out of range, overflow , ou
outro) e ambos computadores se desligaram. De onde veio este erro?
 Um programa que convertia um valor em ponto flutuante para um inteiro de 16 bits
recebeu como entrada um valor que estava fora da faixa permitida.Ironia...
 O resultado desta conversão não era maisnecessário após a decolagem...Boeing 787 Dreamliner
 O novo Boeing 787 Dreamliner oferece serviço de acesso à Internet aos seus passageiros. Boa idéia?
 SIM, mas não se a rede de acesso à Internet permitir também aceder aos sistemas de controle do próprio avião...

terça-feira, 16 de dezembro de 2008

Arquitetura Geral do Sistema de Computação(Sistemas Numéricos).



SISTEMAS NUMÉRICOS
SISTEMAS DE NUMERAÇÃO:
Sistemas de numeração são formas de representação de valores. Existem os sistemas nãoposicionais e os posicionais. Nos não-posicionais o símbolo não depende da posição. Por exemplo, os numerais romanos: o símbolo X vale 10 em qualquer posição que estiver no número, seja IX ou LXV. Já nos posicionais, o valor do símbolo muda com a posição. Por exemplo: o símbolo 6 dentro do número 625 significa o valor 600, mas no número 461 significa 60. Diariamente trabalhamos com o sistema posicional decimal, assim chamado por ter dez símbolos:


0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Como tem dez símbolos, dizemos também que possui base 10. Como sabemos, o computador funciona em binário, ou seja, representações de número somente com os símbolos 0 e 1. Este é um sistema de numeração com base 2 ou binário. Na eletrônica ainda é comum trabalhar-se com o sistema octal, que possui base 8, cujos símbolos são: 0, 1, 2, 3, 4, 5, 6, 7.
Para o endereçamento da memória do computador é utilizado o sistema de numeração hexadecimal, de base 16, formado pelos símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. São estes quatro sistemas de numeração que serão o fundamento do estudo da computação, sendo necessários para compreensão da organização de sua arquitetura. Para compreendermos melhor a relação entre eles, devemos estudar a conversão de uma base para outra.

CONVERSÃO ENTRE BASES:
De binário, octal, e hexadecimal para decimal:
Conversão de decimal para binário, octal e hexadecimal:
Para converter números da base 10 para outras bases, segue-se a seguinte regra:
parte inteira: divide-se o número a ser convertido pela base desejada; toma-se o quociente resultante e divide-se novamente pela base até que o quociente seja zero; os restos das divisões formam a parte inteira do número convertido; o primeiro resto representa o último dígito da parte inteira do número; o último quociente representa o primeiro dígito da parte inteira; parte fracionária: multiplica-se a parte fracionária do número a ser convertido pela base desejada; toma-se a parte fracionária do número resultante e repete-se a operação; a parte inteira dos produtos obtidos representam a parte fracionária do número procurado.

Para conversão de decimal para binário, temos o exemplo:
(174,25)10: 174 / 2 = 87 resto 0
87 / 2 = 43 resto 1
43 / 2 = 21 resto 1
21 / 2 = 10 resto 1
10 / 2 = 5 resto 0
5 / 2 = 2 resto 1
2 / 2 = 1 resto 0
último quociente: 1 ==> parte inteira: 10101110
0,25 x 2 = 0,50 inteiro 0
0,50 x 2 = 1,0 inteiro 1 ==> parte fracionária: 01
(174,25)10 = (10101110,01)2
De decimal para octal:
(749,97)10: 749 / 8 = 93 resto 5
93 / 8 = 11 resto 5
11 / 8 = 1 resto 3
último quociente: 1 ==> parte inteira: 1355
0,97 x 8 = 7,76 inteiro 7
0,76 x 8 = 6,08 inteiro 6
0,08 x 8 = 0,64 inteiro 0 ==> parte fracionária: 760
(749,97)10 = (1355,760)8
E de decimal para hexadecimal:
(155,742)10: 155 / 16 = 9 resto 11 (B)
último quociente: 9 ==> parte inteira: 9B
0,742 x 16 = 11,872 inteiro 11 (B)
0,872 x 16 = 13,952 inteiro 13 (D)
0,952 x 16 = 15,232 inteiro 15 (F) ==> parte fracionária: BDF
(155,742)10 = (9B,BDF)16

Conversão de binário para octal
Basta converter cada três símbolos binários em um octal, partindo-se da vírgula. Caso faltem símbolos para completar três, completa-se com zeros. Exemplo:
(010 101,110 1)2 = (25,64)8
Conversão de octal para binário:
O oposto do método anterior: pega-se cada valor e converte-se pela tabela em três símbolos binários. Exemplo:
(356,71)8 = (11 101 110,111 001)2
Conversão de binário para hexadecimal:
Semelhante a conversão de octal, apenas pegando cada quatro símbolos binários para um hexadecimal, convertidos a partir da tabela. Exemplo:
(1101 1010 0100,1010 11)2 = (DA4,AC)16

Conversão de hexadecimal para binário:
Oposto do método anterior. Exemplo:
(CAFE,01)16 = (1100 1010 1111 1110,0000 0001)2

Arquitetura Geral do Sistema de Computação(CPU).



UNIDADE CENTRAL DE PROCESSAMENTO
A Unidade Central de Processamento - UCP (em inglês, Central Processing Unity - CPU) é a responsável pelo processamento e execução dos programas armazenados na MP. As funções da UCP são: executar as instruções e controlar as operações no computador. Um programa, para ser efetivamente executado pelo processador, deve ser constituído de uma série de instruções de máquina. Para que a execução tenha início, as instruções devem ser armazenadas em células sucessivas, na MP.


Elemento comum a todos os microcomputadores: pastilha (chip) do microprocessador. O microprocessador funciona como a unidade central de processamento do microcomputador. Em essência é o cérebro do microcomputador, responsável pela atividade-fim do sistema, isto é, computar, calcular, processar. Sua velocidade determina a velocidade máxima do microcomputador; seus pinos de endereços e de dados determinam a capacidade da memória e o tamanho da palavra do microcomputador; e, seus pinos de controle determinam o tipo de interfaceamento de E/S.

Para que ocorra a execução de um programa executável é necessário que:
as instruções a serem executadas estejam armazenadas em células sucessivas na MP;
o endereço da primeira instrução do programa esteja armazenado na CPU para que o processador possa buscar essa primeira instrução.
A função da UCP consiste, então, em:
a) Buscar uma instrução na memória (operação de leitura), uma de cada vez;
b) Interpretar que operação a instrução está explicitando (pode ser soma de dois números, uma multiplicação, uma operação de entrada ou de saída de dados, ou ainda uma operação de movimentação de um dado de uma célula para outra);
c) Buscar os dados onde estiverem armazenados, para trazê-los até a UCP;
d) Executar efetivamente a operação com os dados, guardar o resultado (se houver algum) no local definido na instrução; e, finalmente;
e) Reiniciar o processo apanhando nova instrução.

Estas etapas compõem o que se denomina um ciclo de instrução. Este
ciclo se repete indefinidamente até que o sistema seja desligado, ou ocorra algum tipo de erro, ou seja, encontrada uma instrução de parada.
Em suma, o microprocessador executa as seguintes funções básicas:
Provê os sinais de controle e de temporização para todos os elementos do microcomputador;
Busca instruções e dados de memória;
Transfere dados de e para dispositivos de E/S;
Decodifica instruções;
Executa operações aritméticas e lógicas determinadas por instruções;
Responde a sinais de controle gerados por E/S tais como RESET e INTERRUPÇÃO.
Organização de um computador simples com uma CPU e dois dispositivos de E/S:
A CPU (microprocessador) é composta por várias partes distintas: unidade de controle; registradores; unidade lógica e aritmética.

Unidade de controle: responsável por buscar, interpretação (decodificação das instruções da memória principal), e controle da execução das instruções (geração dos sinais de controle necessários para que a ULA e as seções de registradores executem estas instruções). Também controla a ação dos demais componentes de um sistema de computação (memória, entrada/saída).

É o dispositivo mais complexo da UCP. Possui a lógica necessária para realizar a movimentação de dados e instrução de e para a UCP, através de sinais de controle, que emite em instantes de tempo programados. Este dispositivo controla a ação da ULA. Os sinais de controle emitidos pela UC ocorrem em vários instantes durante o período de realização de um ciclo de instrução e, de modo geral, todos possuem uma duração fixa e igual, originada em um gerador de sinais usualmente conhecido como relógio (clock).

A área de controle de uma UCP é a parte funcional que realiza (uma etapa de cada vez, em sistemas de execução serial, ou várias etapas simultaneamente, em sistemas de execução “pipelining”) as atividades de:
a) Busca de instrução que será executada, armazenando-a em um registrador especialmente projetado para esta finalidade;
b) Interpretação das ações a serem desencadeadas com a execução da instrução (se é uma soma, uma subtração, uma complementação, etc.);
c) Geração de sinais de controle apropriado para ativação requerida para a execução propriamente dita da instrução identificada. Esses sinais de controle são enviados aos diversos componentes do sistema, sejam internos da UCP (como a ULA) ou externos (como a memória ou E/S). Em outras palavras, a área de controle é projetada para entender o que fazer, como fazer e comandar quem vai fazer no momento adequado. Podemos fazer uma analogia com os seres humanos, imaginando que a área de controle é o cérebro que comanda o ato de andar, e as áreas do processamento são os músculos e ossos das pessoas que realizam efetivamente .

Registradores: são componentes de uma pequena memória de alta velocidade usados para armazenar resultados temporários, endereços, códigos de instruções e informações sobre o estado das várias operações do microprocessador (controle de informação). O registrador mais importante é o Contador de Programa (PC – Program Counter) que indica a próxima instrução a ser buscada para execução. Também importante é o Registrador de Instruções (IR – Instruction Register) que contém a instrução que está sendo executada no momento em questão.

Registrador de instrução (RI): registrador que tem a função específica de armazenar a instrução a ser executada pela UCP. Ao se iniciar um ciclo de instrução, a UC emite o sinal de controle que acarretará a realização de um ciclo de leitura para buscar a instrução na memória (uma cópia dela), e que, via barramento de dados e RDM, será armazenado no RI.

Contador de Instrução (CI): registrador cuja função específica é armazenar o endereço da próxima instrução a ser executada. Tão logo a instrução que vai ser executada seja buscada (lida) da memória para a UCP (início do ciclo de instrução), o sistema providencia a modificação do conteúdo do CI de modo que ele passe a armazenar o endereço da próxima instrução na seqüência. Por isso, é comum definir a função CI como sendo a de “armazenar o endereço da próxima instrução”, que é o que realmente ele faz durante a maior parte da realização de um ciclo de instrução. O CI é um registrador crucial para o processo de controle e de seqüenciamento da execução dos programas.

Registrador de Endereço na Memória (REM) (Memory Address Register): registrador que armazena temporariamente o endereço de acesso a uma posição da memória ao se iniciar uma operação de leitura ou escrita. (usado para endereços de dados, enquanto que o PC é usado para endereços de instruções).

Registrador de Dados da Memória (RDM) (Memory Buffer Register): registrador que armazena temporariamente a informação que está sendo transferida da MP para a CPU, ou da CPU para a MP.
Registrador de Estado: consiste em bits individuais com significado diferente atribuídos pelo fabricante do microprocessador. Os principais bits de estado, comumente encontrados nos processadores são:

- Sinal – contém o sinal resultante da última operação aritmética realizada pelo processador;
- Overflow – quando setado (=1) indica que a última operação aritmética realizada resultou em estouro do valor, um erro;
- Zero – quando setado (=1) indica que a última operação realizada resultou em valor zero;
- Vai 1 (carry) – indica que ocorreu um “vai 1” para o bit mais a esquerda na última operação de soma realizada;
- Paridade – é setado (=1) ou (0), dependendo da quantidade de bits no byte recebido.

Decodificador de Instrução: dispositivo utilizado para identificar as operações a serem realizadas, que estão correlacionadas à instrução em execução. Em outras palavras, cada instrução é uma ordem para que a UCP realize uma determinada operação. Como são muitas instrução, é necessário que cada uma possua uma identificação própria e única. A unidade de controle está, por sua vez, preparada para sinalizar adequadamente aos diversos dispositivos da UCP, conforme ela tenha identificado a instrução a ser executada. O decodificador recebe na entrada um conjunto de bits previamente escolhidos e específicos para identificar uma instrução de máquina (cada instrução tem um valor próprio) e possui 2N saídas, sendo N a quantidade de algarismos binários do valor de entrada.

Unidade de aritmética e lógica (ULA ou UAL): área do computador cuja função reside na realização das operações aritméticas e lógicas requeridas para instruções de máquina. Qualquer ULA é um aglomerado de circuitos lógicos e componentes eletrônicos simples e de alta velocidade, que integrados realizam as operações matemáticas e lógicas.

Vimos que processamento de dados é a ação de manipular um ou mais valores (dados) em certa seqüência de ações, de modo a produzir um resultado útil. O resultado muda conforme o tipo de operação realizada. Por exemplo, se uma instrução define que deve ser realizada uma operação de adição sobre os valores A = 5 e B = 3, o sistema, ao interpretar a instrução, gera as ações subseqüentes que redundarão no resultado igual a 5+3 = 8. Por outro lado, se o sistema interpretar uma outra instrução que define a operação de subtração, ele deve gerar outras ações de modo que o resultado seja 5-3 = 2 (e não mais 8). Processar o dado é executar com ele uma ação que produza algum tipo de resultado. Este é, pois, a atividade-fim do sistema; ele existe para processar dados.

O dispositivo principal desta área de atividade de uma UCP é chamado ULA – Unidade Lógica e Aritmética. Os demais componentes relacionados com a função processamento são os registradores, que servem para armazenar dados (ou para guardar resultados) a ser usados pela ULA. A interligação entre estes componentes é efetuada pelo barramento interno da UCP.

Diagrama simplificado de uma ULA típica de um microprocessador:
Microcomputadores mais antigos:
utilização de dois tipos de processadores, sendo um exclusivamente para realizar operações aritméticas com valores fracionários, representados em pontos flutuantes. Tais processadores eram denominados co-processadores matemáticos.

Microcomputadores atuais: todos os modelos de processadores fazem uso de um modelo de arquitetura onde estão integradas numa mesma pastilha, uma ULA responsável pela operação com valores inteiros e uma ULA para valores fracionários. No caso do Pentium há duas ULAs escalares para valores inteiros, denominada Aritmetic and Logic Unit e uma ULA que executa operações aritméticas de valores fracionários, denominada Point Floating Unit.
A maioria dos modernos microprocessadores tem unidades lógicas e aritméticas que são capazes de realizar uma grande variedade de operações lógicas e aritméticas. Estas operações podem envolver dois ou um único operando.

OPERAÇÕES COM UM OPERANDO:
1. CLEAR (LIMPE). Todos os bits do operando são zerados.
2. COMPLEMENTAÇÃO (ou INVERSÃO). Todos os bits são mudados para o seu nível lógico oposto.
3. INCREMENTA. O operando é aumentado de 1. Por exemplo, se o operando for 11010011, a ele será somado 00000001 pela ULA, para produzir um resultado igual a 11010100
4. DECREMENTA. O operando é diminuído de 1. Em outras palavras o número 00000001 é subtraído do operando.
5. DESLOCAMENTO (“SHIFT”). Os bits do operando são deslocados de uma posição para a direita ou esquerda e o bit vago é preenchido com 0. Este processo está ilustrado abaixo para uma operação de DESLOCAMENTO PARA A ESQUERDA (“SHIFT-LEFT”).
Na maioria dos microprocessadores o bit que cai fora não é perdido, em vez disso, ele é deslocado para o bit do flag de Vai 1 do registrador de estado. Como está ilustrado no exemplo de DESLOCAMENTO PARA A DIREITA.
DESLOCAMENTO PARA A DIREITA (“SHIFT-RIGHT”).
6. ROTAÇÃO (“ROTATE”). Esta é uma operação de DESLOCAMENTO modificada na qual o flag C torna-se parte de um registrador de deslocamento circular, juntamente com o operando, isto é, o valor colocado para fora do operando é colocado um C e o valor de C é colocado no bit vago do operando. Isto está ilustrado abaixo para uma operação de ROTAÇÃO À DIREITA.
OPERAÇÕES COM DOIS OPERANDOS:
1. SOMA (ADD). A ULA produz a soma binária dos dois operandos. Geralmente, apenas um dos operandos vem de um registrador, outro vem da memória e o resultado é enviado para ao registrador. Se a adição dos dois operandos produzir um vai-um, o flag de Vai-Um, C, no registrador de estado é feito 1. Caso contrário, C é levado para zero. Em outras palavras, C serve como um nono bit do resultado.
2. SUBTRAÇÃO. A ULA subtrai um operando (obtido da memória) do segundo operando (o registrador) e coloca o resultado no registrador.
3. COMPARAÇÃO. Esta operação é o mesmo que a subtração com a exceção de que o resultado não é colocado no registrador. Comparação é executada somente como um meio de determinar qual operando é maior, sem afetar o conteúdo do registrador.
4. E LÓGICO. Os bits correspondentes dos dois operandos sofrem a operação E e o resultado é colocado no registrador. Um dos operandos é sempre o registrador e o outro vem da memória.
5. OU LÓGICO. Os bits correspondentes dos dois operandos sofrem a operação OU e o resultado é colocado no registrador.
6. OU-EXCLUSIVO. Os bits correspondentes dos dois operandos sofrem a operação OU-EXCLUSIVO e o resultado é colocado no registrador.

Paralelismo (pipeline)
Os arquitetos de computadores estão sempre se esforçando para melhorar o desempenho das máquinas que projetam. Fazer com que os chips funcionem com maior rapidez aumentando suas velocidades de relógio é um modo. Por consequência grande parte dos arquitetos de computadores busca o paralelismo (fazer duas ou mais coisas ao mesmo tempo) como meio de conseguir desempenho ainda melhor para a velocidade de relógio.

O paralelismo tem duas formas gerais, a saber:
paralelismo no nível da instrução: corresponde ao paralelismo explorado dentro de instruções individuais para obter da máquina mais instruções por segundo.
paralelismo no nível de processador: consiste em várias CPU’s trabalhando juntas no mesmo problema.

Ao descrever o funcionamento da UCP na realização de seus ciclos de instrução foi observado que, embora o ciclo de instrução seja composto de várias etapas, ele é realizado basicamente de forma seqüencial, isto é, uma etapa se inicia após a conclusão da anterior. Este tipo de arquitetura de computadores é denominado SISD (Single Instruction Stream, Single Data Stream) e refere-se a processadores que executam uma instrução completa de cada vez, seqüencialmente.

Ciclo de instrução em execução seqüencial
O tempo total da execução é a soma dos tempos gastos em cada etapa.
O processo de execução seqüencial é semelhante ao processo de fabricação de automóvel caso ainda existisse uma fábrica que funcionasse em montagem seqüencial:
carroceria: tempo T1; motor: T2; rodas: T3; parte elétrica: T4; bancos: T5; acabamento final: T6.
Tempo para finalizar a fabricação: T = T1 + T2 + T3 + T4 + T5 + T6. Somente após a conclusão total de um carro é que que se iniciaria a montagem de outro carro. Portanto, a fábrica produziria, em X horas, um total de X/T carros, o que seria um valor pequeno.

Metodologia inventada no início do século XX por Henry Ford e atualmente seguida pela maioria das indústrias. Consiste em dividir o processo de fabricação em estágios independentes (que por isso podem se superpor, uns aos outros no tempo), ou seja, um item pode iniciar a sua fabricação antes que um item anterior termine sua montagem, denominando-se linha de montagem (em inglês “pipeline”). A metodologia de construção composta de estágios permitiu que também nos sistemas de computadores se adotasse esta técnica.

A característica fundamental do processo de pipelining reside em duas premissas básicas:
a) a divisão do processo (seja de fabricação de um automóvel, de uma TV ou o ciclo de instrução de uma CPU) em estágios de realização independentes um do outro; e,
b) um novo produto (automóvel, TV ou instrução) inicia o seu processo de fabricação ou execução antes do anterior concluir seu processo.
Pipeline de 5 estágios:

O estágio 1 busca a instrução na memória e a coloca em um buffer até que ela seja necessária.
O estágio 2 decodifica a instrução, determina seu tipo e de quais operandos ela necessita.
O estágio 3 localiza e busca os operandos, seja nos registradores, seja na memória.
O estágio 4 é que realiza o trabalho de executar a instrução.
Por fim o estágio 5 escreve o resultado de volta no registrador adequado.
Estado de cada estágio como uma função do tempo.

Durante o ciclo de relógio 1, o estágio S1 está trabalhando na instrução 1, buscando-a na memória. Durante o ciclo 2, o estágio S2 decodifica a instrução 1, enquanto o estágio S1 busca a instrução 2. Durante o ciclo 3, o estágio S3 busca os operandos para a instrução 1, o estágio S2 decodifica a instrução 2, e o estágio S1 busca a terceira instrução. Durante o ciclo 4, o estágio S4 executa a instrução 1, S3 busca os operandos para a instrução 2, S2 decodifica a instrução 3 e S1 busca a instrução 4. Por fim, durante o ciclo 5, S5, escreve (grava) o resultado da instrução 1 de volta no registrador, enquanto os outros estágios trabalham nas instruções seguintes.



MEMÓRIA
Componente de um sistema de computação cuja função é armazenar as informações que são (ou serão) manipuladas por esse sistema, para que elas (as informações) possam ser prontamente recuperadas quando necessário. Na prática, em um sistema de computação não é possível construir e utilizar apenas um tipo de memória. A memória de um computador é constituída de vários componentes (vários tipos diferentes de memória) interligados e integrados. Isto é feito em virtude de:


Velocidade da CPU muito maior que o tempo de acesso da memória. Isto ocasiona atrasos na transferência de bits entre memória e CPU e vice-versa.
Necessidade de aumento da capacidade de armazenamento, em face do aumento do tamanho dos programas.
Em suma, os fatores, velocidade e capacidade, indicam a necessidade de se projetar não um único tipo de memória (com elevada velocidade e grande capacidade, mas de custo altíssimo), mas sim um conjunto de memórias com características diferentes.


A memória de um sistema de computador tem a função de armazenar dados e instruções e é organizada em posições, que podem ser visualizadas como elementos em uma matriz. Cada elemento tem um endereço. Assim, pode-se falar de uma memória que tenha x posições: cada posição pode ser referenciada diretamente de acordo com a sua colocação na seqüência. Por exemplo, se uma memória tem 4096 posições, existem posições de memória 0, 1, 2, 3,...., 4094 e 4095. Quando um destes números aparece nos circuitos de controle conectados à memória, o conteúdo (o valor que está na posição) será trazido da memória para os circuitos da unidade de processamento ou a informação na unidade de processamento será armazenada na memória, dependendo do trabalho associado com o endereço.


A menor quantidade de informação disponível em qualquer computador é o bit. A principal unidade de informação é um grupo de bits, denominado palavra. O número de bits que formam uma palavra é denominado tamanho da palavra do computador. Muitas vezes os computadores são descritos em termos do tamanho da sua palavra, que também indica a largura do barramento de dados. Uma palavra armazenada numa posição de memória pode conter dois tipos de informação: instruções ou dados. Para as instruções, armazenadas em código binário, o conteúdo armazenado na memória são comandos que levam à execução de alguma tarefa. Os dados podem ser informações numéricas ou alfanuméricas, que podem estar em vários formatos: números binários com e sem sinal, números em BCD compactado, números em ponto flutuante, caracteres em BCD ou ASCII. Apesar de existirem diversos formatos lógicos de armazenamento para dados, não se deve esquecer que, fisicamente, informações são armazenadas como seqüências de 0 e 1 e que, mais importante ainda, o computador não tem como saber a diferença entre dois conteúdos. É responsabilidade do programador conhecer os tipos de dados que estão sendo armazenados, para assegurar que o programa possa interpretá-los e processá-los corretamente.


Endereço e locação de memória: O endereço é um número que identifica a posição (locação) de uma palavra na memória. Cada palavra armazenada em qualquer dispositivo ou sistema de memória possui um único endereço, expresso como números binários ou, por conveniência, hexadecimais. Cada locação de memória possui um endereço associado, onde estão presentes os dados a serem acessados.


Operação de leitura: Ao ler o conteúdo de um endereço, o computador faz uma cópia do conteúdo. Dessa forma, a operação de leitura é chamada de não destrutiva (operação de busca).
Operação de escrita: Quando o computador acessa uma posição de memória e escreve um dado, o conteúdo anterior é completamente perdido. Assim, toda operação de escrita pode ser chamada de destrutiva (operação de armazenamento).

Tempo de acesso: Medida da velocidade do dispositivo de memória. Quantidade de tempo necessária à efetivação de uma operação de leitura (tempo decorrido entre o momento da recepção pela memória de um novo endereço e o instante em que a informação daquele endereço fica disponível).
Memória volátil: Memória que necessita de energia elétrica para reter a informação armazenada. Se a energia for retirada, toda a informação armazenada será perdida.
Memória não-volátil: Memória que não necessita de energia elétrica para reter a informação armazenada.


ROM (read only memory) – memória apenas para leitura: São memórias a semicondutor usadas para armazenar dados e instruções permanentes, que o computador deve executar freqüentemente ou durante a inicialização do sistema. Normalmente o conteúdo de uma ROM é gravado no circuito integrado, não podendo ser alterado (não voláteis). Aplicações: firmware, memória de partida fria (bootstrap), tabelas de dados, conversores de dados, geradores de caracteres e de funções. A principal característica da memória ROM é o fato de que suas informações vêm geralmente gravadas de fábrica e são, portanto utilizadas durante toda sua vida útil para as mesmas atividades.
Os diversos tipos de ROMs existentes no mercado diferem no modo de programação e na possibilidade de apagamento e de reprogramação. Algumas variações da ROM são:


PROM - Programmable Read Only Memory ou memória apenas de leitura, programável. Esta memória é uma ROM programável (em condições e com máquinas adequadas, chamadas queimadores de PROM) e geralmente é comprada "virgem" (sem nada gravado), sendo muito utilizada no processo de testar programas no lugar da ROM, ou sempre que se queira produzir ROM em quantidades pequenas. Uma vez programada (em fábrica ou não), não pode mais ser alterada.


EPROM - Erasable Programmable Read Only Memory ou memória apenas de leitura, programável (com queimadores de PROM) e apagável (com máquinas adequadas, à base de raios ultra-violeta). Esta memória é uma PROM apagável. Tem utilização semelhante à da PROM, para testar programas no lugar da ROM, ou sempre que se queira produzir ROM em quantidades pequenas, com a vantagem de poder ser apagada e reutilizada.


EEPROM (ou E2PROM) - Electrically Erasable Programmable Read Only Memory ou memória apenas de leitura, programável e eletronicamente alterável. Também chamada EAROM (Electrically Alterable ROM). Esta memória é uma EPROM apagável por processo eletrônico, sob controle da UCP, com equipamento e programas adequados. É mais cara e é geralmente utilizada em dispositivos aos quais se deseja permitir a alteração, via modem, possibilitando a carga de novas versões de programas à distância ou então para possibilitar a reprogramação dinâmica de funções específicas de um determinado programa, geralmente relativo ao hardware (p.ex., a reconfiguração de teclado ou de modem, programação de um terminal, etc).


RAM (random access memory) – memória de acesso aleatório: São memórias de leitura e escrita, usadas para o armazenamento temporário de dados. As memórias RAM são voláteis. Nas memórias RAM, a localização física real de uma palavra não tem efeito sobre o tempo de leitura ou escrita (o tempo de acesso é constante para qualquer endereço). Aplicação: memória principal e caches.


Entre os principais tipos de RAM temos:
DRAM (dinamic random access memory) – RAM dinâmica: Memórias RAM a semicondutor nas quais a informação armazenada não permanecerá armazenada, mesmo em presença de alimentação do circuito, a não ser que a informação seja reescrita na memória com determinada freqüência (operação de recarga ou refresh da memória). Características: alta capacidade de armazenamento, baixo consumo de potência, velocidade de operação moderada e custo/byte relativamente baixo. Principal tecnologia de implementação de memórias RAM, constituindo-se na representação de números binários 0 e 1 a partir do carregamento de milhares ou milhões de microcapacitores reenergizados pela passagem de correntes pelas células a cada dezena de milissegundos.

SRAM (static random access memory) – RAM estática: Memórias RAM nas quais a informação permanecerá armazenada enquanto houver energia elétrica aplicada à memória, sem que haja necessidade da informação ser permanentemente reescrita na memória. Características: baixa capacidade de armazenamento, alta velocidade de operação (baixo tempo de acesso) e alto custo/byte. A principal limitação da DRAM, a velocidade, é a principal vantagem da SRAM. Estima-se que o tempo de acesso aos dados na SRAM sejam cerca 25% do tempo de acesso a DRAMs. Uma outra vantagem diz respeito a desnecessidade de reenergização. No entanto, uma grande limitação é decorrente de seu alto custo, o que faz com que esta tecnologia seja usada mais comumente em estruturas cache. Utilizam flip-flops (bipolares ou MOS) como células de armazenamento.


Memórias de acesso seqüencial (SAM): Utilizam registradores de deslocamento para armazenar os dados que podem ser acessados de forma seqüencial, não podendo ser utilizadas na memória principal (baixa velocidade de acesso). Aplicações: armazenamento e transmissão seqüencial de dados codificados em ASCII, osciloscópios digitais e analisadores lógicos, memórias FIFO.


Memórias FIFO (first in first out) – primeiro a entrar, primeiro a sair: Memória seqüencial que utiliza registradores de deslocamento, na qual as palavras são descarregadas na saída de dados na mesma ordem em que entraram pela entrada de dados. Aplicação: operação de transferência de dados entre sistemas operando em velocidades muito diferentes (buffers de impressora ou teclado).


Hierarquia de memória: a hierarquia de memória de um computador é caracterizada por cinco parâmetros: tempo de acesso, tamanho da memória, custo por byte, largura de banda (bandwidth) da transferência e unidade de transferência (bytes). A hierarquia de memória em microcomputadores possui quatro níveis, compostos de: memória secundária, memória principal, caches e registradores.


Memória secundária ou de massa ou auxiliar: Armazena uma grande quantidade de informação, sendo bem mais lenta que a memória principal, e sempre é não-volátil. As informações armazenadas nos dispositivos de memória de massa são transferidas para a memória principal quando forem necessárias ao computador. Exemplos deste tipo de elemento são as fitas magnéticas, os disquetes e os HDs (hard disks).


Memória principal ou primária: Serve para armazenar as instruções e os dados que estão sendo usados pelo processador. Implementada por chips de memórias DRAM. Controlada por uma MMU (memory manegement unit – unidade de gerência de memória) em cooperação com o sistema operacional.

Memória cache: Formada por uma pequena quantidade de memória SRAM, com alta velocidade de acesso. Armazena dados com grande probabilidade de reutilização, evitando outros acessos à memória principal, diminuindo o tempo de acesso ao dado. Existem dois tipos de memória cache, dependendo da localização em relação ao microprocessador: cache interna ou primária ou L1 (com pequena capacidade, geralmente de 32 kbytes), e cache "externa" (integrada) ou secundária ou L2 (com capacidade média de 256 a 512 kbytes).


Registradores: São dispositivos de armazenamento temporário, localizados na UCP, extremamente rápidos, com capacidade para apenas um dado (uma palavra). Devido a sua tecnologia de construção e por estar localizado como parte da própria pastilha ("chip") da UCP, é muito caro. O conceito de registrador surgiu da necessidade da UCP de armazenar temporariamente dados intermediários durante um processamento. Por exemplo, quando um dado resultado de operação precisa ser armazenado até que o resultado de uma busca da memória esteja disponível para com ele realizar uma nova operação.


Memória Virtual: É um percentual do disco rígido, reservado para operações do sistema operacional. Ela é criada, administrada e utilizada pelo Sistema Operacional, particularmente o Windows em todas as suas versões. As informações nela manipuladas, ficam armazenadas em um tipo de arquivo, chamado ARQUIVO DE PAGINAÇÃO. Tanto este arquivo com o tamanho desta memória VIRTUAL, podem ser alterados / verificados, através do Painel de Controle do Windows.


Tipo Capacidade Velocidade Custo Localização Volatilidade
Registrador Bytes muito alta muito alto UCP Volátil
Memória Cache Kbytes alta alto UCP/placa Volátil
Memória Principal Mbytes Média médio Placa Volátil
Memória Auxiliar Gbytes Baixa baixo Externa Não Volátil
A UCP vê nesta ordem e acessa primeiro a que está mais próxima. Subindo na hierarquia, quanto mais próximo da UCP, maior velocidade, maior custo, porém menor capacidade de armazenamento.

Memória Principal
Conforme foi definido anteriormente, Memória Principal é a parte do computador onde programas e dados são armazenados para 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 sobregravada por outra informação. Quem controla a utilização da memória principal é o Sistema Operacional.

Estrutura da Memória Principal – Células e Endereços:
A memória precisa ter uma organização que permita ao computador guardar e recuperar informações quando necessário. Não teria nenhum sentido armazenar informações que 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 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" da célula) e tem um tamanho fixo (para 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 têm 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.
Unidade de transferência é a quantidade de bits que é transferida da memória em uma única operação de leitura ou transferida para a memória em uma única operação de escrita. O tamanho da célula poderia ser igual ao da palavra, e também à unidade de transferência, porém por razões técnicas e de custo, são freqüentemente diferentes.
OBS.: Uma célula não significa o mesmo que uma palavra; uma célula não necessariamente contém uma palavra.

Palavra: é a unidade de processamento da UCP. Uma palavra deve representar um dado ou uma instrução, que poderia ser processada, armazenada ou transferida em uma única operação. No entanto, em geral não é assim que acontece e os computadores comerciais não seguem um padrão único para a organização da UCP e MP. Computadores comerciais (tais como por exemplo, os baseados nos processadores Intel 486) podem ter o tamanho da palavra definido como de 32 bits, porém sua estrutura de memória tem células de 16 bits.

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?
- O tamanho mais comum de célula era 8 bits (1 byte); hoje já são comuns células contendo vários bytes.

Arquitetura Geral do Sistema de Computação(Barramentos).



BARRAMENTOS
Para que o computador possa oferecer recursos e possibilidades diversas de uso ao usuário, é necessário a utilização de dispositivos adicionais, como placas de vídeo e de som, modem, disco rígido, teclado, etc. Estes componentes são conhecidos como Dispositivos de Entrada (teclado e mouse, por exemplo) e Saída (placa de vídeo e som, por exemplo). Em inglês, utiliza-se a sigla I/O, de Input/Output.


O barramento consiste de múltiplas linhas condutoras, cada uma permitindo a passagem de um bit de informação. Tais barramentos possuem diferentes tamanhos (quantidade de bits), dependendo do modelo do processador utilizado.
Para que o processador possa trabalhar com esses dispositivos, ele usa um barramento para se comunicar. Assim é possível que o processador envie informações (por exemplo, os dados para uma impressora, quando você pede para imprimir um arquivo) e receba (por exemplo, quando você digita algo no teclado).

Esse barramento é conhecido como "barramento de dados" (ou data bus). No entanto, quando o processador trabalha com a memória, ele faz uso de um "barramento de endereços" (também chamado de "clock externo"), pois através de um "endereço" é que o processador localizará os dados que precisa e que estão armazenados na memória do computador. É também por este barramento que o processador consegue determinar para qual dispositivo serão enviados os dados tratados. Seu valor é medido em Hz.

Os processadores possuem terminais ou pinos de contato (vulgarmente chamados de "perninhas"). Cada um destes pinos possui uma função e trabalha com um bit por vez. Assim, quando se diz que o barramento de dados trabalha a 16 bits, isso quer dizer que, pelo menos teoricamente, o processador destina 16 "perninhas" para esta função. A mesma regra vale para o barramento de endereços, ou seja, este também trabalha com uma certa quantidade de pinos, correspondentes à quantidade de bits.

A largura ou tamanho é a unidade de medida que caracteriza a quantidade de informações (bits em geral) que pode fluir simultaneamente pelo barramento. No caso de fiação, consiste na quantidade de fios paralelos existentes no barramento, ao passo que, em circuitos impressos (placas) consiste nos traços impressos na placa com material condutor, por onde flui a corrente elétrica.

Esta largura,maior ou menor, se constitui também em um dos elementos que afetam a medida do desempenho de um sistema, juntamente com a duração de cada bit ou sinal. A taxa de transferência que é, em geral, especificada em bits (kbits, Mbits, etc) por segundo depende fundamentalmente da largura do barramento.
Um barramento ou via ou bus é um conjunto de pinos do microprocessador por onde trafegam um ou mais sinais de hardware. Um microprocessador possui três tipos de barramentos utilizados para transporte: bus de dados, bus de endereços e bus de controle.

Barramento de dados: Barramento bidirecional, utilizado para realizar o intercâmbio de dados e instruções com o exterior. Uma das principais características de um microprocessador é o número de bits que o barramento de dados pode transferir, que determina se o processador é de 8, 16, 32 ou 64 bits. Determina o número de bits da palavra de dados que pode ser transferida de/para o microprocessador e, também (quase sempre) o tamanho da palavra de dados que pode ser operada pela ALU.

Barramento de endereços: Barramento unidirecional, constituído de um conjunto de linhas de endereço que indicam a posição de memória onde se encontra o dado requisitado. Uma vez dada a posição, a informação armazenada na memória passará à CPU através do barramento de dados. Define a quantidade de posições de memória e/ou de portas de entrada/saída que podem ser acessadas pelo microprocessador (para n bits do barramento de endereços, 2n bytes de memória podem ser endereçados, ou seja, 2n endereços físicos podem ser acessados – capacidade de endereçamento).

Barramento de controle: Barramento bidirecional, formado por um número variável de linhas, através das quais se controlam as unidades complementares (habilitação e desabilitação das memórias para leitura e escrita, permissão para periféricos ou coprocessadores acessarem as vias de dados e endereços). Transfere, para as diversas partes do sistema, sinais que definem e orientam toda a sua operação.

Os processadores atuais possuem vários pinos (no mínimo, 400). Somente analisando friamente a arquitetura de cada tipo de processador existente, é possível saber qual a função de cada um. Os processadores, no entanto, possuem algumas funções-padrão, ou seja, encontráveis em praticamente todos os processadores, independente do fabricante. Estas são conhecidas como "sinais de controle" (ou "sinais digitais"), também correspondem a pinos no chip do processador e algumas delas são citadas abaixo:

MIO: sinal para indicar se a operação em questão é de acesso à memória ou de E/S;
RW: sinal para indicar se a operação em questão é de leitura ou gravação;
INT: sinal para que dispositivos externos possam interromper o processador para que ele efetue uma operação que não pode esperar. Por exemplo, quando o HD interrompe o processador para avisar o término de uma operação de leitura. Como existe somente um sinal INT, o processador opera em conjunto com um mecanismo denominado "Controlador de Interrupções" (que trabalha com as conhecidas IRQs). Como vários dispositivos podem requisitar o processador num mesmo instante, através deste controlador é possível realizar todas as operações de forma organizada;

NMI: sinal de interrupção especial, usado em emergências, onde a interrupção enviada por este sinal deve ser atendida prontamente. O NMI geralmente é usado informar erros relacionados a dados na memória;
INT A: sinal usado para que o processador informe que aceitou uma interrupção e que está aguardando que o dispositivo que a gerou passe as instruções;
VCC: entrada de corrente elétrica que alimenta os circuitos internos do processador (pode haver vários VCC no processador);
GND: sinal usado para controle de energia (como se fosse um fio-terra). Também pode ser encontrados vários destes sinais no processador;
RESET: sinal ligado ao botão RESET do gabinete do computador. Ao ser ativado, o processador pára o que está fazendo e inicia as operações novamente, como se o usuário tivesse acabado de ligar a máquina;
CLOCK: este recebe um sinal digital usado internamente para sincronizar todo o funcionamento do processador.

Bits internos
O número de bits é uma das principais características dos processadores e tem grande influência no desempenho. Os processadores mais comuns (Pentium II, III e 4, Athlon XP, Duron, etc) operam a 32 bits, enquanto chips antigos, como o 286, operavam com 16 bits. Estes valores correspondem ao trabalho dos circuitos do processador, por isso são chamados de bits internos. Existem também os processadores que trabalham a 64 bits por vez, como o Athlon 64, da AMD.
Quanto mais bits internos o processador trabalhar, mais rapidamente ele poderá fazer cálculos e processar dados em geral (conseqüentemente, ele será mais caro).

Bits externos
Como as instruções que o processador executa ficam armazenadas na memória, é preciso que ela seja acessada de forma rápida e precisa. Essa velocidade depende da quantidade de bits que o barramento de dados consegue manipular simultaneamente. Tais bits são chamados de bits externos.

Endereçamento
O endereçamento consiste na capacidade que o processador tem de acessar um número máximo de células da memória. Para acessar uma célula, o processador precisa saber o endereço dela.
Cada célula armazena um byte. Assim, um processador com o barramento de dados com 16 bits, pode acessar duas células por vez. Isso porque um byte equivale a 8 bits e 16 dividido por 8 é igual a 2, portanto, duas células.
Existem diversos tipos de barramentos, cada um com taxas de transferência de bits diferentes e apropriadas às velocidades dos componentes interconectados, sendo dessa forma, os barramentos organizados de maneira hierárquica.

Atualmente, os modelos de organização de sistemas de computação adotados pelos fabricantes possuem diferentes tipos de barramentos:
1) Barramento local: é o barramento de maior velocidade de transferência de dados, funcionando normalmente na mesma frequência do relógio do processador. Este barramento costuma interligar o processador aos dispositivos de maior velocidade (para não atrasar as operações do processador), que são a memória cache e a memória principal.
2) Barramento do sistema: alguns fabricantes adotam o modelo em que o barramento local interliga o processador à memória cache e esta se interliga à memória principal por outro barramento denominado barramento do sistema, de modo a não permitir acesso diretamente do processador à memória principal. Uma interface de controle sincroniza o acesso entre as memórias.
3) Barramento do expansão: onde se interligam os diversos dispositivos de E/S, como discos magnéticos, vídeos, impressoras, DVDs, CDROMs, etc. Este barramento se conecta ao barramento do sistema por interfaces de controle (conhecidas como pontes ou bridges) que sincronizam as diferentes velocidades dos barramentos. Devido às diferentes e acentuadas velocidades de funcionamento dos dispositivos atuais de E/S, os fabricantes de sistemas de computação têm criado alternativas para aumentar o desempenho nas transferências de dados, separando o barramento de expansão em dois, um de mais alta velocidade para dispositivos de E/S rápidos e outro de menor velocidade (modens, dispositivos seriais, etc)‏.

Exemplos de organização dos barramentos:
Embora os projetistas de CPUs tenham liberdade para usar qualquer tipo de barramento que quiserem dentro do chip, para possibilitar a ligação das placas projetadas por terceiros ao barramento do sistema é preciso haver regras bem definidas sobre o modo de funcionamento do barramento, às quais todos os dispositivos a ele ligados deve obedecer. Essas regras são denominadas protocolos de barramento.

Os mais conhecidos protocolos de barramentos de expansão são descritos a seguir:
UNIBUS (definido pela Digital Equipment Co. - DEC). Praticamente fora de uso;
MCA - Micro Channel Architecture (IBM). Nunca conseguiu adoção por outro fabricante, nem mesmo a IBM o adotou por completo, tendo sido abandonado;
ISA – Industry Standard Adapter (IBM). Apesar de possuir uma velocidade de transferência baixa, tem ainda sido adotado para os barramentos e periféricos de baixa velocidade.
EISA – Extended ISA (definido por um grupo de fabricantes para se opor ao MCA da IBM). Não conseguiu ser implantado devido a diversos problemas de especificação, sendo praticamente abandonados pelos fabricantes;
PCI - Peripherical Component Interconnect – desenvolvido pela Intel tornando-se quase um padrão para todo o mercado, como barramento de E/S de alta velocidade;

USB - Universal Serial Bus - tem a função particular de permitir a conexão de muitos periféricos simultaneamente ao barramento e este, por uma única tomada se conecta a placa-mãe;
AGP - Accelarated Graphics Port – barramento desenvolvido para vários fabricantes, porém liderados pela Intel, com o propósito de acelerar as transferências de dados do vídeo para a memória. Trata-se, pois de um barramento específico (para vídeo), não genérico, porém de alta velocidade de transferência para ligar vídeo diretamente à MP.
Slots: são conectores para se encaixar as placas de expansão de um micro, ligando-as fisicamente aos barramentos por onde trafegam dados e sinais. Podemos citar, placas de vídeo, placas de fax/modem, placas de som, placas de interface de rede, etc.

Arquitetura Geral do Sistema de Computação(Dispositivos de entrada e saída).



DISPOSITIVOS DE ENTRADA E SAÍDA
Englobam-se sob a denominação de Entrada e Saída (E/S) todas as atividades de troca de informações do computador com o meio externo. Basicamente, o computador pode utilizar atividades de entrada/saída com as seguintes finalidades:

• troca de informações com os usuários humanos do sistema, utilizando-se, para a entrada de informações ou para a exibição, dos chamados dispositivos periféricos. Estes dispositivos podem ser teclados, vídeos, mouses, impressoras, leitoras de cartões, etc.
• permitir ao computador acessar dispositivos de armazenamento para grandes conjuntos de dados, e que normalmente não podem ser mantidos todo o tempo em memória principal. Estes dispositivos são englobados sob a denominação de memória secundária e incluem, em geral discos e disquetes magnéticos, CD-Rom, discos magneto-óticos e fitas magnéticas.
• permitir ao computador comunicar-se com outros equipamentos, tais como outros computadores e outros equipamentos científicos e industriais, através de linhas telefônicas e equipamentos específicos requeridos por este tipo de comunicação (modens).

A arquitetura de E/S precisa especificar:
• um método para identificação do dispositivo a ser utilizado em uma operação de E/S;
• o endereço do dado, ou seja, a fonte do dado a ser transportado para uma operação de
saída ou o destino do dado em uma operação de entrada;
• a quantidade de dados a serem transportados;
• os métodos para determinar quando as operações de E/S tiverem terminado ou encontrarem dificuldades que impeçam o seu término.

Estes parâmetros não precisam ser necessariamente especificados a cada transferência, alguns deles podem ser convencionados de tal forma que estarão implícitos quando ocorrer o início da operação. Uma característica importante e fundamental da maioria dos dispositivos de E/S, sejam eles orientados ao intercâmbio de informações diretamente com o usuário ou atuando no armazenamento intermediário de informações, é que eles operam em velocidades consideravelmente mais lentas do que em processadores ou memórias (do tipo “primárias”). Assim, referências a dados ou interações com seres humanos consomem enormes quantidades de tempo em comparação a funções computacionais dentro de um par processador-memória. Por esta razão, o projeto de E/S é crucial para minimizar atrasos e o projeto de funções de E/S é normalmente sentido diretamente na arquitetura.

Dispositivos periféricos
A classe de dispositivos que são utilizados atualmente para realização de operações de entrada e saída (isto é, que atuam na troca de informações tendo de um lado um computador e do outro usuários humanos do sistema) é bastante ampla e diversa, apresentando um leque bastante variado de características e operação. Entre elas estão:

• impressoras: para criar cópia em papel ou similar, de textos e figuras. As impressoras variam em atributos, tendo com forma mais primitiva dispositivos que se assemelham a máquinas de escrever. Atualmente, as mais modernas utilizam como tecnologia a impressão a laser e podem imprimir até milhares de linha por minuto;

• monitores (ou telas): que mostram textos e figuras, ambos podendo ser formatados de diversas maneiras e utilizar várias cores. O tipo mais comum, utiliza um tubo não muito diferente de um tubo de televisão (tubo de raios catódicos). Atualmente, utiliza-se também visores de cristal líquido, que consomem menor quantidade de energia;

• dispositivos gráficos (ou plotters): que criam cópias impressas de gráficos e curvas de papel. Com o avanço tecnológico, as impressoras atualmente tem capacidade de produzir material gráfico de ótima qualidade, tendo sua maior limitação no campo (tamanho) de impressão. Os traçadores, dependendo das suas características podem produzir desenhos com mais de um metro de largura e comprimento limitado pela bobina de papel;

• dispositivos de exploração ótica: que podem ler diretamente documentos. Dentre os mais primitivos, pode-se citar as leitoras óticas de cartões ou folhas de marcas (como as usadas no vestibular para registro das respostas). Atualmente, existem dispositivos bem mais complexos como os scanners, que podem transferir para o computador imagens obtidas em figuras, textos e fotografias;

• dispositivos de apontamento: que podem indicar informações ao computador através do posicionamento de um cursor sobre a tela, como é o caso do mouse e da caneta luminosa (ou lightpen);
• teclado: que podem indicar informações ao computador através de caracteres, os quais são traduzidos em códigos binários antes de chagarem a UCP.

O âmbito de dispositivos utilizados por computadores para comunicar-se com os usuários encontra-se em expansão e melhorando em qualidade de interação. De forma a complementar os dispositivos recém-mencionados, há grandes avanços no campo do reconhecimento de voz e saída de voz.

Comunicação com outras máquinas
A troca de informações com outras máquinas também consiste em uma atividade de entrada e saída. Inicialmente, eram utilizadas para troca de informações entre computadores ou entre computador e algum periférico especial localizado dentro de um prédio, em salas próximas.

Atualmente são usadas para comunicação entre máquinas situadas geograficamente distantes, empregando linhas telefônicas e outros meios convencionais. Para isto, os sinais empregados devem seguir normas especiais, afim de não perturbar os serviços normais oferecidos pela rede telefônica. Estes serviços são utilizados em larga escala como, por exemplo: por bancos, para transferir informações referentes às transações, saldos, extratos, etc; por universidades e centros de pesquisa, para difusão de conhecimento e troca de informações; por empresas, para difusão de informações entre filiais e setores agregados ou junto a clientes, etc.

As características básicas desta atividade diferem das demais, principalmente devido à distância onde os elementos envolvidos estão colocados. Portanto, neste tipo de operação de E/S:
• existem equipamentos que operam eletricamente os dados para controlar nível de sinal, forma de transmissão, etc, que são os chamados “modens” (moduladoresdemoduladores);
• a informação está mais sujeita a ser modificada, com a introdução de erros, por efeito de ruído elétrico. Assim, em geral há necessidade de utilizar formas especiais de codificação;
• para evitar que haja muita perda de tempo no estabelecimento da comunicação, incluindo o envio de informações de controle, convém trabalhar com a transmissão de blocos de informação grandes. Isto faz com que, em cada bloco de informação transmitida, haja um percentual pequeno de caracteres ou palavras destinadas ao controle e exigidas pelo protocolo de comunicação.
Sistemas de E/S .

Como visto nas unidades anteriores, as atividades principais dos computadores envolvem dois componentes: a unidade central de processamento (UCP) e a memória principal. A unidade central de processamento busca instruções e dados na memória principal, processa e armazena os resultados na memória principal. Os demais componentes podem ser genericamente denominados de sistema de entrada e saída, uma vez que destinam-se a transferir informações entre a memória ou a CPU e o ambiente externo a estes.

O sistema de E/S inclui os dispositivos de E/S (periféricos ou demais elementos), unidades de controle para estes dispositivos e o software especialmente projetado para operações de E/S. Na seqüência, serão referidos apenas periféricos, já que as demais operações de entrada e saída podem ser tratadas de forma análoga. Existem várias maneiras de se executar as operações de E/S: a possibilidade de se empregar estas formas depende dos recursos de software e hardware disponíveis. A opção por uma delas depende basicamente do desempenho desejado, dos dispositivos envolvidos, e do volume dos dados.

Entrada e saída programada
Quando as operações de E/S são controladas inteiramente pela UCP, isto é, a UCP executa programas que iniciam, dirigem e terminam as operações de E/S, diz-se que o computador emprega E/S programada. Este sistema existe em quase todos os computadores: emprega pouco hardware especial, mas pode ocupar tempo demasiado da UCP no controle de operações relativamente simples de E/S. Uma destas funções é o teste do estado dos dispositivos de E/S para determinar se eles estão ou não requisitando serviços da CPU.

Neste contexto, a transferência é realizada, em geral, entre um registrador da UCP (por exemplo, o acumulador) e um registrador ligado ao dispositivo de E/S. A transferência de um dado do dispositivo de E/S para a memória principal necessita da execução de duas instruções pela UCP:
• uma instrução (INPUT) para transferir uma palavra de um dispositivo de E/S para a UCP;
• uma instrução (STORE) para transferir uma palavra da UCP para a memória principal.

Endereçamento
Em sistemas com E/S programada, os dispositivos de E/S, a memória principal e a UCP se comunicam através de um barramento de uso comum, partilhado entre eles. Cada ligação entre o barramento principal e o dispositivo de E/S é chamada de porta de E/S, sendo atribuída a ela um endereço exclusivo. A porta de E/S pode incluir um registrador de dados. Em algumas máquinas, parte do espaço de endereçamento da memória principal é usado para portas de E/S (E/S mapeada em memória).

Instruções de E/S
Algumas palavras podem indicar o estado do dispositivo de E/S e outras podem ser instruções especiais para este dispositivo.
O simples envio de dados, sem que o dispositivo esteja pronto para recebê-los, pode resultar na perda de informações. Por outro lado, a espera de informações sem que haja tempos pré-determinados, pode resultar em tempos de execução excessivamente longos. Assim, o ideal é que se tenha possibilidade de testar as condições de recebimento / envio de informações pelo dispositivo de E/S, ou seja, avaliar o estado do dispositivo. Normalmente este estado pode ser especificado por um bit de informação que o dispositivo mantém disponível de forma contínua (independente das linhas de dados). Assim, serão necessários os seguintes passos:
• Passo 1: lê a informação de estado;
• Passo 2: testa o estado para determinar se o dispositivo está pronto para iniciar a
transferência de dados;
• Passo 3: se não está pronto, retorna ao passo 1; se está pronto, efetua a transferência do dado.

Acesso direto à memória
Com pequeno aumento na complexidade do hardware, o dispositivo de entrada e saída pode ser munido da capacidade de transferir um bloco de informação da memória principal, ou para esta, sem a intervenção da CPU. Isto requer que o dispositivo de E/S seja capaz de gerar endereços e transferir dados através do barramento da memória principal. Também deve existir um sinal de solicitação de acesso ao barramento e um mecanismo de seleção predefinido (por exemplo, por prioridades).

A UCP é responsável pela inicialização de cada transferência de cada bloco. A partir daí, o dispositivo de E/S pode realizar a transferência sem a necessidade de execução de programa pela UCP, ou seja, sem que a UCP se envolva diretamente na operação, exceto no seu final. Quando isto ocorre, UCP e o dispositivo de E/S interagem e a UCP retoma o controle do barramento através do qual foi feita a transferência. Este tipo de capacidade de entrada e saída é denominada de acesso direto à memória.

Interrupção
O dispositivo de E/S também pode conter circuitos que o habilitam a requisitar serviços da UCP, isto é, provocam na UCP a execução de um programa de atendimento ao dispositivo periférico. Este tipo de solicitação é chamada de interrupção. A disponibilidade de serviços de interrupção livra a UCP de estar periodicamente testando o estado do dispositivo de E/S (afim de verificar se ele tem dados para transferir ou não). Diferentemente do acesso direto à memória, uma interrupção faz com que a UCP páre temporariamente a execução do programa em curso, salvando o estado correspondente, e transfira o controle de execução para um programa de tratamento de interrupção. Assim, quando termina o atendimento da interrupção, a UCP pode reassumir a execução do programa antes interrompido.

Informações complementares
Uma outra opção para execução das atividades de entrada e saída é a existência de processadores especiais, denominados de processadores de E/S ou canais de E/S, que assumem o controle total deste tipo de operações. Com isto, eles aliviam consideravelmente a atividade da UCP, liberando-a para outro tipo de processamento. Estes processadores podem acessar diretamente à memória, podem interromper a UCP, ou executar programas, com conjuntos especiais de instruções, orientadas a operações de E/S. Eles também podem estar ligados à UCP por um barramento especial, chamado de barramento de E/S ou interface de E/S.