Capítulo I - continuação (.pdf)

8
Métodos de Programação I Departamento de Matemática, FCTUC 8 2005/06 Modelo de Organização de um Computador Digital - Modelo de Von Neumann Neste modelo esquemático de organização de um computador digital tradicional encontramos 3 unidades básicas principais: Unidade Central de Processamento (CPU, Central Processing Unit) – onde, não só se executam as operações aritméticas e lógicas elementares estipuladas pelo programa, como também é efectuado todo o controlo do sistema informático. Assim, esta unidade central aparece dividida em 2 secções principais: a unidade de controlo e a unidade aritmética e lógica. Unidades de Entrada e Saída (Input/Output): são estas unidades que permitem a comunicação com o exterior. Memória Central : onde são armazenados os programas, dados e resultados necessários à prossecução e finalização da tarefa em curso. Unidade Processadora Central Figura 10: Modelo de Von Neumann. A unidade de controlo é a mais importante de todas as unidades. É ela que controla todo o funcionamento do sistema: retira, uma a uma, as intruções de execução da memória, analisa-as e transforma-as em sinais de comando a serem obedecidas pelas diversas partes físicas do computador. Comanda a entrada de dados e saída de resultados entre todas as restantes unidades e sincroniza todas as operações a serem efectuadas, a velocidades muito elevadas. Esta sincronização é feita usando um relógio interno que emite milhões de impulsos por segundo - MegaHertz (MHz)- e cada instrução toma uns tantos impulsos desses milhões para se poder realizar. A unidade aritmética e lógica apenas executa as operações elementares de cálculo ou transformação que lhe são indicadas pela unidade de controlo, na ordem por esta última sinalizada e sobre os dados por ela indicados. A memória central serve, obviamente, para armazenar dados, resultados e programas, tendo, basicamente, 4 funções diferentes durante o processamento e que, portanto, podemos descrever como estando dividida em quatro áreas diferentes de armazenamento: Unidade de Controlo Unidade Aritmética e Lógica Memória Central Unidades de Entrada e Saída C – controlo I – instruções D – dados R - resultados C C C R R R D D D

Transcript of Capítulo I - continuação (.pdf)

Page 1: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 8

2005/06

Modelo de Organização de um Computador Digital - Modelo de Von Neumann

Neste modelo esquemático de organização de um computador digital tradicional encontramos 3 unidadesbásicas principais:

• Unidade Central de Processamento (CPU, Central Processing Unit) – onde, não só se executamas operações aritméticas e lógicas elementares estipuladas pelo programa, como também éefectuado todo o controlo do sistema informático. Assim, esta unidade central aparece divididaem 2 secções principais: a unidade de controlo e a unidade aritmética e lógica.

• Unidades de Entrada e Saída (Input/Output): são estas unidades que permitem a comunicaçãocom o exterior.

• Memória Central : onde são armazenados os programas, dados e resultados necessários àprossecução e finalização da tarefa em curso.

Unidade Processadora Central

Figura 10: Modelo de Von Neumann.

A unidade de controlo é a mais importante de todas as unidades. É ela que controla todo o funcionamentodo sistema: retira, uma a uma, as intruções de execução da memória, analisa-as e transforma-as em sinaisde comando a serem obedecidas pelas diversas partes físicas do computador. Comanda a entrada de dadose saída de resultados entre todas as restantes unidades e sincroniza todas as operações a serem efectuadas,a velocidades muito elevadas. Esta sincronização é feita usando um relógio interno que emite milhões deimpulsos por segundo - MegaHertz (MHz)- e cada instrução toma uns tantos impulsos desses milhões parase poder realizar.

A unidade aritmética e lógica apenas executa as operações elementares de cálculo ou transformação quelhe são indicadas pela unidade de controlo, na ordem por esta última sinalizada e sobre os dados por elaindicados.

A memória central serve, obviamente, para armazenar dados, resultados e programas, tendo, basicamente,4 funções diferentes durante o processamento e que, portanto, podemos descrever como estando divididaem quatro áreas diferentes de armazenamento:

