Download - Arquitetura de Computadores - Simulador Von Neumann

Transcript
Page 1: Arquitetura de Computadores - Simulador Von Neumann

1

DESENVOLVIMENTO DE SOFTWARE PARA SIMULAÇÃO DE UM COMPUTADOR SIMPLES BASEADO NA ARQUITETURA VON NEUMANN1

Francis Ribeiro Scherer <[email protected]> Adriano Zanuz2 <[email protected]> - Orientador

Universidade Luterana do Brasil (Ulbra) – Curso de Ciência da Computação – Câmpus Canoas

Av. Farroupilha, 8001 – Bairro São José – CEP 92425-900 – Canoas – RS

22 de junho de 2011

RESUMO Este trabalho apresenta o desenvolvimento de um software para simulação do funcionamento interno de um

computador simples. Este simulador, denominado SVN – Simulador Von Neumann, servirá de auxílio didático para os cursos das áreas de engenharia e computação no ensino sobre a arquitetura e a organização de computadores. O trabalho inicia pela conceituação teórica referente ao tema proposto, e, após, aborda o desenvolvimento do sistema, sua arquitetura, características, recursos e funcionalidades. A estrutura desse computador é baseada na arquitetura de von Neumann. São abordados aspectos referentes ao modelo da arquitetura definida por Neumann, sua estrutura e funcionamento. São também expostos os modelos desenvolvidos durante a etapa de projeto do sistema, através de diagramas da UML, nos quais fica caracterizada sua estrutura, bem como suas funcionalidades. Após, são documentados itens referentes ao funcionamento e à utilização do sistema por parte dos usuários, como a sua linguagem própria para a criação de programas, seu conjunto de instruções e sua interface. Também é exposta uma avaliação do sistema, realizada diretamente com o público alvo de utilização. Para concluir, são feitas as considerações finais do trabalho e discutidas as possibilidades de expansão do sistema, indicando alguns pontos para evolução.

Palavras-chave: Arquitetura e Organização de Computadores; Modelo de von Neumann; Simulação.

ABSTRACT Title: “Development of a software for simulation of a simple computer based on von Neumann architecture”

This paper presents the development of a software that simulates the internal operation of a simple computer. This simulator will serve as a teaching aid for engineering and science computing courses when teaching about the computer architecture and organization. The work begins with the theoretical conceptualization, referring to the proposed theme, and, after, discusses the system development, its architecture, features, capabilities and functionalities. The structure of this computer is based on the von Neumann architecture. It covers topics related to the model of the architecture defined by Neumann, its structure and functioning. Models developed during the stage of system design are also exposed through UML diagrams, where are characterized their structure, as well as their facilities. After, items related to the the operation and use of the system by the users are documented, such as its own language for programs creation, its instruction set and its interface. An evaluation of the system is also exposed, carried out directly with the target audience of use. Finally, concluding remarks of the work are made and possibilities of expansion of the system are discussed, indicating some points for evolution.

Key-words: Computer Architecture; von Neumann model; Simulation.

1 INTRODUÇÃO Durante a graduação nos cursos da área de Computação, e também alguns de Engenharia, existem

disciplinas com diferentes conteúdos e abordagens, tratando dos mais variados tópicos a respeito do estudo de computadores. Nestas disciplinas são estudados conceitos desde os referentes ao funcionamento básico das máquinas até os computadores e sistemas complexos existentes hoje em dia. Uma das áreas de estudo diz respeito à arquitetura e à organização de computadores, que é o tema central deste artigo.

A área de arquitetura e organização de computadores abrange os conceitos no nível do hardware da máquina e do software de baixo nível. Entre os tópicos estudados em arquitetura de computadores, um 1 Trabalho de Conclusão de Curso II, referente ao Curso de Ciência da Computação; submetida ao Curso de Ciência da Computação da

Universidade Luterana do Brasil, Campus Canoas. 2 Professor orientador - Formação em Engenharia Elétrica, Mestre em Ciência da Computação e professor das disciplinas de Arquitetura de

Computadores I e II.

Page 2: Arquitetura de Computadores - Simulador Von Neumann

2

aspecto de grande importância é o estudo dos princípios básicos de funcionamento do computador, em especial o entendimento sobre a CPU (Central Processing Unit), memória principal, barramentos e dispositivos de entrada e saída. Na década de 50, um cientista chamado John von Neumann, precursor nos estudos na área da computação, definiu um modelo abstrato de organização interna do computador (ZANUZ, MARCHIORO e PETRY, 2006). O modelo definido por Neumann em 1950 é até hoje utilizado como referência para a arquitetura de computadores modernos.

No estudo sobre arquitetura de computadores é amplamente discutido o modelo de von Neumann, os componentes integrantes e seu funcionamento. Para fixação dos conceitos teóricos envolvidos, os educadores utilizam ferramentas para demonstração de como é a operação interna do computador e a integração dos dispositivos, onde os alunos possam visualizar como é realizado o processamento das informações e o fluxo interno de operações. As ferramentas utilizadas são geralmente software simuladores, compostos virtualmente pela CPU, memória principal e caminho de dados e dispõem de uma interface de interação com o usuário na qual simulam operações básicas de hardware. Existem hoje disponíveis para uso alguns software simuladores nos quais é possível demonstrar algumas operações de máquina, com o objetivo principal de melhorar o entendimento dos alunos quanto ao funcionamento interno do computador. Porém, verifica-se que essas ferramentas apresentam algumas deficiências ao não explicitar suficientemente o fluxo de operações do hardware.

O foco deste trabalho é o estudo de conceitos gerais relacionados à área de Arquitetura e Organização de Computadores, que compreende um dos tópicos nos estudos de Ciência da Computação. O objetivo é apresentar o desenvolvimento de uma ferramenta para simulação do funcionamento interno do computador, seguindo o modelo de von Neumann, mas preservando as características reais de como o hardware opera. Foram analisados alguns aplicativos de simulação existentes e verificou-se que, de modo geral, os software simulam as operações corretamente, mas deixam a desejar no que tange a forma de apresentação da simulação. A visualização dos fluxos dos processos, realizados na execução dos programas, não demonstram fielmente como ocorrem as operações no nível do hardware. Então, a proposta deste sistema é apresentar a simulação do processamento de um programa em baixo nível que tenha uma interface com um visual mais próximo de como é o hardware interno do computador.

Para o desenvolvimento deste artigo, inicialmente serão abordados conceitos referentes ao modelo original do computador desenvolvido por von Neumann, tratando de forma individual cada um dos componentes do hardware e seu funcionamento. Também é abordado o software de baixo nível: linguagem de montagem e linguagem de máquina. Além disso, são expostos dois software de simulação similares, seu desenvolvimento e suas principais características, assim traçando um parâmetro para análise e comparação do software desenvolvido. Após esse embasamento inicial, são iniciados efetivamente os tópicos referentes ao desenvolvimento do sistema, iniciando pela exposição de suas funcionalidades, abordando o seu modelo conceitual e fazendo uma exposição de duas versões do diagrama de sequência, apresentando uma visão dinâmica do ciclo de funcionamento do simulador. Ainda tratando da caracterização do sistema, é apresentado o conjunto de instruções básicas definidas e também a sua linguagem própria, utilizada para descrição dos programas. Com o objetivo de apresentar de forma sistematizada os resultados do simulador, é abordado um tópico específico a respeito da validação do sistema, forma de avaliação e resultados obtidos. Finalizando o artigo, são feitas as conclusões e é feita uma discussão a respeito de trabalhos futuros, abordando questões relativas à expansão do software, onde são avaliadas algumas possibilidades de expansão do sistema, que pode servir como ferramenta de estudo para futuros interessados.

2 ABRANGÊNCIA DO PROJETO O projeto proposto apresenta como foco central de aplicação a Arquitetura e Organização de

Computadores, mas, para seu desenvolvimento também envolveu o estudo de outras áreas relativas à Ciência da Computação. A seguir é exposta uma sucinta descrição das áreas de envolvimento deste projeto, são elas:

• Arquitetura e Organização de Computadores: É o tema central da aplicação deste trabalho, os conteúdos referentes a esta área de estudo são indispensáveis para a fundamentação teórica e servem como base para a construção do sistema. Neste projeto, trata-se da implementação de um simulador do funcionamento do hardware, em baixo nível. Portanto, é objeto de estudo e implementação no sistema, além de seu hardware, também seu software de baixo nível.

• Projeto e Desenvolvimento de Sistemas: É o tema central da execução deste trabalho, pois o resultado é o desenvolvimento um software de simulação. Para execução deste projeto, optou-se pela utilização da linguagem de programação Java, cuja ferramenta de desenvolvimento foi a IDE

Page 3: Arquitetura de Computadores - Simulador Von Neumann

3

Netbeans. O NetBeans IDE é um ambiente de desenvolvimento - uma ferramenta para programadores escreverem, compilarem, depurarem e implantarem programas. É escrito em Java, mas pode suportar qualquer linguagem de programação. Existe também um enorme número de módulos para aprimorar o NetBeans IDE. O NetBeans IDE é um produto gratuito sem restrições de como ser utilizado (NETBEANS.ORG). Como plataforma utilizada para o modelamento do sistema, a UML foi utilizada para todas as etapas de concepção da aplicação. Foram desenvolvidos Diagramas de Casos de Uso, Classes e Sequência, que foram de fundamental importância para entendimento do sistema.

