=Paper= {{Paper |id=Vol-1877/CtrlE2017_MOA_07_117 |storemode=property |title=CompSim: Um Ambiente para o Ensino Integrado de Arquitetura e Organização de Computadores (CompSim: An Environment for the Integrated Teaching of Architecture and Computer Organization) |pdfUrl=https://ceur-ws.org/Vol-1877/CtrlE2017_MOA_07_117.pdf |volume=Vol-1877 |authors=Guilherme Esmeraldo,Edson Barbosa Lisboa }} ==CompSim: Um Ambiente para o Ensino Integrado de Arquitetura e Organização de Computadores (CompSim: An Environment for the Integrated Teaching of Architecture and Computer Organization)== https://ceur-ws.org/Vol-1877/CtrlE2017_MOA_07_117.pdf
                                                 II Congresso sobre Tecnologias na Educação (Ctrl+E 2017)
                                                              Universidade Federal da Paraíba - Campus IV
                                                                           Mamanguape - Paraíba – Brasil
                                                                             18, 19 e 20 de maio de 2017




           CompSim: Um Ambiente para o Ensino Integrado de
             Arquitetura e Organização de Computadores
                        Guilherme Esmeraldo1, Edson Barbosa Lisboa2
           1
               Instituto Federal de Educação, Ciência e Tecnologia do Ceará (IFCE) –
                                         Crato, CE – Brazil
 2
     Instituto Federal de Educação, Ciência e Tecnologia de Sergipe (IFS) – Aracaju, SE –
                                            Brazil
                guilhermealvaro@ifce.edu.br, edson.barbosa@ifs.edu.br

       Abstract. In technical, technological and higher courses in the areas of
       computers and electronics, it is common the presence of disciplines that deal
       with organizational and architectural aspects of computers. The associated
       contents are complex and the environment is not always available for the
       accomplishment of the practical activities. Modern methodologies have
       explored the use of interactive simulation environments and functionally
       corresponding to real machines for overcoming difficulties in the teaching-
       learning process in this area. Thus, this work proposes a virtual tool to make
       more dynamic and attractive the integrated study of hardware and software in
       courses of computational technologies.

       Resumo. Em cursos técnicos, tecnológicos e superiores nas áreas de
       informática e eletrônica, é comum a presença de disciplinas que tratem de
       aspectos de organização e arquitetura de computadores. Os conteúdos
       associados são complexos e nem sempre se dispõe do devido ambiente para a
       realização das atividades práticas. Metodologias modernas têm explorado o
       uso de ambientes de simulação interativos e funcionalmente correspondentes
       às máquinas reais para superar dificuldades no processo de ensino-
       aprendizagem nessa área Assim, esse trabalho propõe uma ferramenta virtual
       para dinamizar e tornar mais atraente o estudo integrado de hardware e
       software em cursos de tecnologias computacionais.

1. Introdução
Em cursos técnicos, tecnológicos e superiores nas áreas de informática e eletrônica, é
comum a presença de disciplinas que tratem de aspectos de organização e arquitetura de
computadores, programação próxima ao hardware (ou programação de baixo nível) e
como acontece a interação entre essas duas partes de um sistema computacional
[Stallings, 2014]. Essas disciplinas são muito importantes, pois, com elas, os alunos
estudam os componentes do computador, suas principais funções e como eles interagem
entre si, além de métodos de avaliação de desempenho de sistemas computacionais
[Duenha and Azevedo, 2016].

                                                                                                     697
                                             II Congresso sobre Tecnologias na Educação (Ctrl+E 2017)
                                                          Universidade Federal da Paraíba - Campus IV
                                                                       Mamanguape - Paraíba – Brasil
                                                                         18, 19 e 20 de maio de 2017


        O processo de ensino-aprendizagem baseado apenas em aulas expositivas e
atividades massivamente teóricas esbarra no nível de abstração que o aluno deve ter,
dificultando a absorção de conteúdo e, consequentemente, comprometendo o
entendimento do funcionamento de um sistema computacional de forma ampla.
Portanto, nessas disciplinas, ao longo dos anos, tem sido comum a adoção de
metodologias suportadas pelo uso de ambientes virtuais de simulação (software de
simulação) como abordagem pedagógica recomendada [Lourenço and Midorikawa,
2004], pois permitem simplificar e dinamizar, através de práticas em cenários próximos
aos reais, o aprendizado de conceitos fundamentais, tais como: ciclo de instrução,
programação em baixo nível, modos de endereçamento, protocolos de entrada/saída,
arquitetura e organização de dispositivos de Entrada/Saída, mapeamentos e políticas de
substituição em memória cache, entre outros.
         Na literatura voltada para sistemas digitais e arquitetura de computadores, várias
abordagens em ambientes de simulação têm sido propostas. Os ambientes variam em
granularidade dos objetos (alguns abrangem desde portas lógicas a sistemas completos),
tipos de arquiteturas do processador, foco na programação em linguagem de baixo nível
e animação da simulação com interface gráfica. Os ambientes de simulação, como o
HADES (Hamburg Design System) [Hendrich, 2004] e o DEEDS (Digital Electronic
Education Design Suite) [Donzellini and Ponta, 2013], possibilitam o estudo desde
portas lógicas a sistemas microprocessados completos, em diferentes níveis de
abstração. No entanto, a configuração e parametrização de componentes específicos não
é algo tão simples, devido à complexidade do ambiente proposto. Abordagens como
CPUSIm [Skrien, 2001] e SimuS [Silva and Borges, 2016] incluem interfaces gráficas
que permitem a configuração e interação com os componentes de hardware e o ambiente
de simulação, e focam essencialmente na exploração da programação em baixo nível.
Esses simuladores, no entanto, por não incluírem suporte a alguns tipos de modelos de
componentes ou ocultarem detalhes importantes para abstração da simulação, tornam-se
ambientes de simulação distantes dos reais. Já os ambientes de simulação como o
MipsIT são fortemente baseados no processo de animação da simulação em interface
gráfica, vinculando a programação de baixo e médio nível com o comportamento
dinâmico das unidades funcionais do processador [Kabir, Bari and Haque, 2011]. No
entanto, esse simulador só dá suporte a um único tipo de processador. Por outro lado,
simuladores como o MPSoCBench [Duenha and Azevedo, 2016], que apresentam
componentes de hardware modelados seguindo todas as características de componentes
reais, se tornam muito complexos de configurar e interagir.
        O ambiente mais adequado vai depender da metodologia adotada e do perfil do
curso a ser ministrado. Nem sempre é uma tarefa fácil, mesmo diante de tantas
possibilidades, encontrar uma ferramenta que atende ou se adeque às necessidades e
especificidades de determinadas disciplinas, em função das realidades locais, ou que
contemple todos os conteúdos abordados em uma única disciplina [Nikolic et al., 2009].
Ressalta-se, neste último caso, é comum o uso de mais de um simulador, de forma a se
complementarem. Assim, o objetivo desse trabalho é propor uma ferramenta de
simulação para apoio pedagógico através de práticas em disciplinas de arquitetura e


                                                                                                 698
                                                 II Congresso sobre Tecnologias na Educação (Ctrl+E 2017)
                                                              Universidade Federal da Paraíba - Campus IV
                                                                           Mamanguape - Paraíba – Brasil
                                                                             18, 19 e 20 de maio de 2017


organização de computadores. A ferramenta proposta, chamada de CompSim1, suporta
uma abordagem para estudo integrado dos conceitos relacionados aos componentes de
hardware, suas funções e interações em si, bem como sua programação em baixo nível.

2. Materiais e Método
Ao longo dos anos, vêm-se realizando análises nos desempenhos de turmas de uma
disciplina de Arquitetura e Organização de Computadores de um curso de Bacharelado
em Sistemas de Informação, de uma instituição pública. Em diferentes turmas, foram
utilizadas as seguintes abordagens pedagógicas: aulas puramente teóricas com resolução
de exercícios; aulas teóricas com práticas laboratoriais de programação de computadores
em linguagem de baixo nível; e aulas teóricas com utilização de simuladores de
organização e arquiteturas de computadores.
        Dessas análises, percebeu-se que os melhores desempenhos foram obtidos ao
utilizar-se os simuladores, pois além de oferecerem abstrações das estruturas e
comportamentos dos componentes de hardware, simplificando a compreensão dos
conceitos relacionados, foi possível aumentar o desempenho e a precisão do processo de
ensino-aprendizagem, além de tornar as atividades das disciplinas mais atrativas e
interativas. No uso dos simuladores, foram pesquisadas e utilizadas diferentes soluções,
sendo que algumas delas focavam em aspectos puramente organizacionais (estruturas e
funções dos componentes de hardware) e outras em aspectos de arquitetura
(programação em baixo nível). Com isso, percebeu-se a necessidade de compor uma
solução que pudesse abordar esses dois aspectos de forma integrada.
       Na sequência, realizaram-se novas pesquisas na literatura e discussões com
professores de disciplinas correlatas para elencar os tópicos onde os alunos apresentam
com frequência as maiores dificuldades de aprendizado, os quais, entre eles estão, por
exemplo, programação de baixo nível (Assembly), modos de endereçamento de memória
e organização da memória cache. Além disso, foi possível também estabelecer os
principais requisitos pedagógicos, como suporte à navegação livre, aos conteúdos
procedimentais e à interatividade, os quais também motivaram a criação de um novo
ambiente de simulação.
        Os requisitos levantados direcionaram o desenvolvimento da nova solução aqui
proposta. Inicialmente foram criados os modelos de componentes de hardware,
considerando como requisitos suporte aos parâmetros de configuração e
comportamentos de componentes reais, bem como à eficiência na simulação. Em
seguida, após a integração dos componentes, para compor um simulador que possibilite
a simulação de um computador completo e realização de testes funcionais, criou-se uma
interface gráfica para simplificar a configuração dos componentes, controlar a simulação
e exibir os resultados e as descrições dos eventos ocorridos durante uma simulação.
      Para o desenvolvimento do simulador, utilizou-se o processo de
desenvolvimento ágil XP (Beck, 2000), a linguagem de programação Python2 e a

1   Vídeo de demonstração do CompSim: .
2   Python. Welcome to Python. Disponível em: . Acesso em: 07 mar. 2017.
                                                                                                     699
                                                       II Congresso sobre Tecnologias na Educação (Ctrl+E 2017)
                                                                    Universidade Federal da Paraíba - Campus IV
                                                                                 Mamanguape - Paraíba – Brasil
                                                                                   18, 19 e 20 de maio de 2017


ferramenta Nuitka3, a qual permite a compilação do simulador para execução em
diferentes plataformas operacionais (GNU/Linux e Microsoft Windows).

3. O Simulador CompSim
O simulador aqui proposto possui um ambiente integrado com diferentes recursos
gráficos, os quais podem ser vistos na Figura 1.




                       Figura 1. Ambiente Gráfico do simulador CompSim.

        Na Figura 1, observa-se os seguintes componentes gráficos: (a) Editor de
código - com ele é possível codificar uma nova aplicação em baixo nível para execução
no simulador; (b) CPU - são exibidos, em tempo de execução, os estados assumidos
pelos registradores do processador; (c) CACHE MEMORY - pode-se observar os
estados das respectivas linhas de memória cache; (d) MAIN MEMORY - são exibidos
os conteúdos de todos os endereços da memória principal; (e) DEVICES - são exibidos
os conteúdos dos buffers de entrada (INPUT BUFFER) e de saída (OUTPUT BUFFER),
implementados com comportamentos semelhantes aos de um teclado e de um monitor,
respectivamente; (f) SIMULATION – esse componente possibilita definir a frequência
do relógio do sistema (clock) e o tempo total de simulação, bem como controlar a
simulação, através dos controles “RUN”, “STEP-BY-STEP” (execução passo-a-passo,
por ciclo de relógio), “STOP” e “RESET”; (g) LOG - neste componente são exibidas as
descrições dos eventos gerados pelos componentes de hardware, durante uma
simulação. Essas descrições podem incluir, por exemplo, a contagem dos ciclos de
relógio, ações de decodificação de instrução, tipos de acessos à memória, ações de
substituição de linhas de cache, entre outros.



3   Nuitka. Nuitka Home. Disponível em: . Acesso em: 07 mar. 2017.

                                                                                                           700
                                            II Congresso sobre Tecnologias na Educação (Ctrl+E 2017)
                                                         Universidade Federal da Paraíba - Campus IV
                                                                      Mamanguape - Paraíba – Brasil
                                                                        18, 19 e 20 de maio de 2017


        Além desses recursos, o simulador inclui um Montador (Assembler), que realiza
análises léxica e sintática, para validar um novo programa em linguagem de máquina, e,
a partir desta, gerar código binário executável. As subseções a seguir apresentam
descrições mais detalhadas dos modelos propostos de componentes de hardware e do
montador.

3.1 Descrição dos Modelos de Componentes de Hardware
O processador proposto consiste de um modelo teórico de 16-bits, com as seguintes
características: inclui um contador de programa, uma unidade lógica e aritmética (ULA),
inclui espaço de endereçamento diferenciado para entrada/saída e para acesso à memória
principal; suporte aos modos de endereçamento imediato, direto, indireto, registrador e
implícito; um banco de registradores para suportar as operações de busca de instruções
do programa, decodificação de instrução, operações aritméticas e lógicas, através de um
registrador acumulador e da ULA, operações de entrada e saída e de acesso à memória e
pilha de programa; inclui dezesseis 16 instruções de baixo nível; e suporte a operandos
inteiros de 16-bits com sinalização (signed int) e a strings (bytes).
        O modelo de memória principal (RAM) suporta palavras de 16-bits, com blocos
de 8 palavras cada, e pode ser configurado para incluir de 64 à 512 blocos, obtendo
assim as capacidades de armazenamento mínima de 8KB e máxima de 64KB. O modelo
de memória cache proposto possui número de linhas parametrizável, onde cada linha
suporta 8 palavras de 16-bits (configuração necessária para guardar um bloco da
memória proposta). No componente de memória cache, pode-se ainda configurar o tipo
de mapeamento, as políticas de atualização e de substituição. Os dispositivos de entrada
e saída apresentam comunicação serial e são utilizados para interfacear, durante a
simulação, o computador teórico com o usuário. Por fim, o barramento de sistema
realiza a interconexão física entre todos os modelos de componentes de hardware
propostos.

3.2 A Linguagem de Baixo Nível e o Montador
De forma a simplificar o aprendizado em programação em nível de hardware, criou-se
uma linguagem de programação de baixo nível composta por apenas 16 instruções, as
quais são representadas por mnemônicos/ semelhantes aos de uma linguagem Assembly
de uma arquitetura real. Algumas instruções não incluem operandos e outras apenas um
operando (instruções com número de operandos reduzido são mais simples de
compreender e de utilizar em programas) e são utilizadas em ações de movimento de
dados, operações lógicas e aritméticas, acesso à pilha do programa, alteração do fluxo
de execução do programa e para encerramento de execução. O Montador (Assembly)
proposto segue o mesmo comportamento de montadores de dois passos. No primeiro
passo, o montador realiza as análises léxica e sintática, a construção da tabela de
símbolos e de uma representação intermediária do código. Já no segundo passo, a partir
da tabela de símbolos e da representação intermediária do programa, o montador gera o
programa binário final para a arquitetura alvo.



                                                                                                701
                                           II Congresso sobre Tecnologias na Educação (Ctrl+E 2017)
                                                        Universidade Federal da Paraíba - Campus IV
                                                                     Mamanguape - Paraíba – Brasil
                                                                       18, 19 e 20 de maio de 2017


        No simulador, o montador pode ser utilizado de duas maneiras. Na primeira, ele
realiza uma análise no código do programa e apresenta um relatório. No relatório, são
exibidos a tabela de símbolos, os endereços dos segmentos de texto, dados e pilha, bem
como o código binário gerado. Na segunda forma, o montador gera o código binário e o
mesmo é copiado para a memória principal, permitindo assim o início da simulação
(execução do código nos componentes de hardware do simulador).
3.3 Integração entre Interface Gráfica e Componentes de Hardware
A interface gráfica do simulador está integrada aos componentes de hardware de forma
que é possível configurar, executar e compreender as interações entre os componentes,
durante uma simulação. A Figura 2 apresenta, em detalhes, os componentes CPU,
CACHE MEMORY, MAIN MEMORY, SIMULATION e LOG.




      Figura 2. Interação entre componentes de hardware e interface do CompSim.

        Na Figura 2, podemos ver, à esquerda e acima, no componente gráfico CPU, que
os valores de alguns dos registradores estão sendo destacados em diferentes cores
(verde, amarelo, azul, vermelho, etc.). Os valores destacados, dependendo do
registrador, referem-se a determinados endereços da memória principal, durante uma
simulação. Os endereços de memória principal apontados por esses registradores serão
também destacados com as respectivas cores, no componente MAIN MEMORY
(exibido abaixo e à esquerda, na Figura 2). Este recurso permite o acompanhamento
dinâmico de quais endereços estão sendo acessados pelos diferentes registradores de
endereçamento à memória, em uma simulação do tipo STEP-BY-STEP. Além disso, no
componente CACHE MEMORY (exibido ao centro e à esquerda, na Figura 2), são
destacadas a linha e a palavra que estão sendo acessadas em um determinado momento.
      Ainda na Figura 2, ao centro e acima, observa-se os controles de simulação
(SIMULATION). Com eles é possível gerar os estímulos do relógio de sistema, bem
como parar e reiniciar uma simulação. Por fim, do lado direito, ainda na Figura 2, o
componente LOG apresenta descrições detalhadas dos eventos de cada componente de

                                                                                               702
                                            II Congresso sobre Tecnologias na Educação (Ctrl+E 2017)
                                                         Universidade Federal da Paraíba - Campus IV
                                                                      Mamanguape - Paraíba – Brasil
                                                                        18, 19 e 20 de maio de 2017


hardware, na medida em que ocorrem durante uma simulação. Na Figura 2, no relatório
de LOG, podemos ver descrições de eventos de relógio de sistema, processador,
memória cache e vídeo.

4. Resultados Esperados e Trabalhos Futuros
O uso de simuladores é uma prática pedagógica frequente em disciplinas de organização
e arquitetura de computadores. Acredita-se que simulador aqui proposto permitirá
otimizar o processo de ensino-aprendizagem, pois, através de uma abordagem para
estudo integrado dos conceitos relacionados aos componentes de hardware e à
programação em baixo nível, pode-se estabelecer um programa de disciplina que aborde
todos os conteúdos práticos necessários e que seja focado na aprendizagem significativa.
A tendência em ambientes virtuais de simulação é dar suporte a diferentes arquiteturas
de processadores, plataformas de hardware especificadas em linguagem de descrição de
hardware (HDL) e possibilitar a interação com outros ambientes por meio de
cossimulação. Adicionalmente, é fundamental o ambiente gerenciar a metodologia
pedagógica de forma interativa com os atores envolvidos em tempo real, possibilitando
uma comunicação eficiente e integração com ambientes de educação à distância, como
por exemplo, o Moodle.

Referências
Beck, K. (2000) Extreme programming explained: embrace change. addison-wesley
   professional.
Donzellini, G. and Ponta, D. (2013) From Gates to FPGA: Learning Digital Design with
   Deeds. In: Proceedings of the Third Interdisciplinary Engineering Design Education
   Conference – IEDEC. pp.41-48.
Duenha, L. and Azevedo, R. (2016) Utilização dos Simuladores do MPSoCBench para o
   Ensino e Aprendizagem de Arquitetura de Computadores. In: International Journal of
   Computer Architecture Education (IJCAE), V. 5, n. 1. pp 26-31.
Hendrich, N. (2002) From CMOS-Gates to Computer Architecture: Lessons Learned from
   Five Years of Java-Applets. In: Proceedings of the 4th European Workshop on
   Microelectronics Education, EWME. Pp 23-24.
Kabir, M. T., Bari, M. T. and Haque, A. L. (2011) VisiMips: Visual Simulator of MIPS32
   Pipelined Processor. In: International Conference on Computer Science & Education
   (ICCSE). p. 788–793.
Lourenço, A. E. and Midorikawa, E. T. (2004) Ensino de arquitetura de computadores
   utilizando simuladores completos. Congresso Brasileiro de Engenharia - COBENGE
   2004, Brasila.
Nikolic, B., Radivojevic, Z., Djordjevic, J. and Milutinovic, V. (2009) A Survey and
   Evaluation of Simulators Suitable for Teaching Courses in Computer Architecture and
   Organization. IEEE Transactions on Education, Vol. 52, No. 4.
Silva, G. P and Borges, J. A. dos S. (2016) SimuS: Um Simulador para o Ensino de
   Arquitetura e Organização de Computadores. In: International Journal of Computer
   Architecture Education (IJCAE). V. 5, n. 1. pp 7-12.
Skrien, D. (2001) CPU Sim 3.1: A tool for simulating computer architectures for computer
   organization classes. In: Journal on Educational Resources in Computing (JERIC), 1(4).
Stallings, W. (2014) Operating Systems: Internals and Design Principles| Ed: 8. Pearson.

                                                                                                703