Unidade deControlo

Unidade Aritmética e Lógica

MemóriaCentral

Unidades de Entrada e

Saída

C – controloI – instruçõesD – dadosR - resultados

CC

C

R

R

R

DDD

Page 2: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 9

2005/06

• área de armazenamento de dados de entrada (que conterá os dados exteriores que o programanecessita para a sua execução)

• área funcional (serve para anotar resultados intermédios do processamento)

• área de armazenamento de programas (guarda as instruções de processamento do programa a correrno momento)

• área de armazenamento de saída (guarda resultados finais do processamento até que possam sair damemória central)

Esta separação é apenas funcional, isto é, não é física nem permanente, variando de programa paraprograma.Existem também diferentes tipos de memória para além da central. Esta última tem que ser afecta aocomputador para que este possa trabalhar mas podemos estender a capacidade de memória de umcomputador usando as chamadas memórias auxiliares. Estas unidades não são essenciais aofuncionamento do computador por si só e, por isso, quando existem, são identificadas como unidadesperiféricas. Dentro dos diferentes tipos de memória, podemos agrupá-los em dois grupos principais:

• Memórias de acesso sequencial (para recolher uma informação específica, temos de passar toda ainformação que seja anterior a esta, desde o ínicio da memória, até encontrar a informação desejada)- fita magnética (cartuchos, bobinas, cassetes …);

• Memórias de acesso directo (podemos recolher a informação desejada directamente, através do usode endereços para localização) - discos magnéticos (disco duro, disquetes, …), discos ópticos(CD/DVD).

Claramente, estas diferenças aparecem devido a custos de construção das diferentes memórias e, mesmodentro da memória central, teremos memórias mais rápidas e mais lentas para o trabalho do computador.De facto, não só a velocidade de processamento é importante num computador mas, também, a velocidadede acesso à informação é extremamente importante. Que interesse tem um processador muito rápido setivermos que estar à espera enquanto ele recolhe informação em memória?Os diferentes tipos de memórias que existem são fabricados em materiais diferentes que têm, obviamente,capacidades diferentes (de armazenamento, de propagação de sinais eléctricos, etc) e são uns mais carosque outros. Podemos, portanto, falar de uma hierarquia de memória, em termos dos diferentes tipos dememória e em função da sua capacidade, tempo de acesso e custo, que se encontra esquematizada nafigura seguinte:

- +

memórias

capacidade/tempo de acesso centrais custo

memórias auxiliares directas

memórias auxiliares sequenciais + -

Figura 11: Hierarquia de memória.

As unidades de entrada e saída, que servem para efectuar a comunicação com o exterior, são constituídaspor todos os periféricos de comunicação com o exterior como, por exemplo:

• monitor

• teclado

• rato

Page 3: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 10

2005/06

• impressoras

• unidades de leitura óptica ou magnética (leitores de CD/DVD, disquetes, …)

• modems (unidades de comunicação digital entre computadores)

• scanners (unidades de leitura digitalizadoras)

• câmaras de video

• microfones

• joystick

• …

1.4. HARDWARE VERSUS SOFTWARE

Vimos já quais as componentes físicas básicas de um computador digital. O conjunto destes dispositivostoma a designação geral de hardware (equipamento físico: dispositivos mecânicos, magnéticos, eléctricose electrónicos). A parte lógica, com a qual podemos tirar partido e fazer funcionar o hardware, designa-sepor software (aspecto lógico, domínio da programação: conjunto de programas, métodos, regras edocumentação necessárias ao perfeito funcionamento do sistema informático). Tal como não é possívelconceber a existência de um computador sem a sua parte física, também o seu funcionamento éinconcebível sem o software, por muito poderoso e sofisticado que seja o sistema.Um programa é, basicamente, um conjunto de instruções, escritas numa linguagem específica, destinadasa orientar o sistema informático na execução de vários passos elementares que, no seu conjunto conduzema um determinado objectivo. Assim, e consoante as características desse objectivo, podemos dividir osoftware em 3 categorias principais:

• Software do Sistema (Sistema Operativo) - fornecido com cada computador, permite a gestão dofuncionamento integrado de todas as componentes

• Software de Suporte - fornecido pelos fabricantes, permite a gravação, aperfeiçoamento e utilizaçãodos programas de aplicação (tradutores, compiladores, editores, …)

• Software de Aplicação - programas escritos pelos utilizadores e programas que usam subrotinas dasduas classes anteriores (programas de cálculo matemático, traçadores de gráficos, processadores detexto, …)

Antes de qualquer outro, o software mais importante e que é o primeiro a ser introduzido num computadoré o sistema operativo. É com este conjunto de rotinas que a parte física pode funcionar e é graças a eleque podemos comunicar com o computador. Assim, um sistema operativo (SO) é um conjunto integradode rotinas especializadas para controlar todo o sistema básico. Fica residente em memória central e partedos comandos de um sistema operativo ficam armazenados numa zona especial de memória (dita, áreaapenas para leitura - ROM, Read Only Memory), não precisando de ser activamente invocados parafuncionar, basta, para tal, ligar o computador. De facto, são estes comandos que tornam possível aprimeira ligação com o utilizador, testando a operacionalidade de todos os componentes e permitindo aoutilizador comandar o sistema.Podemos visualizar as categorias de software como encapsulando todo o sistema computacional de acordocom o esquema seguinte:

Page 4: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 11

2005/06

Utilizador

Aplicações

Sistema Operativo

Hardware

Sistema Operativo

Aplicações

Figura 12: Hardware/Software/Utilizador

Funções gerais de um sistema operativo

• controlar operações de entrada e saída

• controlar o fluxo de dados entre memórias centrais e auxiliares

• fornecer as instruções necessárias para que as diferentes partes do sistema cooperem entre si

• fazer a distribuição do tempo por diferentes tarefas ou utilizadores

• chamar outros programas sempre que necessário

É, portanto, o sistema operativo que controla a CPU e permite a ligação com o utilizador.Como exemplos de sistemas operativos mais vulgares temos:

• UNIX / LINUX - inicialmente destinado a grandes computadores, vulgarizou-se para todos os tiposde computadores, sendo já utilizado em computadores pessoais (LINUX). Serviu de exemplo para amaior parte dos outros SO.

• DOS - nos primeiros computadores pessoais, o SO começou por ser armazenado num disco flexível,daí o seu nome, que deriva do inglês, Disk Operating System.

Linguagens de Programação

O computador, ou a sua CPU, só entende uma linguagem especial, dita linguagem máquina, constituídaapenas por zeros (0) e uns (1). Mais ainda, qualquer comando directo, tem que ser o mais simples possível,porque a CPU só trabalha com ordens e operações muito elementares. É também necessário conhecermuito bem os componentes físicos e o modo como são interligados (a arquitectura do sistema), o que podevariar muito de máquina para máquina. Daí ser extremamente difícil e moroso programar neste código.Uma vez que se pretende, com o computador, tornar o trabalho mais eficiente, mais rápido e maisrentável, foram criadas linguagens mais próximas do entendimento humano e das linguagens naturais.Vejamos uma tabela com alguns exemplos de linguagens de programação:

• Linguagens de baixo nível: mais próximas da parte física e do funcionamento próprio docomputador, logo, produzindo programas longos e de muito difícil leitura/correcção para umutilizador humano

• Linguagem máquina - Reflecte a estrutura interna de cada computador; Constituída porcombinações numéricas de zeros e uns (00110101 00100011 00001111) dito código binário;

• Assembler - Substitui pequenos arranjos de combinações numéricas em código binário porinstruções básicas descritas por mnemónicas (SUM A1, A2); Dependente do computador;

Page 5: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 12

2005/06

• Linguagens de alto nível: mais próximas dos conceitos humanos e pouco ou nada dependentes damáquina em questão. Cada instrução corresponde a muitas instruções de código máquina, o que tornaos programas mais curtos, legíveis e mais facilmente alteráveis por utilizadores humanos.

LINGUAGEM

FORTRANLISPPASCALCModulaADAC++

