• Nenhum resultado encontrado

Princ´ıpios do modelo

No documento Algoritmos e Estruturas de Dados I (páginas 22-26)

Conforme explicado, Von Neumann propˆos que os dados e o programa poderiam ser carregados em mem´oria ao mesmo tempo. Um elemento adicional denominado ciclo de execu¸c˜ao de instru¸c˜oes controla a execu¸c˜ao do programa.

A ideia ´e implementar em hardware um pequeno conjunto de instru¸c˜oes que n˜ao mudam e programar o computador para realizar opera¸c˜oes complexas a partir da execu¸c˜ao de v´arias instru¸c˜oes b´asicas da m´aquina.

Cada fabricante define o seu conjunto de instru¸c˜oes b´asicas, mas o importante a observar ´e que, uma vez implementadas, este conjunto definetudo o que o computador sabe fazer. ´E isto que queremos saber.

Neste cap´ıtulo vamos usar como exemplo um computador fabricado pelaBig Com-puter Company (BCC).

4.2.1 Endere¸ cos versus conte´ udos

O computador da BCC implementa o modelo Von Neumann, logo, sua mem´oria cont´em os dados e o programa.

A mem´oria do computador em um dado instante do tempo ´e uma configura¸c˜ao de sinais el´etricos que podem ser vistos pelo ser humano como uma sequˆencia absurda de zeros e uns (chamados de bits).2

O ser humano costuma n˜ao gostar muito desta forma de visualiza¸c˜ao, ent˜ao con-vencionou algumas maneiras de enxergar n´umeros inteiros que representam os bits.

N˜ao vamos apresentar neste texto as diversas maneiras de convers˜ao de n´umeros, o leitor interessado pode estudar sobrerepresenta¸c˜ao bin´aria na literatura.

Vamos imaginar que a mem´oria do computador ´e uma tabela contendo ´ındices (endere¸cos) com conte´udos (dados). A t´ıtulo de exemplo, vamos considerar uma

“fotografia” da mem´oria de um computador da BCC em um certo momento, fotografia esta apresentada na figura 4.1

2Quem assistiu ao filme Matrix pode imaginar a complica¸ao.

4.2. PRINC´IPIOS DO MODELO 23

Figura 4.1: Uma fotografia da mem´oria.

Para melhor entendimento, ´e importante que o leitor tenha em mente a diferen¸ca entre endere¸co e conte´udo do endere¸co. Para facilitar a compreens˜ao, vamos adotar uma nota¸c˜ao. Seja p um endere¸co. Denotamos por [p] o conte´udo do endere¸co p.

Vejamos alguns exemplos com base na figura 4.1:

[0] = 1

4.2.2 O repert´ orio de instru¸ c˜ oes

Conforme mencionado, o modelo Von Neumann pressup˜oe que o computador que est´a em uso possui um conjunto limitado de instru¸c˜oes programado em hardware.

Cada equipamento tem o seu repert´orio de instru¸c˜oes. O repert´orio do computador da BCC foi definido ap´os longas discuss˜oes da equipe t´ecnica da empresa e tem um conjunto extremamente limitado de instru¸c˜oes, na verdade apenas nove.

Esta defini¸c˜ao levou em conta a capacidade financeira da empresa que n˜ao tinha muita verba para gravar em circuitos integrados um conjunto mais rico de instru¸c˜oes.

As nove instru¸c˜oes do computador da BCC s˜ao apresentadas na figura 4.2.3.

C´odigo Mnemˆonico Descri¸c˜ao Nota¸c˜ao 1 load escreva em [p+ 1] o valor do

n´umero em [p+ 2] e some 3 em p

[p+ 1]←[p+ 2].

2 add escreva em [p+ 1] o valor da soma dos n´umeros em [[p+ 2]] e [[p+ 3]] e some 4 em p

[p+ 1]←[[p+ 2]] + [[p+ 3]].

3 sub escreva em [p + 1] o valor da subtra¸c˜ao do n´umero em [[p+2]] pelo n´umero em [[p+

3]] e some 4 em p

[p+ 1]←[[p+ 2]]−[[p+ 3]].

4 mult escreva em [p + 1] o valor do produto dos n´umeros em [[p+ 2]] e [[p+ 3]] e some 4 em p

[p+ 1]←[[p+ 2]]×[[p+ 3]].

5 div escreva em [p+ 1] o valor da divis˜ao do n´umero em [[p+ 2]] pelo n´umero em [[p+ 3]]

e some 4 em p

[p+ 1]← [[p+2]][[p+3]].

6 sqrt escreva em [p+ 1] o valor da raiz quadrada de [[p+ 2]] e some 3 em p

[p+ 1]←p

[[p+ 2]].

7 read leia um n´umero do teclado, escreva-o em [p+ 1] e some 2 em p

[p+ 1]← ∨.

8 write escreva [[p + 1]] na tala e some 2 em p

