Introdução aos Computadores e Programação (ICP) Programação para as Ciências Experimentais (PCE) DI/FCT/UNL 1º Semestre 2004/2005 1 • Teóricas: – Jorge Cruz ([email protected] / http://ssdi.di.fct.unl.pt/~jc) • Práticas: – Miguel Maurício ([email protected]) – Joaquim Ferreira da Silva ([email protected] / http://ssdi.di.fct.unl.pt/~jfs) – Alexandre Pinto ([email protected] / http://centria.di.fct.unl.pt/~amp/) • Objectivos – Introdução aos Computadores – Introdução à Algoritmia – Familiarização com uma linguagem imperativa (Octave/MATLAB) – Aplicação a problemas de engenharia 2 Avaliação • Avaliação das Práticas: – Mini-teste de Octave – Trabalho de Octave (1) – Trabalho de Octave (2) – Mini-teste de Excel • Nota Final: – 25% - Nota Prática – 75% - Exame http://ssdi.di.fct.unl.pt/cursos/icp/ http://ssdi.di.fct.unl.pt/cursos/pce/ 3 Introdução aos Computadores • Um computador é uma máquina capaz de executar determinadas tarefas. • Para uma máquina poder executar uma determinada tarefa é necessário: – Um algoritmo adequado para executar essa tarefa – Uma representação do algoritmo compreensível pela máquina • Um algoritmo é um conjunto ordenado de passos que definem como uma tarefa deve ser executada. • Um programa é a materialização para uma dada máquina (computador e linguagem de programação) de um algoritmo. 4 Exemplo Tarefa: Calcular o maior divisor comum de dois inteiros positivos x e y Algoritmo: 1º Passo: atribuir a M o maior valor entre x e y; 2º Passo: atribuir a N o menor valor entre x e y; 3º Passo: chamar R ao resto da divisão inteira de M por N; 4º Passo: se R=0 então o maior divisor comum é N; senão atribuir a M o valor de N; atribuir a N o valor de R; voltar ao 3º Passo; 5 Exemplo Tarefa: Calcular o maior divisor comum de dois inteiros positivos x e y Programa (Octave): x=input(“Qual o valor de x?”); y=input(“Qual o valor de y?”); M = max(x,y); N = min(x,y); do R = mod(M,N); if (R <> 0) M = N; N = R; endif; until (R == 0); disp(“O maior divisor comum é:”); disp(N); 6 Introdução aos Computadores • Os programas e os algoritmos que eles representam são genéricamente denominados por software. • A máquina e os seus componentes físicos são genéricamente denominados por hardware. 7 Representação da Informação • Toda a informação necessária ao funcionamento de um computador é representada por conjuntos de bits. • Um bit (binary digit) é um valor simbólico (0/1) que fisicamente é armazenado em componentes (circuitos) que podem estar num de dois estados (ex: ligado → 1; desligado → 0). 8 Armazenamento de Dados Memória Principal Memória Secundária Disco Rígido Disquetes CDs DVDs ... Memória Principal A memória principal é organizada numa sequência de células (palavras), cada uma com um tamanho típico de 8 bits (byte) e que pode ser acedida individualmente especificando o seu endereço (RAM → random access memory) 9 Armazenamento de Dados Memória Principal endereço células 0: 01101101 1: 10101110 2: 00001111 3: 01011100 4: 10110011 ... ... ??: 00110011 O número de células da memória principal é geralmente grande, variando de computador para computador, e expressa-se normalmente em potências de 2: 210 bytes = 1024 bytes = 1 Kilobyte = 1 KB 220 bytes = 1024 KB = 1 Megabyte = 1 MB 230 bytes = 1024 MB = 1 Gigabyte = 1 GB 10 Armazenamento de Dados Memória Principal endereço células 0: 01101101 1: 10101110 2: 00001111 3: 01011100 4: 10110011 ... ... ??: 00110011 00001111 bit mais significativo bit menos significativo Em cada célula os bits são ordenados. A memória principal pode ser considerada uma longa sequência de bits, permitindo representações com um tamanho arbitrário de bits. (ex: uma sequência de 16 bits pode ser representada por 2 células consecutivas) 11 Armazenamento de Dados Memória Secundária A memória secundária (discos rígidos, disquetes, CDs, DVDs, ...) complementa a memória principal, proporcionando num meio menos volátil (não se apaga quando se desliga o computador): • mais espaço de armazenamento; • possibilidade de separação física da máquina. A maior desvantagem destes sistemas relativamente à memória principal é a velocidade de acesso (usa meios mecânicos muito mais lentos). 12 Representação da Informação como Sequência de bits Representação de Texto Cada símbolo é normalmente representado por 1 byte de acordo com o código ASCII (American Standard Code for Information Interchange). memória principal ... 01000010011011110110110100100000011001000110100101100001 B o m d i a 01000010 B 01101111 o 01101101 m 00100000 01100100 d 01101001 i 01100001 a ... 13 Representação da Informação como Sequência de bits Representação de Valores Numéricos Sistema Decimal 239 Sistema Binário 11101111 9×100 = 9 3×101 = 30 2×102 = 200 239 Sequência de números binários: 1×20 1×21 1×22 1×23 0×24 1×25 1×26 1×27 = 1 = 2 = 4 = 8 = 0 = 32 = 64 = 128 239 0, 1, 10, 11, 100, 101, 110, 111, 1000, ... 14 Representação da Informação como Sequência de bits Representação de Imagens Mapas de bits Uma imagem é um conjunto de pontos (pixel – picture element) representado por uma longa sequência de bits: • imagens a preto e branco (pixel→1 bit): 1→preto ; 0→branco • imagens a cores (pixel→3 bytes): vermelho+verde+azul (RGB) Os mapas de bits ocupam muito espaço pelo que se usam frequentemente técnicas de compressão (ex: GIF e JPEG). Uma desvantagem adicional é a dificuldade de aumentar ou diminuir as imagens. 15 Representação da Informação como Sequência de bits Representação de Imagens Técnicas de Vectores As técnicas de vectores representam uma imagem como um conjunto de linhas e curvas deixando os detalhes do seu desenho para a componente que produz a imagem (monitor, impressora). Uma característica destas técnicas é a facilidade de aumentar ou diminuir as imagens. As técnicas de vectores são usadas frequentemente para representar tipos de letra (escaláveis) e em aplicações de desenho (ex: CAD – Computer-Aided Design). 16 Manipulação da Informação O computador, além de ser capaz de armazenar os dados, tem também que os saber manipular para poder executar os algoritmos. A manipulação dos dados requer um mecanismo para executar operações sobre os dados e coordenar a sequência dessas operações. Num computador típico este mecanismo é denominado unidade central de processamento (CPU – Central Processing Unit). 17 Manipulação da Informação Unidade Central de Processamento (CPU) A unidade central de processamento é constituida por: • Uma unidade lógica/aritmética que contém os circuitos que executam a manipulação de dados; • Uma unidade de controle que contém os circuitos para a coordenação da actividade da máquina; • Um conjunto de registos gerais que servem para temporariamente os dados que são manipulados na CPU; armazenar • Dois registos especiais: -Um contador (program counter) que contém o endereço da próxima instrução a ser executada; -Um registo de instrução (instruction register) que contém a instrução que está a ser correntemente executada. 18 Manipulação da Informação Unidade Central de Processamento (CPU) CPU Unidade Lógica/Aritmética RAM Unidade de Controle 0: 01101101 1: 10101110 2: 00001111 registo de instrução 3: 01011100 0110110110101110 4: 10110011 registos contador 0: 10100100 00000010 1: 00000000 2: 00000000 ... BUS ... A CPU está ligada com a memória principal (RAM) por um circuito (BUS) através do qual é capaz de transferir dados entre a RAM e os seus registos. Actualmente quase todos os CPUs contêm uma memória de alta velocidade (semelhante à dos registos) denominada Memória Cache. Nestes casos, a máquina tenta manter na Memória Cache uma cópia da parte da RAM que esteja correntemente a ser utilizada. 19 Manipulação da Informação Execução de Programas Um programa para poder ser executado tem que ser codificado e armazenado na memória principal. A unidade de controle é responsável pela extração do programa da memória principal, descodificação das suas instruções e sua execução. A unidade de controle repete continuamente o seguinte ciclo (machine cycle): Transferir da RAM a instrução indicada pelo contador para o Fetch registo de instrução e incrementar o contador. Decode Execute Descodificar o conteúdo do registo de instrução, identificando a operação requerida e os respectivos operandos. Executar a operação requerida pela instrução activando os circuitos apropriados. 20 Manipulação da Informação Comunicação com os Periféricos A memória principal (RAM) conjuntamente com a unidade de processamento central (CPU) constituem o núcleo do computador que comunica com os periféricos através de dispositivos intermediários denominados controladores. BUS CPU RAM Controlador Controlador Monitor Disco Rígido Nos PCs os controladores correspondem às placas que se podem inserir na placa principal (motherboard) e às quais se ligam os periféricos. Cada controlador trata da comunicação com determinado tipo de periférico. O controlador está electronicamente ligado ao BUS que liga a CPU à RAM. A comunicação entre a CPU e um controlador é feita de um modo idêntico à comunicação da CPU com a RAM (o endereço identifica o controlador). 21 O Sistema Operativo A coordenação entre as diferentes actividades que podem ser executadas num computador é realizada por um conjunto de software globalmente denominado Sistema Operativo (ex: Microsoft Windows XP, UNIX, Linux, ...). Um sistema operativo é constituido por duas camadas: o interpretador de comandos (Shell) e o núcleo (Kernel): Kernel Shell 22 O Sistema Operativo Shell A Shell é a parte do sistema operativo responsável pela interface com os utilizadores. Normalmente disponibiliza uma interface gráfica (GUI – Graphical User Interface) cujos objectos (ficheiros, programas...), são representados e manipulados graficamente no monitor como icones. Gestor de Janelas Uma componente importante das interfaces gráficas é o gestor de janelas, responsável pela divisão do ecrã em espaços denominados janelas e pela sua associação com as respectivas aplicações. 23 O Sistema Operativo Kernel A Kernel do sistema operativo contém o software capaz de executar as funções mais básicas. As suas componentes principais são: • o gestor de ficheiros (file manager); • os gestores dos periféricos (device drivers); • o gestor de memória (memory manager); • os gestores dos processos (scheduler e dispatcher). 24 O Sistema Operativo Kernel Gestor de Ficheiros A função do gestor de ficheiros é a coordenação das capacidades de armazenamento da máquina. A informação é armazenada em ficheiros que normalmente são agrupados em directorias organizadas hierarquicamente: C:\ Program Files Programa_1.exe A:\ ... ... C:\Program Files\Programa_1.exe Ficheiro_1 Ficheiro_2 Directoria Ficheiro_3 A:\Directoria\Ficheiro_3 25 O Sistema Operativo Kernel Gestores de Periféricos Os gestores de periféricos (device drivers) são as unidades de software que comunicam com os controladores dos periféricos. Cada device driver é especializado num determinado periférico (uma impressora, um disco rígido, um monitor, ...). Assim, temos um sistema operativo genérico que pode ser configurado para um conjunto particular de periféricos com a instalação dos respectivos device drivers. 26 O Sistema Operativo Kernel Gestor de Memória O gestor de memória é responsável pela coordenação da utilização da memória principal (RAM). Vários programas e blocos de dados podem estar simultaneamente na memoria principal. É necessário coordenar a utilização do espaço disponível, e eventualmente, criar a ilusão de um espaço de memória maior (memória virtual) usando por exemplo espaço do disco rígido. 27 O Sistema Operativo Kernel Gestores dos Processos Um processo é um programa em execução. Os computadores actuais possibilitam a execução de vários processos concurrentemente, isto é, o tempo de CPU é partilhado (time-sharing) pelos respectivos processos. Os gestores dos processos são componentes do sistema operativo responsáveis pela manutenção de uma lista dos processos em execução e dos respectivos estados, e pela atribuição de tempo de CPU a cada processo. 28 O Sistema Operativo O Arranque do Sistema Operativo Quando o computador é ligado um pequeno programa de inicialização é executado automaticamente. Este programa está armazenado permanentemente numa parte não volátil da memória principal (ROM – Read Only Memory). O objectivo do programa de inicialização é fazer a transferência para a memória principal do sistema operativo que se encontra armazenado numa zona prédeterminada do disco rígido (ou outro periférico) e iniciar a sua execução. Uma vez iniciada a sua execução, o sistema operativo passa a controlar todas as actividades da máquina. 29