• Conceitos de IHC e Programação Java: O resultado deste projeto foi a criação de um sistema computacional que simula o funcionamento do hardware. Esse sistema tem um apelo visual muito significativo, pois se trata de um simulador gráfico. Portanto, foi objeto de estudo a área de Interface Homem Computador (IHC) e seus conceitos, visando desenvolver o sistema alinhado com as melhores práticas, no que tange o desenvolvimento de sistemas, cujo objetivo é fornecer ao usuário uma interface de fácil adaptação e conforto em sua manipulação. Segundo Preece (1994), mais do mais do que o projeto de interface, a área de IHC se preocupa com as comunicações ou interações entre usuários e computadores. Sua definição da área confere responsabilidades como elaboração do projeto, avaliação e implementação de sistemas computacionais interativos para uso humano, além de estudos suplementares sobre fenômenos relevantes que envolvam os aspectos de interação. Conforme já exposto, o sistema foi desenvolvido através da linguagem de programação Java, portanto essa linguagem foi objeto de estudo profundo. O objetivo foi desenvolver um sistema funcional, robusto e ao mesmo tempo prático quanto à sua utilização. Java é uma linguagem de programação e uma plataforma de computação lançada pela Sun Microsystems em 1995. É a tecnologia que capacita muitos programas da mais alta qualidade, como utilitários, jogos e aplicativos corporativos, entre muitos outros, por exemplo (SUN MICROSYSTEMS).

3 MODELO DE VON NEUMANN Desenvolvido no início da década de 50 e utilizado até hoje como base para a arquitetura de

computadores modernos, o modelo computacional original de von Neumann3, define que a estrutura interna do computador reúne os seguintes componentes: Memória, Unidade de controle, Unidade lógica aritmética e Dispositivos de Entrada e Saída. O sincronismo de funcionamento destes dispositivos faz com que o computador receba, armazene e processe as informações (ZANUZ, MARCHIORO e PETRY, 2006).

3.1 Modelo Original

Figura 1 – Modelo original arquitetura von Neumann

Fonte: Tanenbaum (2001, p. 10)

A Figura 1 representa o modelo original de arquitetura de computadores. Basicamente Neumann definiu que a estrutura interna do computador seria formada por cinco componentes indispensáveis, que são: Memória, Unidade de controle, Unidade lógico aritmética, Dispositivos de entrada e saída.

Cada um dos elementos de hardware acima apresentados são implementados em dispositivos físicos 3 John von Neumann, nascido em Budapeste – Hungria em 28 de dezembro em 1903, viveu até fevereiro de 1957, tendo formação na área da

matemática, foi um pioneiro nos estudos de Ciência da Computação.

Page 4: Arquitetura de Computadores - Simulador Von Neumann

4

independentes, que ao longo do tempo foram sofrendo uma série de modificações em função da evolução das tecnologias existentes, desde a fabricação de relés eletromagnéticos e válvulas, até hoje na implementação de semicondutores, transistores e circuitos integrados, nos quais foram ao longo do tempo reduzindo significativamente em tamanho e aumentando muito em densidade e desempenho.

3.2 Arquitetura do computador – Apresentação atual O modelo desenvolvido por Neumann na década de 50 definiu um conceito mais analítico de como

seria organizado internamente um computador, e de que forma se daria o fluxo de operações da máquina. Como principal aspecto de mudança entre o modelo original e o modelo atual é apresentada da CPU, sendo composta pela Unidade de controle e Unidade lógica aritmética. Com o passar do tempo os estudos na área foram avançando, bem como as tecnologias foram se aperfeiçoando e hoje o modelo conceitual da arquitetura interna de um computador se mostra um pouco diferente do modelo original, tratando a CPU como um único componente (Figura 2), da mesma forma como os dispositivos de entrada e saída, assim apresentando o modelo de uma forma mais sintética, abstrata.

Figura 2 – Arquitetura interna atual de computadores

Como pode-se visualizar na Figura 2, o modelo original foi modificado ao longo do tempo de modo a apresentar de forma mais realística como estão distribuídos os componentes essenciais definidos por Neumann. Os barramentos de comunicação estão dispostos mostrando que os dispositivos estão conectados entre si e principalmente pode-se identificar uma mudança na representação conceitual da CPU, possibilitando a identificação dos componentes que a integram, Unidade de Controle e Unidade Operacional, que é composta pela ULA e registradores. 3.2.1 CPU

A CPU ou UCP, Unidade Central de Processamento, conforme Figura 3, é a responsável pelo controle das funções internas do computador e é composta por dois componentes: Unidade de Controle (UC) e a Unidade Operacional (UO), que em muitas literaturas é denominada caminho de dados, onde fisicamente as operações são executadas. (ZANUZ, MARCHIORO e PETRY, 2006). Conforme apresentado na Figura 3, sobre a composição da CPU, abaixo segue a conceituação de cada um dos seus dispositivos integrantes:

Figura 3 – Modelo conceitual de CPU

Page 5: Arquitetura de Computadores - Simulador Von Neumann

5

• Unidade de Controle: É a responsável por informar cada um dos dispositivos de hardware, unidade operacional, memória de dispositivos de entrada e saída o que cada elemento deve fazer, a partir da decodificação de uma instrução. (ZANUZ, MARCHIORO e PETRY, 2006).

• Unidade Operacional: A unidade operacional, ou caminho de dados, tem uma arquitetura particular. Ela é a responsável pela execução das operações do computador. Seus dois elementos fundamentais são: ULA – Unidade lógica aritmética e os Registradores. Abaixo segue a conceituação de cada um desses componentes. (STALLINGS, 2003).

• ULA: A unidade lógica aritmética é uma coleção de circuitos que realizam as operações sobre os dados, as operações básicas incluem adição, subtração e ainda manipulações de bits (deslocamentos ou combinação de bits). (STALLINGS, 2003). A Figura 4 apresenta uma ilustração simplificada de uma ULA, onde em seu funcionamento é apresentada as entradas de dados, simbolizadas por A e B, o sinal de controle determinando a operação a ser realizada S e o resultado final obtido F.

Figura 4 – ULA – Unidade logica aritmética

• Registradores: Os registradores, conforme Figura 3, são posições de memória construídas dentro da CPU. Fisicamente os registradores estão integrados nos circuitos da CPU, cujo objetivo é aumentar a velocidade de acesso aos dados, cerca de 5 a 10 vezes mais rápido do que acessando os dados da memória principal (TANENBAUM, 2001). Um computador possui um número limitado de registradores, onde são reservados para o armazenamento dos dados que a CPU está usando naquele momento. O computador em funcionamento fica copiando constantemente os dados da memória principal para os registradores. Esta troca de informações é realizada através dos barramentos de comunicação, que conectam entre si a ULA, os registradores e a memória principal.

3.2.2 Memória É o dispositivo responsável pelo armazenamento das informações, são elas: informações para

processamento e instruções de programa. Segundo Tanenbaum (2001, p. 33), sem uma memória na qual os processadores possam ler ou escrever informações, o conceito de computador digital com programa armazenado não pode ser implementado.

3.2.3 Dispositivos de Entrada e Saída Pode-se conceituar dispositivos de entrada e saída como periféricos responsáveis pela entrada ou

saída de dados do computador, fazendo a interação do computador com o mundo externo. Os dispositivos podem ser somente de entrada, somente de saída ou de entrada e saída. Dentre os dispositivos cita-se teclado, monitor, scanner, mouse, impressora entre outros. (PATTERSON E HENESSY, 2000).

3.2.4 Barramentos Os barramentos são um conjunto de linhas de comunicação ou conjunto de caminhos elétricos que

permitem a interligação entre os dispositivos. Segundo Patterson e Henessy (2000), um barramento nada mais é do que um link de comunicação compartilhado, que usa um conjunto de fios para a conexão dos vários subsistemas. Esses barramentos transportam sinais de dados, endereços ou bits de controle. Os barramentos podem ser seriais, um bit por vez na linha de comunicação, ou paralelo, vários bits sendo transmitidos em paralelo por várias linhas simultâneas. O computador possui barramentos de vários tipos, citam-se: Barramentos de dados que são utilizados para carregar os dados entre a CPU, a memória RAM e as portas de E/S, Barramentos de endereçamento que são utilizados para especificar qual o endereço da memória RAM ou qual porta de E/S deve ser utilizada e os Barramentos de controle que são utilizados para

Page 6: Arquitetura de Computadores - Simulador Von Neumann

6

transportar a todas as unidades do sistema os sinais de controle, sinal de relógio. (PATTERSON e HENESSY, 2000).

4 SOFTWARE DE BAIXO NÍVEL 4.1 Linguagem de montagem

A linguagem de montagem ou assembly é o nome dado para uma linguagem de programação que utiliza essencialmente uma representação simbólica para uma linguagem de máquina numérica, ou seja, na linguagem de montagem é estruturado um programa de forma simbólica, com caracteres (símbolos) específicos da linguagem, que representam um programa em linguagem de máquina (TANEMBAUM, 2001).

