Você está na página 1de 28

Arquitectura e Sistemas de

Computadores I
Ano lectivo 2008/2009

Hervé Paulino
DI-FCT/U L

Inclui diapositivos do Prof. José Cardoso e Cunha,


do Prof. Pedro Medeiros e do Prof. Vítor Duarte
Apresentação

Apoio à disciplina
Funcionamento e método de avaliação
Enquadramento e objectivos
Apoio à disciplina
Docentes:
 Teóricas: Hervé Paulino (herve@di.fct.unl.pt)
 Práticas: Rui Marques (rfm@di.fct.unl.pt)
Livro:
 Computer Organization and Design: The
Hardware/Software Interface, D. A. Patterson, J. L.
Hennessy
 ou outros …
 The Essentials of Computer Organization and Architecture,
Linda Null, Julia Lobur
 Essentials of Computer Architecture, Douglas E. Comer

ASC I (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/)

Informação disponível a partir da página da disciplina


(http://www-asc.di.fct.unl.pt/~herve/aulas/asc1-fa) :
 Acetatos da aulas teóricas e práticas
 Apontamentos e manuais facultados

Outras fontes: Wikipedia, Google, etc.

ASC I (2008/2009): Apresentação 4


Principal objectivo para ASC 1
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”)

ASC I (2008/2009): Apresentação 5


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…

Testes
 avaliam ambas as componentes

ASC I (2008/2009): Apresentação 6


Avaliação
Nota final = 75% do teste ou exame + 25% aulas
práticas

Aulas práticas – trabalhos em Assembly e C

ASC I (2008/2009): Apresentação 7


Enquadramento
Num sistema de computação:

aplicações
linguagens
ASC 2 bibliotecas
(interface do sistema) sistema de
operação SO 2ºciclo
ASC 1 (implementação)
(arquitectura do computador) computador

ASC I (2008/2009): Apresentação 8


AC nos sistemas informáticos
Aplicações Informática

Linguagens de programação
 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

ASC I (2008/2009): Apresentação 9


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

ASC I (2008/2009): Apresentação 10


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

ASC I (2008/2009): Apresentação 11


Facto #1
ints não são inteiros, floats não são reais
Exemplos a 32 bits:
 x2 ≥ 0?
float’s: Sim... (em princípio ☺)
int’s:
 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 ??

ASC I (2008/2009): Apresentação 12


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
ASC I (2008/2009): Apresentação 13
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
ASC I (2008/2009): Apresentação 14
Hierarquia de níveis de memória
 Quanto maior é capacidade maior é o tempo de acesso

Memórias
Nível L0: Registos mais rápidas,
3 níveis de
pequenas e
cache. Podem Nível L1: Cache L1 on-chip
caras (por
ser mais ou
Nível L2: Cache L2 on-chip MByte)
menos
Nível L3: Cache L3 off-chip
Memórias
Nível L4: Memória principal mais lentas,
maiores e
Nível L5: Discos locais
baratas (por
Nível L6: Dispositivos remotos MByte)

ASC I (2008/2009): Apresentação 15


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

L1 Register file
cache
(SRAM) ALU
Cache bus System bus Memory bus

Main
L2 cache Memory
Bus interface memory
(SRAM) bridge
(DRAM)

ASC I (2008/2009): Apresentação 16


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)

ASC I (2008/2009): Apresentação 17


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
ASC I (2008/2009): Apresentação 18
Exemplo

main
main (){
(){
long
long int
int a[2];
a[2];
double
double dd == 3.14;
3.14;
a[2]
a[2] == 1073741824;
1073741824; /*/* Referencia
Referencia “out
“out of
of bound”
bound” */
*/
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. )

ASC I (2008/2009): Apresentação 19


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
ASC I (2008/2009): Apresentação 20
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.

ASC I (2008/2009): Apresentação 21


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 */
*/ /*
/* jik
jik */
*/
for
for (i=0;
(i=0; i<n;
i<n; i++)
i++) {{ for
for (j=0;
(j=0; j<n;
j<n; j++)
j++) {{
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; sum
sum == 0.0;
0.0;
for
for (k=0;
(k=0; k<n;
k<n; k++)
k++) 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]; sum
sum +=
+= a[i][k]
a[i][k] ** b[k][j];
b[k][j];
c[i][j]
c[i][j] == sum;
sum; c[i][j]
c[i][j] == sum
sum
}} }}
}} }}

ASC I (2008/2009): Apresentação 22


Multiplicação de matrizes (desempenho)
160

140

120

ijk
100
ikj
jik
80
jki
kij
60
kji

40

20

matrix size (n)

ASC I (2008/2009): Apresentação 23


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
ASC I (2008/2009): Apresentação 24
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

ASC I (2008/2009): Apresentação 25


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


ASC I (2008/2009): Apresentação 26
Programa de ASC 1
Componentes e organização do computador 1º Teste

Organização interna do processador (CPU)

Tipos de periféricos e sistema de entradas e 2º Teste

saídas
Hierarquia das unidades de memória
Arquitecturas alternativas

ASC I (2008/2009): Apresentação 27


Programa de ASC 1
Metodologia e prática laboratorial:
Programação em assembly, baseada na arquitectura do
tipo PC

Programação em C

Programação de entradas e saídas (I/O)

Simulação do comportamento de acesso a unidades de


memória

ASC I (2008/2009): Apresentação 28

Você também pode gostar