Arquitectura de Computadores |
FAQ's
Funcionamento da disciplina | Avaliação e Projecto | Questões relativas a aulas | Questões de índole laboratorial
Ultima Modificação: 03 Abr 2006
departamento de informática |
(16-Mar-06)
"Quando uma pessoa tem um
azar e não pode vir a uma aula (indisposição ou outro motivo pessoal), como pode
justificar a falta?"
Basta enviar um email ao docente com a
identificação e justificação, no prazo de uma semana após ter faltado, indicando
no assunto - MCC/AC justificação de falta - e aguardando uma confirmação
do docente (máx. 2 ou 3 dias) de que o pedido foi recebido e aceite.
No caso de uma sessão TP, mais importante que justificar uma falta, é tentar
arranjar disponibilidade para vir assistir (e participar) na mesma sessão, mas
de uma outra qualquer turma; e neste caso não tem falta...
(16-Mar-06)
"Posso usar sempre este
e-mail (não institucional) para comunicar com o professor sempre que tenha
alguma dúvida ou tenho que usar obrigatoriamente o e-mail fornecido pela
universidade?"
Sempre que eu precisar de contactar um/a
estudante (individualmente ou pela lista dos inscritos à disciplina) irei usar o
endereço institucional; contudo, não levanto qq objecção em ler msg's que venham
de outros locais (mas recomendo SEMPRE a indicação de MCC/AC no assunto), e poderei
mesmo fazer um reply para esse endereço não-institucional, se for cómodo
e não me for explicitamente pedido para não o fazer.
(03-Abr-06)
"De acordo com o modelo de
avaliação aprovado, se já estou eliminado dos testes, então não vale a pena
fazer e entregar os TPC's..."
De acordo com o modelo aprovado, tem razão: a
entrega não vai ajudar na classificação final. Mas o fazer os TPC's ajuda
sempre!
Contudo, como incentivo a um trabalho continuado ao longo do semestre, vou
considerar na avaliação final a componente de participação ao longo do semestre
de TODOS os estudantes, mesmo aqueles que optem por serem avaliados apenas
no período de exames.
Recordo, que esta componente apenas é usada se ela efectivamente contribuir para
melhorar a classificação; caso contrário, a média final apenas entra em
consideração com as componentes teórica (teste ou exame, peso 2/3) e prática
(projecto integrado, peso 1/3).
(03-Abr-06)
"...é permitido resolver os
testes quinzenais sem que estes sejam corrigidos, apenas como uma preparação
extra para o exame final"
Recomendo que todos façam isso, essencialmente
como forma de se autoavaliarem em condições de stress. Como normalmente se faz a
correcção logo a seguir do teste (com a participação de todos), é mais uma forma
de todos os interessados se aperceberam o porquê do seu desempenho, quer seja
ele positivo ou negativo; e ajuda também a ter uma noção mais clara dos
conceitos considerados essenciais para aprovação na disciplina, e de quais os
aspectos que o docente mais valoriza numa correcção (por ex., saber que é mais
importante um raciocínio coerente, que um resultado aritmeticamente correcto).
(16-Mar-06)
"Quanto à disciplina de AC,
quando é que os alunos vão poder decidir qual o método de avaliação que mais
lhes convém (modelo de avaliação durante o semestre versus modelo misto)?"
De acordo com o RIAPA e com o que ficou definido
como avaliação em AC este ano, há que ter em consideração o seguinte:
- existem 2 "elementos de avaliação" (artº 5º, RIAPA) em AC: "testes"
e "trabalhos experimentais";
- o "elemento" "trabalhos experimentais" é do "tipo"
"avaliação periódica" (artº 4º);
- o "elemento" "testes" pode ser do "tipo" "avaliação
periódica" ou "avaliação final" (artº 4º);
- cada estudante pode optar entre "teste periódico" ou "exame
final", tendo sempre o direito a um exame de recurso;
- a indicação de qual o tipo de teste (periódico ou final) que um
estudante pretende optar, deveria ocorrer, em princípio, antes da entrega do 1º
teste periódico.
Contudo, uma vez que vários estudantes não estavam conscientes deste modo de
tomada de decisão (e respectiva consequência), este ano irei considerar que um
estudante optará por ser avaliado por testes periódicos se entregar o 2º teste.
(16-Mar-06)
"Torna-se um pouco complicado
distinguir o que é exclusivo da avaliação de AC (Fase 1 do Projecto),
nomeadamente temos as seguintes dúvidas:
a) Pretende que se analise o modelo do relatório proposto, ou seja, que
analisemos o modelo Tex que está na Caracterização do Projecto?
b) E, pretende-se que os parágrafos a escrever sobre os temas escolhidos, sejam
apresentados em LaTex? Caso afirmativo como deve estar estruturado o relatório
que inclui esses parágrafos?
c) Qual é o problema que é referido no ponto 2?
d) Qual é o ambiente de trabalho que temos que especificar?
e)O trabalho de AC, para além dos parágrafos sobre os temas, o que deve conter
exactamente?"
Pretende-se com esta fase do projecto testar as
competências dos estudantes na elaboração de um relatório coerente em LaTeX,
satisfazendo um conjunto mínimo de regras, e executando adicionalmente algumas
tarefas relativas a AC e a PI.
Para quem não está inscrito em PI, os objectivos da fase 1 do projecto
mantêm-se, embora o conteúdo do relatório possa ser ligeiramente diferente. Eis
os pontos que defendo que deverão estar presentes no relatório para quem estiver
nesta situação:
- o relatório deverá conter as seguintes secções: Resumo, Introdução,
Ambiente de Trabalho, Resolução de um Problema em Programação, Conclusões, e,
eventualmente, Referências e Anexo(s);
- as secções específicas de PI (aqui reduzidas a "Resolução de um
Problema...") poderão ser substituídas por um texto curto em que descreva, de
modo sucinto, a análise, especificação, concepção, codificação e teste de um
programa em C que tenha feito algures no passado (até pode incluir a listagem do
código em anexo); a avaliação que irei fazer irá assentar essencialmente na
qualidade da comunicação da mensagem;
- a parte "técnica" específica de AC será a descrição do ambiente de
trabalho que utiliza actualmente no desenvolvimento e teste de programas em C;
na descrição da configuração do hardware utilizado, acrescentar os parágrafos
que detalham um tema específico de AC (os que foram expressamente pedidos no
enunciado da fase 1), os quais deverão ser inseridos de forma elegante e
coerente com o resto texto;
- repito novamente, que a descrição do "ambiente de trabalho" deve ser
feito de tal modo que permita a alguém reproduzir integralmente o ambiente que
utilizaram e obter exactamente os mesmos resultados na execução do mesmo código;
de notar que eu indiquei que esta capacidade de reproduzir o ambiente também se
deverá manter se o teste da aplicação contiver medidas de desempenho e/ou
análise do código binário gerado.
(15-Mar-05)
"Os processadores da AMD utilizam
a mesma arquitectura dos da Intel, ou seja, a IA32? E porque é que dizem que os
da AMD são melhores
do que os da Intel? É por causa da cache?"
Quando se afirma que um dado processador segue a
Arquitectura da Intel de 32-bits (cuja sigla em inglês é IA-32), o que se está a
afirmar é que esse processador está conforme a especificação da Arquitectura do
Conjunto de Instruções (cuja sigla em inglês é ISA, Instruction Set
Architecture) de uma dada família de processadores de 32 bits, que um
fabricante (Intel) tornou pública e que assumiu, de certa maneira, a forma de
padrão ou norma (em inglês, standard).
Deste modo, qualquer fabricante poderá construir um processador IA32 sem ter de
pagar royalties a ninguém, desde que o seu processador execute o mesmo
conjunto de instruções produzindo o mesmo resultado. Poderá construir um
processador mais rápido, mais pequeno, mais barato ou mesmo que consuma menos
energia; depende agora do nicho de mercado que pretenda atacar, sob o ponto de
vista comercial.
Voltando agora ao caso dos processadores do concorrente da Intel, a AMD: há
vários pormenores da arquitectura interna de um processador que podem variar,
quando o objectivo é melhorar o desempenho, sendo os principais os relacionados
com a eficácia das formas de paralelismo ao nível da instrução (cuja sigla em
inglês é ILP, Instruction Level Parallelism) - com destaque para
pormenores de implementação do pipeline, da superescalaridade, e da
computação vectorial, muito usada em aplicações multimédia - e com a redução dos
tempos de acesso à memória - com destaque para a organização e tamanho de cada
um dos níveis de cache (estas questões de ILP e organização/hierarquia de
memória serão cobertos mais adiante).
Com tantas variáveis, não é possível afirmar qual dos processadores é melhor,
pois muito depende da aplicação (algoritmo, codificação, escolha do compilador e
dos parâmetros de compilação), da organização da memória primária, da eficiência
dos circuitos de interface entre o processador e os restantes circuitos/módulos
do computador (a este conjunto de circuitos chama-se normal e simplesmente,
"conjunto de circuitos", ou en inglês, chipset), da organização e
velocidade de transporte de informação dos barramentos de ligação, etc., etc.
Existem vários sites na Web onde são feitos vários testes a configurações
de computadores baseados em diferentes processadores (exemplos de sites:
ExtremeTech.com,
Tom's Hardware Guide,
ZDNet UK Reviews,
Ars Technica,
Ace's Hardware,
SysOpt.com,
Computer Reviews, ... ou então uma
lista de sites em
Technical Evaluations and Product Reviews), e neles é visível como as
variações de desempenho variam tanto de aplicação para aplicação...
(26-Fev-05)
"Numa das primeiras aulas
que o professor leccionou, falou de como o computador faz a conversão para o
sistema de numeração binário. Deu exemplos como transformar texto (caracteres
alfanuméricos) e números (inteiros e reais). Gostaria de saber, a título de
curiosidade, como é k um computador
interpreta os sons e os transmite ao utilizador?"
Vamos por partes:
a) Como é que o som pode ser representado de uma forma digital (ou numérica)?
Sugiro que visite este
sítio na Web.
b) Como é que o som pode ser representado digitalmente de uma maneira eficiente,
ocupando pouco espaço mas perdendo pouca qualidade com a compressão? Sugiro que
visite este sítio
na Web.
c) Como é que um computador produz os sons que depois seguem para os
auscultadores ou colunas? Sugiro que visite este
sítio
na Web.
d) E como é que as colunas transformam esses sinais em sons? Os links
anteriores têm sugestões para encontrar uma resposta...
(26-Fev-05)
"Como é que um computador
transmite informação para um outro computador no outro lado do mundo?"
Estão aqui muitos conceitos de base envolvidos, e
quase todos eles mais relacionados com as comunicações do que com a arquitectura
de um computador. Contudo, julgo ser possível apresentar algumas sugestões de
leituras (na Web) que permitem a obtenção de alguns conhecimentos rudimentares
(mas rigorosos) sobre o modo como algumas das comunicações funcionam.
Vejamos como:
- comunicações entre 2 (ou mais) computadores na mesma casa: este
sítio
expõe os conceitos principais sobre redes domésticas de computação, com links
para locais com informação complementar; obviamente que uma das actuais opções
mais atractivas é a opção sem-fios (com informação
aqui);
- comunicações com o resto do mundo, usando um fornecedor de serviços de
Internet (ISP, Internet Service Provider): opção mais em conta poderá ser
aproveitar a linha telefónica existente em casa, e usar um modem (mais
informações aqui)
para estabelecer uma comunicação assíncrona em série (mais informações
aqui);
se quiser aproveitar a linha telefónica e usá-la simultaneamente para voz e
dados com maior largura de banda, então poderá optar por um serviço de ADSL
(mais informação
aqui); alternativamente, se tiver um serviço de TV por cabo, poderá tb
usufruir dessa infra-estrutura de comunicações usando um cable modem
(mais informação
aqui).
(26-Fev-05)
"Como é que funcionam os
métodos de compactar ficheiros?"
Esta é realmente uma pergunta que não tem uma
resposta imediata, uma vez que os diversos algoritmos existentes estão muito
ligados, não apenas ao tipo de ficheiros que se pretende compactar, e tb ao
destino dos mesmos. Se o destino é uma outra máquina, então o algoritmo mais
adequado é um, mas se forem para serem recebidos por pessoas, então os
algoritmos tomam em consideração as diferentes capacidades de iludir os nossos
sentidos (a técnica para iludir a nossa audição é diferente da da nossa
visão...).
Assim, sugiro:
- uma introdução às técnicas de compressão de ficheiros
aqui;
- uma visita a estes sítios que analisam de técnicas de compressão de
imagem e de
som.
(26-Out-04)
"O IP e o SP não são a mesma
coisa? As instruções não estão na stack? E a stack onde está, no processador?"
Estas questões mostram alguma confusão na mente
de quem as colocou, e requerem uma urgente explicação, uma vez que é
indispensável a correcta compreensão do que é uma stack e como funciona,
para perceber como é que as funções e procedimentos num paradigma imperativo são
implementados ao nível da linguagem máquina, e para mais tarde compreender o
funcionamento do sistema operativo.
Em primeiro lugar, o IP é um registo do processador que contém um valor numérico
(binário) que não é mais que o valor do endereço de memória onde se encontra a
próxima instrução que o processador vai executar; por isso se chama a este
registo o "apontador de instrução" (do inglês instruction pointer). E a
zona de memória onde normalmente as instruções são guardadas não tem nada a ver
com a stack.
Por outro lado, a stack é uma
estrutura de dados (em português designa-se por "pilha", no sentido em que
objectos podem ser empilhados no topo de uma pilha, ou retirados do topo de uma
pilha), normalmente localizada na memória (actualmente quase todas as
arquitecturas de processadores a localizam na memória primária). Mas é uma
estrutura de dados que é tão usada, e que é tão importante que exista suporte ao
nível do hardware na arquitectura do processador, que alguns
processadores possuem instruções específicas no seu instruction set para
manipularem directamente esta estrutura (nomeadamente para a inserção e remoção
de elementos da estrutura).
Como sabem, e se pensarem em termos de listas (PP1...), é possível acrescentar
novos elementos a uma lista numa extremidade, e retirá-los da mesma extremidade,
ou da outra extremidade. Se se retirar da mesma extremidade estamos perante uma
pilha (ou stack); se se retirar da outra extremidade estamos perante uma
fila de espera (ou queue).
Que tipo de suporte precisamos do hardware para melhorar a eficiência na
utilização destas estruturas? Que o hardware se encarregue de fazer
automaticamente a gestão dos apontadores para o topo da pilha ou dos apontadores
para o princípio e o fim da fila de espera.
A arquitectura do IA-32 apenas suporta no seu ISA a manipulação de pilhas,
através das instruções de inserção (push)
ou remoção (pop)
de elementos de uma pilha, mantendo sempre actualizado o apontador para o valor
que se encontra no topo da pilha (que em inglês se diz stack pointer, o
SP).
Assim, uma operação de pop
corresponde a ler o valor que se encontra na memória no endereço especificado
pelo SP, actualizando de seguida esse apontador (i.e., incrementando o SP de
tantas unidades quantas o nº de células que ocupava o valor que se leu),
enquanto um push
corresponde a começar por incrementar o SP para a próxima posição livre acima do
topo da pilha (de tantas unidades quantas as células que necessita o valor a ser
lá colocado) e depois a escrever nesse endereço de memória o valor que se
pretendia colocar no topo da stack.
Durante o estudo do ISA do IA-32 estas noções
ficarão muito mais claras, uma vez que os diversos exemplos irão ilustrar a
utilização da stack.
(25-Out-04)
"Estou confuso: afinal qual
é a diferença entre um registo e uma célula de memória?"
Conceptualmente, ambos são são circuitos
electrónicos que são usados para armazenar electronicamente um dado valor,
permitindo as operações de leitura e escrita (com excepções).
Há várias diferenças; vou tentar apresentar uma lista de algumas, apenas em
termos de funcionalidade e ordenadas pela sua importância:
- os registos estão no CPU e têm uma
ligação muito forte com as unidades funcionais que dentro do CPU efectuam
operações (aritméticas, lógicas, de vírgula flutuante, ...); as células são os
elementos da memória que apenas armazenam valores;
- a dimensão dos registos está normalmente
associada à arquitectura do processador (e às características das unidades que
efectuam operações), e à sua vocação: se o processador é para cálculo científico
de elevado rigor que exija tratamento de inteiros com 64 bits, então estes
registos armazenam valores de 64 bits; se é para computação mais comum, então o
normal hoje em dia é usar processadores de 32 bits, em que os registos para
inteiros são de 32 bits; se é necessário trabalhar com reais, o habitual hoje em
dia é os processadores suportarem pelo menos a representação de precisão dupla
da norma IEEE 754, logo registos de FP de 64 bits; se o processador é usado em
sistemas embebidos com alguma complexidade, os registos de inteiros poderão ter
16 bits, e os de FP poderão ser de 32 ou 64 bits; nalguns casos de
microcontroladores muito simples, os registos de inteiros poderão até ser só de
8 bits;
- as células de memória são a porção mais
pequena de memória para a qual é possível especificar uma localização numérica
(um endereço); em tempos a dimensão das células variava com o fabricante/tipo de
computador; actualmente todos os sistemas de computação usam memórias em que a
célula tem um tamanho fixo de 8 bits (a dimensão óptima para armazenar um
caracter ASCII com algumas especificidades de linguagem, como os acentos da
língua portuguesa);
- para especificar um registo ou uma célula
de memória, é preciso indicar a sua localização/endereço; a partir da altura em
que se distingue uma registo de uma célula, e havendo poucos registos
disponíveis ao programador no processador, o nº de bits necessário para
especificar um registo é bem menor que o nº de bits necessário para especificar
uma célula de memória, o que faz com que o formato de uma instrução seja bem
mais curto cada vez que se especifica um registo em vez de uma célula; por ex.,
se só houver 8 registos (ou 32) no processador, só serão precisos 3 bits (ou 5)
para especificar um qq desses registos, enquanto que para escolher uma célula de
memória entre 4G possíveis células, serão precisos 32 bits para especificar a
sua localização;
- as operações que normalmente se efectuam
sobre uma célula são apenas de leitura ou escrita, e referem-se sempre à
totalidade do conteúdo da célula; quanto aos registos, é possível manipular
apenas parte do conteúdo da célula (ver-se-á quando se analisar um
instruction set).
As outras diferenças têm a ver com aspectos
electrónicos de implementação, que não vou referir agora.
(14-Out-04)
"Num dos TPC's o professor
pede "Converta para binário 0xFF1F"; o "x" representa o sinal da multiplicação
(sendo 0xFF1F um nº em hexadecimal), é a letra "x" minúscula (sendo 0xFF1F uma
palavra em ASCII ou Unicode) ou tem outro significado não descrito
anteriormente?"
Essa nomenclatura é a usada no C: o prefixo "0x"
indica que a sequência de caracteres que se segue representa o conjunto de
"algarismos" de um nº no sistema de numeração hexadecimal. Isto evita a
utilização de um índice no fim do nº (neste caso o índice 16), uma vez que um
ficheiro com um programa em C é um ficheiro de puro texto, no qual não é
possível especificar atributos de texto (neste caso, uma string em
índice).