Utilizando a linguagem de montagem se torna muito mais simples para as pessoas programarem do que utilizando linguagem de máquina. A utilização de nomes simbólicos e endereços simbólicos em vez de nomes em binário, octal ou hexadecimal faz uma grande diferença para um programador, que assim tem um maior desempenho para realizar sua programação. Citam-se como exemplos os comandos de adição, divisão, subtração e multiplicação em linguagem de montagem, respectivamente: ADD, DIV, SUB e MUL. Utilizando comandos de mais alto nível, como esses citados no exemplo, fica mais simples para um programador desenvolver um programa.

Tratando-se de linguagem de montagem, alguns aspectos precisam ser elucidados. Em primeiro lugar é importante frisar que cada arquitetura de processador tem seus comandos específicos, ou seja, tem sua linguagem de montagem proprietária com comandos específicos para tal linguagem. Então, diferentemente de um programa escrito em uma linguagem de alto nível, que pode ser portado e executado em qualquer arquitetura de processador4, um programa escrito em uma linguagem de montagem de uma específica arquitetura, poderá somente ser executado em computadores que tenham essa arquitetura.

Outro aspecto da linguagem de montagem é referente ao desempenho de execução. Para o mesmo algoritmo escrito em linguagem de alto nível e escrito em linguagem de montagem, aquele escrito em linguagem de montagem provavelmente terá um desempenho de execução melhor, pois o código produzido tende a ser muito menor e mais rápido durante a execução. Como exemplo cita-se o software que é executado em dispositivos embarcados e rotinas da BIOS (Basic Input/Output System) de um computador. Estes precisam de um código mais enxuto e mais rápido possível, nesse caso a programação em linguagem de montagem é a melhor opção. O terceiro aspecto importante a ser tratado sobre linguagem de montagem diz respeito ao acesso aos recursos de máquina, para execução de determinados procedimentos é preciso ter acesso completo ao hardware, como, por exemplo, o tratamento de interrupções de hardware, utilizando um programa gerado através de uma linguagem de alto nível não será possível acessar e controlar diretamente o hardware, algo que é possível utilizando uma linguagem de montagem.

A linguagem de montagem será parte integrante do conteúdo deste projeto, pois no software simulador do funcionamento do computador, o usuário poderá utilizá-la de modo a passar instruções para serem executadas no simulador através de um programa. Para o desenvolvimento do projeto, será criada a própria linguagem de montagem do simulador.

4.2 Linguagem de máquina Linguagem de máquina é a linguagem básica de operação do computador, sendo constituída por uma

sequência de bits. Segundo Tanenbaum (2001), as instruções básicas de um determinado computador formam uma linguagem por meio da qual é possível às pessoas se comunicarem com a máquina. Tal linguagem é chamada de linguagem de máquina. Os projetistas de computador precisam decidir quais instruções devem fazer parte de sua linguagem de máquina.

Um programa explícito em código de máquina consiste em uma sequência de números, onde essa sequência representa um conjunto de instruções a serem executadas. Para o desenvolvimento do software de simulação será criado uma linguagem de máquina específica, com um conjunto de instruções particular do sistema.

Atualmente não é mais utilizado pelos programadores o desenvolvimento de programas em linguagem de máquina, devido à complexidade de programação e baixo desempenho no desenvolvimento. 4 Em teoria um programa escrito em uma linguagem de alto nível pode ser portado de uma arquitetura para outra mantendo compatibilidade quanto

à sua execução, entretanto, existem algumas incompatibilidades de execução de programas portados entre arquiteturas de 32 e 64 bits.

Page 7: Arquitetura de Computadores - Simulador Von Neumann

7

Existem disponíveis algumas linguagens de alto nível, com comandos específicos, onde após o programa escrito e compilado geram o código de máquina, com as instruções referentes ao que foi desenvolvido.

5 SOFTWARES SIMULADORES EXISTENTES 5.1 K&S – The Knob and Switch Computer

