Escolar Documentos
Profissional Documentos
Cultura Documentos
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
Arquitetura x Organização de
Computadores
Na literatura, ao se descrever um sistema de computação, é feita uma distinção
entre os termos arquitetura e organização do computador.
O termo arquitetura de um computador refere-se aos atributos de um sistema que
são visíveis para o programador ou, em outras palavras, aos atributos que têm
impacto direto sobre a execução lógica de um programa. Convém lembrar que o
termo arquitetura também significa projeto.
Já o termo organização de um computador diz respeito às unidades operacionais e
suas interconexões que efetivam as especificações de sua arquitetura, ou seja,
como as características da arquitetura são implementadas.
Por atributos de arquitetura, podemos entender: o conjunto de instruções, o número
de bits usados para representar os tipos de dados, os mecanismos de E/S. etc.
Enquanto os atributos da organização são transparentes aos usuários e incluem
detalhes de hardware como, por exemplo: sinais de controle, tecnologia de
memória utilizada, etc.
Especificar se um computador deve ou não ter uma instrução de multiplicação
constitui uma decisão de projeto da arquitetura.
Por outro lado, definir se essa instrução será implementada por uma unidade
específica de multiplicação ou por um mecanismo que utiliza repetidamente sua
unidade de soma é uma decisão de projeto de sua organização.
Por exemplo, todo microprocessador Intel da família x86 compartilha a mesma
arquitetura básica. Isto garante que eles sejam compatíveis. No entanto, a
organização difere de uma versão para a outra. Ou seja, uma organização deve ser
projetada para implementar uma especificação particular de arquitetura.
Estrutura e Função dos Computadores
Os computadores são equipamentos eletrônicos digitais que têm como função:
Processar dados;
Armazenar dados;
Exercer controle.
Registradores;
Quiz
Exercício Final
Introdução à Organização Básica e Arquitetura de Computadores
INICIAR
Referências
STALLINGS, Willian. Arquitetura e organização de computadores. 5. ed. Prentice
Hall. São Paulo, 2006.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
Introdução
Desde a Antiguidade, pode-se observar a necessidade do homem em computar
(calcular). Inicialmente ele utilizava seus próprios dedos como forma de contagem,
daí a base de nosso sistema de numeração ser decimal. Com o passar dos tempos,
os dez dedos não eram mais suficientes, então ele passou a utilizar pedrinhas: "O
pastor guardava em um saco uma pedrinha para cada ovelha de seu rebanho, depois
associava cada pedrinha a uma ovelha". As evoluções não pararam e o homem
aperfeiçoou suas técnicas criando instrumentos de apoio à contagem e cômputo. A
necessidade de precisão e a dificuldade em solucionar cálculos mais e mais
complexos levou o homem a criar mecanismos com o intuito de simplificar uma
tarefa tão árdua. Daí surgiram ferramentas como ábaco, régua de cálculo, máquina
de calcular e o computador.
Computador
O computador é uma máquina capaz de receber, armazenar, tratar e produzir
informações de forma automática, com grande rapidez e precisão.
As máquinas de calcular têm sua origem no século XVI, porém somente perto da
metade do século XX surge a máquina que conhecemos como computador, cuja
popularização deveu-se principalmente aos avanços na microeletrônica,
especialmente a partir da década de 1970.
Evolução dos computadores
A história dos computadores começou no momento em que o homem sentiu a
necessidade de efetuar cálculos complexos de maneira automática.
O primeiro equipamento com que o homem contou para fazer seus cálculos foi o
conjunto de dedos de suas mãos, daí veio a palavra digital, vindo de dígito, que
significa dedo. Com a evolução da humanidade, fez-se necessárias novas invenções
para auxiliar os cálculos:
A primeira calculadora de que se tem notícias é o ábaco, de origem babilônica,
cerca do século V a.C., capaz de efetuar operações algébricas elementares.
Levou muito tempo até o surgimento de máquinas capazes de fazer operações
aritméticas de forma automática. As calculadoras mecânicas surgem no século
XVII, com Blaise Pascal, muito rudimentares, capazes apenas de somar e subtrair.
No século XIX podemos destacar calculadoras mais sofisticadas como a do inglês
Charles Babbage.
Uma das primeiras máquinas de processar dados data de 1889, quando Hermann
Hollerith, funcionário do United States Census Bureau, inventou uma máquina
para tabular os resultados do recenseamento da população. A máquina "lia" as
informações armazenadas em cartões perfurados e efetuava a contagem dos valores
referentes às respectivas perfurações. As máquinas de Hollerit foram utilizadas no
censo de 1890 nos EUA. O tempo gasto nesse recenseamento foi 1/3 do tempo
normal.
Em 1896, Hollerith fundou a Tabulating Machine Company, que construía as
tabuladoras e outros dispositivos por ele inventados. Com o crescimento da
empresa, ela passou a chamar-se em 1911 Computing Tabulating and Recording
Company, e em 1924 passou a ostentar o nome que tem atualmente: IBM –
International Business Machines Corporation.
As máquinas de primeira geração (1945-
1955)
O desenvolvimento dos primeiros computadores eletrônicos, utilizando válvulas,
ocorre durante a II Guerra.
O ENIAC (Electronic Numerical Integrator and Computer), cuja construção só
terminou em 1946, ficou com a fama de ser o primeiro computador eletrônico.
Ele tinha quase 19.000 válvulas e consumia quase 200 kilowatts, um absurdo para
a época.
Quiz
Exercício Final
Evolução histórica dos computadores
INICIAR
Referências
MACHADO, Francis B.; MAIA, Luiz P. Arquitetura de sistemas operacionais. 4.
ed. Rio de Janeiro: LTC, 2007.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
As atividades realizadas pela CPU podem ser divididas em duas grandes categorias
funcionais:
Funções de processamento;
Funções de controle.
Quiz
Exercício Final
Estrutura básica do computador - Busca e Execução de Instruções
INICIAR
Referências
STALLINGS, Willian. Arquitetura e organização de computadores. 5. ed. Prentice
Hall. São Paulo, 2006.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Barramentos e Interrupções
Conhecer o papel dos barramentos nos sistemas computacionais e compreender o
funcionamento do mecanismo de interrupção.
NESTE TÓPICO
Marcar
tópico
Barramento (Bus)
Os barramentos são os meios de comunicação entre os diversos componentes do
sistema computacional. Em geral, são meios de comunicação compartilhados entre
esses componentes que se aproveitam da padronização da interconexão.
Fisicamente falando os barramentos são constituídos pelas trilhas nas placas de
circuito impresso, slots, cabos e conectores, chamados genericamente de linhas, ou
vias, que obedecem padrões mecânicos, elétricos e lógicos.
Em um computador pessoal eles conectam as memórias ao microprocessador, as
placas de vídeo e de rede ao microprocessador, os discos rígidos ao controlador de
disco, etc. Conforme o porte do computador as necessidades de conexão se
alteram.
Assim, basta que um determinado dispositivo, de um determinado fabricante,
obedeça a todos os padrões do barramento para garantir o funcionamento correto e
a interoperabilidade com equipamentos de outros fabricantes.
São exemplos de barramentos:
USB - Universal Serial Bus, ou Barramento Serial
Universal, utilziado para conectar uma infinidade de
periféricos em computadores pessoais, tablets,
videogames, smartphones e outros gadgets.
Além dos dois exemplos em extremos opostos, há uma série de outros exemplos
que você provavelmente já deve ter observado: SATA, PCIe, SCSI, etc.
Todo barramento carrega três tipos de informação:
Além do sinal de seleção entre leitura e escrita, há uma série de outros sinais
importantes presentes no barramento de controle como a Interrupção, que será
abordada na sequência, a reinicialização (reset) e o clock (relógio).
O reset é um sinal utilizado para levar os circuitos digitais ao seu estado inicial de
funcionamento.
O clock, ou sinal de relógio, é um sinal que alterna entre 0 e 1 servindo como base
de tempo, sincronizando o funcionamento de todos os circuitos digitais do
computador.
Características dos Barramentos
Os barramentos possuem uma série de características que fazem parte de suas
especificações:
Sincronização:
Compartilhamento:
o Multiplexado - as linhas do barramento são
compartilhadas entre diversos dispositivos,
ou funções;
Tipo de transmissão:
Largura do barramento:
Interrupções
A Interrupção é um mecanismo utilizado para fazer com que a CPU interrompa
temporariamente a sequência de instruções (programa) em execução.
A CPU não ficará "pausada" sem executar nada. O que ocorre é que a CPU passa a
executar outra sequência de instruções (programa) para tratar a causa da
interrupção, retornando posteriormente ao programa original.
É como se tocasse o telefone enquanto você está estudando este texto. Você iria
atendê-lo (ou desligá-lo) e então retornaria ao estudo, certo?
Existem quatro tipos (causas) de interrupções:
Temporização;
Falha de hardware.
Restaura o contexto;
Para que se possa retornar ao programa interrompido exatamente onde ele foi
interrompido, é necessário salvar as informações presentes nos registradores, ao
que chamamos de contexto. Voltando ao exemplo do telefone que tocou enquanto
você estudava, você provavelmente teria marcado o parágrafo que estava lendo
antes de atender o telefone.
A Rotina de Tratamento de Interrupção (RTI, ou ISR na sigla em inglês) é parte
integrante e fundamental do Sistema Operacional.
É possível que ocorra mais de um pedido de interrupção ao mesmo tempo. Para
prevenir isso, o mais comum é que os sistemas estabeleçam alguns níveis de
prioridade. Assim, as interrupções são atendidas "em fila" conforme a ordem de
prioridade.
Funcionamento da Interrupção
Quiz
Exercício Final
Barramentos e Interrupções
INICIAR
Referências
STALLINGS, William. Arquitetura e Organização de Computadores. 8ª edição.
Pearson Education. 2010.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Sistema de Armazenamento e
Hierarquia de Memória
Compreender os principais conceitos acerca do sistema de armazenamento dos
computadores, as principais características das memórias e sua organização
hierárquica.
NESTE TÓPICO
Marcar
tópico
Hierarquia de Memória
Todo computador, do mais simples, ao mais sofisticado, necessita armazenar maior
ou menor quantidade de dados. Sejam programas, arquivos, resultados gerados,
etc.
Pense no sistema computacional que você utilizou para acessar este material. Quais
os componentes dedicados ao armazenamento de dados nele? Há apenas um!?
Você deve ter notado que todo computador possui mais de um componente
dedicado ao armazenamento de dados, configurando um sistema de
armazenamento, o conjunto organizado das memórias de um computador.
Para melhor compreendermos o sistema de armazenamento é possível organizá-lo
de forma hierárquica, conforme a função e as características de cada uma.
A hierarquia de memória é representada na figura abaixo.
Hierarquia de Memória
Taxa de transferência.
Métodos de Acesso
Constituem-se na forma de acessar (encontrar) os dados em cada memória.
Os discos na memória secundária utilizam método de acesso direto, funcionando
da mesma forma que um toca-discos de vinil. No caso dos discos magnéticos e
ópticos temos um cabeçote de leitura e escrita, no lugar da "agulha", que é movido
até a trilha (faixa) correspondente do disco, que deve então aguardar o giro do
disco. O tempo de acesso irá variar conforme a disposição física dos dados.
Já a memória principal utiliza o método de acesso aleatório, mais eficiente. Note
que RAM, — Random Access Memory —, significa literalmente memória de
acesso aleatório. RAM é um tipo de circuito integrado de memória e, como não há
partes mecânicas, o tempo de acesso para qualquer posição da memória é o mesmo.
As portas lógicas que "processarão" um endereço com uma sequência binária de
vários "zeros", ou vários "uns", fornecerão o resultado sempre no mesmo tempo.
Tipo de Mídia (Material)
Basicamente a informática trabalha hoje com 3 tipos de memórias:
Memória a semicondutor (circuitos integrados);
Memória magnética;
Memória óptica;
Volatilidade
O que acontece com os dados armazenados ao se retirar a energia da memória?
Memória volátil
Outras Características
A memória é apagável ou não? Uma memória não-
apagável é mais conhecida como memória "somente
leitura" ou, em inglês, Read Only Memory (ROM).
Consumo de energia.
Portabilidade. É possível transportar a memória?
Frequência de acesso. Os registradores são usados o
tempo todo, enquanto uma memória secundária nem
sempre...
Essas característica têm estreita relação com a hierarquia de memória estudada,
como pode ser visto nas figuras abaixo.
Características das memórias e sua relação com a hierarquia.
Quiz
Exercício Final
Sistema de Armazenamento e Hierarquia de Memória
INICIAR
Referências
STALLINGS, William. Arquitetura e Organização de Computadores - 8a edição.
Pearson Education. 2010.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
Memórias de Semicondutor
Os níveis hierárquicos da memória principal e da memória cache empregam
memórias de semicondutor, ou seja, circuitos integrados para armazenamento de
dados. Há basicamente três tipos de memória de semicondutor:
Flash
Essa divisão mais funcional nos ajuda a compreender melhor os tipos de memória
de semicondutor. As memórias RAM são usadas na memória de trabalho (leitura e
escrita), enquanto as memórias ROM e Flash são memórias principalmente de
escrita. Essas últimas são empregadas nos computadores para guardar parâmetros
de configuração e softwares de inicialização (como o BIOS do PC).
A memória ROM original era produzida já com o conteúdo gravado, num processo
caríssimo. Ela evoluiu para a memória ROM programável, a PROM, gravada
eletricamente em um equipamento externo, que popularizou seu uso. A PROM
evoluiu para a EPROM, uma memória que pudesse também ser regravada, ou seja,
apagável (Erasable) e novamente gravável, embora em um processo lento, que
requeria expor o circuito integrado (chip) da memória à luz ultravioleta (UV) por
alguns minutos, para depois regravá-la eletricamente. Finalmente, na escala de
evolução das memórias ROM, surgem as memórias EEPROM, mais conhecidas
como E2PROM, as memórias "somente leitura" programáveis e apagáveis
eletricamente. Como o processo de escrita era bastante lento, surgiu a necessidade
de mercado de uma memória mais rápida, problema que foi resolvido com um
novo tipo de memória de semicondutor, a memória Flash. Posteriormente, a
memória Flash passou a ser produzida com alta densidade de armazenamento,
possibilitando uma nova geração de dispositivos de armazenamento baseados nesse
tipo de chip, empregado hoje em cartões de memória, pen drives e SSDs.
Voltando às memórias RAM, não há diferença de desempenho na leitura e na
escrita, por isso são empregadas na memória de trabalho. Em compensação, são
memórias voláteis, ou seja, todos os dados são perdidos ao se desligar a energia do
circuito e, portanto, servem apenas para armazenamento temporário.
Há dois tipos de memória RAM:
Dinâmica – DRAM
Estática – SRAM
DRAM SRAM
Memória Principal
A memória principal emprega RAM Dinâmica e é construída a partir de células
básicas que armazenam um único bit. Essas células são organizadas em uma matriz
que possui um conjunto de posições endereçáveis, que podem ser lidas, ou escritas.
Cada matriz é um circuito integrado de memória RAM. Para atingir a quantidade
de endereços necessária e, ou, o tamanho adequado em cada posição, esses
circuitos integrados são devidamente interligados. Uma forma muito comum é
organizá-los em placas de circuito impresso chamados de módulos de memória ou,
popularmente, devido à semelhança, de pente de memória (vide figura a seguir).
Funcionalmente, a memória principal armazena todos os programas em execução e
as informações manipuladas por esses programas. Portanto, ela e muito usada e seu
desempenho é um ponto crucial para qualquer sistema computacional. Para
melhorar o desempenho da memória principal são empregadas uma série de
técnicas.
Essas técnicas todas são combinadas e, mesmo assim, a maior parte dos sistemas
computacionais requer o emprego de mais um nível hierárquico para melhorar o
desempenho da memória principal: a memória cache.
Módulo (pente) de memória RAM Dinâmica
Memristor (MRAM);
Memória Cache
Para melhorar o desempenho do sistema de armazenamento, foi introduzida a
memória cache. Trata-se de uma pequena quantidade de memória rápida (RAM
Estática) colocada entre a CPU (registradores) e a lenta memória principal, baseada
na memória RAM Dinâmica. Como a SRAM é totalmente digital e utiliza a mesma
tecnologia construtiva dos microprocessadores, a memória cache é construída
dentro do circuito integrado microprocessador. A figura a seguir ilustra o
posicionamento da memória cache:
O termo "cache" tem origem no francês e significa "escondido". Isso porque ela é
totalmente controlada por hardware.
A cache funciona da seguinte forma:
Portanto, para que realmente haja uma melhoria no desempenho do sistema, o ideal
é que tudo o que a CPU necessite da memória principal esteja na memória cache.
Para "saber" a informação a ser guardada na memória cache, são empregados dois
Princípios de Localidade:
A CPU sempre solicita uma única posição de memória por vez, porém, para
melhorar o desempenho, o circuito de controle da memória cache traz um bloco de
dados de cada vez. No entanto, é um bloco bem menor que um setor de um disco
rígido. Em geral o tamanho de bloco empregado na memória cache é um conjunto
de 4 a 8 posições de memória (dependendo da arquitetura).
O tamanho da memória cache é uma das características mais importantes. Pouca
memória cache não proporcionará uma melhoria significativa de desempenho e,
muita memória cache, além da questão do tamanho físico, consumo e custo,
também não oferecerá ganhos adicionais. Cada fabricante de microprocessador
define o tamanho ótimo para seus modelos e veremos logo adiante como descobrir
isso na prática.
Como a cache é menor que a memória principal, consequentemente terá uma
menor quantidade de endereços e menos bits para representá-los. Assim, é
necessário estabelecer uma correspondência entre o endereço original do bloco de
dados na memória principal e o bloco de dados gravado na memória cache. Esse
processo é chamado de função de mapeamento e, o mais comum é o associativo em
conjuntos.
Quando a memória cache está cheia, é necessário liberar espaço para gravar um
novo bloco de dados (sobrescrever, na verdade). Para isso é necessário haver
algum critério bem definido para descartar um bloco de dados. Os mais comuns
são: o primeiro bloco gravado é o primeiro a ser descartado (FIFO), o bloco de
dados que está a mais tempo sem ser acessado (LRU) e o bloco de dados que foi
usado menos vezes (LFU).
Outra característica importante é a política de escrita. A CPU atualizará os dados
na cache, e não na memória principal. Desta forma, o circuito de controle da
memória cache deve cuidar de atualizar a memória principal, o que pode ser feito
imediata e paralelamente (write-through), ou de forma cascateada (write-bacK)
com um nível da cache atualizando o próximo até chegar à memória principal.
A última característica da memória cache é o número de níveis, que dificilmente
passa de três. Trata-se de outra característica bastante peculiar a cada fabricante
mas, de forma geral, o primeiro nível da cache é dividido entre instruções e dados,
respeitando os diferentes princípios de localidade. Também é usual que o último
nível da cache seja comum (unificado) para todas as CPUs do microprocessador.
Na prática - Conhecendo a Cache do seu Computador
Você pode descobrir qual a estrutura da cache do seu computador executando um
software de identificação de hardware e desenhando o diagrama correspondente ao
seu microprocessador. No exemplo a seguir foi utilizado o CPUZ
(www.cpuid.com ), para Windows, que é freeware inclusive para usos comerciais.
Ao executá-lo é possível verificar informações sobre as CPUs, que são quatro neste
caso, e a memória cache que possui três níveis. A cache nível 1 está dividida entre
dados e instruções e, como há quatro de cada, sabemos que cada CPU tem a sua.
Cada CPU também possui sua cache nível 2, enquanto a cache nível 3 é comum a
todas as CPUs. Note a diferença de tamanho (capacidade) entre cada nível. A
descrição "8-way set associative" faz referência à função de mapeamento
"associativa em conjuntos" e "64-byte line size" ao tamanho do bloco.
Agora que viu um exemplo, desenhe o diagrama da cache do microprocessador do
seu computador!
Quiz
Exercício Final
Memória Principal e Memória Cache
INICIAR
Referências
STALLINGS, William. Arquitetura e Organização de Computadores - 8a edição.
Pearson Education. 2010.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Memória Secundária
Compreender o funcionamento e a s principais características dos principais
dispositivos da memória secundária (discos magnéticos e ópticos).
NESTE TÓPICO
Marcar
tópico
Disco Magnético
Leitura e gravação em um HD
Fonte: Stallings (2010)
A foto abaixo mostra um detalhe do braço de um disco rígido com vários pratos.
Disco Rígido - Detalhe do cabeçote e dos pratos.
R – Recordable
RW – Rewritable
Além disso, a despeito de outros padrões que não foram amplamente aceitos pelo
mercado, há três gerações de memória ópticas disponíveis:
CD (Compact Disc)
Blu-Ray
A dupla camada é relativamente comum, mas a dupla face nem tanto, pois é
necessário um leitor duplo extremamente caro, ou o desconforto de se virar o disco
no leitor.
Sem considerar as aplicações de cada mídia, com os respectivos padrões de áudio e
vídeo, a diferença fundamental entre o CD, o DVD e o Blu-Ray é o tamanho dos
bits, trilhas e setores e a largura do feixe de raio laser necessário. A propósito, a
próxima foto mostra o laser de uma unidade de DVD.
Referências
STALLINGS, William. Arquitetura e Organização de Computadores - 8a edição.
Pearson Education. 2010.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
O sistema de Entrada e Saída (E/S) ou, em inglês, input output (I/O), é um dos
componentes básicos de qualquer sistema computacional. Ele é composto
basicamente por Módulos de Entrada e Saída e periféricos. Módulo de E/S é, por
assim dizer, o nome genérico dos controladores de disco, controladores de
interface, placas de vídeo, etc.
Módulo de E/S
Os módulos de E/S são conectados à CPU através do barramento do sistema e são
as ligações do sistema computacional com o mundo externo. Sua função principal
é permitir a comunicação entre o periférico que ele controla e a CPU, através do
barramento. Existem algumas razões para não ligarmos os periféricos diretamente
ao barramento do sistema, dentre elas:
Há uma grande variedade de periféricos. Cada um tem
sua lógica de operação e, portanto, seria difícil para a
CPU controlar cada um deles;
Controle e temporização;
Detecção de erros.
Controle
Teste:
o Verifica as condições de estado do periférico
associado ao módulo de E/S.
Leitura:
Gravação:
Periférico
Existem diversos tipos de dispositivos externos, mais conhecidos como periféricos.
Eles podem ser divididos em:
periféricos voltados para a comunicação com o
usuário:
E/S programada;
E/S programada
Neste modo de comunicação a CPU, além de executar o programa, possui controle
total sobre as operações de E/S. Esse controle inclui a detecção do estado do
periférico, o envio de comandos para o módulo de E/S (leitura ou escrita) e a
transferência de dados. Por isso, toda vez que o programa em execução realiza
alguma operação de E/S, o processador tem que interromper a execução do
programa para tratar da operação solicitada, até que ela seja finalizada. Nesse
intervalo, a CPU fica testando o estado do módulo de E/S. Haverá um desperdício
de processamento, pois o processador é muito mais rápido que o módulo de E/S.
E/S dirigida por interrupção
Neste modo de comunicação a CPU não fica esperando que a operação de E/S seja
finalizada para continuar a execução do programa, como acontece no caso da E/S
programada. Em vez disso, a CPU emite um sinal para o módulo de E/S com a
operação solicitada e continua executando outras instruções do programa. Quando
o módulo de E/S estiver pronto para trocar informações com a CPU, ele envia um
sinal de interrupção avisando seu estado de "pronto". Após esse sinal, o
processador realiza a transferência dos dados. Para a CPU, a execução acontece do
seguinte modo:
Devemos ressaltar que tanto na E/S programada quanto na dirigida por interrupção,
a CPU sempre é a intermediária na comunicação entre os periféricos e a memória
principal, além de gerenciar toda a comunicação.
DMA – acesso direto à memória
Quando é necessário transferir um grande volume de dados, é preciso um método
mais eficiente de transferência de dados. Especialmente para a memória secundária
(discos).
A técnica mais eficiente para transferência de dados é o DMA, sigla que significa
Direct Memory Access, ou Acesso Direto à Memória.
Nessa técnica, a CPU atua apenas para inicializar e encerrar uma operação de
transferência de dados, usualmente uma grande quantidade de dados, ao invés de
atuar a cada palavra de dados transferida. Para a transferência dos dados o módulo
de E/S pode acessar diretamente a memória principal. Obviamente é necessário que
o módulo de E/S tenha suporte para a técnica DMA.
O diagrama a seguir mostra o caminho de comunicação aberto pela técnica de
DMA.
Acesso Direto à Memória (DMA)
As informações trocadas entre o módulo de E/S com DMA e a CPU quando esta
deseja ler ou escrever um conjunto de dados em um periférico podem ser descritas
como segue:
Quiz
Exercício Final
Sistema de Entrada e Saída (E/S)
INICIAR
Referências
MACHADO, Francis B.; MAIA, Luiz P. Arquitetura de sistemas operacionais. 4.
ed. Rio de Janeiro: LTC, 2007.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Arquitetura do Conjunto de
Instruções (ISA)
Compreender a arquitetura do conjunto de instruções e seu impacto na organização
dos computadores.
NESTE TÓPICO
Marcar
tópico
Operandos.
Operando fonte.
P.ex.: os números a
serem somados, ou
qual o dado a ser
escrito.
Operando destino.
Tipos de Operandos
Os operandos, em um computador, podem ser basicamente:
endereços;
números;
caracteres;
dados lógicos.
Os endereços podem se referir a registradores, memória principal, ou periférico,
lembrando que a memória secundária é constituída por periféricos de
armazenamento.
Os números podem ser:
inteiros;
Processar dados;
Armazenar dados;
Comunicar dados;
Desvios condicionais:
Chamadas de sub-rotina:
Mnemônico Significado
MOV
Movimenta (copia) dados
Dest,Fonte
XCHG
Exchange (troca) os dados entre os operandos
Op1,Op2
OUT
Output (saída)
Porta,Fonte
Instruções Aritméticas
ADD
Soma o operando fonte com o destino. Resultado no operando destino.
Dest,Fonte
Instruções Lógicas
AND
E lógico do operando fonte com o operando destino. Resultado no operando destin
Dest,Fonte
OR Dest,Fonte OU lógico do operando fonte com o operando destino. Resultado no operando des
Shift Left. Desloca o operando para a esquerda a quantidade de bits indicada. Zero
SHL Op,Qtd
adicionados à direita.
Saltos (Desvios)
JZ Dest Jump if Zero. Salta para o endereço se for zero (flag de zero = 1).
JNZ Dest Jump if Not Zero. Salta para o endereço se não for zero (flag de zero = 0).
Miscelânea
Modos de Endereçamento
Vimos que os operandos podem estar em um registrador, na memória, ou mesmo
em um dispositivo de E/S. Mas o que a CPU deve fazer para encontrar o operando
da instrução? É essa a pergunta respondida pelos Modos de Endereçamento.
Há sete modos de endereçamento básicos que explicaremos brevemente, tomando
como exemplo uma instrução de soma, que adiciona o valor indicado na instrução
ao acumulador.
Imediato
Direto
Indireto
Registrador
Indexado
Nesses exemplos assumimos 8 bits para opcode, o que nos possibilitaria até 256
(28) diferentes instruções de máquina. Se isso seria suficiente, faltaria espaço, ou
sobraria, é um outro problema que deve ser resolvido pelos projetistas da ISA, mas
é possível perceber que os modos de endereçamento, a quantidade de instruções e
os tipos de operandos, terão relação com o a alocação de bits, isto é, qual será o
tamanho total da palavra de instrução e quantos bits serão alocados para o que.
Observando novamente a tabela com os exemplos e instruções x86, é possível
notar que as instruções representadas requerem diferentes formatos de instrução,
mas também apresentam diferentes quantidades de operandos declarados na
instrução. Algumas instruções possuem um operando declarado (explícito) e o
acumulador como um operando não declarado (implícito). Outras instruções
possuem dois operandos declarados (fonte e destino) e há ainda outras que não
possuem nenhum operando declarado (atuando sobre o acumulador, por exemplo).
A quantidade de operandos que aparecem declarados na instrução é chamada
de quantidade de endereços.
As arquiteturas comerciais possuem, em geral, diversos formatos de instrução,
usando várias quantidades de endereços e com algumas variações nas alocações
dos bits.
O Projeto de uma ISA
Todas as características definidas anteriormente impactam umas nas outras,
obrigando o projetista de uma ISA a tomar decisões importantes. A ISA é, no
fundo, uma especificação técnica. Ela será implementada no produto CPU, ou
microprocessador mesmo, neste caso, e também será usada pelas empresas que
desenvolvem compiladores.
Quem projeta uma ISA deve pensar, dentre outras coisas, em...
Quiz
Exercício Final
Arquitetura do Conjunto de Instruções (ISA)
INICIAR
Referências
JEGERLEHNER, Roger. Intel Assembler 80186 and higher CodeTable v2.3. 2003.
Disponível em http://www.jegerlehner.ch/intel/. Acessado em 31.mai.2015.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Estrutura da CPU
Apresentar a estrutura da CPU e a organização dos registradores.
NESTE TÓPICO
Marcar
tópico
Registradores Auxiliares
Toda vez que uma operação é realizada na ULA são gerados indicadores (flags),
também chamados de códigos de condição. Esses códigos são bits "individuais"
que trazem informações adicionais sobre as operações realizadas. Eles são
fundamentais para o processamento das instruções de desvio condicional
(instruções como IF e CASE de linguagens de alto nível). Alguns dos códigos de
condição mais comuns são:
Zero
Sinal
Carry / Borrow
Igualdade (Equal)
Algumas arquiteturas têm outras flags além dessas, ou menos flags do que essas.
Os bits dos códigos de condição normalmente são agrupados em um registrador
chamado de registrador de status ou, mais comumente, como PSW, — Program
Status Word —, ou palavra de estado do programa.
O acumulador, os auxiliares e os códigos de condição se encaixam no grupo dos
registradores visíveis ao usuário.
Além desses registradores básicos, as CPU costumam contar também
com registradores de endereços. São registradores que guardam exclusivamente
endereços de memória. Normalmente usados pelo sistema operacional para o
gerenciamento da memória controlando a segmentação, ou paginação. Também
podem ser usados por um programa através de instruções de controle de fluxo.
Esse tipo de registrador é utilizado pelos modos de endereçamento indexados. Um
caso particular de registrador de endereço é o Ponteiro de Pilha (Stack Pointer) que
serve para controlar o funcionamento da pilha da memória.
O registrador PSW, além dos códigos de condição mencionados, costumam incluir
indicadores referentes ao funcionamento geral da CPU, acessíveis exclusivamente
pelo Sistema Operacional, tais como:
Quiz
Exercício Final
Estrutura da CPU
INICIAR
Referências
STALLINGS, William. Arquitetura e Organização de Computadores. 8ª edição.
Pearson Education. São Paulo, 2010.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
Agora é possível avaliar com mais detalhes o que acontece em cada uma dessas
etapas.
Para buscar a instrução na memória é necessário, primeiramente, saber em que
endereço da memória está a instrução a ser executada e, na sequência, trazer a
instrução (conteúdo do endereço) para a CPU. Esses passos são conhecidos como:
Cálculo do endereço da instrução.
Busca da instrução.
o A unidade de controle gera o sinal de
leitura e o conteúdo da posição solicitada é
transmitido para a CPU, chegando no
registrador de dados da memória. A
instrução é então copiada para o registrador
de instrução.
Uma vez que a instrução a ser executada no ciclo de instrução atual esteja
armazenada no registrador de instrução, é possível executar a etapa da:
Decodificação da instrução.
Neste ponto a CPU tem a instrução e finalmente "sabe" o que deve ser feito.
Podendo proceder a execução da instrução, através dos seguintes passos:
Cálculo do(s) endereço(s) do(s) operando(s).
Execução da operação.
Quiz
Exercício Final
Ciclo de Instrução e Funcionamento da CPU
INICIAR
Referências
STALLINGS, William. Arquitetura e Organização de Computadores. 8ª edição.
Pearson Education. São Paulo, 2010.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Pipeline
Conhecer a técnica de pipeline (linha de montagem) para a implementação de
processadores.
NESTE TÓPICO
Marcar
tópico
Na implementação de uma CPU comum, as instruções são executadas uma após a
outra, com cada ciclo de instrução sendo executado na íntegra, em todas as suas
etapas. Isso faz com que partes significativas da CPU fiquem ociosas ao longo do
tempo. Na busca por um melhor desempenho das CPUs, os fabricantes decidiram
adaptar o conceito de linha de montagem das fábricas para o projeto das CPUs.
Em uma linha de montagem, a fabricação dos produtos é dividida em várias etapas
sequenciais. Após algum tempo, ao observarmos a linha será possível vê-la repleta
de produtos, cada um em uma etapa diferente de produção. Isso aumentou muito a
produtividade das fábricas.
Na "fábrica CPU" são produzidas instruções. Portanto é o "produto" instrução que
é dividido em etapas de produção na linha de montagem, a pipeline. Ou seja, a
execução de cada instrução é dividida em etapas, ou estágios. Se a técnica for bem-
sucedida, a produtividade, isto é, a quantidade de instruções executadas ao longo
do tempo, deve aumentar.
Para observar os ganhos da implementação do pipeline é necessário observar o
funcionamento de uma CPU sem o uso da pipeline, onde as instruções são
executadas sequencialmente, conforme a figura a seguir.
BI - Busca da Instrução;
DI - Decodificação da Instrução;
EI - Execução da Instrução;
Os estágios de uma pipeline sempre têm a mesma duração, ajustada pelo estágio
que leve mais tempo. Já a quantidade de estágios depende de uma série de detalhes
da implementação e tem impacto no ganho de desempenho máximo teórico, que
corresponde à quantidade de estágios da pipeline, mas que é apenas um referencial
teórico impossível de ser mantido continuamente.
O emprego da pipeline é praticamente universal nas CPUs comerciais. Mesmo
CPUs extremamente simples costumam empregar pipelines de 2 estágios,
correspondentes aos ciclos de busca e execução. E há CPUs implementadas com
pipelines de mais de 20 estágios.
Ao preencher os estágios da pipeline as instruções são carregadas sequencialmente,
pressupondo que a ordem das instruções na memória será seguida à risca. No
entanto, isso nem sempre ocorre.
Às vezes há algum problema que atrasa a linha de montagem, deixando uma ou
mais etapas vazias, até que a linha possa ser totalmente recarregada. Outras vezes a
linha de montagem tem que ser "limpa" e reiniciada, como se um pedido para
trocar o produto produzido na linha de montagem chegasse com urgência absoluta.
As situações que atrasam, ou interrompem, a pipeline são chamadas
de conflitos (hazards) e o atraso gerado para resolver a causa do conflito é
chamado de pipeline stall, ou bubble (bolha).
Existem três tipos de conflitos que acarretam em bolhas na pipeline:
Conflito de dados;
Quando a instrução carregada na pipeline não corresponde a instrução que deve ser
executada tem-se um conflito de desvio, também chamado de conflito de controle.
Ele ocorre com certa frequência porque todo programa tem alterações no fluxo das
instruções, causados por laços e desvios condicionais, por exemplo. Essas
situações naturalmente farão com que as instruções carregadas na linha de
montagem não sirvam mais e sejam descartadas, reiniciando-se o carregamento de
instruções na pipeline. Este mesmo conflito ocorre quando há um pedido de
interrupção, ou quando é trocado o programa em execução em um sistema
multitarefa. A figura abaixo mostra o impacto de um conflito de desvio na
pipeline.
Impacto de um conflito de desvio na pipeline
Fonte: adaptado de http://prof.valiante.info/disciplinas/hardware/pipeline - Acesso em 23/06/15
Em outras situações, o dado que precisa ser manipulado pela instrução seguinte na
pipeline depende do resultado da instrução anterior. Por exemplo, a instrução em
execução irá sobrescrever o acumulador e a próxima instrução carregada na
pipeline depende desse valor. Portanto será necessário atrasar a execução dessa
instrução já carregada, até que o valor do operando esteja disponível. Essa situação
é chamada de conflito de dados e gera algumas bolhas, pequenos atrasos na
pipeline, conforme pode ser visto na figura a seguir.
Impacto de um conflito de dados na pipeline
Quiz
Exercício Final
Pipeline
INICIAR
Referências
PATTERSON, David A.; HENNESSY, John L. Organização e Projeto de
Computadores – A Interface Hardware/Software - 4ª edição. Editora Elsevier. Rio
de Janeiro, 2014.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
Modos de endereçamento 1 11
Comparativo entre arquiteturas RISC e CISC (Stallings, 2010)
A maior parte das arquiteturas CISC existentes até a década de 1980 não existem
mais. Essa filosofia de projeto é seguida atualmente pela IBM em seus mainframes
e pela Intel (e AMD) na arquitetura x86 de 64 bits. Para se ter uma ideia das
ampliações feitas ao conjunto de instruções dos PCs, entre a extensão MMX,
introduzida no microprocessador Pentium MMX em 1997, e a extensão SSE3
suplementar, introduzida nos microprocessadores Core 2 Duo e Xeon em 2006,
foram adicionadas 315 instruções de máquina adicionais às ISAs IA-32 e Intel 64
dos processadores Intel. E diversas outras extensões já foram adicionadas desde
então.
Muitas das arquiteturas RISC criadas ao longo da década de 1980 também não
existem mais, restando como principais representantes a arquitetura SPARC,
adquirida da Sun pela Oracle, que ainda possui uma participação significativa no
mercado de servidores, clusters e sistemas de alto desempenho. E também a
arquitetura ARM, criada em 1985 para sistemas embarcados de baixo consumo de
energia, que teve seu uso disseminado e é quantitativamente a arquitetura mais
utilizada hoje. Curiosamente a empresa inglesa ARM apenas comercializa seus
projetos para que outras empresas fabriquem microprocessadores ARM.
Ao longo da década de 1990 os processadores CISC implementaram melhorias no
uso da pipeline e passaram a utilizar um esquema de microprogramação na unidade
de controle masi próximo aos processadores RISC. Os processadores RISC foram
incorporando algumas características mais complexas também.
A influência mútua acabou levando a projetos de CPUs relativamente híbridas,
embora ainda seja possível perceber a filosofia original do projeto. Tratam-se de
CPUs que exploram um maior grau de paralelismo e incorporam múltiplas
unidades funcionais especializadas. As CPUs de despacho múltiplo, especialmente
as superescalares.
Quiz
Exercício Final
Computador com Conjunto Reduzido de Instruções (RISC)
INICIAR
Referências
HENNESSY, John L.;PATTERSON, David A. Computer Architecture - A
Quantitative Approach, 5th Edition. Morgan Kaufmann. 2011.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Processadores Superescalares
Conhecer as técnicas de despacho múltiplo com ênfase para os processadores
superescalares (despacho múltiplo dinâmico).
NESTE TÓPICO
Marcar
tópico
Eventualmente pode haver uma unidade funcional mais complexa como uma
dedicada à criptografia, por exemplo.
A figura a seguir ilustra funcionamento de um processador superescalar básico.
Observe o paralelismo nas unidades funcionais, que correspondem ao estágio de
execução da operação da pipeline.
Funcionamento de um processador superescalar.
Fonte: Tanenbaum e Austin (2013)
Quiz
Exercício Final
Processadores Superescalares
INICIAR
Referências
HENNESSY, John L.;PATTERSON, David A. Arquitetura de Computadores -
Uma Abordagem Quantitativa - 4ª edição. Editora Elsevier.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
NESTE TÓPICO
Marcar
tópico
Introdução
O grande interesse por problemas cada vez mais complexos têm levado à
necessidade de computadores cada vez mais potentes para resolvê-los.
Entretanto, limitações físicas e econômicas têm restringido o aumento da
velocidade dos computadores sequenciais, ou seja, computadores que executam
instruções em série, uma após a outra pela CPU. Por outro lado, os problemas
computacionais usualmente podem ter algumas de suas partes divididas em
pedaços que teriam como ser solucionados ao mesmo tempo ou processadas em
paralelo. Processamento paralelo é então uma forma pela qual a demanda
computacional é suprida por meio do uso simultâneo de recursos computacionais
como processadores para solução de um problema.
A computação paralela é caracterizada pelo uso de várias unidades de
processamento ou processadores para executar uma computação de forma mais
rápida. É baseada no fato de que o processo de resolução de um problema pode ser
dividido em tarefas menores, realizadas simultaneamente por meio de algum tipo
de coordenação. O conceito foi originalmente introduzido no CDC 6600 em 1964
pela CDC (control data corporation). A seguir são descritos os modelos de
computação paralela existentes, conforme estabelecidos por Michael J. Flynn em
1972.
Taxonomia de Flynn
A taxonomia de Flynn abrange quatro classes de arquiteturas de computadores:
SISD (Single Instruction, Single Data): fluxo único de
instruções sobre um único conjunto de dados.
SIMD (Single Instruction, Multiple Data): fluxo único
de instruções em múltiplos conjuntos de dados.
MISD (Multiple Instruction, Single Data): fluxo
múltiplo de instruções em um único conjunto de dados.
MIMD (Multiple Instruction, Multiple Data): fluxo
múltiplo de instruções sobre múltiplos conjuntos de
dados.
SISD (Single Instruction, Single Data)
Nesta classe, um único fluxo de instruções opera sobre um único fluxo de dados.
Isso corresponde ao processamento sequencial característico da máquina de Von
Neumann e que compreende os computadores pessoais e estações de trabalho.
Apesar dos programas estarem organizados por meio de instruções sequenciais,
elas podem ser executadas de forma sobreposta em diferentes estágios (pipelining).
Arquiteturas SISD caracterizam-se por possuírem uma única unidade de controle,
podendo possuir mais de uma unidade funcional.
Por exemplo um computador pessoal que tenha apenas um processador e que esse
processador tenha uma única CPU.
SIMD (Single Instruction, Multiple Data)
Esta classificação corresponde ao processamento de vários dados sob o comando
de apenas uma instrução. Em uma arquitetura SIMD, o programa ainda segue uma
organização sequencial. Para possibilitar o acesso a múltiplos dados é preciso uma
organização de memória em diversos módulos.
A unidade de controle é única, e existem diversas unidades funcionais. Nesta
classe estão os processadores vetoriais e matriciais.
Quanto às facilidades de hardware para armazenamento, essas normalmente são
classificadas como:
Processor Array
Vector Pipeline
Quiz
Exercício Final
Introdução às arquiteturas paralelas e taxonomia de Flynn
INICIAR
Referências
STALLINGS, Willian. Arquitetura e organização de computadores. 10ª ed.
Pearson Education. São Paulo, 2010.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?
BIBLIOTECA
MENSAGENS
CALENDÁRIO
CADERNO
VÍDEOS
PERFIL
Manual do AVA
SAIR
Arquiteturas Comerciais
Apresentar exemplos de arquiteturas de computadores comerciais
NESTE TÓPICO
Marcar
tópico
Aritmética e lógica;
Não está em nosso escopo aqui detalhar as instruções, mas vale a pena conferir a
lista completa disponível no datasheet dos processadores ATmega. É possível fazer
o download gratuito no site da Atmel: www.atmel.com . Apenas para mencionar
uma curiosidade, os processadores AVR possuem instrução de multiplicação, mas
não de divisão. As divisões precisam ser feitas de forma iterativa, através de
deslocamentos e subtrações, nesse caso.
A esta altura devo pedir que observe novamente o diagrama em blocos e note que,
ao contrário de uma única memória, há duas. As memórias de dados e programa
aparecem separadas, da mesma forma que ocorre com o nível 1 das caches em
microprocessadores de maior desempenho. O conceito é o mesmo e uma
característica comum às CPUs RISC, chamada de Arquitetura Harvard (separação
entre memória de dados e programa). Note ainda que dada a natureza das
aplicações, não há memória cache e a memória principal está dentro do circuito
integrado microcontrolador. A memória de programa é uma Flash, não volátil,
enquanto a memória de dados é uma SRAM (RAM estática), volátil e rápida, do
mesmo tipo usado nas memórias cache. Não há memória principal externa (não ao
menos de uma forma trivial como em microprocessadores). As memórias
secundárias, como um cartão de memória, são acessadas normalmente através dos
controladores de E/S.
Finalmente, a arquitetura AVR, dada a natureza das aplicações onde é embarcada,
possui uma série de recursos para economia de energia, incluindo modos de
operação de baixo consumo.
Esta foi uma pequena análise dos princípios estudados em arquitetura de
computadores, sobre um produto comercial. Mesmo uma arquitetura simples como
a AVR ainda possui muitos outros detalhes não cobertos aqui. Caso vá utilizar um
Arduino, valerá a pena se aprofundar um pouco mais. Também vale a pena conferir
algumas informações sobre microprocessadores mais complexos, como aquele
utilizado em seu PC ou dispositivo portátil. Boa pesquisa!
LINKS ÚTEIS
Uma das melhores fontes de informação sobre os microprocessadores é no site de
seus fabricantes, onde é possível fazer download dos datasheets, os manuais dos
componentes e ter acesso a mais informações técnicas. Vale a pena visitar.
Aproveite para consultar as especificações e manuais do microprocessador
utilizado no seu computador!
Intel: ark.intel.com
ARM: infocenter.arm.com
Quiz
Exercício Final
Arquiteturas Comerciais
INICIAR
Referências
Atmel Corporation. ATMEL 8-BIT MICROCONTROLLER WITH
4/8/16/32KBYTES IN-SYSTEM PROGRAMMABLE FLASH DATASHEET.
2014.
Índice
Biblioteca
Portal Uninove
Mapa do Site
® Todos os direitos reservados
Ajuda?