# data[].attributes.body
Dois conceitos fundamentais no estudo dos sistemas de computação são o de Arquitetura e Organização de computadores. O termo arquitetura refere-se aos atributos do ponto de vista do programador, e portanto, têm impacto direto sobre sobre a execução lógica de um programa. O termo organização, refere-se às unidades operacionais e suas interconexões. Desta forma, uma mesma arquitetura pode ser implementadas por meio de diferentes organizações.

A arquitetura de um sistema computacional estabelece o modelo da organização e funcionamento de um sistema de processamento, com todas suas partes, divididas em seções, interagindo entre si.

Os componentes e suas relações são representados através de sistemas hierárquicos, o que mostra-se ideal para o estudo de conjuntos complexos e que atuam em diferentes níveis; separados por suas características, estudaremos o funcionamento de cada um destes componentes.

As funções básicas de um computador são o processamento de dados, armazenamento de dados, transferência de dados e controle. Para desempenhar essas funções o computador precisa executar um conjunto de instruções (programa). Os computadores que conhecemos são baseados no conceito de programa armazenado, introduzido por Von-Neuman. As instruções do programa e os dados são armazenados em uma memória, de forma que a alteração de um programa consiste na alteração de um endereço de memória.

O ciclo de execuçã de cada uma das instruções de um programa é dividido nos seguintes estados:

Cálculo do Endereço de Instrução;

Busca da Instrução (Instruction Fetch);

Decodificação da Instrução;

Cálculo do Endereço do Operando;

Busca do Operando (Operand Fetch);

Execução da Operação;

Armazenamento do Resultado.

No entanto, os computadores modernos utilizam o conceito de interrupção para diminuir o tempo de ociosidade dos processadores, o ciclo de execução das instruções ganham mais alguns estados. As classes de interrupções mais comuns são interrupções de software, de relógio, de E/S e de falha de hardware.

# data[].attributes.body
Unidade Central de Processamento (CPU) – Módulo que realiza as operações necessárias;

Memória Principal – Uma área de trabalho para o armazenamento das informações que serão processadas;

Dispositivos de E/S – Dispositivos para o recebimento de informações e retorno/armazenamento dos resultados;

Sistemas de Interconexão – Um meio através do qual os dispositivos possam se comunicar e transmitir dados;

# data[].attributes.body
Ao estudarmos qualquer assunto complexo e/ou com grande riqueza de detalhes, a estratégia mais natural para facilitar o processo de aprendizado é subdividir o tema principal em partes menores, e então, preocupar-se somente com uma porção por vez.

Após estudadas todas as partes, o passo final é enxergar como estas se encaixam, tratando agora o objeto de estudo como um todo e abstraindo, se possível, os detalhes mais específicos de cada uma das partes.

Para o desenvolvimento de aplicações mais eficientes, programadores devem se familiarizar com novos aspectos da organização de computadores. Hierarquia de memória (memória principal, cache L1, cache L2, etc.). Paralelismo de execução de instruções. Novas tecnologias de processamento (processadores multicore, etc.).

Para interconectar dois ou mais dispositivos em um sistema são utilizados os chamados barramentos. Os barramentos são compostos por linhas que podem ser de Dados, Endereço ou Controle. Os barramentos de controle podem ser utilizados, por exemplo, para controlar direito de leitura ou escrita em memória ou E/S, interrupções, confirmações, relógio e reset. O projeto dos barramentos que compõe um sistema são de grande importância no desempenho do sistema. Questões importantes no projeto de barramentos são:

Tipo – dedicado ou multiplexado;

Método de Arbitração – Centralizado ou Distribuído;

Temporização – Síncrona ou Assíncrona;

Largura – número de linhas;

Tipo de Transferência – leitura, escrita, leitura/modificação/escrita, escrita/leitura, em bloco.

Para aumentar o desempenho do sistema, os barramentos são organizados de forma hierárquica, de forma a isolar o tráfego de dados entre CPU e memória do tráfego proveniente de operações de E/S. Os chamados barramentos de expansão proporcionam maior flexibilidade ao sistema (ex: SCSI), enquanto os barramentos de alta velocidade sã utilizados para dispositivos de alta capacidade (ex: FireWire).

# data[].attributes.body
Os principais elementos da CPU são a Unidade de Controle, a Unidade Lógica e Aritmética (ULA) e os Registradores. Esses elementos se conectam internamente através do barramento interno da CPU.

Unidade de Controle

Responsável por buscar as instruções na memória e determinar o seu tipo e pode ser pensada como uma máquina de estados finitos. Controla não só a transferência de dados e instruções para dentro e parafora da CPU, como também a operação da ULA.

Unidade Lógica e Aritmética

Responsável pelo processamento de dados como executar operações de adição, e AND booleano, entre outras, e para executar as instruções.

Registradores

Os registradores presente na CPU são memórias pequenas e de alta velocidade para armazenar resultados temporários e controle de informações. Existem vários tipos de registradores de uso geral ou específico. O mais importante deles é o contador do programa (PC – Program Counter). Este contador indica a próxima instrução a ser buscada para execução. Outro de grande importância é o Registrador de instrução (Instruction Register), que contém a instrução executada no momento em questão.

A CPU se comunica com o mundo externo através dos barramentos do sistema. Ao longo da execução de um programa, os barramentos constituem os chamados caminho dos dados. No topo da organização hierárquica de memória em um sistema se encontram os registradores. Esses se dividem em dois tipos: Registradores visíveis ao Usuário e Registradores de Controle e de Estado.

Os registradores visíveis ao usuário são aqueles que podem ser referenciados pela linguagem de montagem. Eles podem ser registradores de dados, endereço ou então de propósito geral. Os registradores de Controle e de Estado são utilizados para controlar a operação da CPU. Na maioria das vezes não são visíveis aos usuários. Exemplos de registradores de Controle e de Estado são o Program Counter (PC), Instruction Register (IR), Memory Address Register (MAR), Memory Buffer Register (MBR), Program Status Word (PSW), Stack Pointer (SI), Page Table Base Register (PTBR), Page Table Base Limit (PTBL).

A sequência de eventos ao longo de um ciclo de instrução depende do projeto da CPU, no entanto, em termos gerais, pode-se indicar o que acontece em nos subciclos de busca, indireto e interrupção. O ciclo de execução depende do código da operação que será executada.

Durante o ciclo de busca, o contador de programa contém o endereço da próxima instrução a ser buscada na memória. Esse endereço é movido para o registrador MAR e a unidade de controle requisita uma leitura na memória. O resultado da leitura e colocado no registrador MBR, que em seguida é copiado para o registrador IR. Enquanto isso o PC é incrementado de 1 para preparar a busca da próxima instrução.

Ao fim do ciclo de busca, o unidade de controle examina se a instrução especifica algum operando com endereçamento indireto. Os n bits mais a direita de MBR são colocados em MAR, e então a unidade de controle requisita uma leitura a memória para carregar o valor do operando para MBR.

No ciclo de interrupção, o conteúdo do registrador PC dever ser salvo, para que mais tarde a CPU possa retornar sua atividade normal depois de processar a interrupção. O conteúdo do PC é transferido para MBR. A endereço de memória reservado para guardar o valor de PC (ex: topo da pilha) é carregado para MAR, e então a unidade de controle solicita uma escrita na memória. Por fim o PC é carregado com o endereço da rotina de interrupção, para que o no próximo ciclo de instrução seja feita a busca da instrução apropriada.

# data[].attributes.attachment_link.title
Arquitetura de Computadores - Visão rápida sobre a teoria básica. (Material complementar)