Licenciatura em Informática Unidade Curricular Arquitetura de Computadores Computer Architecture Objetivos -Compreender o hardware e software de sistema (SO); -Entender os sistemas de numeração e aritmética digital; -Compreender os fundamentos de sistemas digitais; -Compreender os fundamentos dos sistemas operativos; -Apreender os fundamentos da ciência dos computadores. Summary of objectives -Understand the hardware and system software (OS); -Understand the numbering systems and digital arithmetic; -Understand the fundamentals of digital systems; -Understand the fundamentals of operating systems; -Grasping the fundamentals of computer science. Enquadramento: Obrigatória, 1º ano - 1º Semestre Pré-requisitos: Créditos: 4 ECTS Horas contacto Orientação tutorial (OT): Seminário (S): Teóricas (T): Prática Laboratoriais (PL): Teórico-práticas (TP): 12 h 0 0 0 48 h Contextualização Científica A arquitetura de computadores refere-se aos atributos de um sistema computacional que têm impacto direto na execução lógica dos programas. A ciência dos computadores é a disciplina cujo objetivo é criar uma base científica para tópicos como o desenho de computadores, a programação de computadores, o processamento da informação, a solução algorítmica de problemas e o próprio processo algorítmico. Proporciona a base para as aplicações atuais dos computadores, assim como para as infraestruturas de computação do futuro. Nesta cadeira, será efetuada uma introdução sólida à arquitetura de computadores, estabelecendo uma base para a disciplina mais abrangente da ciência dos computadores. Após uma contextualização histórica, no capítulo de Armazenamento de Dados será analisada a codificação e armazenamento de informação em computadores modernos. Em Manipulação de Dados, serão estudados em detalhes os componentes arquiteturais de um computador atual. Em seguida, será estudado o Sistema Operativo como software que controla a operação geral do computador, assegurando a interface entre a máquina e o mundo exterior, protegendo a máquina e os dados nela armazenados contra acessos não autorizados, permitindo ao utilizador despoletar a execução de múltiplos programas e coordenando as atividades internas necessárias para assegurar a resposta aos pedidos dos utilizadores. Introduziremos, finalmente, conceito fundamentais da ciência dos computadores, a representação de programas de computador por intermédio das Linguagens de Programação, assim como a tradução destas linguagens de alto nível para as linguagens específicas e ligadas de forma simbiótica à arquitetura do computador. Os exemplos de programas de alto nível serão executados em Python, por forma a proporcionar uma continuidade coordenada com outras cadeiras introdutórias do curso. Do ponto de vista científico, a abordagem será rigorosa e atual, baseada nas principais arquiteturas CISC e RISC do mercado, por forma a proporcionar ao aluno uma aplicabilidade imediata do aprendido em aula, assim como uma base sustentável para aplicações futuras de uma área em evolução acelerada. Operacionalização dos Conteúdos 0. A história da computação 1. Armazenanento de dados . Operações booleanas a. Portas lógicas b. Notação hexadecimal c. Memória principal i. Organização da memória ii. Medidas da capacidade de memória d. Memória de massa i. Sistemas magnéticos ii. Sistemas óticos iii. Unidades de memória flash e. Representação de informação i. Padrões de bits ii. Representação de texto iii. Representação de valores numéricos iv. Representação de imagens v. Representação de som f. O sistema binário i. Notação binária ii. Adição binária iii. Frações em binário g. Armazenamento de inteiros i. Notação de complemento para dois ii. Notação de excesso h. Armazenamento de frações i. Notação de vírgula flutuante ii. Erros de truncagem 2. Processamento de dados . Arquitetura de computadores i. A unidade central de processamento ii. O conceito de programa armazenado a. Linguagem máquina i. O reportório de instruções b. Execução de programa i. Exemplos de execução ii. Programas versus dados c. Instruções aritméticas/lógicas i. Operações lógicas ii. Operações de rotação e deslocamento iii. Operações aritméticas d. Comunicação com outros dispositivos i. O papel dos controladores ii. Acesso direto à memória iii. Handshaking iv. Meios de comunicação v. Taxas de comunicação e. A programação das manipulações de dados i. As operações lógicas e de deslocamento ii. Estruturas de controlo iii. Input e output f. Outras arquiteturas i. Pipelining ii. Máquinas multiprocessador 3. Sistemas operativos . Introdução à história dos sistemas operativos a. Arquitetura dos sistemas operativos i. Componentes de um sistema operativo ii. O arranque do sistema b. Coordenação das atividades do computador i. Conceito de processo ii. Administração de processos c. Coordenação da competição entre processos i. Semáforos ii. Deadlock d. Segurança i. Ataques do exterior ii. Ataques do interior 4. Introdução às linguagens de programação . Primeiras gerações a. Independência da máquina b. Paradigmas da programação c. Implementação das linguagens i. O processo de tradução ii. Ferramentas de desenvolvimento Bibliografia OBRIGATÓRIA: BROOKSHEAR, Glenn & Dennis Brylow; Computer Science: An Overview; Pearson. COMPLEMENTAR: STALLINGS, William; Computer Organization and Architecture; Pearson. CLEMENTS, Alan; Computer Organization & Architecture: Themes and Variations; Cengage Learning. PATTERSON, David A. & John L. Hennessy; Computer Organization and Design; Morgan Kaufmann. TANENBAUM, Andrew S. & Herbert Bos; Modern Operating Systems; Pearson. MARQUES, José Alves; Sistemas Operativos; FCA. SILBERSCHATZ, Abraham, Peter B. Galvin & Greg Gagne; Operating System Concepts; Wiley. HARRIS, David & Sarah Harris; Digital Design and Computer Architecture; Morgan Kaufmann. HARRIS, Sarah & David Harris; Digital Design and Computer Architecture: ARM Edition; Morgan Kaufmann. SCOTT, Michael L.; Programming Language Pragmatics; Morgan Kaufmann.