Arquitetura em níveis Introdução a Linguagens de Programação Rebeca Schroeder [email protected] Para que servem estes níveis? • Abstração da complexidade; • Interface entre hardware e software de baixo nível; • Padronização das instruções, linguagens de máquina, etc... • Vantagens: diferentes implementações sobre a mesma arquitetura; • Desvantagem: algumas vezes impossibilita inovações. Tipos de softwares • • Software: Programas escritos em linguagem de programação que permitem ao usuário a utilização do computador para diversas tarefas; Software Básico: Controla componentes físicos e lógicos do computador, permitindo ao usuário interagir com esses componentes sem a necessidade de conhecimento especializado (baixo nível): – – – • Software Aplicativo: Desempenham funções específicas para determinadas atividades e usuários: – Linguagens de Programação • Usadas para descrever seqüências de passos que levam à solução de um problema • Permitir que os usuários (programadores) especifiquem como estes passos devem ser seqüenciados para resolver um problema • Especificar algoritmos com precisão. Sistemas operacionais; Utilitários: anti-vírus, compactadores, backups,... Linguagens de programação; Planilhas eletrônicas, bancos de dados, navegadores.. Linguagem de Programação • O que é linguagem? – Meio de comunicação • E Linguagem de programação? – Software através do qual podemos desenvolver programas para informarmos ao computador o que queremos que seja feito Pensamento Humano (nãoestruturado) Programa Computador 1 Linguagem de Programação • Definições – Notação para escrever programas, através dos quais podemos nos comunicar com o hardware e dar as ordens adequadas para a realização de um determinado processo – Conjunto de regras que providencia a maneira de dizer a um computador que operações executar. – Conjunto de símbolos (vocabulário) e regras (gramática) que especifica como transmitir informações entre usuários e computador. Primeiras Linguagens • • Programadores usavam linguagem de máquina – Seqüências de dígitos binários (0s e 1s). – Por exemplo, a instrução “some 1 + 1” deveria ser representada como: 10100100 Muitas desvantagens: – Grande probabilidade de erro em todos os estágios do processo de programação. – Mesmo sendo com algoritmos simples resulta em longos programas, o que dificulta o processo de validação e detecção de erros. – O cálculo de endereços de memória devem ser feitos manualmente, com um árduo trabalho e uma grande probabilidade de erros. Linguagens de Alto Nível x Linguagens de Baixo Nível • Alto nível – Minimiza as dificuldades da programação em Linguagem de Baixo Nível pois se aproxima da linguagem humana – Problemas podem ser solucionados muito mais rapidamente e com muito mais facilidade. – O programa em linguagem de alto nível é normalmente fácil de seguir e entender cada passo da execução. – Fácil portabilidade em diferentes CPUs. Tipos de Linguagem • Linguagens de baixo nível – Restritas a linguagem de máquina. – Forte relação entre as operações implementadas pela linguagem e as operações implementadas pelo hardware. • Linguagens de alto nível – Aproximam-se das linguagens utilizadas por humanos para expressar problemas e algoritmos. – Cada declaração em uma linguagem de alto nível equivale a várias declarações em uma linguagem de baixo nível. Linguagem de Baixo Nível Linguagem de Máquina Significado 0010 0001 1110 carrega no registrador 1 o conteúdo da posição de memória 14 0010 0010 1111 carrega no registrador 2 o conteúdo da posição de memória 15 0001 0001 0010 soma o conteúdo do registrador 1 com o conteúdo do registrador 2 e coloca no registrador 1 0011 0001 1111 armazena o conteúdo do registrador 1 na posição de memória 15 Linguagem de Máquina 0010 0001 1110 Linguagem de Baixo Nível LOAD R1, val1 0010 0010 1111 LOAD R2, val2 0001 0001 0010 ADD R1, R2 0011 0001 1111 STORE R1, val2 Linguagens de Alto Nível x Linguagens de Baixo Nível • Baixo nível – Indicada para funções que precisam implementar instruções de máquina específicas que não são suportadas por linguagens de alto nível. – Impossibilidade de uso de linguagens de alto nível (hardware simples). 2 Linguagens Linguagem de Máquina 0010 0001 1110 Histórico Linguagem de Baixo Linguagem de Alto Nível Nível LOAD R1, val1 0010 0010 1111 LOAD R2, val2 0001 0001 0010 ADD R1, R2 0011 0001 1111 STORE R1, val2 val2 = val1 + val2 Histórico • Quarta geração: São linguagens declarativas e não procedimentais, isto é, permitem dizermos o que queremos que seja feito e não como queremos que seja feito. • Quinta geração: são normalmente conhecidas como linguagens orientadas a objetos (OO – Object Oriented). Alguns autores incluem também nesta geração os sistemas especialistas, desenvolvimento de inteligência artificial, execução de programas em paralelo. Existem centenas de linguagens de programação, agrupadas em 5 gerações: • Primeira geração: linguagem de máquina. • Segunda geração: linguagem de baixo nível. • Terceira geração: linguagens de alto nível. São linguagens de aplicação geral que se caracterizam por suportarem variáveis, matrizes, instruções condicionais, instruções repetitivas, funções e procedimentos. Exemplos de linguagens de 3ª geração são, PASCAL, C, etc... Processamento de linguagens • • • • Embora seja teoricamente possível a construção de computadores especiais, capazes de executar programas escritos em uma linguagem de programação qualquer, os computadores existentes hoje em dia são capazes de executar somente programas em uma linguagem de nível baixo, a linguagem de máquina. Linguagens de máquina: rapidez de execução de programas, menor custo de implementação em hardware. Linguagens de programação: facilidade na construção e da confiabilidade de programas. Existem basicamente duas alternativas para que os programas criados em uma linguagens de programação possam entendidos pela máquina: interpretação e tradução. Processamento de linguagens Processamento de linguagens Interpretação: • As ações indicadas pelos comandos da linguagem são diretamente executadas. Executa repetidamente a seguinte seqüência: Tradução: • Programas escritos em linguagem de alto nível são traduzidos para versões equivalentes em linguagem de máquina, antes de serem executados. Passos básicos: 1. Obter o próximo comando do programa. 2. Determinar que ações devem ser executadas. 3. Executar estas ações. 1.Traduzir programa para código objeto (compilador). 2.Traduzido para código relocável (montador), em linguagem de máquina. 3.Carregar programa inteiro na memória principal, como código executável de máquina. 3 Processamento de Linguagens Código Fonte Tradutor Código Objeto • Compilador: No sentido mais geral, qualquer programa que transforme um conjunto de símbolos em outro obedecendo a uma série de regras sintáticas e semânticas; no sentido mais comum, um programa que traduz todo o código-fonte de programas escritos em uma linguagem de alto nível em código-objeto antes da execução do programa. O código-objeto é o código de máquina, ou alguma variação do código de máquina. Processamento de Linguagens • Código-fonte: não é executável diretamente pelo processador - permite apenas que o programador consiga definir o programa em uma forma legível aos humanos. • Código-objeto: é o código produzido pelo compilador; é uma forma intermediária, similar a linguagem de máquina do computador. Apesar de estar representado em binário, não é executável diretamente pelo processador, pois normalmente, o código-objeto referencia partes de programa que não estão necessariamente definidas no mesmo arquivo que o gerou, por exemplo, arquivos de bibliotecas de sub-rotinas. • Editores de ligação (ou linkeditores): Um programa que reúne módulos compilados e arquivos de dados para criar um programa executável. Os linkeditores têm também outras funções, como a criação de bibliotecas. Processamento de Linguagens Código-fonte Compilador Código-objeto Linker Biblioteca do sistema Sistema operacional Código executável 4