Organização Estruturada de Computador 

Aula8

O Nível da Microarquitetura - Parte II 




Nesta aula abordaremos com mais detalhes o nível da arquitetura que tem como função implementar a camada ISA situada acima dele. 

O texto abaixo é um resumo das seções 4.1 e 4.2  do capítulo 4 do livro: Organização Estruturada de Computadores de Andrew S. Tanenbaum, 4a Edição, 2001. As figuras do texto foram obtidas do material disponibilizado na internet pelo autor desse mesmo livro.

Importante: O resumo abaixo deve ser complementado, pelo aluno, com a leitura do texto original do livro.


Tópicos


Um exemplo de nível ISA: O IJVM

Introduzir um nível ISA, a ser interpretado pelo microprogarma que esteja rodando na microarquitetura da figura 4.6
Vamos chamar de macroarquitetura (em contraste com microarquitetura), a arquitetura do conjunto de instruções do nível ISA.

Up

Pilhas

A figura 4.8 exemplifica o funcionamento da PIlha após a chamada de vários procedimentos (A, B, C, D)
4-8
Figura 4.8 Uso da pilha para armazenar variáveis locais. (a) Enquanto A está ativo. (b) Após A ter chamado B. (c) Após B ter chamado C. (d) Após Ce B terem retornado e A ter chamado D


a1=a2+a3

4-9
Figura 4.9 Uso de uma pilha de operandos para execução de cálculos aritméticos


 
Up

O Modelo de Memória da IJVM


4-10
Figura 4.10 As várias partes da memória IJVM

1. O Pool de Constantes
2. O Quadro de Variáveis Locais
3. A Pilha de Operandos
4. A Área do Procedimento

        Observações:
 
Up

O Conjunto de instruções da IJVM


Hexa Mnemônico Significado
Ox10 BIPUSH byte Colocar um byte na pilha
Ox59 DUP Copia a palavra do topo da pilha e coloca a cópia no topo da pilha
OxA7 GOTO deslocamento
Desvio incondicional
Ox60 IADD Retira da pilha as duas palavras do topo; coloca no topo da pilha o resultado da soma dessas palavras
Ox7E IAND Retira da pilha as duas palavras do topo; coloca no topo da pilha o resultado da operação AND booleana dessas palavras
Ox99 IFEQ deslocamento Retira da pilha a palavra do topo; desvia se ela for igual a zero
Ox9B IFLT deslocamento Retira da pilha a palavra do topo; desvia se ela for menor que zero
Ox9F IF _ICMPEO deslocamento Retira da pilha as duas palavras do topo; desvia se elas forem iguais
Ox84 IINC varnum const Soma uma constante a uma variável local
Ox15 ILOAD varnum Coloca uma variável local no topo da pilha
OxB6 INVOKEVIRTUAL deslocamento Chama um procedimento
Ox80 IOR Retira da pilha as duas palavras do topo; coloca no topo da pilha o resultado da operação OR booleana dessas palavras
OxAC IRETURN Retorna de um procedimento trazendo um valor inteiro
Ox36 ISTORE varnum Retira a palavra do topo da pilha; armazena essa palavra numa variável local
Ox64 ISUB Retira da pilha as duas palavras do topo; coloca no topo da pilha o resultado da subtração dessas palavras
Ox13
LDC_W índice
Coloca no topo da pilha uma constante vinda do pool de constantes
OxOO NOP Não faz nada
Ox57 POP Retira da pilha a palavra do topo
Ox5F SWAP Troca de posição as duas palavras do topo da pilha
OxC4 WIDE Prefixo de instrução; indica que a próxima instrução tem um índice de 16 bits

Fig 4.11 O conjunto de instruções IJVM. Os operandos byte, const e varnum tem todos 1byte. Já os operandos disp, indice e deslocamento têm 2 bytes.

 
Mecanismo usado para implementar uma chamada a procedimento (INVOKEVIRTUAL deslocamento , veja Figuras 4.12 e 4.13)  
  1. Chamador coloca na pilha uma referência (ponteiro) para o objeto a ser chamado, identificado por OBJREF
  2. Coloca parâmetros (Parameter 1, Parameter 2, ...) do procedimento na pilha
  3. A instrução INVOKEVIRTUAL é, então, executada
  4. As variáveis locais do procedimento são colocadas na pilha, sobre os parâmetros 
  5. Os ponteiros PC e LV do chamador são salvos no topo da pilha
  6. A execução da instrução IRETURN reverte as operações realizadas pela INVOKEVIRTUAL (veja figura 4.13)
  7. A pilha retorna ao seu estado anterior, sem os parametros do procedimento, e os valores de LV e PC anteriores são recuperados
  8. O valor de retorno do procedimento  é colocado no topo da pilha



4-12
Fig 4.12 (a) Memória antes da execução de INVOKEVIRTUAL. (b) Memória após a execução de INVOKEVIRTUAL


4-13
Fig 4.13 (a) Memória antes da execução do IRETURN. (b) Memória após a execução do IRETURN



 
Up

Compilação da Linguagem JAVA para IJVM

    A Figura 4.14(a) mostra um fragmento de um programa JAVA.

    Quando esse código for entregue ao compilador JAVA, ele deve produzir um programa na linguagem de montagem da IJVM como mostrado em 4.14(b)

    O montador JAVA transforma o programa em linguagem de montagem para o programa binário (linguagem de máquina) mostrado na figura 4.14(c)

    O código compilado pode ser interpretado como:

i =j + k;             1       ILOAD j             //  i = j + k       Ox15 Ox02
if (i == 3)           2       ILOAD k                                   Ox15 Ox03
k= 0;                3       IADD                                         Ox60
else                   4       ISTORE i                                   Ox36 Ox01
j = j -1;             5       ILOAD i             // se (i ==3)      Ox15 Ox01
                         6       BIPUSH 3                                  Ox10 Ox03
                         7       IF_ICMPEQ L1                         Ox9F OxOO OxOD
                         8       ILOAD j             // j = j - 1         Ox15 Ox02
                         9       BIPUSH 1                                  Ox10 Ox01
                       10       ISUB                                          Ox64
                       11       ISTORE j                                   Ox36 Ox02
                       12       GOTO  L2                                 OxA7 OxOO OxO7
                       13 L1: BIPUSH 0        // k = 0              Ox10 OxOO
                       14       ISTORE k                                  Ox36 Ox03
                       15 L2:           
(a)                            (b)                                                (c)
Fig 4.14 (a) Fragmento de um programa JAVA. (b) O código correspondente na linguagem de montagem Java. (c) O progrma em IJVM codificado em hexadecimal


A pilha de operandos do programa IJVM acima é mostrada na figura 4.15

4-15
Figura 4.15 Estado da pilha após a execução de cada instrução do programa da Figura 4.14 (b)

 
Up

Exercícios


1. A Fig. 4.2 mostra uma maneira de fazer com que A apareça na saída da UAL. Invente outra forma, diferente dessa.

2. O Mic-1 gasta 1 ns para carregar o MIR, 1 ns para habilitar um registrador para que este coloque seu conteúdo no barramento B, 3 ns aguardando a operação da UAL e do deslocador, e 1 ns para que os resultados se propaguem de volta aos registradores. O período do clock do Mic-1 é de 2 ns. Essa máquina pode rodar a 100 MHz? E a 150 MHz?

3. Na Fig. 4.6, o campo da microinstrução que controla o acesso ao barramento B está codificado em 4 bits, mas o campo do barramento C é controlado por um mapa de bits.* Explique por quê.

4. Na Fig. 4.6 existe uma caixa identificada como "Bit de mais alta ordem". Mostre como seria o circuito eletrônico para a implementação dessa função lógica.

5. Quando o campo JMPC de uma microinstrução é habilitado, o conteúdo do MBR passa pela função OR junto com o campo NEXT_ADDRESS, para formar o endereço da próxima instrução. Existe alguma circunstância na qual faz sentido o campo NEXT _ADDRESS ser igual a Ox1FF e usar JMPC?

6. Suponha que, no exemplo da Fig. 4.14(a), o comando
                                      i = O;
seja colocado após o comando if. Como seria o código em linguagem de montagem resultante dessa modificação? Considere que o compilador utilizado faz uma otimização do código gerado.

7. Considere o seguinte comando Java:
                           i = j + k + 4;
encontre duas traduções diferentes desse comando para a linguagem de montagem do IJVM.

______________
* O controle é feito por meio de um mapa de bits quando cada sinal de controle é representado por um bit na microinstrução. (NT.)
  
Up

Exercícios de CCI-3

Questões de CCI-3  - Lista 4 – 04/06/2003       Professor: Carlos A Felgueiras

  1.  (LP) Cite e explique duas vantagens da programação através da linguagem C.
  2.  (Juliano) O que é S.M.A.R.T?
  3.  (Arquitetura de Computadores) Explique em qual critério a tecnologia de microarquitetura RISC é melhor que a CISC e porque a CISC não foi suplantada pela RISC.
  4. (Arquitetura de Computadores) Descreva, resumidamente, as principais características dos barramentos ISA, PCI e USB.
  5. (Pesquisa Operacional) Uma firma produz produtos de limpeza de automóvel X e polidor Y e obtém lucro de $20 em cada lote de X e $40 em Y. Ambos os produtos exigem um processamento pelas mesmas máquinas A e B, mas X requer 4 horas em A e 8 em B, ao passo que Y requer 6 horas em A e  4 em B. Durante a semana as máquinas A e B têm 12 e 16 horas de capacidade disponíveis, respectivamente. Considerando que exista demanda para ambos os produtos, quantos lotes de cada devem ser produzidos para obter o lucro ótimo Z ? Resolva pelo Método Simplex
  6. (Kleber) Quais os outros recursos oferecidos pela linguagem SQL, além da consulta ao banco de dados?
  7. (Banco de dados) Quais as características principais de um Sistema Gerenciador de Banco de Dados eficiente?
  8. Elabore e responda uma questão, que você considera importante, relacionada com as matérias que você está cursando atualmente. Sua questão será compartilhada com os seus colegas de turma.

Observação: Esta lista de exercícios deve ser respondida e entregue ao professor até o dia 25/06/2003.




 
Up