Arquitetura de Computadores
Objetivos
Conhecimentos:
- Identificar os componentes fundamentais da arquitetura de um computador e explicar o seu papel no conjunto.
- Identificar os componentes fundamentais de um processador e explicar o seu papel no conjunto.
- Identificar os diferentes tipos de instruções máquina e os mecanismos para a execução dos mesmos.
- Compreender como instruções e dados são guardados em memória e interpretados pelo processador.
- Compreender a forma como um programa escrito numa linguagem de alto nível é executado, incluindo o papel do compilador, assembler e loader.
- Compreender a importância de uma estrutura hierárquica de memória e o seu papel no desempenho das aplicações.
- Compreender o funcionamento de interrupções/exceções, assim como a interface com os periféricos de um processador.
Aptidões e competências:
- Conceber e realizar soluções para problemas simples usando as linguagens C e Assembly.
Caracterização geral
Código
11152
Créditos
9.0
Professor responsável
Pedro Abílio Duarte de Medeiros
Horas
Semanais - 5
Totais - 70
Idioma de ensino
Português
Pré-requisitos
Conhecimentos básicos de álgebra de Bool, bases numéricas e circuitos digitais e representação de informação, bem como conhecimentos básicos de programação de computadores.
Bibliografia
Dive Into Systems, S. Matthews et al., 2022 https://diveintosystems.org/
Operating Systems: Three Easy Pieces (2018) , R. e A. Arpaci-Dusseau, https://pages.cs.wisc.edu/~remzi/OSTEP/
How to Think Like a Computer Scientist - C Version, T. Scheffler e A. B. Downey, 2019, https://github.com/tscheffl/ThinkC/
Método de ensino
Nas aulas teóricas expõe-se e discutem-se os tópicos do programa da UC, apresentando os problemas e discutindo as respetivas soluções e alternativas recorrendo a exemplos de arquiteturas concret. Os materiais e tópicos das aulas (slides e outros materiais disponíveis no domínio público) a serem abordados são disponibilizados antecipadamente, fomentando o estudo antecipado por parte dos alunos.
As aulas práticas acompanham os conhecimentos adquiridos na UC, fornecendo aos alunos experiência prática na programação de nível sistema para um processador e uma arquitetura específicos. Os exercícios semanais acompanham os conteúdos programáticos das aulas teóricas, e o projeto permite consolidar os conhecimentos adquiridos na UC. Os questionários (quizzes) a responder em aulas práticas selecionadas promovem que o estudo e a consolidação de conhecimentos aconteçam ao longo do semestre.
Método de avaliação
A avaliação tem dois componentes: componente teórica e componente prática. As questões de plágio e fraude serão tratadas de acordo com o indicado no regulamento de avaliação da FCT. As notas intermédias são arredondadas à centésima e a nota final à unidade. Durante a realização dos testes não é permitida a utilização de qualquer tipo de dispositivo eletrónico, incluindo máquinas de calcular de qualquer espécie.
Componente teórica
A nota desta componente (NT) é obtida em dois testes teórico / práticos presenciais sem consulta sobre a matéria das aulas teóricas, ou exame de recurso (também presencial).
NT = (nota teste 1 + nota teste2 ) / 2 ou
NT = nota exane de recurso
Para ter sucesso na unidade curricular, um estudante tem de ter pelo menos 9,5 valores nesta componente.
Componente laboratorial
A nota desta componente (NL) é obtida em quatro trabalhos práticos de média dimensão (EP1, EP2, EP3, EP4) elaborados em grupos de até 2 estudantes. A utilização de ferramentas como o Copilot e o ChatGPT é possível.
Para ter sucesso na unidade curricular, um estudante tem de ter pelo menos 6,0 valores nesta componente.
Os trabalhos têm notas NEP1, NEP2, NEP3, NEP4.
NL = (NEP1 + NEP2 + NEP3 + NEP4) / 4.
A nota NEPi é obtida através de duas componentes:
- Avaliação do grupo, NGi, relacionada com a funcionalidade e correção do código entregue.
- Avaliação individual de cada membro do grupo NTPi, que é obtida através das respostas a perguntas sobre os trabalhos práticos nos dois testes (sobre o EP1 e EP2 no 1º teste, sobre o EP3 e EP4 no 2º teste). Essas perguntas não contribuem para a nota do teste. As perguntas sobre o EPi são classificadas com uma nota NTPi entre 0 e 100 e a nota final NEPi será dada pelas regras seguintes:
se NTPi >= 50, NEPi = minimo( 20 , NGi )
senão se NTPi >= 20, NEPi = mínimo( 12, NGi )
senão NEPi=0
Se um estudante faltar com justificação ao teste em que é obtido NTPi, será submetido a uma prova oral; de acordo com o desempenho nessa prova, NEPi poderá ser um valor entre 0 e NGi. Cabe à equipa docente avaliar se a justificação da falta é ou não considerada.
Nota final (NF)
NF = 0,70*NT + 0,30*NL
Notas práticas de anos anteriores
Os estudantes que obtiveram notas práticas nos dois anos anteriores podem manter essas notas. Podem também obter uma nova nota NL em 2024/25, devendo nesse caso inscrever-se num turno prático, entregar os trabalhos nas datas especificadas e responder às perguntas sobre os exercícios nos testes. Estes estudantes não precisam de indicar se pretender optar pela nota laboratorial obtida em anos anteriores ou pela nota obtida em 2024/25, uma vez que
NL = Máximo( NL obtida em anos anteriors, NL obtida em 2024/25)
Conteúdo
1. Organização por níveis de um sistema computacional. Arquitetura de Von Neumann. O nível do sistema operativo. Funções do sistema operativo. Noção de ficheiro. Interpretador de comandos.
2. O componente CPU: organização geral, representação dos dados, tipos de instruções máquina, formato das instruções, suporte pelas instruções máquina dos conceitos presentes em linguagens de alto nível
3. O componente memória central (RAM): Níveis da hierarquia de memória. Caches. Endereçamento físico e virtual. Páginas. Compilação, ligação e carregamento.
4. O componente Dispositivos de Entrada / Saída: tipos de periféricos, suporte dos periféricos pelo sistema operativo.