PrologHaskellPHPJava

TIPO

Cálculo intensivo Simbólica e lógica Genérica Genérica Genérica (“sucessora” do Pascal) Defesa e espionagem Genérica, com tipos abstractos de dados e orientação a objectos Lógica Funcional Processamento de Hipertexto Hipertexto com gráficos e video

INICIADA EM

1955195519691971197519801983

1984198719951998…

Tabela 1: Alguns (poucos) exemplos de linguagens de programação de alto nível

1.5. REPRESENTAÇÃO DIGITAL: NOÇÕES BÁSICAS

A informação pode ser agrupada em dois tipos distintos conforme a sua variação:

• Informação analógica – a variação é contínua (como, por exemplo, com um metro, podemosmedir continuamente uma superfície, e indicar esta medição o mais precisamente possível);

• Informação digital – a variação é discreta (como, por exemplo, num relógio digital, que saltade segundo para segundo, minuto para minuto, etc)

Os computadores actuais são sistemas de informação digital, logo, toda a variação é discreta (e finita). Oscomputadores usam a informação digital mais simples possível: a informação digital binária. A unidadeelementar que constitui este tipo de informação é o digito de informação binária e denomina-se bit (debinary information digit). Obviamente que este digito pode representar (apenas!) dois estados distintos: o1 ou o 0, verdadeiro ou falso, ligado ou desligado. Isto significa que, se queremos maior quantidade deinformação, temos de juntar vários bits para obter muito mais estados distintos. Prova-se facilmente,usando o método de indução matemática, que:

Teorema: Uma sequência de n bits pode representar 2n estados distintos.

Assim, a memória de um computador digital é constituída por uma sequência enumerada de células, cadauma permitindo o armazenamento de uma palavra. Por sua vez, uma palavra é uma sequência formatadade k (fixo) bits. É a palavra de cada computador que permite representar a (menor) quantidade deinformação completa, manipulável por esse computador. Por exemplo, um byte*é uma palavra de 8 bits.

Internamente, a memória de um computador organiza-se pelo endereçamento da sequência de palavras, demodo a associar várias palavras a uma informação completa (por exemplo, a um programa) ou a isolarvários “pedaços” de informação. Quer isto dizer que, cada palavra (ou célula) em memória tem umendereço, que permite identificar cada uma delas individualmente, por forma a permitir o acesso à palavra

*A palavra byte vem do inglês, binary term.

Page 6: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 13

2005/06

aí registada. Por acesso queremos significar que pode ser feita uma leitura, ou um registo, ou um teste, àpalavra armazenada num dado endereço.Obviamente, cada computador tem uma capacidade limitada de memória, que é quantificada pelo númerode palavras que consegue armazenar. Daí os valores que estamos habituados a ver (ler) quando queremossaber quais as especificações de um computador e que significam o seguinte (de acordo com o teoremaanterior):

210 = 1024 = 1K 216 = 210 x 26 = 64K 220 = 210 x 210 = 1M (1 Mega) 230 = 210 x 220 = 1G (1 Giga)

Mas o que sinifica uma informação completa ocupar uma palavra da memória? E quando é que énecessário ocupar mais células? Para responder a estas e outras questões vamos conhecer um poucomelhor a representação de informações elementares em memória de um computador digital.

Representação de Números Inteiros

Como vimos atrás, o computador “só entende” a linguagem máquina, que é um subconjunto da linguagembinária, ou seja, sequências de zeros (0) e uns (1). Um byte é uma sequência de oito bits em binário e, porexemplo, um inteiro pode ser representado por uma palavra de um byte de acordo com a figura 13.

Figura 13: Palavra de um byte

Como é óbvio, um qualquer número natural é escrito usando uma base para representação numérica.Habitualmente, escrevemos os naturais usando uma representação de base 10, como, por exemplo, em 2

(10), 45

(10) ou 1024

(10), onde o indíce (10) indica em que base estão os numeros representados (escritos). No

caso de usarmos binário, isto significa que vamos escrever os números usando representação em base 2, ouseja, k

num(2)

= Σ bi 2i ,

i=0

onde k indica a quantidade máxima de índices de b usados, sendo b um vector que guarda os coeficientesda representação de num em base 2. Quer isto dizer, que o número representado pela palavra na figura 13é, em base decimal, 51

(10), senão vejamos:

11001101 (2)

= 1x20 + 1x21 + 1x24 + 1x25 + 1x27 = 179(10)

Claramente, o maior inteiro representável num computador depende do tamanho da célula dessecomputador que o vai guardar. Por exemplo, no caso de usarmos palavras de 1 byte para representarnaturais num computador, o maior inteiro será 11111111

(2) .

A questão que se segue será, obviamente, a da representação de números inteiros, ou seja, númerosnaturais com sinal. Para estes, usa-se a notação em sinal e valor absoluto, o que significa que vamos fixarum dos bits da palavra para representar o sinal (por exemplo, o zero (0) representará um sinal positivo e oum (1) um sinal negativo), e apenas os restantes bits servirão para representar o valor numérico, emmódulo, do inteiro em causa. Por exemplo, o número -123

(10) será representado pelo seguinte byte:

Page 7: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 14

2005/06

Figura 14: Representação do número -123(10)

em binário.

Assim, e usando palavras de 1 byte para representar inteiros, sobram apenas 7 bits para representar agrandeza do número inteiro. Qual será, agora, o maior inteiro representável por palavras de 1 byte? E omenor? E se usarmos um computador com palavras de 16 bits?

Esta forma de representar tem a desejável propriedade de que cada operação aritmética é exacta, sóhavendo situação de erro no caso de o resultado exceder o maior (ou menor) inteiro representável – casoem que se diz ter ocorrido erro de transbordo (do inglês, overflow).

Representação de Números Reais

Para representar os números reais, vamos usar a representação em vírgula flutuante normalizada, ou seja,usando uma mantissa, base e expoente:

onde M, representa a mantissa, ou seja, um real pertencente ao intervalo [0.1, 1[, B representa a base derepresentação pretendida e k é um expoente inteiro. Por exemplo, usando a notação decimal temos:

- 45670000 = - 0,4567 x 10 8

0,0038 = + 0,38 x 10 -2

Mas com guardar esta informação em células binárias de memória? A representação interna em códigobinário estará de acordo com a figura 15 (onde o número de bits reservados para a mantissa (M) e para oexpoente (k) podem ser diferentes de computador para computador), usando valores binários quer para amantissa, quer para o expoente.

(1 bit) (8 bits) (23 bits)

Sinal Expoente Mantissa

Figura 15: Representação digital de um número real em memória.

Obviamente que isto implica que a representação de números reais não é, em geral, exacta pois depende donúmero de bits reservados para representar a mantissa. Tal como para os números inteiros, a grandeza derepresentação possível é limitada, neste caso, pelo número de bits reservados para o expoente. Mas,enquanto que, no caso dos inteiros, que são números discretos, logo, representáveis em memória digitalpor um subconjunto “completo” de Z, para os reais não é possível representar uma variação contínua,logo, não é possível representar intervalos reais: ou seja, a representação digital de reais é discreta elimitada.

Representação de Caracteres

Para representar valores não numéricos, ou seja, caracteres, é necessário usar um código de representação,de modo a fazer corresponder, a cada caracter, um número binário. Existem vários códigos deste tipo mas

Page 8: Capítulo I - continuação (.pdf)

Métodos de Programação I Departamento de Matemática, FCTUC 15

2005/06

o mais vulgar é o código ASCII (do inglês, American Standard Code for Information Interchange) . Estecódigo usa 7 dígitos binários para representar um caracter, o que permite uma gama de representação de128 caracteres (ou seja, 27 ). No ASCII, temos 2 grupos principais de caracteres: um primeiro grupo decerca de 33 caracteres que são usados para controlar a parte física de um sistema computacional, ou seja,o hardware, e que, em geral, não são visíveis num terminal de utilização humana. O grupo restante incluios caracteres visíveis num terminal de utilização humana.