<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>CompSim: Um Ambiente para o Ensino Integrado de Arquitetura e Organização de Computadores</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Guilherme Esmeraldo</string-name>
          <email>guilhermealvaro@ifce.edu.br</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Edson Barbosa Lisboa</string-name>
          <email>edson.barbosa@ifs.edu.br</email>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Instituto Federal de Educação</institution>
          ,
          <addr-line>Ciência e Tecnologia do Ceará (IFCE) - Crato, CE -</addr-line>
          <country country="BR">Brazil</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2017</year>
      </pub-date>
      <fpage>697</fpage>
      <lpage>703</lpage>
      <abstract>
        <p>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 teachinglearning 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 ensinoaprendizagem 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.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introdução</title>
      <p>
        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 [
        <xref ref-type="bibr" rid="ref6">Lourenço and Midorikawa,
2004</xref>
        ], 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.
      </p>
      <p>
        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) [
        <xref ref-type="bibr" rid="ref2">Donzellini and Ponta, 2013</xref>
        ], 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 [
        <xref ref-type="bibr" rid="ref9">Skrien, 2001</xref>
        ] e SimuS [
        <xref ref-type="bibr" rid="ref8">Silva and Borges, 2016</xref>
        ] 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 [
        <xref ref-type="bibr" rid="ref5">Kabir, Bari and Haque, 2011</xref>
        ]. No
entanto, esse simulador só dá suporte a um único tipo de processador. Por outro lado,
simuladores como o MPSoCBench [
        <xref ref-type="bibr" rid="ref3">Duenha and Azevedo, 2016</xref>
        ], que apresentam
componentes de hardware modelados seguindo todas as características de componentes
reais, se tornam muito complexos de configurar e interagir.
      </p>
      <p>
        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 [
        <xref ref-type="bibr" rid="ref7">Nikolic et al., 2009</xref>
        ].
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
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.
      </p>
    </sec>
    <sec id="sec-2">
      <title>2. Materiais e Método</title>
      <p>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.</p>
      <p>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.</p>
      <p>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.</p>
      <p>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.</p>
      <p>
        Para o desenvolvimento do simulador, utilizou-se o processo de
desenvolvimento ágil XP
        <xref ref-type="bibr" rid="ref1">(Beck, 2000)</xref>
        , a linguagem de programação Python2 e a
1 Vídeo de demonstração do CompSim: &lt;https://www.youtube.com/watch?v=8BaGPvvZ6Zo&gt;.
2 Python. Welcome to Python. Disponível em: &lt;http://www.python.org/&gt;. Acesso em: 07 mar. 2017.
ferramenta Nuitka3, a qual permite a compilação do simulador para execução em
diferentes plataformas operacionais (GNU/Linux e Microsoft Windows).
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. O Simulador CompSim</title>
      <p>O simulador aqui proposto possui um ambiente integrado com diferentes recursos
gráficos, os quais podem ser vistos na Figura 1.</p>
      <p>Figura 1. Ambiente Gráfico do simulador CompSim.</p>
      <p>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</p>
      <p>Nuitka. Nuitka Home. Disponível em: &lt;http://www.nuitka.net/&gt;. Acesso em: 07 mar. 2017.</p>
      <p>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.</p>
    </sec>
    <sec id="sec-4">
      <title>3.1 Descrição dos Modelos de Componentes de Hardware</title>
      <p>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).</p>
      <p>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.</p>
    </sec>
    <sec id="sec-5">
      <title>3.2 A Linguagem de Baixo Nível e o Montador</title>
      <p>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.</p>
      <p>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).</p>
    </sec>
    <sec id="sec-6">
      <title>3.3 Integração entre Interface Gráfica e Componentes de Hardware</title>
      <p>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.</p>
      <p>Figura 2. Interação entre componentes de hardware e interface do CompSim.</p>
      <p>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.</p>
      <p>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
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.
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.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <surname>Beck</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          (
          <year>2000</year>
          )
          <article-title>Extreme programming explained: embrace change. addison-wesley professional</article-title>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <surname>Donzellini</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Ponta</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>2013</year>
          )
          <article-title>From Gates to FPGA: Learning Digital Design with Deeds</article-title>
          .
          <source>In: Proceedings of the Third Interdisciplinary Engineering Design Education Conference - IEDEC</source>
          . pp.
          <fpage>41</fpage>
          -
          <lpage>48</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <surname>Duenha</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Azevedo</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          (
          <year>2016</year>
          )
          <article-title>Utilização dos Simuladores do MPSoCBench para</article-title>
          o Ensino e Aprendizagem de Arquitetura de Computadores. In:
          <article-title>International Journal of Computer Architecture Education (IJCAE), V. 5</article-title>
          , n. 1. pp
          <fpage>26</fpage>
          -
          <lpage>31</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <surname>Hendrich</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          (
          <year>2002</year>
          )
          <article-title>From CMOS-Gates to Computer Architecture: Lessons Learned from Five Years of Java-Applets</article-title>
          .
          <source>In: Proceedings of the 4th European Workshop on Microelectronics Education, EWME. Pp</source>
          <volume>23</volume>
          -
          <fpage>24</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <surname>Kabir</surname>
            ,
            <given-names>M. T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bari</surname>
            ,
            <given-names>M. T.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Haque</surname>
            ,
            <given-names>A. L.</given-names>
          </string-name>
          (
          <year>2011</year>
          )
          <article-title>VisiMips: Visual Simulator of MIPS32 Pipelined Processor</article-title>
          .
          <source>In: International Conference on Computer Science &amp; Education (ICCSE)</source>
          . p.
          <fpage>788</fpage>
          -
          <lpage>793</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <surname>Lourenço</surname>
            ,
            <given-names>A. E.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Midorikawa</surname>
            ,
            <given-names>E. T.</given-names>
          </string-name>
          (
          <year>2004</year>
          )
          <article-title>Ensino de arquitetura de computadores utilizando simuladores completos</article-title>
          . Congresso Brasileiro de Engenharia - COBENGE
          <year>2004</year>
          , Brasila.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <surname>Nikolic</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Radivojevic</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Djordjevic</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          and
          <string-name>
            <surname>Milutinovic</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          (
          <year>2009</year>
          )
          <article-title>A Survey and Evaluation of Simulators Suitable for Teaching Courses in Computer Architecture and Organization</article-title>
          .
          <source>IEEE Transactions on Education</source>
          , Vol.
          <volume>52</volume>
          , No.
          <volume>4</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <surname>Silva</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          <article-title>P and Borges</article-title>
          ,
          <string-name>
            <surname>J. A. dos S.</surname>
          </string-name>
          (
          <year>2016</year>
          )
          <article-title>SimuS: Um Simulador para</article-title>
          o Ensino de Arquitetura e Organização de Computadores. In: International Journal of Computer Architecture Education (IJCAE).
          <source>V. 5, n. 1</source>
          . pp
          <fpage>7</fpage>
          -
          <lpage>12</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <surname>Skrien</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          (
          <year>2001</year>
          )
          <article-title>CPU Sim 3.1: A tool for simulating computer architectures for computer organization classes</article-title>
          .
          <source>In: Journal on Educational Resources in Computing (JERIC)</source>
          ,
          <volume>1</volume>
          (
          <issue>4</issue>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <surname>Stallings</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          (
          <year>2014</year>
          )
          <article-title>Operating Systems: Internals</article-title>
          and Design Principles| Ed: 8. Pearson.
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>