Arquitectura de Computadores
Ano lectivo 2008/2009
Hervé Paulino
DI-FCT/UNL
Inclui diapositivos do Prof. José Cardoso e Cunha, do Prof. Pedro Medeiros e
do Prof. Vítor Duarte
Inclui imagens dos livros
The Essentials of Computer Organization and Architecture,
Linda Null and Julia Lobur
Computer Systems: A Programmer's Perspective,
Randal Bryant and David O'Hallaron
Apresentação
Apoio à disciplina
Funcionamento e método de avaliação
Enquadramento e objectivos
Apoio à disciplina
Docentes:
Teóricas: Hervé Paulino
Práticas: Hervé Paulino, Paulo Lopes,
Rui Marques, Carmen Morgado
Livro:
Computer Systems: A Programmer's
Perspective, Randal Bryant and David
O'Hallaron
The Essentials of Computer Organization
and Architecture, Linda Null and Julia
Lobur
ou outros …
Computer Organization and Design: The
Hardware/Software Interface, D. A.
Patterson and J. L. Hennessy
Essentials of Computer Architecture,
Douglas E. Comer
Arquitectura de Computadores (2008/2009): Apresentação
3
Apoio à disciplina (2)
Sobre a linguagem C:
The C Programming Language, 2.Ed., Kernighan & Ritchie
The C Book (disponível em
http://publications.gbdirect.co.uk/c_book/ e na página
da disciplina)
Sobre a linguagem Assembly
PC Assembly Language (disponível na página da disciplina)
Informação disponível a partir da página da disciplina:
Acetatos da aulas teóricas e práticas
Apontamentos e manuais facultados
Outras fontes: Wikipedia, Google, etc.
Arquitectura de Computadores (2008/2009): Apresentação
4
Precedências recomendadas
Introdução aos Sistemas e Redes de Computadores
Representação de números num computador
Operações lógicas (álgebra booleana)
Componentes e organização de um computador
Instruction Set Architectures (ISA)
Introdução à Programação
Saber programar
Arquitectura de Computadores (2008/2009): Apresentação
5
Avaliação: aprovação
Três testes (essencialmente) práticos + exame
Testes:
15 valores para a prática e 5 para a teórica
Cada vale 15% da nota final
Datas: 25 de Março, 6 de Maio e 9 de Junho
Duração: 1h30
Todos os testes (e apenas os testes) requerem inscrição
Exame: época normal ou recurso
Exame teórico que vale 55% da nota final
Nota final = 0,15*Teste1 + 0,15*Teste2 + 0,15*Teste3
+ 0,55*Exame
Arquitectura de Computadores (2008/2009): Apresentação
6
Avaliação: frequência
É preciso ter no mínimo seis (6,0) valores em 15 na
media das 2 melhores partes práticas dos 3 testes
média(2_melhores_partes_práticas(Teste1,Teste
2, Teste3))) >= 6,0
Quem obteve frequência no ano lectivo de 2007/2008
está dispensado de a obter este ano
Isto não quer dizer que não tem de vir aos testes
Quer dizer que não precisa de cumprir a condição de
frequência acima indicada
Arquitectura de Computadores (2008/2009): Apresentação
7
Esforço para AC
O que significa 6 ECTS ?
1 crédito ECTS 28h de trabalho no semestre (de 20
semanas)
30 ECTS num semestre 42h/semana em média para
as 20 semanas do semestre
6 ECTS 168h no semestre (~8h30/semana durante
20 semanas)
Nosso semestre: 14 semanas de aulas + 6 semanas
No horário têm 5h (3h teóricas + 2h práticas)
necessitam de pelo menos mais 3h30!!!
Arquitectura de Computadores (2008/2009): Apresentação
8
O que diz o CLIP…
2hx14sem
3hx14sem
~3h20x20sem
2hx14sem
Arquitectura de Computadores (2008/2009): Apresentação
9
Má gestão do esforço
Não acompanhar as teóricas
Julgar está tudo nos livros e acetatos
Não acompanhar as práticas
Julgar que basta ver os programas já feitos
Estudar as ~70h de aulas, fazer os exercícios e tirar
todas as dúvidas, SOZINHO, na véspera do exame
Arquitectura de Computadores (2008/2009): Apresentação
10
Principal objectivo para AC
Compreender a organização e o funcionamento dos
computadores:
ao nível da realização e funcionamento interno dos
vários componentes do computador
ao nível da interface de programação disponibilizada
pelo hardware (“linguagem máquina”)
Arquitectura de Computadores (2008/2009): Apresentação
11
Teóricas e práticas?
Teóricas
Compreender as ideias e discutir os conceitos
Práticas
Fazer programas e experimentar, ilustrar os conceitos,
compreender melhor…
Nota: começam na próxima quinta-feira (dia 19)
Avaliação
Incide sobre ambas as componentes
Arquitectura de Computadores (2008/2009): Apresentação
12
Enquadramento
Num sistema de computação:
aplicações
FSO
(interface do sistema)
AC
(arquitectura do computador)
linguagens
bibliotecas
sistema de
operação
SO 2ºciclo
(implementação)
computador
Arquitectura de Computadores (2008/2009): Apresentação
13
AC nos sistemas informáticos
Aplicações
Linguagens de programação
Eng. Informática
Abstracções das linguagens e bibliotecas
Sistemas de operação
Abstracções do sistema e suas funcionalidades
Arquitectura do computador
Componentes e suas interacções
Hardware
Arquitectura de Computadores (2008/2009): Apresentação
14
Motivação
Compreender melhor as abstracções e
funcionalidades existentes nos vários níveis
Desenvolver aplicações mais eficientes e fiáveis
Ao saber mais sobre o sistema que executa a
aplicação, pode ser um melhor programador:
Tirar melhor partido do computador e do sistema de
operação
Escrever programas mais fiáveis e rápidos
Preparar para as cadeiras posteriores
Arquitectura de Computadores (2008/2009): Apresentação
15
Motivação (2)
Muitas disciplinas fazem ênfase na abstracção
Tipos de dados abstractos, objectos
Análise de complexidade
A abstracção é boa, mas convém não esquecer a
realidade!
Estas abstracções têm limitações
Especialmente quando há erros
É preciso compreender as implementações que as
suportam
Arquitectura de Computadores (2008/2009): Apresentação
16
Facto #1
ints não são inteiros, floats não são reais
Exemplos a 32 bits:
x2 ≥ 0?
float’s:
int’s:
Sim... (em princípio ☺)
40000 × 40000 1600000000
50000 × 50000 2500000000 ??
Será (x + y) + z = x + (y + z)?
int’s:
Sim... (em princípio ☺)
float’s:
(1020 + (-1020)) + 3,14 3,14
1020 + (-1020 + 3,14) 3,14 ??
Arquitectura de Computadores (2008/2009): Apresentação
17
Facto #2
É preciso conhecer a linguagem assembly
Provavelmente, nunca irão escrever um programa
em assembly
Os compiladores são muito melhores (mais pacientes)
que nós
Conhecer assembly é crucial para perceber o
modelo de execução ao nível da máquina
Comportamento de programas na presença de erros
O modelo da linguagem de alto nível deixa de ser aplicável
Aumento do desempenho de um programa
Perceber os motivos da ineficiência de um programa
Implementação de software de sistema
Compiladores, linguagens e bibliotecas
Sistema de operação
Arquitectura de Computadores (2008/2009): Apresentação
18
Facto #3
A memória é importante
A memória não é ilimitada
Pode ter de ser reservada e gerida
Muitas aplicações dependem da memória (quantidade e
tempo de acesso)
Os erros relacionados com referências à memória
são especialmente perniciosos
Os efeitos aparecem muitas vezes longe no espaço e no
tempo
O desempenho da memória não é uniforme
O comportamento, a dimensão e a organização da
memória podem afectar imenso o tempo de execução
de um programa
A adaptação do programa as estas características pode
levar a grandes aumentos de velocidade
Arquitectura de Computadores (2008/2009): Apresentação
19
Hierarquia de níveis de memória
Quanto maior é capacidade maior é o tempo de acesso
Nível L0: Registos
3 níveis de
cache. Podem Nível L1: Cache L1 on-chip
ser mais ou
Nível L2: Cache L2 on-chip
menos
Memórias
mais rápidas,
pequenas e
caras (por
MByte)
Nível L3: Cache L3 off-chip
Nível L4:
Nível L5:
Nível L6:
Memória principal
Discos locais
Dispositivos remotos
Arquitectura de Computadores (2008/2009): Apresentação
Memórias
mais lentas,
maiores e
baratas (por
MByte)
20
Acesso a dados em memória
O CPU precisa de fazer acesso a dados e o tempo de
acesso depende de onde esses dados se encontram
Cache, memória central, discos
Consideremos um exemplo com apenas 2 níveis de
cache
L1 on-ship e L2 off-chip
CPU chip
Register file
L1
cache
ALU
(SRAM)
Cache bus
L2 cache
(SRAM)
System bus
Bus interface
Arquitectura de Computadores (2008/2009): Apresentação
Memory
bridge
Memory bus
Main
memory
(DRAM)
21
Erros nas referências à memória
Certas linguagens não têm protecção de memória
Exemplos: C e C++
Podem surgir error como:
Referências a “arrays” com índices inválidos (“Out of
bounds”)
Valores inválidos em endereçamento indirecto
(apontadores)
Abuso da reserva (malloc/new) e libertação (free)
Arquitectura de Computadores (2008/2009): Apresentação
22
Erros nas referências à memória (2)
Pode levar a erros sérios
Se o erro tem ou não efeito depende do sistema e do
compilador
Efeitos à distância
A entidade corrompida pode não ter nenhuma relação lógica
com aquela a que a corrompeu
Os efeitos podem ser observados muito depois do erro ter
ocorrido
Como lidar com isto?
Linguagens que protejam o programador
Java, Lisp, ML, …
Perceber as interacções que podem ocorrer
Usar ou desenvolver ferramentas que detectem
referências erradas
Arquitectura de Computadores (2008/2009): Apresentação
23
Exemplo
main
main (){
(){
long
long int
int a[2];
a[2];
double
double dd == 3.14;
3.14;
a[2]
/* Referencia
Referencia “out
“out of
of bound”
bound” */
*/
a[2] == 1073741824;
1073741824; /*
printf("d
printf("d == %.15g\n",
%.15g\n", d);
d);
exit(0);
exit(0);
}}
Possíveis resultados:
5.30498947741318e-315
3.1399998664856
3.14
(O programa pode também terminar com um erro: “segmentation fault.” O
comportamento varia com a arquitectura, o SO e o compilador. )
Arquitectura de Computadores (2008/2009): Apresentação
24
Facto #4
O desempenho de um programa não depende só da
complexidade do algoritmo
Pode-se obter tempos de execução com relações de
10:1 dependendo da forma como o código é escrito
É possível optimizar a múltiplos níveis: algoritmo,
representações dos dados, funções e ciclos
É preciso compreender o sistema para poder
optimizar eficazmente os programas
Como é que os programas são compilados e executados
Como medir o desempenho de um programa e identificar
os gargalos (bottlenecks)
Como melhorar o desempenho sem destruir a
modularidade e a generalidade do código
Arquitectura de Computadores (2008/2009): Apresentação
25
Exemplo: Produto de matrizes
Seja a matriz A de ordem m×n e a matriz B de
ordem n×r.
Definimos o produto das matrizes A e B como uma
outra matriz C=A.B, definida por:
C(i,j) = A(i,1)*B(1,j) + A(i,2)*B(2,j) + ... + A(i,n)*B(n,j)
para todo par (i,j) em m×r.
Arquitectura de Computadores (2008/2009): Apresentação
26
Exemplos do desempenho
Desempenhos diferentes de acordo com o padrão de
acesso à memória
Multiplicação de matrizes
Múltiplas formas de fazer o aninhamento (nesting) dos
ciclos:
/*
/* ijk
ijk */
*/
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
sum
sum == 0.0;
0.0;
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++)
sum
sum +=
+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
c[i][j]
c[i][j] == sum;
sum;
}}
}}
/*
/* jik
jik */
*/
for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{
sum
sum == 0.0;
0.0;
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++)
sum
sum +=
+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
c[i][j]
c[i][j] == sum
sum
}}
}}
Arquitectura de Computadores (2008/2009): Apresentação
27
Multiplicação de matrizes (desempenho)
160
140
120
ijk
100
ikj
jik
80
jki
kij
60
kji
40
20
0
matrix size (n)
Arquitectura de Computadores (2008/2009): Apresentação
28
Facto #5
Os computadores fazem mais do que executar
instruções de um programa
Enviam e recebem dados para/de periféricos
O sistema de entradas/saídas (I/O) é crítico para a
fiabilidade e o desempenho de um programa
Os programas comunicam
Na mesma máquina
Comunicam através de redes
Muitas questões aparecem quando se usa uma rede
Actividades simultâneas e independentes
Comunicação não fiável
Diferentes representações de dados
As questões de desempenho e dos erros complicam-se
Arquitectura de Computadores (2008/2009): Apresentação
29
Facto #6
Toda a informação no sistema é um conjunto de bits
O mesmo conjunto de bits pode ser:
Um inteiro
Um real representado em vírgula flutuante
Uma sequência de caracteres
Um conjunto de instruções máquina
Só se distingue pela forma como os bits são
interpretados
Arquitectura de Computadores (2008/2009): Apresentação
30
O código fonte do programa hello.c
#include <stdio.h>
int main() {
printf(“hello,world\n”);
}
O programa foi criado por um editor de texto e salvo
num ficheiro hello.c
O ficheiro com código fonte é uma sequência de bits,
organizados em bytes. Interpretando o seu conteúdo
obtemos:
cada byte interpretando como inteiro:
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62 10 105 ...
cada byte interpretando como carácter (norma ISO/ASCII):
#
i
n
c
l
u
d
e
<
s
t
d
i
o
.
h
>
i
…
Mas ainda não é um programa executável
Arquitectura de Computadores (2008/2009): Apresentação
31
Programa de AC
Teórica
Prática
1º Teste
Componentes e
organização do computador
Organização interna do
processador (CPU)
Linguagem C
Modelo de programação
(nível assembly)
Hierarquia das unidades de
memória
Assembly
2º Teste
Memória Virtual
Tipos de periféricos e
sistema de entradas e
saídas (I/O)
Arquitecturas alternativas
Simulador de
memória
Programação de
entradas e
saídas (I/O)
3º Teste
Arquitectura de Computadores (2008/2009): Apresentação
32