←[[p+ 1]].

9 stop pare •

Figura 4.2: O repert´orio de instru¸c˜oes do computador da BCC.

3Os concorrentes comerciais famosos da BCC implementam algumas centenas de instru¸oes, e ainda nenhuma delas ´e a de bater claras em neve.

4.2. PRINC´IPIOS DO MODELO 25

4.2.3 O ciclo de execu¸ c˜ ao de instru¸ c˜ oes

Ociclo de execu¸c˜ao de instru¸c˜oes define o comportamento do computador. Funciona assim (no computador da BCC):

1. comece com p= 0;

2. interprete [p] de acordo com a tabela de instru¸c˜oes e pare somente quando a instru¸c˜ao for uma ordem de parar (instru¸c˜ao 9, stop).

Devemos lembrar que este comportamento tamb´em est´a implementado nos circui-tos eletrˆonicos do computador da BCC.

4.2.4 Exemplo de execu¸ c˜ ao de um programa

A grande surpresa por tr´as do modelo de Von Neumann ´e que, mesmo que o leitor ainda n˜ao compreenda, o que existe na verdade “disfar¸cado” na fotografia da mem´oria da figura 4.1 ´e um programa que pode ser executado pelo computador, desde que todo o processo siga as instru¸c˜oes descritas na se¸c˜ao anterior.

Vamos tentar acompanhar passo a passo como ´e o funcionamento deste esquema.

Para isto, o leitor talvez queira ir marcando, a l´apis, as altera¸c˜oes que ser˜ao feitas a seguir em uma c´opia da “fotografia da mem´oria” acima. E recomendado neste´ momento se ter uma vers˜ao impressa daquela p´agina.

Notem que, no momento, n˜ao ´e necess´ario sabermos qual o programa implemen-tado, afinal de contas, o computador jamais saber´a. . . Ele executa cegamente as ins-tru¸c˜oes. N´os saberemos logo `a frente, mas, agora, para entendermos como ´e o funci-onamento deste modelo, vamos nos imaginar fazendo o papel do computador.

1. O programa come¸ca com p= 0

2. Em seguida, ´e preciso interpretar [p], isto ´e [0] = 1. A instru¸c˜ao de c´odigo “1” ´e

“load”, cujo comportamento ´e, segundo a tabela de instru¸c˜oes “escreva em [2]

o valor do n´umero em [3] e some 3 emp”. Ora, [2] = 54 e [3] = 2. Logo, o valor 2 ´e colocado como sendo o conte´udo da posi¸c˜ao 54. Havia nesta posi¸c˜ao o valor 235. Ap´os a execu¸c˜ao da instru¸c˜ao, existe um 2 neste lugar. O valor 235 n˜ao existe mais. Ao final foi somado 3 no valor de p, isto ´e, agora p= 3.

3. Comop= 3 devemos interpretar [3] = 1. Logo, a instru¸c˜ao ´e novamente “load”.

Analogamente ao que foi feito no par´agrafo anterior, o conte´udo de [5] = 4 ´e colocado como sendo o conte´udo da posi¸c˜ao [4] = 50. Na posi¸c˜ao 50 havia o valor 76. Ap´os a execu¸c˜ao da instru¸c˜ao o 76 d´a lugar ao 4. Ao final o valor de p foi atualizado para 6.

4. Como p= 6 devemos interpretar [6] = 7. Logo, a instru¸c˜ao para ser executada agora ´e “read”, isto ´e, esperar o usu´ario digitar algo no teclado e carregar este valor em [p+ 1] = [7] = 46. Supondo que o usu´ario digitou o valor 5, este agora substitui o antigo valor, que era 33. Ao final, o valor de p foi atualizado de 6 para 8.

5. Como p = 8 devemos interpretar [8] = 4. Logo, a instru¸c˜ao a ser executada

´e “mult”. Isto faz com que o computador fa¸ca a multiplica¸c˜ao do valor em [[10]] = [46] pelo mesmo valor em [[11]] = [46]. O valor em [46] ´e 5 (aquele n´umero que o usu´ario tinha digitado no teclado). O resultado da multiplica¸c˜ao, 5×5 = 25, ´e carregado na posi¸c˜ao de mem´oria [9] = 47. O valor ali que era 2 agora passa a ser 25. Ao final, ao valor dep foi somado 4, logo neste momento p= 12.

E importante salientar que este ´´ e um processo repetitivo que s´o terminar´a quando a instru¸c˜ao “stop” for a da vez. O leitor ´e encorajado a acompanhar a execu¸c˜ao passo a passo at´e o final para entender como ´e exatamente o comportamento dos computadores quando executam programas. Isto ´e, fica como exerc´ıcio ao leitor!

Destacamos que os circuitos implementados cuidam da altera¸c˜ao do estado el´etrico dos circuitos da mem´oria.

No documento Algoritmos e Estruturas de Dados I (páginas 22-26)