O software de simulação funcional de um computador K&S, foi desenvolvido por William Grant Braught, Ph D. em Ciência da Computação, professor e membro de departamento de Matemática e Ciência da Computação do Dickinson College, em Carlisle no estado da Pennsylvania, Estados Unidos. O software foi desenvolvido no ano de 2001. Seu código é aberto e liberado sob os termos GNU CopyLeft5. Seu desenvolvimento foi feito com a integração das linguagens HTML e Java Script (http://users.dickinson.edu/~braught/).

O K&S foi um dos principais projetos desenvolvidos por Grant, cujo objetivo principal foi criar uma aplicação para auxiliar no ensino de Organização de Computadores e introdução em Ciência da Computação, assim como define o autor. O software é constituído de quatro módulos distintos, são eles: simulador do caminho de dados, simulador do caminho de dados com a memória principal, simulador com microprogramação e simulador completo do computador – CPU e memória. A Figura 5 mostra a interface do software, sendo ilustrada a interface do K&S no modo simulador completo do computador – CPU e memória principal (http://users.dickinson.edu/~braught/kands/kands.html).

Figura 5 – Interface simulador K&S (modo completo)

Na Figura 5, pode-se identificar os componentes da CPU, que são a unidade de controle e a unidade operacional (caminho de dados) e também a memória principal. Para operação do software, o usuário pode escolher se desejar operar o sistema no modo completo ou com os módulos individuais.

O simulador K&S, operando no modo completo, propicia ao usuário uma visão completa do funcionamento do computador. Neste modo está implementado o caminho de dados com todas as suas funcionalidades, a memória principal e ainda agrega da unidade de controle da CPU. Com a integração desses dispositivos o usuário pode parametrizar uma operação em linguagem de máquina, para ser executada

5 GNU – General Public License é um modo de disponibilização de software para o domínio público, possibilita que outras pessoas possam se

utilizar do código fonte de modo a fazer alterações e geração de novas versões, o GNU Copyleft tem o mesmo conceito, mas ainda impõe que quem se utilizar do código pode fazer alterações, gerar novas versões, mas não tem permissão de retirar o direito de GNU CopyLeft das novas versões geradas, ao contrario da GNU básica onde se utiliza dessa prática.

Page 8: Arquitetura de Computadores - Simulador Von Neumann

8

pela CPU. A interface do simulador, operando no modo completo pode ser visualizada na Figura 5.

O K&S foi analisado sob vários aspectos, com o objetivo de avaliar seu funcionamento e servir de certa forma como parâmetro para o desenvolvimento do simulador, produto deste trabalho. Identificou-se uma série de pontos referentes ao processo de simulação que não evidenciam de forma correta tanto graficamente quanto a nível de funcionalidades e funcionamento do computador. Citam-se alguns pontos: Apresenta na interface de botões para seleção dos registradores e operação da ULA, chaves de seleção, não apresenta os barramentos de comunicação entre os componentes do hardware, programação direta na memória, memória de baixa capacidade, não permite utilização de variáveis na declaração do programa, não permite que um programa seja salvo para posterior execução, entre alguns outros aspectos.

5.2 Neander O Neander é a segunda ferramenta de simulação analisada neste artigo. Foi desenvolvido por

docentes da UFRGS – Universidade Federal do Rio Grande do Sul. A versão inicial do software foi desenvolvida no ano de 1990 pelos professores da instituição Dr. Raul Fernando Weber e Dra. Taisy Silva Weber. Segundo Weber (2001, p. 49). O nome Neander lhe foi atribuído fazendo uma analogia ao homem de Neanderthal, o antecessor do Homo Sapiens, já que se tratava de um software simulador muito simples. O Neander serviu como base para criação de alguns outros software com o mesmo objetivo, mas com capacidades e recursos mais avançados.

A versão inicial do Neander foi desenvolvida em uma linguagem modo texto. Em função disso com o avanço das tecnologias essa versão ficou obsoleta. Em 2001, ainda com o auxilio de Raul e Taisy, mas com o desenvolvimento do professor Fábio Augusto Dal Castel (UFRGS) foi implementado o Neander em modo gráfico, conforme ilustra a Figura 6.

Figura 6 – Computador hipotético Neander (versão gráfica)

O Neander, igualmente ao simulador visto anteriormente, foi desenvolvido para fins didáticos, como principais características referentes ao funcionamento de Neander citam-se: Largura de dados e endereços de 8 bits, dados representados em complemento de dois, um contador de programa de 8 bits e 256 posições de memória. Sobre o conjunto de instruções contidas nesse modelo, estão presentes ADD, LOAD, OR, AND, JUMP, HALT, entre outras. (WEBER, 2001).

Assim como realizado com o simulador K&S, o simulador Neander foi analisado quanto aos recursos oferecidos bem como seu funcionamento, têm-se como aspectos negativos quanto ao simulador Neander os seguintes pontos: A interface não apresenta os de forma gráfica os componentes de baixo nível de hardware, não apresenta graficamente a interação dos componentes do hardware durante a execução de um programa, apresenta a memória em duas visões (memória de dados + memória de programa), implementa somente um registrador.

Page 9: Arquitetura de Computadores - Simulador Von Neumann

9

6 DESENVOLVIMENTO DO SIMULADOR Nesta seção inicia-se a descrição sobre o desenvolvimento do sistema, abordando inicialmente a

metodologia utilizada para modelagem, que para este projeto foi baseada na UML. Após as definições a respeito da metodologia é abordado o sistema em âmbito geral, tratando dos seus recursos e funcionalidades.

Utilizada atualmente como principal linguagem para documentação e modelagem de sistemas, a UML – Unified Modeling Language ou Linguagem de Modelagem Unificada é uma linguagem padrão para a elaboração da estrutura de projetos de software (BOOCH, RUMBAUGH e JACOBSON, 2003). Dentre os diagramas integrantes da UML e utilizados para modelagem de diferentes tipos de sistemas, neste projeto, optou-se pela utilização de três, para servir como base para a execução do projeto. Os diagramas desenvolvidos foram: Diagrama de Casos de Uso, Diagrama de Classes e Diagrama de Sequência.

6.1 Definição das Funcionalidades O diagrama de casos de uso foi utilizado para mapeamento de todos os requisitos funcionais do

sistema, principalmente para servir de base para os outros diagramas desenvolvidos. Com a criação do diagrama de casos de uso é possível identificar os atores envolvidos no sistema, bem como as funcionalidades que o sistema irá executar (BOOCH, RUMBAUGH e JACOBSON, 2003). A seguir é feita uma breve definição referente a cada um dos casos de uso definidos, que são apresentados na Figura 7.

Figura 7 – Diagrama de Casos de Uso

6.1.1 Abrir o Computador Tem a função de inicializar o computador, possibilitando ao usuário a interação com os demais

recursos oferecidos pelo sistema. Através desta funcionalidade podem ser executados outros recursos do sistema, que são:

• Carregar Interface: Tem a função de carregar a interface principal do simulador, área de interação com o usuário, na qual é carregada na tela o painel Programa e o painel Computador, ambos explicados na sequência do artigo.

• Fechar Computador: Este tem a funcionalidade de fechar a principal interface do sistema, fechar o painel Programa e o painel Computador. Salienta-se que, para este caso de uso ser executado, a interface deve estar carregada.

Page 10: Arquitetura de Computadores - Simulador Von Neumann

10

6.1.2 Programar Computador É uma funcionalidade que foi generalizada em outros dois casos de uso. Seu objetivo é definir a

funcionalidade de inserir um programa para ser executado no simulador, em uma linguagem própria definida no projeto, que será abordada na sequência do artigo. A definição das funcionalidades dos casos de uso associados a Programar Computador são definidos a seguir:

• Abrir Programa Salvo: É uma generalização do caso de uso “Programa Computador”, e refere-te à funcionalidade de abrir/importar para o sistema um programa que previamente foi salvo.

• Digitar Novo Programa: Também é uma generalização do caso de uso “Programa Computador”, e refere-te à funcionalidade de digitar um novo programa, para posteriormente ser executado no simulador.

• Salvar Programa: Tem a função de salvar um programa inserido no computador. É gerado um arquivo com a descrição do programa e salvo em alguma unidade de armazenamento, a ser definida pelo usuário.

• Salvar Arquivo no Disco: Esta funcionalidade é iniciada a partir da execução do caso de uso anterior, “Salvar Programa”, e tem a função de gravar no disco um arquivo contendo o conteúdo de um programa previamente inserido no simulador. O resultado é a geração de um arquivo, com um formato específico para uso no simulador.

• Montar Programa: Tem a função de montar um programa e só pode ser executado após a execução do caso de uso Programa Computador. Seu resultado é organizar o programa inserido num formato que possa ser interpretado pelo simulador.

• Carregar Programa: Tem a função de carregar um programa para a memória do computador, definido neste simulador. Este caso de uso somente pode ser executado após a execução dos casos de uso “Programa Computador” e “Montar Computador”. Seu resultado é um programa carregado na memória, pronto para ser executado.

• Carregar Memória: Esta funcionalidade é executada a partir da execução do caso de uso anterior, “Carregar Programa”, e realiza a função de carregar um programa, já previamente montado, para a memória do computador.

• Limpar Programa: Está função é utilizada para reiniciar interface Programa. Quando acionada ela faz o apagamento dos dados digitados. Como pré-condição para a execução dessa função, alguma informação já deve ter sido inserida na interface Programa.

6.1.3 Executar Programa Esta funcionalidade que foi generalizada em outros dois casos de uso. Seu objetivo é definir a

funcionalidade de executar um programa no simulador. A definição das funcionalidades dos casos de uso associados a Executar Programa são definidos a seguir:

• Execução Completa: Trata-se de uma generalização do caso de uso anterior, “Executar Programa”, e define a execução total de um programa previamente carregado na memória.

• Execução Passo a Passo: Também trata-se de uma generalização do caso de uso “Executar Programa”, e define uma forma distinta de execução. Desta forma é executada uma instrução de cada vez.

• Invocar Próxima Instrução: É uma funcionalidade executada a partir da execução do caso de uso anterior, “Execução Passo a Passo”. Define que quando iniciada a execução passo a passo o usuário precisa chamar a função “Invocar Próxima Instrução”, para que uma nova instrução seja executada.

• Pausar Execução: Tem a funcionalidade de pausar a execução de um programa que esteja sendo executado no simulador. Somente pode ser chamado se anteriormente o caso de uso “Executar Programa” tiver sido executado.

• Reiniciar Execução: Esta funcionalidade é executada a partir da execução do caso de uso “Pausar Execução”. Sua função é fazer o simulador retomar o processamento e a execução de um programa, caso o mesmo tenha sido pausado.

• Encerrar Execução: Tem a funcionalidade de abortar a execução de um programa. Somente pode ser chamado se anteriormente o caso de uso “Executar Programa” tiver sido executado.

6.2 Modelo Conceitual Entre todos os diagramas integrantes da UML, o diagrama de classes é o mais utilizado e o mais

importante, pois a partir dele pode-se visualizar todas as classes que irão compor o sistema (BOOCH,

Page 11: Arquitetura de Computadores - Simulador Von Neumann

11

RUMBAUGH E JACOBSON, 2003). Visto que o software foi desenvolvido com os conceitos de orientação a objetos, este diagrama é indispensável. Para o desenvolvimento do sistema foram elaborados dois modelos diferentes de diagrama de classes. Em um modelo, denominado modelo de arquitetura, estão definidas todas as classes integrantes ao sistema, englobando classes abstratas e de serviços, todos os métodos e atributos. Este modelo tem um foco mais técnico e serviu como referência para a construção do sistema. Em contrapartida, foi desenvolvido outro modelo de diagrama de classes, denominado modo conceitual ou modelo de domínio, que se trata de um modelo de alto nível, cujo objetivo é apresentar o domínio do sistema, entender os seus conceitos, suas entidades e seus relacionamentos. Seu foco é o entendimento do domínio da aplicação, abstraindo aspectos de arquitetura e do desenvolvimento, que são integrantes do outro modelo.

Para este artigo optou-se pela apresentação do diagrama de classes de modelagem conceitual, para facilitar o entendimento. O diagrama de classes de modelagem de arquitetura, que também foi desenvolvido, é apresentado no Apêndice A.

Figura 8 – Diagrama de Classes: Modelo Conceitual

A seguir é descrita a definição de cada uma das entidades que compõem o sistema, conforme é apresentado no modelo ilustrado na Figura 8.

6.2.1 Simulador Esta classe, definida no modelo, está representando a interface principal do sistema, na qual o

usuário realiza a programação e a execução de um programa. Pode-se identificar que, como principais características, a classe Simulador possui como atributos dois painéis: painel Programa e painel Computador. Citam-se no modelo como principais métodos dessa entidade:

• CarregarInterface: Este método tem a funcionalidade de carregar, na tela do sistema, o painel Programa e o painel Computador. São as principais telas do sistema e servem de interface para interação do usuário com o simulador.

• FecharInterface: Este método tem como funcionalidade fechar a interface e os painéis, caso os mesmos estejam abertos.

Page 12: Arquitetura de Computadores - Simulador Von Neumann

12

6.2.2 Programa É umas das entidades que compõem a entidade Simulador, cuja funcionalidade é disponibilizar ao

usuário uma área de interação com o sistema, na qual ele possa inserir um programa para ser executado no simulador. A inserção de um programa pode ser realizada através da digitação de um novo programa ou abrindo um programa já existente, que foi previamente salvo. Compõe a entidade Programa a entidade Montador, que será descrita a seguir. Como principais métodos da entidade Programa, citam-se:

• Programar: Este método implementa a funcionalidade de inserir um programa no simulador, seja abrindo um programa existente, que já tenha sido previamente salvo, ou digitando um novo programa.

• CarregarPrograma: Este método implementa a funcionalidade de carregar um programa para memória. Como pré-condição para a utilização desta funcionalidade, o programa já deve ter sido previamente montado. O processo de montagem será descrito logo a seguir.

• SalvarPrograma: Este método implementa a funcionalidade de salvar um programa que tenha sido previamente digitado. O resultado é a geração de um arquivo, num formato específico, contendo a descrição do programa inserido.

• AnalisarErros: Esse método realiza uma análise no código inserido, fazendo uma consistência no programa digitado, buscando erros na sua estruturação. Caso ocorra algum erro, o sistema irá indicar ao usuário o problema encontrado.

6.2.3 Montador É uma das entidades que compõem a entidade Programa. Sua funcionalidade é realizar o processo de

montagem de um programa inserido no simulador. Como principal método da entidade Montador, cita-se: • MontarPrograma: Este método possui a funcionalidade de realizar o processamento e a

montagem do programa. O processo de montagem consiste em analisar o programa, codificá-lo e organizá-lo de forma que possa ser carregado para a memória.

6.2.4 Computador É uma das entidades que compõem a entidade Simulador, cujo propósito é apresentar para o usuário

um painel, ilustrando um computador hipotético, simples, contendo o mínimo de elementos. Esse painel Computador é uma interface gráfica, na qual é realizada a simulação do funcionamento de um computador.

O Computador é composto pelos seguintes elementos: Unidade de Controle, Memória e Caminho de Dados. Como principais métodos integrantes da entidade Computador, citam-se:

• ExecutarPrograma: Este método é utilizado para iniciar o processo de execução de um determinado programa no simulador. Como pré-condição para o início da execução de um programa, o computador deve possuir previamente um programa já carregado na memória.

• PausarPrograma: Este método implementa a funcionalidade de realizar uma pausa durante o processamento de um programa.

• ReiniciarPrograma: Este método implementa a funcionalidade de reiniciar o processamento de um programa. O reinício da execução dá-se do ponto onde a execução foi pausada.

• EncerrarPrograma: Este método implementa a funcionalidade de encerrar a execução de um programa, do ponto em que ele estiver quando esse método for acionado.

6.2.5 UnidadeControle É um dos principais dispositivos na composição da CPU de um computador. A UC é a responsável

por comandar o funcionamento de todos os outros dispositivos, através dos sinais de controle. Para o desenvolvimento do sistema foi criada uma implementação em software da UC. Os sinais de controle no software são os seus atributos, e as suas funções são os métodos. Seus principais atributos são:

• Status: Este atributo referencia o registrador de status, elemento presente na constituição da CPU de um computador.

• Controles: Forma generalizada de referenciar os sinais de controle da UC, citam-se como exemplos de controles: ICP, LCP, LRI, LRE, etc. Estes sinais de controles estão com seu nome abreviado, sua descrição completa está constando no dicionário de termos projeto, que pode ser visto no Apêndice B.

• EndRegistradores: Este atributo referencia o endereço do registrador onde será inserida uma informação que foi previamente buscada da memória.

• Operação: Esse atributo armazena qual operação deve ser executada pela ULA, a partir de uma

Page 13: Arquitetura de Computadores - Simulador Von Neumann

13

instrução lida da memória e decodificada. • RI: Este atributo referencia o Registrador de Instrução da UC, e sua funcionalidade é armazenar a

instrução que é buscada da memória e armazenada na UC, para seu posterior processamento. • CP: Este atributo referencia o Contador de Programa da UC, e sua funcionalidade é armazenar o

endereço da instrução que está sendo processada no momento.

Além dos atributos, a Unidade de Controle possui uma série de métodos, que implementam suas funcionalidades. Na definição do modelo conceitual, citam-se os principais:

• BuscaInstrução: Este método faz com que a UC busque em uma determinada posição da memória, informada pelo Contador de Programa (CP), uma instrução para ser processada. A instrução buscada na memória é armazenada no registrador de instrução.

• DecodificaInstrução: Este método executa a funcionalidade de decodificar uma instrução armazenada no registrador de instrução da UC. Como pré-condição para a execução deste método é que previamente uma instrução já tenha sido lida e trazida da memória.

• ExecutaInstrução: Este método implementa a principal funcionalidade de UC, realizar a execução de uma determinada instrução, fazendo com que a UC interaja com os demais elementos do hardware do computador, assim realizando a execução de uma instrução.

6.2.6 Memória A memória é um componente muito conhecido e integrante da estrutura de um computador. Nos

computadores atuais, a capacidade da memória é um aspecto fundamental para o desempenho do hardware. A memória do simulador foi implementada com uma capacidade de 256 bytes, sendo dividida em 256 posições de 8 bits cada, sendo endereçadas de 0 a 255. Para o desenvolvimento do simulador criamos uma implementação de software da memória, onde temos como principais atributos:

• Memória: Este atributo refere-se propriamente a memória, repositório do programa, que no simulador trata-se de um vetor de Strings com 256 posições.

• CS: Este atributo referencia o sinal de controle Chip Select da Memória, cuja funcionalidade é colocar a memória em modo de operação, pronta para executar os métodos de leitura ou escrita.

• RW: Este atributo referencia o sinal de controle de Read/Write da memória, cuja funcionalidade é atribuir o modo de operação da memória, em modo Read ou modo Write.

• RE: Este atributo referencia o registrador de endereços, e sua função é armazenar o endereço da memória onde está o ponto de execução do programa.

• RD: Este atributo referencia o registrador de dados da memória. Além dos atributos, no modelo conceitual definiram-se as principais funcionalidades da memória,

seus métodos, citam-se: • Escrever: É através da execução deste método que as informações são escritas na memória. Esse

método recebe duas informações, o endereço e o dado a ser inserido. Assim realiza a função de armazenamento de uma determinada informação.

• Ler: Este método implementa a funcionalidade de leitura da memória. Para execução este método recebe um parâmetro, um endereço, recebido do registrador de endereço. Na sua execução, busca o dado que consta no endereço recebido e o armazena no registrador de dados.

6.2.7 Banco de Registradores O banco de registradores existente no simulador é similar aos registradores encontrados na CPU de

um computador convencional. Esse banco de registradores é formado por quatro registradores mais bits de endereçamento, que no modelo conceitual foram definidos como atributos. A seguir estão suas definições:

• R1, R2, R3 e R4: Esses atributos referenciam os quatro registradores integrantes na CPU do simulador.

• ERX/ERY: Este atributo é utilizado para endereçar um registrador do banco de registradores. Está definido, no modelo conceitual, o principal método do banco de registradores, que diz respeito a

sua funcionalidade, que é: • CarregarRegistrador: Um registrador pode ser carregado a partir de uma informação disponível

no registrador de dados ou através da saída da ULA. Este presente método implementa a funcionalidade de carregar o dado para o registrador.

Page 14: Arquitetura de Computadores - Simulador Von Neumann

14

6.2.8 ULA A ULA executa uma determinada operação a partir dos dados que são recebidos do banco de

registradores. Para esse projeto, cujo propósito é ser uma ferramenta didática, definiu-se uma quantidade reduzida de operações, mas que propiciam ao usuário um entendimento quanto ao fluxo de execução. A ULA possui duas entradas de dados, uma saída de dados e um indicador de operação, que no modelo conceitual ambos foram definidos como atributos, conforme segue:

• X/Y: Atributos responsáveis por armazenar os dados recebidos do banco de registradores, referenciam a entrada de dados da ULA.

• R: Este atributo é responsável por armazenar o resultado da operação da ULA, saída de dados. • OP: Atributo responsável por armazenar qual operação a ULA deve realizar em função dos dados

recebidos. • Status: O atributo status da ULA referência o registrador de status presente na CPU de um

computador.

Além dos atributos integrantes a ULA, conforme acima descritos, também definiu-se os seus métodos no modelo conceitual. São eles:

• Operação: Este método referencia a funcionalidade da ULA de realizar uma operação, em função dos dados recebidos na sua entrada. Para sua execução, esse método recebe como parâmetros dois valores e uma operação. Sua saída é a geração do resultado de uma operação e a chamada do método “AtualizarStatus”.

• AtualizarStatus: Este método implementa a funcionalidade de atualizar o registrador de status a partir do resultado da operação da ULA. A pré-condição para execução deste método é a execução do método Operação. Sua saída é a atualização do registrador de status

6.3 Modelo Dinâmico Com o objetivo de possibilitar uma visualização dinâmica entre os objetos, foram desenvolvidos os

diagramas de sequência dos principais fluxos de operação do sistema. Esse tipo de modelagem apresenta um diagrama no qual visualiza-se a comunicação entre os objetos do sistema, agregando uma linha de tempo, possibilitando uma visualização das mensagens ocorrendo em sequência entre os mesmos.

Figura 9 – Diagrama de Sequência

Na Figura 9 pode-se visualizar o diagrama de sequência do ciclo de operação do computador, no que

Page 15: Arquitetura de Computadores - Simulador Von Neumann

15

tange o processamento das instruções. Conforme pode-se visualizar, a maior parte dos métodos são inicializados na Unidade de Controle, pois é o dispositivo que faz o controle de todos os fluxos de operação do hardware. Esse diagrama de sequência refere-se ao processo executado logo após a sequência de processos do diagrama analisado no tópico anterior, apresentado na Figura 9. A seguir será descrito a caracterização de cada um dos métodos que compõe esse diagrama de sequência:

• ExecutarPrograma: Este é o último método executado no diagrama de sequência anterior e o primeiro a ser executado nesse diagrama, consiste em iniciar a execução de um programa no simulador.

• BuscaInstrução: A Unidade de Controle durante o processamento de um programa executa uma sequência de operações, abstraindo esse conceito podemos definir que a Unidade de Controle executa uma sequência denominada : BI – DI – EI, respectivamente Busca Instrução, Decodifica Instrução e Executa Instrução. Este método é o primeiro da sequência, e consiste na UC buscar de uma instrução na memória, a instrução é armazenada no registrador de instrução da UC.

• DecodificaInstrução: Este é o segundo passo executado pela UC, conforme foi definido no item anterior. Sua execução é realizada após a conclusão do método BuscaInstrução e consiste na interpretação da instrução que foi armazenada no registrador de instrução para determinar que operação o computador irá realizar naquele momento.

• ExecutaInstrução: Último passo da sequência de execução da UC, somente pode ser iniciado após a conclusão dos dois métodos anteriores e consiste efetivamente na execução de uma instrução. Neste momento a UC passa a interagir com todos os outros elementos componentes do hardware, fazendo com que uma determinada instrução seja completamente processada. Após a conclusão da execução de uma instrução a UC retorna novamente para a busca de instrução, realizando o processo novamente. Caso a instrução seja HALT, a execução é terminada, pois esse comando determina o encerramento do programa.

Conforme exposto neste tópico, foram desenvolvidos dois modelos do diagrama de sequência, o segundo modelo, que apresenta a sequência de passos realizada pelo usuário para colocar um programa em execução pode ser visualizado no Apêndice C.

6.4 Conjunto de Instruções O software desenvolvido implementa um simulador do funcionamento interno de um computador,

para tal funcionalidade, fica definida uma gama de instruções que podem ser utilizadas para criação e elaboração dos programas. Este tópico do artigo descreve as instruções que fazem parte do escopo desse sistema, que podem ser do tipo: Movimentação (MO), Lógicas e Aritméticas (LA), Desvio (DV) e Outras (OU). O Quadro 1 apresenta a descrição e a definição das instruções e sua codificação.

Quadro 1 – Conjunto de Instruções do SVN Tipo Linguagem de Montagem Exemplo Significado Linguagem de Máquina

MO LOAD REG [VAR] LOAD R0 [X] R0 = MEM [12] 000100 RRMMMMMMMM

MO STORE [X] REG STORE [X] R0 [X] = R0 001000RRMMMMMMMM

LA ADD RR RR ADD R0 R1 R0 = R0 + R1 1000 RR RR

LA SUB RR RR SUB R0 R1 R0 = R0 – R1 1001 RR RR

LA OR RR RR OR R0 R1 R0 = R0 || R1 1010 RR RR

LA AND RR RR AND R0 R1 R0 = R0 & R1 1011 RR RR

LA CMP RR RR CMP R0 R1 R0 = R0 = = R1 1001 RR RR

DV JMP [LABEL] JMP VOLTA Desvia para VOLTA 00110000 MMMMMMMM

DV JZ [LABEL] JZ VOLTA Desvia para VOLTA se zero 01000000 MMMMMMMM

DV JN [LABEL] JN VOLTA Desvia para VOLTA se negativo

01010000 MMMMMMMM

OU HALT HALT Encerra o programa 11111111

OU NOP NOP Nada a processar 00000000

Estas são as instruções integrantes do software, maiores detalhes quanto a detalhes na especificação da instrução serão abordados no tópico referente a linguagem de montagem do sistema.

Page 16: Arquitetura de Computadores - Simulador Von Neumann

16

6.5 Linguagem de Montagem Foi definida no projeto do simulador uma linguagem própria, conforme citado em tópicos anteriores.

Essa linguagem é utilizada para a construção dos programas que são executados no simulador onde permite a utilização de todas as instruções disponibilizadas pelo computador para a criação de novos programas. A linguagem do sistema possui uma sintaxe própria.

Na estrutura de um programa, descrito com a linguagem do simulador, existem três seções distintas, cada uma com uma função específica na declaração do código, as seções são: Data, Code e Halt.

• Data: Esta palavra fixa da linguagem define o início do código do programa e também define que logo abaixo estarão declaradas as variáveis utilizadas no código.

• Code: Define o fim da seção de declaração de variáveis do programa. A partir desse ponto está a declaração do programa.

• Halt: Define o fim da seção Code e referencia o término da declaração do programa.

O Quadro 2 a seguir apresenta um exemplo de programa escrito na linguagem do simulador, no qual ficam evidenciadas as definições das seções na declaração do código. Tem-se também, na descrição de um programa, a declaração de LABELs no código, que são utilizadas na descrição das operações JN, JZ, JMP - instruções do tipo desvio. Sua declaração é abordada no Quadro a seguir.

Quadro 2 – Exemplo de um programa DATA Seção DATA X DB 12 Declaração da variável X, lhe atribuindo o valor 12 Y DB 4 Declaração da variável X, lhe atribuindo o valor 4 Z DB 0 Declaração da variável X, lhe atribuindo o valor 0 CODE Seção CODE LOAD R0 [X] Carrega para o registrador R0 o valor da variável X LOAD R1 [Y] Carrega para o registrador R1 o valor da variável Y VOLTA: Declaração da label VOLTA SUB R0 R1 Operação de subtração, subtrai o valor de R0 menos R1 JZ SAI Se o resultado da ULA for 0 (Zero), pula para a Label SAI: JMP VOLTA Pula para a label VOLTA SAI: Declaração da label SAI HALT Seção HALT, término da declaração do programa

6.6 Montador Nos tópicos anteriores foram abordados o conjunto de instruções e a linguagem de montagem

desenvolvidos para implementação do projeto do simulador. Para englobar esses dois tópicos distintos do escopo do projeto, foi implementado no sistema um montador, recurso modelado via software que realiza a montagem de um programa inserido no simulador, programa esse descrito baseado nas regras da linguagem de montagem e que utiliza na sua descrição os comandos definidos no conjunto de instruções do software. O processo de montagem, permite após a sua execução, que um programa seja processado pelo simulador.

Na interface do simulador, no painel programa, abordado em tópicos anteriores, apresenta o resultado do processo de montagem, ou seja, o programa montado, visualizado de diferentes formatos ao mesmo tempo. É apresentado na tela para o usuário o programa montado no formato assembly e no formato binário, descrito em linguagem de montagem. Essa forma dinâmica de visualização caracteriza um diferencial entre os simuladores analisados.

O montador desenvolvido, possui implementado em seu escopo a análise léxica, sintática e semântica, aspectos que são analisados durante o processo de montagem de um programa. Também durante o processo de montagem ocorre o processo de análise de erros do código, que também foi implementado no escopo do simulador, tal funcionalidade permite ao usuário identificar possíveis erros durante a descrição de um programa. No tópico relacionado a trabalhos futuros, descrito ao final deste artigo, aborda alguns tópicos referentes a ajustes a adaptações no processo de montagem e de análise de erros do código.

Page 17: Arquitetura de Computadores - Simulador Von Neumann

17

7 INTERFACE Este tópico tem o objetivo de apresentar a interface do sistema. Conforme abordado em tópicos

anteriores, o sistema tem sua interface composta por dois painéis, o painel Programa e o Painel Computador. É através desses painéis que o programa é inserido e a simulação pode ser visualizada.

7.1.1 Painel Programa

A Figura 11 apresenta o painel Programa, é através dele que um programa é inserido no simulador, posteriormente é montado e carregado para memória. Conforme pode-se visualizar, a interface da área de programa do simulador é composta por alguns elementos, os quais serão apresentados a seguir:

Figura 11 – Interface: Painel Programa

• Linguagem de Montagem: Esse box mais a esquerda, denominado linguagem de montagem, é uma área exclusiva de texto. É nessa área de texto que o usuário faz a digitação de um programa para ser processado pelo simulador.

• Memória - Código: Esta área central representa a memória do computador, sua função é armazenar um programa já montado no formato assembly. Essa área é preenchida após a execução da função Montar Programa.

• Memória – Binário: Esta área mais a direita também representa a memória do computador, sua função é armazenar um programa já montado no formato binário, linguagem de máquina. Essa área é preenchida após a execução da função Montar Programa.

• Botão Montar: O botão Montar implementa a função Montar Programa, já definida na seção funcionalidades do sistema.

• Botão Limpar: O botão Limpar implementa a função Limpar Programa, já definida na seção funcionalidades do sistema.

• Botão Carregar: Este item implementa a função Carregar Programa, já definida na seção funcionalidades do sistema.

• Saída: Esta área abaixo na tela é utilizada para informar o usuário os erros encontrados no código durante a execução da montagem, caso encontre erros.

Page 18: Arquitetura de Computadores - Simulador Von Neumann

18

7.1.2 Painel Computador A Figura 12 apresenta o painel Computador, é nesse painel que acontece a ilustração do

funcionamento de um computador durante a execução de um programa, onde ocorre a simulação. O painel Computador é composto pelos seguintes elementos: Unidade de Controle, Memória, Caminho de Dados e Painel Status.

Figura 12 – Interface: Painel Computador

• Unidade de Controle: Esta área, localizada no topo da interface, representa graficamente a Unidade de Controle do computador. Nela visualizam-se todos os sinais de controles comandados pela UC e estão relacionados com os outros componentes da interface.

• Memória: Esta área da interface referencia a memória do computador, e conforme visualiza-se na interface, possui outros elementos que são utilizados durante a execução de um programa.

• Caminho de Dados: Este área, também conhecida como Unidade Operacional, integra dois componentes do hardware, o Banco de Registradores e ULA.

• Painel Status: Esta área, localizada acima na interface, apresenta durante a execução do programa a informação da execução que está sendo processada no momento, bem como as micro-operações realizadas pelo hardware para a execução da instrução. Esta área á atualizada automaticamente a cada novo instrução iniciada.

Na Figura12 é apresentada a interface principal do sistema, onde estão abreviadas as descrições dos elementos. A descrição completa pode ser visualizada no documento anexo 2, dicionário de termos.

8 AVALIAÇÃO E RESULTADOS O software desenvolvido, resultado deste projeto, é uma ferramenta com foco didático que servirá de

auxílio para o ensino de conteúdos relacionados à arquitetura e à organização de computadores. O público alvo para utilização deste software são alunos de graduação dos cursos das áreas de Tecnologia da Informação, Engenharia da Computação e Sistemas Digitais. Visando apresentar sólidos resultados quanto a real utilidade do sistema, foi elaborado um instrumento de avaliação, uma ficha composta por uma série de questões, na qual são abordados os seguintes critérios: Interface, Visualização dos Elementos, Entendimento do hardware, Simulação, Recursos do Sistema, Linguagem e Avaliação Geral. Todos os itens foram

Page 19: Arquitetura de Computadores - Simulador Von Neumann

19

avaliados por meio de perguntas, com respostas fornecidas como notas de 1 a 10. O instrumento de avaliação foi aplicado nas turmas de Arquitetura de Computadores I e II, dos cursos da área de Tecnologia da Informação da Universidade Luterana do Brasil. Ao total foram obtidas 25 avaliações. O Quadro 3 apresenta os critérios avaliados bem como os resultados apurados, valores médios obtidos como resposta em cada uma das questões.

Quadro 3 – Avaliação do Sistema TÓPICOS DA AVALIAÇÃO MÉDIA

1 Com relação à sua interface 8,87 2 Com relação à visualização dos elementos que compõe o simulador 8,88 3 Com relação ao entendimento do hardware do simulador 8,83 4 Com relação a simulação do funcionamento do hardware, durante a execução de um programa 9,04 5 Como relação aos recursos oferecidos pelo sistema 9,14 6 Com relação à Linguagem de Montagem definida no simulador 9,00 7 Qual sua avaliação geral com relação ao software? 9,00

Conforme pode-se visualizar no Quadro 3, em todos os critérios de avaliação foram obtidas médias acima de 8,5 pontos e como avaliação geral do software foi obtido 9,0 pontos. Com base nos resultados apresentados, pode-se afirmar que o software foi avaliado sob vários critérios e o retorno obtido foi satisfatório. Os comentários foram positivos e o sistema bem aceito.

No documento Apêndice D pode-se visualizar a avaliação completa, com os valores de resultados obtidos em cada uma das questões aplicadas.

9 TRABALHOS FUTUROS O tema deste projeto é bastante amplo, pois se trata de uma área com um conteúdo muito abrangente.

O projeto proposto neste artigo trata vários aspectos sobre o tema, mas ainda tem-se a possibilidade de avanços com relação a sua implementação, expandindo seus recursos e funcionalidades ou melhorando os existentes. Este tópico do projeto apresenta de forma sucinta alguns itens, onde identifica-se a possibilidade de continuidade de desenvolvimento, seja com a expansão do sistema ou readequação e melhorias de funcionalidades já implementadas. Este projeto será doado para a Universidade Luterana do Brasil e seu código fonte poderá ser integralmente utilizado para continuidade do projeto, estudos e novas implementações. Citam-se os itens:

• Adequações no Processo de Montagem e Análise de Erros: O processo de montagem e verificação de erros que foi desenvolvido não executa uma analisa profunda no código, não implementa uma analise léxica, sintática e semântica robusta e precisa. Portanto, esta funcionalidade do sistema pode ser readequada provendo uma melhoria no sistema, inclusive pode ser analisada por interessados na área de compiladores.

• Agregar Instruções: Conforme exposto em tópicos anteriores no artigo, o propósito deste projeto é a criação de um simulador simples, com um conjunto básico de instruções. Portanto, este tópico apresenta como possibilidade de expansão do sistema a criação de novas operações, para agregar aos recursos já existentes. Como possibilidades de novas instruções, citam-se: Multiplicação, Divisão, Incremento/Decremento de Variáveis, entre outras.

• Novos Tipos de Variáveis: O sistema, em sua concepção atual somente é possível a criação de variáveis do tipo byte (DB), então como expansão pode-se agregar novo tipos de variáveis, como: String, Long Int ou Vetores, por exemplo, assim possibilitando a criação de programas mais sofisticados.

• Implementação de Dispositivos de Entrada/Saída: Como uma grande funcionalidade a ser agregada, cita-se a implementação de dispositivos de entrada e saída, um teclado virtual e um monitor virtual, possibilitando a criação de programas que tenham a possibilidade de interação com o usuário quanto a entrada de dados durante o processamento, e também á visualização da saída de dados após o processamento. Assim, tornando a simulação mais próxima do funcionamento de um computador convencional.

• Implementação de Instruções Imediatas: Implementação do recurso de operação com dados diretamente da memória, sem a necessidade de carregá-los para os registradores, otimizando a

Page 20: Arquitetura de Computadores - Simulador Von Neumann

20

execução dos programas. • Aumentar o Número de Registradores: O sistema disponibiliza somente quatro registradores

na sua estrutura. Portanto, cita-se como expansão o aumento no número de registradores aumentando a capacidade de processamento do computador.

10 CONCLUSÃO No âmbito educacional, no ensino de conteúdos relacionados à área de arquitetura de organização de

computadores, os educadores se utilizam de simuladores, para auxiliar na fixação dos conteúdos, fazendo via software a simulação do funcionamento interno do hardware. Durante os anos, identificou-se uma série de limitações dessas ferramentas disponíveis de simulação, pelo fato de não detalharem suficientemente como se dá o funcionamento interno do computador, principalmente por não expressar esse funcionamento de forma interativa para o usuário. Então, devido a estes aspectos negativos com relação aos simuladores utilizados, nasceu a proposta de desenvolvimento de um simulador de um computador simples, cujo objetivo seria resolver as questões para as quais os softwares existentes não eram satisfatórios.

Este trabalho apresentou o desenvolvimento de um simulador de um computador simples, baseado na arquitetura de von Neumann, iniciando pelos conceitos teóricos relacionados ao tema até o próprio desenvolvimento da aplicação. Entre os aspectos teóricos envolvidos, são abordados o modelo original definido por Neumann e um esquema básico, baseado no mesmo conceito de von Neumann, mas exposto de uma forma mais abstrata, que é utilizado nas literaturas atuais. Partindo desse esquema atual, onde são representados a CPU, a memória principal, barramentos e dispositivos de entrada e saída, como os componentes essenciais da arquitetura interna da máquina, foi dada ênfase a cada um desses componentes de forma particular, explorando seus conceitos e suas funcionalidades, bem como a interação desses dispositivos. Após essas definições iniciais quanto aos aspectos físicos a serem representados no sistema, ou seja, os componentes do hardware que são integrantes da arquitetura interna da máquina, são expostos no artigo os conceitos referentes ao software do baixo nível que é executado provendo a operacionalização destes componentes. Para tal foi abordada a linguagem de montagem, implementada no sistema de modo que o usuário possa inserir programas executáveis no simulador.

Quanto às limitações analisadas nos software existentes e o que se deseja que o sistema proposto atenda, verificou-se que de uma forma geral as duas ferramentas apresentadas, Neander e K&S, simulam de uma forma correta o funcionamento do hardware e a interação entre os dispositivos. O problema está na forma de como é apresentada a simulação e nas funcionalidades oferecidas. O simulador K&S é um simulador gráfico, funciona de forma correta, mas possui duas deficiências significativas: em primeiro lugar a sua interface que se distancia um pouco da forma conceitual do hardware do computador. O modo como são apresentados os dispositivos apresenta pouca semelhança com o hardware. Outro aspecto importante é que os programas criados no K&S para execução não podem ser salvos, pois o software não disponibiliza essa funcionalidade. Analisando sob o foco didático é um aspecto crítico para sua utilização. Sobre o Neander pode-se compartilhar quanto à forma gráfica as mesmas considerações feitas ao K&S, sendo que o simulador Neander apresenta menos informações que o K&S quanto ao layout do hardware do computador. O diferencial do Neander é que pode-se salvar os programas inseridos no sistema para uma futura manipulação. Após a análise dos sistemas existentes, o sistema desenvolvido foi projetado contendo as funcionalidades analisadas como negativas nos software existentes, com intuito de atender as estes requisitos.

Na seção referente ao desenvolvimento do sistema, um tópico abordou a descrição das funcionalidades implementadas, onde foram propostas uma série de melhorias em relação aos software hoje utilizados. Em outro tópico, denominado de modelo conceitual, pode-se visualizar como o sistema foi projetado, como estão dispostos os elementos e suas interações. A partir dessa ilustração pode-se verificar como forma abstrata como se dá o funcionamento do hardware do computador, como se dá a comunicação entre os seus elementos. Dando continuidade ao desenvolvimento, foi exposto o conjunto de instruções disponibilizadas ao usuário para construção de seus programas, programas esses que são descritos utilizando sua linguagem própria, que é abordada em um tópico especifico neste artigo.

Para prover e apresentar uma segura validação do sistema, foi desenvolvido um instrumento de avaliação, composto por uma série de questões. Como resultado, obteve-se uma avaliação quanto à satisfação do usuário na utilização do sistema. A avaliação foi realizada diretamente com o público alvo, os alunos dos

Page 21: Arquitetura de Computadores - Simulador Von Neumann

21

cursos de graduação, e foram obtidos resultados satisfatórios quanto à análise feita do sistema. Os alunos usaram o sistema, e como nota geral o simulador obteve média 9 e bons comentários por parte dos usuários. Finalizando, foi exposto um tópico específico tratando sobre a possibilidade de continuidade deste projeto e expansão deste sistema. Por ser um domínio muito abrangente, este trabalho atende uma série de requisitos, mas tem-se ainda margem para expansão. Para tal, foram expostos alguns itens que podem ser melhor estruturados ou inovados, cujo resultado será um software simulador mais robusto e sofisticado, cujo resultado final é propiciar aos usuários uma forma alternativa de estudo dos temas relacionados ao hardware e ao funcionamento interno do computador, utilizando de uma ferramenta capaz de simular visualmente o fluxo de operação do hardware na execução de diferentes programas.

O tema deste projeto é bastante amplo, pois trata de uma área com um conteúdo abrangente. O projeto proposto neste artigo trata vários aspectos sobre o tema, mas ainda tem-se a possibilidade de avanços com relação à sua implementação, expandindo seus recursos e funcionalidades ou melhorando os existentes, citam-se os itens: adequações no processo de análise de erros, agregação de novas instruções, novos tipos de variáveis, implementação de dispositivos de entrada/saída, implementação de instruções imediatas, aumento do número de registradores, conforme foi exposto no tópico referente a Trabalhos Futuros.

Este projeto será doado para a Universidade Luterana do Brasil e seu código-fonte poderá ser integralmente utilizado para continuidade do projeto, estudos e novas implementações.

REFERÊNCIAS BOOCH, Grady; RUMBAUGH, James; JOCABSON, Ivar. UML – Guia do Usuário. Ed. Campus. 1ª Edição, 2000.

BRAUGHT, Willian Grant; Site pessoal. Disponivel em: <http://users.dickinson.edu/~braught/>. Acesso em: 27 set. 2010.

BRAUGHT, Willian Grant; Site K&S. Disponivel em: <http://users.dickinson.edu/~braught/kands/kands.html/>. Acesso em: 27 set. 2010.

NETBEANS.ORG. Disponível em <http://netbeans.org/>. Consultado em Junho/2011.

PATTERSON, David A.; HENNESSY, John L. Organização e Projeto de Computadores. Rio de Janeiro: Ed. LTC. 2ª edição, 2000. 551p.

PREECE, Jony; ROGERS, Yvonne; SHARP, Helen; BENYON, David; HOLLAND, Simon; CAREY, Tom. Human-Computer Interaction. England: Ed. Addison-Wesley, 1994.763p.

STALLINGS, W. Arquitetura e Organização de Computadores. São Paulo: Ed. Prentice Hall 5ª Edição, 2003. 786p.

SUN MICROSYSTEMS. Disponível em <http://www.java.com/>. Consultado em Junho/2011.

TANENBAUM, Andrew S.Organização Estruturada de Computadores. Rio de Janeiro: Ed. LTC 4ª Edição, 2001. 398p.

WEBBER, Raul Fernando. Fundamentos de Arquitetura de Computadores. Porto Alegre: Ed. Sagra Luzzato. 2ª Edição, 2001. 299p.

ZANUZ, A.; MARCHIORO , G.F.; PETRY, A. Arquitetura e Organização de Computadores I. Caderno Universitário nº 353. Canoas. Ulbra, 2006. 59p.

Page 22: Arquitetura de Computadores - Simulador Von Neumann

22

APÊNDICE A: MODELO DE ARQUITETURA

Page 23: Arquitetura de Computadores - Simulador Von Neumann

23

APÊNDICE B: DICIONÁRIO DE TERMOS DO PROJETO

Abrev. Descrição Abrev. Descrição

ERX Endereço do registrador usado como operando X da ULA

LRX Load do registrador X usado também para armazenar resposta da ULA ou um valor da memória

ERY Endereço do registrador usados como operando Y da ULA

SM1 Status do Multiplexador 1

OPULA Operação da ULA SM2 Status do Multiplexador 2

LCP Carga (Load) do Contador de Programa LRS Load do Registrador de Status

ICP Incremento do Contador de Programa CP Registrador Contador de Programa

LRI Carga (Load) do Registrador de Instrução

RI Registrador de Instrução

LRE Carga (Load) do Registrador de Endereço da Memória

M1 Multiplexador 1

LRD Carga (Load) do Registrador de Dados M2 Multiplexador 2

RE Registrador de Endereço da Memória RD Registrador de Dados da Memória

END Endereço da memória CS Seletor do Chip (Chip Select) da Memória

N Flag Negativo Z Zero

OV Flag Overflow R Resposta da ULA

R0 Registrador 0 do banco de registradores R1 Registrador 1 do banco de registradores

R2 Registrador 2 do banco de registradores R3 Registrador 3 do banco de registradores

X Entrada X da ULA Y Entrada Y da ULA

ULA Unidade Lógico-Aritmética RS Registrador de Status

R/W Flag de acesso à memória (R – Leitura / W – Escrita)

UC Unidade de Controle

Page 24: Arquitetura de Computadores - Simulador Von Neumann

24

APÊNDICE C: DIAGRAMA DE SEQUÊNCIA

Diagrama de Sequência

O diagrama ilustrado na figura acima apresenta de forma visual a troca de mensagens realizada pelo usuário para colocar um programa em execução. Pode-se visualizar os métodos que são disparados a cada interação do usuário, bem como as classes envolvidas. A seguir está uma breve descrição referente a essa sequência de passos:

• CarregarInterface: Atividade realizada pelo usuário que consiste no carregamento na tela das interfaces de programação e de simulação.

• Programar: Atividade realizada pelo usuário que consiste de inserção de um programa no simulador, seja inserindo um novo programa ou abrindo um programa já existente, que tenha sido previamente salvo.

• Montar: Atividade realizada pelo usuário e consiste na montagem de um programa previamente inserido no computador.

• AnalisarErros: Este processo consiste na realização do processamento do programa inserido, com o objetivo de buscar erros na descrição do programa, com base nas definições na linguagem6 do sistema. Como resultados da analise, nenhum erro sendo encontrado é disparado o método MontarPrograma, caso seja encontrado o erro é mostrado na interface para o usuário.

• MontarPrograma: Este é um processo interno realizado pelo sistema e consiste da montagem de um programa previamente inserido. A definição do processo de montagem foi descrita na sessão do Modelo Conceitual.

• CarregarPrograma: O processo CarregarPrograma é utilizado para carregar um programa no computador do simulador, como pré-condição para sua execução é que o programa já tenha sido previamente montado. A execução desse método inicia o método CarregarMemória, que será descrito a seguir.

• CarregarMemória: Este método consiste no carregamento de um programa para a memória do computador do simulador. O resultado da execução deste método é um programa pronto para ser executado no simulador.

• ExecutarPrograma: Este método consiste em iniciar a execução de um programa no simulador, efetivamente iniciar uma simulação. Como pré-condição para a execução deste método é que um programa já tenha sido previamente carregado na memória

6 No tópico 6.5 do artigo é abordado os aspectos relativos a linguagem de montagem própria desenvolvida para criação dos programas executados

pelo simulador.

Page 25: Arquitetura de Computadores - Simulador Von Neumann

25

• APÊNDICE D: AVALIAÇÃO COMPLETA

TÓPICOS DA AVALIAÇÃO MÉDIA

1 Com relação à sua interface, analisando os aspectos descritos abaixo:

1.1 Disposição dos elementos na tela 8,92

1.2 Design da interface 8,84

1.3 Cores e ilustrações 8,84

2 Com relação à visualização dos elementos que compõe o simulador, analisando o seu design:

2.1 Quantidade de elementos 8,76

2.2 Organização dos elementos na tela 8,84

2.3 Organização do sistema quanto aos seus elementos 9,04

3 Com relação ao entendimento do hardware do simulador, analisando os seguintes aspectos:

3.1 Facilidade de entendimento do hardware 8,56

3.2 Clareza quanto à visualização dos elementos 8,80

3.3 Quanto a disposição dos elementos na tela 9,04

3.4 Relacionamento entre os componentes do simulador com um computador real 8,92

4 Com relação a simulação do funcionamento do hardware, durante a execução de um programa, analisando os aspectos abaixo:

4.1 Entendimento quanto ao fluxo de operações do hardware 8,72

4.2 Interações gráficas durante a simulação 9,08

4.3 Entendimento quanto ao funcionamento da simulação 8,92

4.4 Com relação ao Painel de Status, apresentou clareza na visualização 9,24

4.5 O resultado da simulação atendeu suas expectativas 9,24

5 Como relação aos recursos oferecidos pelo sistema, como você avalia os aspectos abaixo:

5.1 Os recursos oferecidos pelo software são claros quanto seu funcionamento 9,00

5.2 Os recursos disponíveis funcionaram adequadamente, conforme foi proposto 9,28

6 Com relação à Linguagem de Montagem definida no simulador, analise os seguintes aspectos:

6.1 Como foi seu entendimento quanto à declaração da linguagem 8,72

6.2 O processo de montagem do programa foi executado corretamente 9,52

6.3 Como relação a verificação de erros no código, foi suficientemente informativo 8,76

7 - . Qual sua avaliação geral com relação ao software ? 9,00