Lucas Eduardo Gulka Pulcinelli
Vitor Daniel de Resende
Murilo Leandro Garcia
e todo o time do ICMC IDE e emulador
Instituto de Ciências Matemáticas e de Computação (ICMC)
Universidade de São Paulo (USP)
Formulário de feedback: https://forms.gle/dhBAPxpej5H3nM6T7
ICMC IDE: Uma plataforma para desenvolvimento de jogos em linguagem montadora
Introdução
1
Os problemas atuais de ensinar arquitetura e organização de computadores
Conteúdo muito abstrato
Difícil visualizar componentes e o processo de execução de instruções
Sistemas atuais são complexos
Exceções em regras por otimização, instruções demais, convenções esquisitas
Tecnologias proprietárias ou pouca documentação
Quartus, Verilog, VHDL, manuais da intel e NVIDIA tem pouco material ou até incorreto sobre arquiteturas
Dependência de hardware
Para executar código, normalmente você precisaria da placa da arquitetura em si
Como tornar isso mais interessante?
ICMC-IDE: a plataforma perfeita para ensinar linguagem montadora
A arquitetura do ICMC
O que nós vamos aprender?
completos a partir dessa linguagem
A plataforma do ICMC IDE
2
Versões do ICMC IDE
Versões do ICMC IDE
ICMC IDE (multiplataforma):
�
Sobre a interface da IDE
Vamos explorar cada parte da IDE:
�
Linguagem Assembly
3
Introdução ao Assembly do ICMC
�
Registradores
�
Propósito geral:
Uso interno:
Flags (FR)
�
Stack (SP)
�
Program Counter (PC)
�
Instruction Register (IR)
�
Keyboard Register (KB)
�
Write Count (WC)
�
Tipos de Instrução
�
Referência disponível na aba de documentação da IDE
Instruções
Referência para as instruções do processador do ICMC
Load / Store / Move
Essas instruções basicamente movem informação entre registradores/memória:
Aritmética
Operações de soma, subtração, multiplicação, divisão, módulo e incremento/decremento:
Lógica
Operações lógicas and, or, xor, not, além de bitshift e comparação de inteiros
Jump / Call
Instruções fundamentais, permitem fazer controle de fluxo (o if/else de linguagens de alto nível, e chamar funções)
Tanto as instruções de jmp quanto call possuem as variações que executam condicionalmente a uma flag (FR).
Exemplos: jeq (jmp se ‘eq’ for verdadeiro), cne (call se ‘eq’ for falso).
Abreviações do Jump / Call
Stack
Essas instruções lidam com a stack do processador:
Controle
Instruções úteis durante o debug do seu programa, mexem com o estado do emulador:
Input / Output
Por fim, as instruções mais interessantes:
ICMC IDE & Jogos
4
simas bomber
Jogo desenvolvido no processador do ICMC, similar ao bomberman.
Desenvolvendo um jogo
5
Restrições
Caracteres
Resolução
Input/Output
Você tem um conjunto limitado de caracteres 8x8 pixels para editar
Você só pode desenhar caracteres num grid
40x30, não pode controlar pixels
As únicas instruções de IO são inchar e outchar, e o código congela enquanto espera um inchar
Fazendo seu personagem se mover
O grid da tela é representado internamente como uma linha contínua.
Para ir para direita/esquerda basta incrementar ou decrementar a posição.
Todavia, para subir/descer, você precisa somar/subtrair 40 da sua posição.
Fazendo seu personagem se mover
Use o inchar para ler movimentos do teclado, e então compare com as teclas. 255 é valor de quando nenhum botão é pressionado, 70 é a seta pra cima, etc.
Fazendo seu personagem se mover
Não se esqueça de apagar sua posição anterior!
Outra coisa importante nos jogos é ter um cenário fixo, para usar em menus, background, etc.
Checando colisões
Para checar se colidiu, você precisa saber se sua posição atual corresponde a um caracter de parede. Se for, houve colisão, então você deve desfazer esse movimento.
Gerador de números pseudo-aleatórios
Existem diversos algoritmos que são capazes de gerar números pseudo-aleatórios.
Números aleatórios são fundamentais para criação de jogos, desde de determinar a posição da maçã no jogo da cobrinha, até geração procedural.
PRNG (LCG)
É dado pela relação de recorrência:
O valor
é chamado de seed (semente).
PRNG (LCG)
Contribuindo com o ICMC IDE
6
um pouquinho sobre emuladores
7
Como a arquitetura do ICMC compara com a do seu computador?
Ciclo de instrução
Exemplos de assembly
AVR (do arduino)
ARM (do seu celular)
x86 (do seu computador)
O general emulator
E linguagens de programação?
Obrigado!
SLIDES PARA TEMPLATE
Why microservices and cloud systems
Cost efficiency
Scalability
In-depth Analysis of Challenges in Microservice Monitoring
Volatile replica number
Depends on system load, which itself depends on time of day, season, etcetera
High number of services
Each with their own resource utilization and network connections, which lead to more metrics
Huge metric variety
A relatively simple monitoring setup already has about 300 metrics available, with CPU, network and disk bound services, as well as metrics granulated by container or node
Lack of smart monitoring
There is a plethora of services for monitoring everything, however its the developer’s job to locate what is useful
What are we contributing with?
Setup and Methodology
2
The cloud application to be tested on
Socks-shop Polyglot App Original Design
https://redthunder.blog/2018/07/30/socks-shop-polyglot-app-in-kubernetes
Deployment system
Testing framework
Obtaining and analyzing the Metrics
Results and Discussion
3
Analysis related to pod unavailability errors
Pre crash loop backoff disk readings
Memory freeing in compiled languages
Our future works
Node overloading
Disk reading errors in databases
Connection failure or delays between services
Finally, the development of a system that continuously reads metrics and, given the types of services involved, is able to determine errors in a more lightweight manner, instead of relying on machine learning or individual trace analysis, which would have a too high monetary cost to keep running
Thanks!
Do you have any questions?
linkedin.com/in/lucas-pulcinelli
lucasegp@usp.br
diegopedroso@usp.br
sarita@icmc.usp.br
icmc.usp.br