Arquitetura de Computadores

Objetivos

Conhecimentos:

  1. Identificar os componentes fundamentais da arquitetura de um computador e explicar o seu papel no conjunto.
  2. Identificar os componentes fundamentais de um processador e explicar o seu papel no conjunto.
  3. Identificar os diferentes tipos de instruções máquina e os mecanismos para a execução dos mesmos.
  4. Compreender como instruções e dados são guardados em memória e interpretados pelo processador.
  5. Compreender a forma como um programa escrito numa linguagem de alto nível é executado, incluindo o papel do compilador, assembler e loader.
  6. Compreender a importância de uma estrutura hierárquica de memória e o seu papel no desempenho das aplicações.
  7. Compreender o funcionamento de interrupções/exceções, assim como a interface com os periféricos de um processador.

Aptidões e competências:

  1. 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 VersionT. 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áticaAs 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.

Cursos

Cursos onde a unidade curricular é leccionada: