domingo, agosto 29, 2010

Aula 2 de Projeto Lógico de Computadores

Visão Geral do Funcionamento de um Computador


Máquina de von Neumann/Turing:

  • Conceito de programa guardado dentro do computador.
  • Dentro da memória, são guardados os dados e as instruções para operar sobre estes dados.
  • Unidade aritmética e lógica realizações essas operações.
  • Unidade de controle interpreta as instruções da memória e as executa
  • Entrada e Saída operada pela unidade de controle
Esta figura está em W. Stallings, Computer Organization and Architecture, ed. 6, pag.18, cap2
Na figura, podemos ver as partes principais do computador, numa figura de nível bem baixo. A Unidade de controle e aritmética interagem com a memória principal, e entre si. CREIO que a figura tem um ERRO, visto que é a unidade de controle que faz E/S, e não a unidade aritmética. Passei esta figura em aula e não percebi o suposto erro, ou interpretei mal. Minha interpretação é que esta errada a figura. Mas continua válida a interpretação desta, de qualquer modo.

Vimos também o ciclo de execução de um programa, e as partes do computador numa visão "mais próxima". Nesta vião, mostrada na figura seguinte, temos a CPU, composta das unidades de controle e aritmética/lógica e alguns registradores na CPU. Estes são posições de memória utilizadas para guardar certas informações, e a quantidade e a funcionalidade destes definem todo o funcionamento do processador, ou o projeto lógico da CPU. Comunicando-se com a CPU temos a memória principal e algum dispositivo de entrada e saída.
As partes do computador. Figura de W. Stallings, Computer Organization and Architecture, ed. 6, pag.53, cap3

Os registradores tem nomes, conforme seu uso. Por exemplo, nesta figura temos:
  • Contador de Programa (PC). É usado para guardar qual instrução está sendo executada num dado instante.
  • Registrador de instrução. Guarda a instrução que foi buscada da memória e que será executada.
  • MAR/MBR: Registradores para guardar endereços de memória
  • IO/AR,IO/BR: Registradores para guardar endereços de Entrada/Saída
Na memória, podemos verificar que guardamos tanto DADOS quanto INSTRUÇÕES. Estas instruções especificam como aCPU irá operar nos próprios dados que ali também estão.

Um computador terá um ciclo de execução, que será repetido a exaustão. De uma maneira simplificada, o ciclo de execução mais simples é aquele que contém dus partes. Uma parte é a de busca (de instruções e/ou dados) e outra de execução da instrução buscada. A figura abaixo mostra este ciclo.

O ciclo de execução mais básico (fetch cycle = ciclo de busca, execute cycle = ciclo de execução). Figura de W. Stallings, Computer Organization and Architecture, ed. 6, pag.54, cap3

Vamos dar um exemplo de um programa rodando num sistema simplificado. Nosso sistema pode acumular (somar) valores inteiros, que devem ser trazidos da memória. Além disso, nosso sistema é de 16 bits, ou seja, os registradores são de 16 bits, e a memória é dividida em pedaços de 16 bits. É importante entender que no endereço x, temos 16 bits, e no endereço x+1, mais 16 bits (em geral, as memórias são divididas em regiões de 8 bits, ou byte).

Nosso sistema simplificado conterá três registradores:
  • PC, contendo o endereço da próxima instrução buscada.
  • IR, que conterá a instrução buscada a ser executada
  • AC, um acumulador, que acumulará (somará) os valores ali colocados.
Além disso, nosso sistema terá três INSTRUÇÕES. Cada uma delas estará associada a um código numérico.
  •  0001 - 0x1 - Carregar valor da memória para o acumulador
  •  0010 - 0x2 - Carregar o valor do acumulador de volta na memória
  •  0101 - 0x5 - Somar valor da memória ao acumulador.
Nestas três instruções, verificamos que:
  • Todas elas referem-se a uma memória. O valor da memória está dentro do valor de 16 bits buscado, conforme a figura abaixo.
  • Como o "código de operação" tem 4 bits, o endereço de memória só pode ter 12 bits.
Visão do que pode haver numa palavra (word) de 16 bits da nossa plataforma. Uma instrução, com código e endereço (acima), ou um valor inteiro, em sinal/magnitude. Figura de W. Stallings, Computer Organization and Architecture, ed. 6, pag.55, cap3

Vamos agora considerar o programa exemplo propriamente dito. Na figura abaixo, temos a disposição da memória, com algumas instruções guardadas em posições específicas desta, e com dados em outras posições. Além disso, o contador de programa tem guardado dentro dele o endereço da próxima instrução a ser buscada.


Na primeira figura, vemos que o registrador PC contém o endereço da primeira instrução que será buscada, ou seja, 0x300 (hexadecimal). Deve-se notar que este registrador somente alcança endereços de 12 bits, visto que a memória só é endereçavel até 12 bits neste exemplo (lembre-se do código de operação). Logo, no primeiro ciclo de busca, o valor do endereço 0x300 ( 0x1940) é buscado e colocado em IR, o registrador de instrução. Além disso, o contador de instrução é incrementado em 1, indica que no próximo ciclo de busca  a instrução será obtida em outro endereço. Ficamos com a figura a seguir:


Agora que o primeiro ciclo de busca foi realizado, devemos realizar o primeiro ciclo de execução: Tomamos a instrução que está em IR, e executamos esta. Os 4 bits iniciais de IR constituem o código de execução, e os 12 bits subsequentes o endereço de memória. Código 1 significa guardar o valor da memória (no caso, 0x940) no acumulador AC. Ora, o valor que está em 0x940 é o número 0x3, que então é colocado em AC, como mostra a figura seguinte.


Terminamos com isto o primeiro ciclo de busca e execução. Vamos ao segundo ciclo. Buscamos no endereço 0x301 a instrução, que é colocada em IR, no lugar da anterior. O PC é incrementado.

O Registrador IR contém o valor 0x5941, que significa que no ciclo de execução deveremos realizar a operação de "somar ao acumulador" (operação 5), o valor que está no endereço 0x941 (que é 2). Então somamos 2 ao acumulador, obtendo 5. Note que, na prática, o acumulador deve "saber" o que fazer com o valor recebido, que neste caso é a soma. A figura a seguir mostra como ficam os registradores.

Agora iniciamos o último ciclo. Buscamos o valor em 0x302, conforme apontado por PC, e guardamos este valor em IR, além de incrementar PC. Veja a figura:

Agora, no ciclo de execução, devemos realizar a operação. No caso, a operação indicada é colocar na memória (endereço 0x941) o valor do acumulador AC, que é 0x5. Fazemos isto, e ficamos com:

Exercício para vocês:

Nossa máquina hipotética contém duas instruções de E/S:
  • 0011 = carregar AC a partir de um dispositivo de E/S
  • 0111 = carregar AC em um dispositivo de E/S
Nestas instruções, o valor de 12 bits designa um dispositivo de E/S particular. Descreva a execução do seguinte programa:
  1. Carregar AC a partir do dispositivo 5.
  2. Somar com o conteúdo da posição de memória 940
  3. Armazenar o conteúdo de AC no dispositivo 6
Suponha que o próximo valor obtido do dispositivo 5 seja 3 e que a posição de memória 940 contenha o valor 2.

Me entreguem até o dia 06/07, as 11:59 da manhã, por email (henriquemarks@gmail.com).

P.S. Podem fazer a mão e me mandar uma foto (ou mais) do trabalho, sem problemas. Mas por favor, reduzam o tamanho do arquivo da foto para algo aceitável, ou seja, algo que eu possa ler e que não seja muito grande. Tenho certeza que, após tirar a foto, pode-se colocar em qualquer programa de imagens (digikam, por exemplo, e salvar a foto em png, com um tamanho MUITO menor). 

Nenhum comentário: